@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.
@@ -154,6 +154,12 @@ export type Problem = {
154
154
  *
155
155
  * The API key lacks the scope grant for this endpoint and verb. Grant the required scope to the key and retry.
156
156
  *
157
+ * ### user_scoped_key_required
158
+ *
159
+ * **User-Scoped Key Required**
160
+ *
161
+ * 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.
162
+ *
157
163
  * ## 404
158
164
  *
159
165
  * ### not_found
@@ -170,6 +176,12 @@ export type Problem = {
170
176
  *
171
177
  * 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.
172
178
  *
179
+ * ### import_in_progress
180
+ *
181
+ * **Import In Progress**
182
+ *
183
+ * 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.
184
+ *
173
185
  * ### product_archived
174
186
  *
175
187
  * **Product Archived**
@@ -345,7 +357,7 @@ export type Problem = {
345
357
  * Another write to the same resource held it for longer than this request was willing to wait, so nothing was applied. The request itself is fine — resend it unchanged after the `Retry-After` window.
346
358
  *
347
359
  */
348
- export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'malformed_body' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'insufficient_api_key_scope' | 'not_found' | 'already_terminated' | 'product_archived' | 'recorded_since_termination' | 'span_beyond_timeline_end' | 'version_overlap' | 'precondition_failed' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'interval_too_wide' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'non_numeric_cents' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'precondition_required' | 'too_many_requests' | 'internal_error' | 'write_contended';
360
+ export type ProblemTypeCatalog = 'blank_axis' | 'invalid_cursor' | 'invalid_filter_key' | 'invalid_limit' | 'invalid_signature' | 'malformed_body' | 'non_range_filter_value' | 'non_scalar_axis' | 'non_scalar_filter_value' | 'parameter_missing' | 'parameter_not_object' | 'unknown_axis' | 'unknown_key' | 'unsupported_axis' | 'valid_axis_on_timeline' | 'unauthorized' | 'company_scoped_key_required' | 'forbidden' | 'insufficient_api_key_scope' | 'user_scoped_key_required' | 'not_found' | 'already_terminated' | 'import_in_progress' | 'product_archived' | 'recorded_since_termination' | 'span_beyond_timeline_end' | 'version_overlap' | 'precondition_failed' | 'attachment_not_image' | 'company_not_employer' | 'confirm_apprenticeship_conflict' | 'destroy_restricted' | 'interval_too_wide' | 'invalid_date' | 'invalid_filter_value' | 'invalid_iso8601_duration' | 'invalid_placement_move' | 'invalid_signed_id' | 'non_numeric_cents' | 'nothing_to_cancel' | 'pagination_failed' | 'subtype_foreign_keys' | 'synced_determination' | 'user_not_company_member' | 'validation_failed' | 'wage_schedule_outside_program' | 'precondition_required' | 'too_many_requests' | 'internal_error' | 'write_contended';
349
361
  export type ApiKeyScopeResponseObject = {
350
362
  resource: string;
351
363
  action: 'read' | 'create' | 'update' | 'delete';
@@ -358,7 +370,7 @@ export type DirectUploadParameters = {
358
370
  /**
359
371
  * What the file is for, named as the endpoint that will attach it (for example `assets.vendors`). Required. It decides where the file is stored, and the signed ID this call returns is issued for that resource alone — it will not resolve at any other endpoint, so a vendor logo cannot be attached as an avatar, or an avatar as a logo.
360
372
  */
361
- resource: 'assets.items' | 'assets.items.documents' | 'assets.items.service_events' | 'assets.products' | 'assets.vendors' | 'users';
373
+ resource: 'assets.items' | 'assets.items.documents' | 'assets.items.service_events' | 'assets.products' | 'assets.vendors' | 'pay_periods.imports.aggregate_times' | 'pay_periods.imports.dsptch_cprs' | 'pay_periods.imports.time_entries' | 'users';
362
374
  /**
363
375
  * Metadata describing the file being registered, before its bytes are uploaded.
364
376
  */
@@ -2457,6 +2469,75 @@ export type PwaTradeParameters = {
2457
2469
  */
2458
2470
  name: string;
2459
2471
  };
2472
+ /**
2473
+ * 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.
2474
+ */
2475
+ export type PwaTradeUpdateParameters = {
2476
+ /**
2477
+ * New display name for the craft, e.g. "Electrician".
2478
+ */
2479
+ name?: string;
2480
+ };
2481
+ /**
2482
+ * Parameters for merging one PWA trade (craft) into another in the same pool.
2483
+ */
2484
+ export type PwaTradeMergeParameters = {
2485
+ /**
2486
+ * ID of the craft to merge into. It absorbs the source's wage determinations and survives; the source is deleted. Must name a different craft than the source, owned by the same project root or standalone job. The source's apprentice-scope decisions transfer with it, except where the target already holds a decision for that occupation — there the target's own verdict stands.
2487
+ */
2488
+ target_trade_id: string;
2489
+ };
2490
+ /**
2491
+ * 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.
2492
+ */
2493
+ export type PwaTradeApprenticeshipOccupationResponseObject = {
2494
+ /**
2495
+ * Unique identifier.
2496
+ */
2497
+ id: string;
2498
+ /**
2499
+ * ID of the craft (trade) this decision applies to.
2500
+ */
2501
+ pwa_trade_id: string;
2502
+ /**
2503
+ * ID of the registered apprenticeship occupation this decision applies to.
2504
+ */
2505
+ apprenticeship_occupation_id: string;
2506
+ /**
2507
+ * The verdict — in_scope grants apprentice treatment for hours charged to this craft; out_of_scope denies it and stops the pair prompting for review.
2508
+ */
2509
+ scope_status: 'in_scope' | 'out_of_scope';
2510
+ /**
2511
+ * When the record was created (ISO 8601).
2512
+ */
2513
+ created_at: string;
2514
+ /**
2515
+ * When the record was last updated (ISO 8601).
2516
+ */
2517
+ updated_at: string;
2518
+ };
2519
+ /**
2520
+ * Parameters for recording an apprentice-scope decision on a trade.
2521
+ */
2522
+ export type PwaTradeApprenticeshipOccupationCreateParameters = {
2523
+ /**
2524
+ * ID of the registered apprenticeship occupation to decide on. Create-only — a decision is replaced rather than re-pointed to a different occupation.
2525
+ */
2526
+ apprenticeship_occupation_id: string;
2527
+ /**
2528
+ * The verdict to record; defaults to in_scope when omitted or null.
2529
+ */
2530
+ scope_status?: 'in_scope' | 'out_of_scope' | null;
2531
+ };
2532
+ /**
2533
+ * Parameters for flipping an existing apprentice-scope decision's verdict.
2534
+ */
2535
+ export type PwaTradeApprenticeshipOccupationUpdateParameters = {
2536
+ /**
2537
+ * The verdict to record. Null states nothing, so it leaves the decision's current verdict standing.
2538
+ */
2539
+ scope_status?: 'in_scope' | 'out_of_scope' | null;
2540
+ };
2460
2541
  /**
2461
2542
  * A job — the primary unit of work in DSPTCH. Workers fill its positions and track time against it; it optionally tracks Prevailing Wage / Apprenticeship (PWA) compliance and optionally belongs to a project. There is no delete endpoint — cancel or complete a job through its status instead.
2462
2543
  */
@@ -2651,73 +2732,73 @@ export type JobResponseObject = {
2651
2732
  [key: string]: unknown;
2652
2733
  };
2653
2734
  /**
2654
- * 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.
2735
+ * 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.
2655
2736
  */
2656
2737
  export type PwaJobDetailsResponseObject = {
2657
2738
  /**
2658
- * California DIR (Department of Industrial Relations) awarding-body ID; null when not applicable.
2739
+ * Role of the company on this job for PWA reporting: one of prime_contractor or sub_contractor; null when unset.
2659
2740
  */
2660
- dir_awarding_body_id: string | null;
2741
+ contractor_type: 'prime_contractor' | 'sub_contractor' | null;
2661
2742
  /**
2662
- * California DIR project registration ID (an 11-digit number); null when not applicable.
2743
+ * Whether new positions on the job default to paying the full fringe as cash.
2663
2744
  */
2664
- dir_project_id: string | null;
2745
+ pay_full_cash_fringe_by_default: boolean;
2665
2746
  /**
2666
- * California DIR project name; null when not applicable.
2747
+ * California DIR (Department of Industrial Relations) awarding-body ID; present only for a compatible California prevailing-wage configuration and null when applicable but unset.
2667
2748
  */
2668
- dir_project_name: string | null;
2749
+ dir_awarding_body_id?: string | null;
2669
2750
  /**
2670
- * California DIR contract ID; null when not applicable.
2751
+ * California DIR project registration ID (an 11-digit number); present only for a compatible California prevailing-wage configuration and null when applicable but unset.
2671
2752
  */
2672
- dir_contract_id: string | null;
2753
+ dir_project_id?: string | null;
2673
2754
  /**
2674
- * California DIR awarding-body name; null when not applicable.
2755
+ * California DIR project name; present only for a compatible California prevailing-wage configuration and null when applicable but unset.
2675
2756
  */
2676
- dir_project_awarding_body_name: string | null;
2757
+ dir_project_name?: string | null;
2677
2758
  /**
2678
- * California DIR project number; null when not applicable.
2759
+ * California DIR contract ID; present only for a compatible California prevailing-wage configuration and null when applicable but unset.
2679
2760
  */
2680
- dir_project_number: string | null;
2761
+ dir_contract_id?: string | null;
2681
2762
  /**
2682
- * Illinois DOL (Department of Labor) project ID; null when not applicable.
2763
+ * California DIR awarding-body name; present only for a compatible California prevailing-wage configuration and null when applicable but unset.
2683
2764
  */
2684
- il_dol_project_id: string | null;
2765
+ dir_project_awarding_body_name?: string | null;
2685
2766
  /**
2686
- * Whether the Illinois project is funded with state capital funds; null when not applicable.
2767
+ * California DIR project number; present only for a compatible California prevailing-wage configuration and null when applicable but unset.
2687
2768
  */
2688
- il_dol_state_capital_funds: boolean | null;
2769
+ dir_project_number?: string | null;
2689
2770
  /**
2690
- * Illinois DOL public-body name; null when not applicable.
2771
+ * Illinois DOL (Department of Labor) project ID; present only for a compatible Illinois prevailing-wage configuration and null when applicable but unset.
2691
2772
  */
2692
- il_dol_public_body_name: string | null;
2773
+ il_dol_project_id?: string | null;
2693
2774
  /**
2694
- * ID of the Illinois DOL public-body contact; null when not applicable.
2775
+ * Whether the Illinois project is funded with state capital funds; present only for a compatible Illinois prevailing-wage configuration and null when applicable but unset.
2695
2776
  */
2696
- il_dol_public_body_contact_id: string | null;
2777
+ il_dol_state_capital_funds?: boolean | null;
2697
2778
  /**
2698
- * ID of the Illinois DOL public-body address; null when not applicable.
2779
+ * Illinois DOL public-body name; present only for a compatible Illinois prevailing-wage configuration and null when applicable but unset.
2699
2780
  */
2700
- il_dol_public_body_address_id: string | null;
2781
+ il_dol_public_body_name?: string | null;
2701
2782
  /**
2702
- * Illinois DOL contract number; null when not applicable.
2783
+ * ID of the Illinois DOL public-body contact; present only for a compatible Illinois prevailing-wage configuration and null when applicable but unset.
2703
2784
  */
2704
- il_dol_contract_number: string | null;
2785
+ il_dol_public_body_contact_id?: string | null;
2705
2786
  /**
2706
- * Illinois SHINES project ID; null when not applicable.
2787
+ * ID of the Illinois DOL public-body address; present only for a compatible Illinois prevailing-wage configuration and null when applicable but unset.
2707
2788
  */
2708
- il_shines_project_id: string | null;
2789
+ il_dol_public_body_address_id?: string | null;
2709
2790
  /**
2710
- * New York DOL prevailing-rate-case (PRC) number, a 10-digit identifier; null when not applicable.
2791
+ * Illinois DOL contract number; present only for a compatible Illinois prevailing-wage configuration and null when applicable but unset.
2711
2792
  */
2712
- ny_dol_prc_number: string | null;
2793
+ il_dol_contract_number?: string | null;
2713
2794
  /**
2714
- * Whether new positions on the job default to paying the full fringe as cash.
2795
+ * Illinois SHINES project ID; present only for a compatible Illinois prevailing-wage configuration and null when applicable but unset.
2715
2796
  */
2716
- pay_full_cash_fringe_by_default: boolean;
2797
+ il_shines_project_id?: string | null;
2717
2798
  /**
2718
- * Role of the company on this job for PWA reporting: one of prime_contractor or sub_contractor; null when unset.
2799
+ * New York DOL prevailing-rate-case (PRC) number, a 10-digit identifier; present only for a compatible New York prevailing-wage configuration and null when applicable but unset.
2719
2800
  */
2720
- contractor_type: string | null;
2801
+ ny_dol_prc_number?: string | null;
2721
2802
  } | null;
2722
2803
  /**
2723
2804
  * Parameters for creating a job. Sets the job's schedule, work types, address, and optional Prevailing Wage / Apprenticeship (PWA) compliance. Extra keys are accepted, including custom fields.
@@ -2888,17 +2969,17 @@ export type JobParameters = {
2888
2969
  value?: string | null;
2889
2970
  }> | null;
2890
2971
  /**
2891
- * Prevailing-wage / apprenticeship (PWA) compliance details to set on the job; which fields apply depends on region. Null when the job tracks no PWA compliance.
2972
+ * Prevailing-wage / apprenticeship (PWA) compliance details to set on the job. Omit or send an empty object to make no PWA-details changes; null and non-object values are rejected. The accepted regional keys depend on the effective region and regional PWA mode.
2892
2973
  */
2893
2974
  pwa_details?: {
2894
2975
  /**
2895
2976
  * Role of the company on this job for PWA reporting: one of prime_contractor or sub_contractor; null when unset.
2896
2977
  */
2897
- contractor_type?: string | null;
2978
+ contractor_type?: 'prime_contractor' | 'sub_contractor' | null;
2898
2979
  /**
2899
- * Whether new positions on the job default to paying the full fringe as cash; null when unset.
2980
+ * Whether new positions on the job default to paying the full fringe as cash. Omit to retain the current value (or use the database default on create); when sent, the value must be true or false.
2900
2981
  */
2901
- pay_full_cash_fringe_by_default?: boolean | null;
2982
+ pay_full_cash_fringe_by_default?: boolean;
2902
2983
  /**
2903
2984
  * California DIR (Department of Industrial Relations) awarding-body ID; null when not applicable.
2904
2985
  */
@@ -2935,14 +3016,6 @@ export type JobParameters = {
2935
3016
  * Illinois DOL public-body name; null when not applicable.
2936
3017
  */
2937
3018
  il_dol_public_body_name?: string | null;
2938
- /**
2939
- * Illinois DOL contract number; null when not applicable.
2940
- */
2941
- il_dol_contract_number?: string | null;
2942
- /**
2943
- * Illinois SHINES project ID; null when not applicable.
2944
- */
2945
- il_shines_project_id?: string | null;
2946
3019
  /**
2947
3020
  * ID of the Illinois DOL public-body contact; null when not applicable.
2948
3021
  */
@@ -2951,11 +3024,19 @@ export type JobParameters = {
2951
3024
  * ID of the Illinois DOL public-body address; null when not applicable.
2952
3025
  */
2953
3026
  il_dol_public_body_address_id?: string | null;
3027
+ /**
3028
+ * Illinois DOL contract number; null when not applicable.
3029
+ */
3030
+ il_dol_contract_number?: string | null;
3031
+ /**
3032
+ * Illinois SHINES project ID; null when not applicable.
3033
+ */
3034
+ il_shines_project_id?: string | null;
2954
3035
  /**
2955
3036
  * New York DOL prevailing-rate-case (PRC) number, a 10-digit identifier; null when not applicable.
2956
3037
  */
2957
3038
  ny_dol_prc_number?: string | null;
2958
- } | null;
3039
+ };
2959
3040
  [key: string]: unknown;
2960
3041
  };
2961
3042
  /**
@@ -4512,6 +4593,173 @@ export type PayPeriodsResponseObject = {
4512
4593
  updated_at: string;
4513
4594
  }>;
4514
4595
  };
4596
+ /**
4597
+ * One problem found while processing an accepted import, whatever its type.
4598
+ */
4599
+ export type ImportProcessingError = {
4600
+ /**
4601
+ * What went wrong, as a stable slug — `no_active_employee`, `job_not_found`, `time_overlap` and so on. The vocabulary varies by import type. `internal_error` means the import failed on the server rather than on anything in the file; retry it, and contact support if it fails again.
4602
+ */
4603
+ code: string;
4604
+ /**
4605
+ * The file row the problem was found on. The header is row 1, so data rows start at 2; a problem with the file as a whole rather than with one row is also reported against row 1. Null only on `internal_error`.
4606
+ */
4607
+ row: number | null;
4608
+ /**
4609
+ * The column the problem was found in, named as the file's header. Null when the problem is with the row or the file as a whole rather than with one value.
4610
+ */
4611
+ column: string | null;
4612
+ /**
4613
+ * The values the code was raised against — which vary by code, so read them as a diagnostic rather than a fixed shape. `row` and `column` are not repeated here.
4614
+ */
4615
+ context: {
4616
+ [key: string]: unknown;
4617
+ };
4618
+ };
4619
+ /**
4620
+ * One bulk upload of day-level hours against a pay period, and how it turned out.
4621
+ */
4622
+ export type AggregateTimeImportResponseObject = {
4623
+ /**
4624
+ * Unique identifier.
4625
+ */
4626
+ id: string;
4627
+ /**
4628
+ * The pay period the hours were imported against.
4629
+ */
4630
+ pay_period_id: string;
4631
+ /**
4632
+ * Where the import has got to. `pending` until the background job starts, then `success` or `failed`.
4633
+ */
4634
+ status: 'pending' | 'processing' | 'processed' | 'success' | 'failed';
4635
+ /**
4636
+ * How many rows passed validation and were prepared for writing. On a `success` import that is also how many rows were written. On a `failed` one it is not — the import writes all of its rows in a single transaction, so a failure part-way through undoes every write already made while this count still reports every row that had been prepared.
4637
+ */
4638
+ processed_rows_count: number;
4639
+ /**
4640
+ * Every problem found after the import was accepted, oldest row first; empty when there were none, and always empty while the import is `pending`.
4641
+ */
4642
+ processing_errors: Array<ImportProcessingError>;
4643
+ /**
4644
+ * When processing finished; null while the import is still pending.
4645
+ */
4646
+ completed_at: string | null;
4647
+ /**
4648
+ * When the import was submitted.
4649
+ */
4650
+ created_at: string;
4651
+ /**
4652
+ * When the import was last modified.
4653
+ */
4654
+ updated_at: string;
4655
+ };
4656
+ /**
4657
+ * 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.
4658
+ *
4659
+ * 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.
4660
+ *
4661
+ * 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.
4662
+ */
4663
+ export type AggregateTimeImportParameters = {
4664
+ /**
4665
+ * A signed_id from POST /api/v1/direct_uploads identifying the uploaded spreadsheet. Register the upload naming `pay_periods.imports.aggregate_times` — a signed_id issued for any other resource will not resolve here.
4666
+ */
4667
+ file_signed_id: string;
4668
+ };
4669
+ /**
4670
+ * One bulk upload of a certified payroll report against a pay period, and how it turned out.
4671
+ */
4672
+ export type DsptchCprImportResponseObject = {
4673
+ /**
4674
+ * Unique identifier.
4675
+ */
4676
+ id: string;
4677
+ /**
4678
+ * The pay period the report was imported against.
4679
+ */
4680
+ pay_period_id: string;
4681
+ /**
4682
+ * Where the import has got to. `pending` until the background job starts, then `success` or `failed`.
4683
+ */
4684
+ status: 'pending' | 'processing' | 'processed' | 'success' | 'failed';
4685
+ /**
4686
+ * How many rows passed validation and were prepared for writing. On a `success` import that is also how many rows were written. On a `failed` one it is not — the import writes all of its rows in a single transaction, so a failure part-way through undoes every write already made while this count still reports every row that had been prepared.
4687
+ */
4688
+ processed_rows_count: number;
4689
+ /**
4690
+ * Every problem found after the import was accepted, oldest row first; empty when there were none, and always empty while the import is `pending`.
4691
+ */
4692
+ processing_errors: Array<ImportProcessingError>;
4693
+ /**
4694
+ * When processing finished; null while the import is still pending.
4695
+ */
4696
+ completed_at: string | null;
4697
+ /**
4698
+ * When the import was submitted.
4699
+ */
4700
+ created_at: string;
4701
+ /**
4702
+ * When the import was last modified.
4703
+ */
4704
+ updated_at: string;
4705
+ };
4706
+ /**
4707
+ * 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.
4708
+ *
4709
+ * 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`.
4710
+ */
4711
+ export type DsptchCprImportParameters = {
4712
+ /**
4713
+ * A signed_id from POST /api/v1/direct_uploads identifying the uploaded spreadsheet. Register the upload naming `pay_periods.imports.dsptch_cprs` — a signed_id issued for any other resource will not resolve here.
4714
+ */
4715
+ file_signed_id: string;
4716
+ };
4717
+ /**
4718
+ * One bulk upload of time entries against a pay period, and how it turned out.
4719
+ */
4720
+ export type TimeEntryImportResponseObject = {
4721
+ /**
4722
+ * Unique identifier.
4723
+ */
4724
+ id: string;
4725
+ /**
4726
+ * The pay period the entries were imported against.
4727
+ */
4728
+ pay_period_id: string;
4729
+ /**
4730
+ * Where the import has got to. `pending` until the background job starts, then `success` or `failed`.
4731
+ */
4732
+ status: 'pending' | 'processing' | 'processed' | 'success' | 'failed';
4733
+ /**
4734
+ * How many rows passed validation and were prepared for writing. On a `success` import that is also how many rows were written. On a `failed` one it is not — the import writes all of its rows in a single transaction, so a failure part-way through undoes every write already made while this count still reports every row that had been prepared.
4735
+ */
4736
+ processed_rows_count: number;
4737
+ /**
4738
+ * Every problem found after the import was accepted, oldest row first; empty when there were none, and always empty while the import is `pending`.
4739
+ */
4740
+ processing_errors: Array<ImportProcessingError>;
4741
+ /**
4742
+ * When processing finished; null while the import is still pending.
4743
+ */
4744
+ completed_at: string | null;
4745
+ /**
4746
+ * When the import was submitted.
4747
+ */
4748
+ created_at: string;
4749
+ /**
4750
+ * When the import was last modified.
4751
+ */
4752
+ updated_at: string;
4753
+ };
4754
+ /**
4755
+ * 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.
4756
+ */
4757
+ export type TimeEntryImportParameters = {
4758
+ /**
4759
+ * A signed_id from POST /api/v1/direct_uploads identifying the uploaded spreadsheet. Register the upload naming `pay_periods.imports.time_entries` — a signed_id issued for any other resource will not resolve here.
4760
+ */
4761
+ file_signed_id: string;
4762
+ };
4515
4763
  /**
4516
4764
  * 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.
4517
4765
  */
@@ -7544,7 +7792,7 @@ export type FederalJobWageDeterminationResponseObject = {
7544
7792
  */
7545
7793
  pwa_trade_id: string;
7546
7794
  /**
7547
- * ID of the overtime package whose rules apply to this determination, or null when none is set.
7795
+ * ID of the overtime package whose rules apply to this determination, or null when none is set. Not a versioned attribute: every version of the determination carries the same package, so this reads the same whatever point in time you ask for. The rules inside the package carry their own valid times.
7548
7796
  */
7549
7797
  overtime_package_id: string | null;
7550
7798
  /**
@@ -7609,7 +7857,7 @@ export type RegionalJobWageDeterminationResponseObject = {
7609
7857
  */
7610
7858
  pwa_trade_id: string;
7611
7859
  /**
7612
- * ID of the overtime package whose rules apply to this determination, or null when none is set.
7860
+ * ID of the overtime package whose rules apply to this determination, or null when none is set. Not a versioned attribute: every version of the determination carries the same package, so this reads the same whatever point in time you ask for. The rules inside the package carry their own valid times.
7613
7861
  */
7614
7862
  overtime_package_id: string | null;
7615
7863
  /**
@@ -7890,6 +8138,10 @@ export type RegionalJobWageDeterminationParameters = {
7890
8138
  * The DOL general wage determination the rates are drawn from — the general decision number plus its revision (e.g. "CA20230001/5"); null when not recorded.
7891
8139
  */
7892
8140
  general_wage_determination?: string | null;
8141
+ /**
8142
+ * Overtime package whose rules govern overtime on work under this determination. This is not a versioned attribute: setting it points every version at that package, not only the one this request writes, and `effective_from` does not date it. Send null to detach, leaving the determination with no overtime package of its own. Omit the key to leave the current attachment alone. A package belonging to another company is refused, and a Federal determination refuses one outright — only a Regional determination carries overtime rules.
8143
+ */
8144
+ overtime_package_id?: string | null;
7893
8145
  regional_fields?: RegionalWageDeterminationFields;
7894
8146
  };
7895
8147
  /**
@@ -7900,6 +8152,10 @@ export type JobWageDeterminationUpdateParameters = {
7900
8152
  * Where the edit starts applying, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Every version from this date forward takes the new values; earlier versions are untouched. Optional; defaults to the start of the version valid now, which corrects that version in place.
7901
8153
  */
7902
8154
  effective_from?: string;
8155
+ /**
8156
+ * Overtime package whose rules govern overtime on work under this determination. This is not a versioned attribute: setting it points every version at that package, not only the one this request writes, and `effective_from` does not date it. Send null to detach, leaving the determination with no overtime package of its own. Omit the key to leave the current attachment alone. A package belonging to another company is refused, and a Federal determination refuses one outright — only a Regional determination carries overtime rules.
8157
+ */
8158
+ overtime_package_id?: string | null;
7903
8159
  /**
7904
8160
  * Human-readable labor classification — the craft or trade this determination sets rates for; the display label, distinct from the machine class code.
7905
8161
  */
@@ -7942,10 +8198,6 @@ export type JobWageDeterminationScheduledChangeParameters = {
7942
8198
  * Human-readable labor classification — the craft or trade this determination sets rates for; the display label, distinct from the machine class code.
7943
8199
  */
7944
8200
  labor_classification?: string;
7945
- /**
7946
- * UUID of the craft grouping (trade) this determination pools into for apprenticeship-ratio tracking; obtain one from the job or project PWA trades endpoint before assigning it here.
7947
- */
7948
- pwa_trade_id?: string;
7949
8201
  /**
7950
8202
  * Base hourly wage rate, in cents as a decimal string (e.g. "5380.0" is $53.80).
7951
8203
  */
@@ -8170,88 +8422,294 @@ export type RateRuleHistoryVersionObject = {
8170
8422
  corrections: Array<RateRuleHistoryCorrectionObject>;
8171
8423
  };
8172
8424
  /**
8173
- * 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.
8425
+ * 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.
8174
8426
  */
8175
- export type RateRuleParameters = {
8427
+ export type OvertimeRuleResponseObject = {
8176
8428
  /**
8177
- * Date the rule takes effect, YYYY-MM-DD. Defaults to today. Cannot predate the earliest wage determination the rule's package applies to.
8429
+ * The rule's identity, shared by every version of it. Addresses the rule itself rather than one of its versions; versions are told apart by their `valid_from`/`valid_to` windows.
8178
8430
  */
8179
- effective_date?: string | null;
8180
- effect: RateRuleEffect;
8431
+ id: string;
8181
8432
  /**
8182
- * Match conditions for the rule; optional. Omit or send an empty list for a rule that always applies. At most one condition per category (time, day-selection, apprentice, overtime).
8433
+ * ID of the overtime package this rule belongs to, taken from the request path.
8183
8434
  */
8184
- conditions?: Array<RateRuleCondition>;
8185
- };
8186
- /**
8187
- * A tracked physical asset owned by a company and typed by a product — either an individually-tracked serial unit or a quantity-tracked bulk stock record. The serial-only fields (serial_number, status, purchase_date, purchase_price_cents, currency, external_id, external_system_url) are null on a bulk item.
8188
- */
8189
- export type AssetsItemResponseObject = {
8435
+ overtime_package_id: string;
8190
8436
  /**
8191
- * Unique identifier.
8437
+ * The rule's cadence, as a class name: `DailyOvertimeRule` applies per day, `WeeklyOvertimeRule` per week.
8192
8438
  */
8193
- id: string;
8439
+ type: 'DailyOvertimeRule' | 'WeeklyOvertimeRule';
8194
8440
  /**
8195
- * Human-readable name for the item.
8441
+ * The overtime pay multiplier: `one_x` = 1.0x (straight time), `one_five_x` = 1.5x, `two_x` = 2.0x.
8196
8442
  */
8197
- name: string;
8443
+ rate_multiplier: 'one_x' | 'one_five_x' | 'two_x';
8198
8444
  /**
8199
- * Free-text description of the item.
8445
+ * Two-letter US state code the rule is limited to, or null when it applies regardless of region.
8200
8446
  */
8201
- description: string | null;
8447
+ region_id: string | null;
8202
8448
  /**
8203
- * ID of the product this item is an instance of.
8449
+ * Whole hours that must be worked (daily or weekly per `type`) before the multiplier applies. Null when the rule has no hours threshold.
8204
8450
  */
8205
- assets_product_id: string;
8451
+ eligible_hours_worked: number | null;
8206
8452
  /**
8207
- * ID of the company that owns this record.
8453
+ * Lowercase weekday name (e.g. `monday`) the rule is limited to, or null when it is not day-of-week specific.
8208
8454
  */
8209
- company_id: string;
8455
+ specific_day_of_week: 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | null;
8210
8456
  /**
8211
- * Whether the item is an individually-tracked serial unit or a quantity-tracked bulk stock record; one of serial or bulk.
8457
+ * A single calendar date (YYYY-MM-DD) the rule is limited to, or null when it is not date specific.
8212
8458
  */
8213
- type: 'serial' | 'bulk';
8459
+ specific_date: string | null;
8214
8460
  /**
8215
- * Serial number identifying the individual physical unit; unique within its product.
8461
+ * Valid time when this version of the rule took effect (ISO 8601); null when the version has no recorded start.
8216
8462
  */
8217
- serial_number: string | null;
8463
+ valid_from: string | null;
8218
8464
  /**
8219
- * Placement status of the item: available, or assigned when held by a user.
8465
+ * Valid time when this version stopped applying (ISO 8601); null while it is still current.
8220
8466
  */
8221
- status: 'available' | 'assigned' | null;
8467
+ valid_to: string | null;
8222
8468
  /**
8223
- * When the item was purchased (ISO 8601).
8469
+ * When the record was created (ISO 8601).
8224
8470
  */
8225
- purchase_date: string | null;
8471
+ created_at: string | null;
8226
8472
  /**
8227
- * Purchase price in cents, in the item's currency.
8473
+ * When the record was last updated (ISO 8601).
8228
8474
  */
8229
- purchase_price_cents: string | null;
8475
+ updated_at: string | null;
8476
+ };
8477
+ export type OvertimeRuleHistoryCorrectionObject = {
8230
8478
  /**
8231
- * ISO 4217 currency code for the purchase price — the company's default currency; read-only.
8479
+ * Family key shared by every entry on this timeline — the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
8232
8480
  */
8233
- currency: string | null;
8481
+ overtime_rule_id: string;
8482
+ overtime_package_id: string;
8483
+ type: 'DailyOvertimeRule' | 'WeeklyOvertimeRule';
8484
+ rate_multiplier: 'one_x' | 'one_five_x' | 'two_x';
8485
+ region_id: string | null;
8486
+ eligible_hours_worked: number | null;
8487
+ specific_day_of_week: 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | null;
8488
+ specific_date: string | null;
8489
+ valid_from: string | null;
8490
+ valid_to: string | null;
8491
+ created_at: string | null;
8492
+ updated_at: string | null;
8493
+ };
8494
+ export type OvertimeRuleHistoryVersionObject = {
8234
8495
  /**
8235
- * Identifier for this item in an external system.
8496
+ * Family key shared by every entry on this timeline the same identity the member route addresses. An entry carries no identifier of its own; versions are distinguished by their window coordinates.
8236
8497
  */
8237
- external_id: string | null;
8498
+ overtime_rule_id: string;
8499
+ overtime_package_id: string;
8500
+ type: 'DailyOvertimeRule' | 'WeeklyOvertimeRule';
8501
+ rate_multiplier: 'one_x' | 'one_five_x' | 'two_x';
8502
+ region_id: string | null;
8503
+ eligible_hours_worked: number | null;
8504
+ specific_day_of_week: 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | null;
8505
+ specific_date: string | null;
8506
+ valid_from: string | null;
8507
+ valid_to: string | null;
8508
+ created_at: string | null;
8509
+ updated_at: string | null;
8510
+ version_status: 'scheduled' | 'current' | 'historical';
8511
+ corrections: Array<OvertimeRuleHistoryCorrectionObject>;
8512
+ };
8513
+ /**
8514
+ * Create an overtime rule on the package. `type` and `rate_multiplier` are required; the qualifiers below are optional and describe when the multiplier applies.
8515
+ */
8516
+ export type OvertimeRuleParameters = {
8238
8517
  /**
8239
- * URL to this item in an external system.
8518
+ * Date the rule takes effect, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Optional; defaults to today.
8240
8519
  */
8241
- external_system_url: string | null;
8520
+ effective_date?: string;
8242
8521
  /**
8243
- * Whether this item can hold other items (its product is flagged as a container). Only container items have contents.
8522
+ * The rule's cadence, as a class name: `DailyOvertimeRule` (per day) or `WeeklyOvertimeRule` (per week).
8244
8523
  */
8245
- container: boolean;
8524
+ type: 'DailyOvertimeRule' | 'WeeklyOvertimeRule';
8246
8525
  /**
8247
- * Items currently held inside this container, one entry per contained item; empty unless the item is a container.
8526
+ * The overtime pay multiplier: `one_x` = 1.0x, `one_five_x` = 1.5x, `two_x` = 2.0x.
8248
8527
  */
8249
- contents: Array<{
8250
- /**
8251
- * ID of the contained item.
8252
- */
8253
- item_id: string;
8254
- /**
8528
+ rate_multiplier: 'one_x' | 'one_five_x' | 'two_x';
8529
+ /**
8530
+ * Two-letter US state code to limit the rule to, or null to apply regardless of region.
8531
+ */
8532
+ region_id?: string | null;
8533
+ /**
8534
+ * Whole hours that must be worked before the multiplier applies. Omitted or null is read as `0`, the same default the web form submits, which applies the multiplier to every minute the other qualifiers admit.
8535
+ */
8536
+ eligible_hours_worked?: number | null;
8537
+ /**
8538
+ * Lowercase weekday name (e.g. `monday`) to limit the rule to, or null. A value naming no weekday is refused with `422` rather than dropped.
8539
+ */
8540
+ specific_day_of_week?: 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | null;
8541
+ /**
8542
+ * A single calendar date (YYYY-MM-DD) to limit the rule to, or null.
8543
+ */
8544
+ specific_date?: string | null;
8545
+ };
8546
+ /**
8547
+ * 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.
8548
+ */
8549
+ export type OvertimeRuleUpdateParameters = {
8550
+ /**
8551
+ * Where the edit starts applying, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Every version from this date forward takes the new values; earlier versions are untouched. Optional; defaults to the start of the version valid now, which corrects that version in place.
8552
+ */
8553
+ effective_from?: string;
8554
+ /**
8555
+ * The rule's cadence, as a class name: `DailyOvertimeRule` (per day) or `WeeklyOvertimeRule` (per week).
8556
+ */
8557
+ type: 'DailyOvertimeRule' | 'WeeklyOvertimeRule';
8558
+ /**
8559
+ * The overtime pay multiplier: `one_x` = 1.0x, `one_five_x` = 1.5x, `two_x` = 2.0x.
8560
+ */
8561
+ rate_multiplier?: 'one_x' | 'one_five_x' | 'two_x';
8562
+ /**
8563
+ * Two-letter US state code to limit the rule to, or null to apply regardless of region.
8564
+ */
8565
+ region_id?: string | null;
8566
+ /**
8567
+ * Whole hours that must be worked before the multiplier applies. Omitted or null is read as `0`, the same default the web form submits, which applies the multiplier to every minute the other qualifiers admit.
8568
+ */
8569
+ eligible_hours_worked?: number | null;
8570
+ /**
8571
+ * Lowercase weekday name (e.g. `monday`) to limit the rule to, or null. A value naming no weekday is refused with `422` rather than dropped.
8572
+ */
8573
+ specific_day_of_week?: 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | null;
8574
+ /**
8575
+ * A single calendar date (YYYY-MM-DD) to limit the rule to, or null.
8576
+ */
8577
+ specific_date?: string | null;
8578
+ };
8579
+ /**
8580
+ * 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.
8581
+ */
8582
+ export type OvertimeRuleScheduledChangeParameters = {
8583
+ /**
8584
+ * Where the change starts applying, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. A boundary is created at that date when needed, and the new values apply from there forward. A date already reached reconciles derived overtime immediately; a date still ahead reconciles at that date.
8585
+ */
8586
+ effective_date: string;
8587
+ /**
8588
+ * The rule's cadence, as a class name: `DailyOvertimeRule` (per day) or `WeeklyOvertimeRule` (per week).
8589
+ */
8590
+ type: 'DailyOvertimeRule' | 'WeeklyOvertimeRule';
8591
+ /**
8592
+ * The overtime pay multiplier: `one_x` = 1.0x, `one_five_x` = 1.5x, `two_x` = 2.0x.
8593
+ */
8594
+ rate_multiplier?: 'one_x' | 'one_five_x' | 'two_x';
8595
+ /**
8596
+ * Two-letter US state code to limit the rule to, or null to apply regardless of region.
8597
+ */
8598
+ region_id?: string | null;
8599
+ /**
8600
+ * Whole hours that must be worked before the multiplier applies. Omitted or null is read as `0`, the same default the web form submits, which applies the multiplier to every minute the other qualifiers admit.
8601
+ */
8602
+ eligible_hours_worked?: number | null;
8603
+ /**
8604
+ * Lowercase weekday name (e.g. `monday`) to limit the rule to, or null. A value naming no weekday is refused with `422` rather than dropped.
8605
+ */
8606
+ specific_day_of_week?: 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | null;
8607
+ /**
8608
+ * A single calendar date (YYYY-MM-DD) to limit the rule to, or null.
8609
+ */
8610
+ specific_date?: string | null;
8611
+ };
8612
+ /**
8613
+ * Parameters for moving where an overtime rule's timeline begins.
8614
+ */
8615
+ export type OvertimeRuleGenesisParameters = {
8616
+ /**
8617
+ * The timeline's new start, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Moving it earlier extends the first version back to it. Moving it later drops every version whose coverage ended at or before it and truncates the one spanning it, so what those versions said stops being readable. Refused with `422` when the new start would fall at or after a scheduled termination.
8618
+ */
8619
+ effective_date: string;
8620
+ };
8621
+ /**
8622
+ * Schedule when the overtime rule stops being valid.
8623
+ */
8624
+ export type OvertimeRuleScheduledTerminationParameters = {
8625
+ /**
8626
+ * When the rule stops being valid, as a calendar date (`YYYY-MM-DD`); a value carrying a time component is refused with `422` rather than truncated. Must fall after the rule's genesis — removing the rule from every window it ever covered is the rule delete instead. A rule holds at most one scheduled termination; cancel the standing one before scheduling another.
8627
+ */
8628
+ effective_date: string;
8629
+ };
8630
+ /**
8631
+ * 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.
8632
+ */
8633
+ export type RateRuleParameters = {
8634
+ /**
8635
+ * Date the rule takes effect, YYYY-MM-DD. Defaults to today. Cannot predate the earliest wage determination the rule's package applies to.
8636
+ */
8637
+ effective_date?: string | null;
8638
+ effect: RateRuleEffect;
8639
+ /**
8640
+ * Match conditions for the rule; optional. Omit or send an empty list for a rule that always applies. At most one condition per category (time, day-selection, apprentice, overtime).
8641
+ */
8642
+ conditions?: Array<RateRuleCondition>;
8643
+ };
8644
+ /**
8645
+ * A tracked physical asset owned by a company and typed by a product — either an individually-tracked serial unit or a quantity-tracked bulk stock record. The serial-only fields (serial_number, status, purchase_date, purchase_price_cents, currency, external_id, external_system_url) are null on a bulk item.
8646
+ */
8647
+ export type AssetsItemResponseObject = {
8648
+ /**
8649
+ * Unique identifier.
8650
+ */
8651
+ id: string;
8652
+ /**
8653
+ * Human-readable name for the item.
8654
+ */
8655
+ name: string;
8656
+ /**
8657
+ * Free-text description of the item.
8658
+ */
8659
+ description: string | null;
8660
+ /**
8661
+ * ID of the product this item is an instance of.
8662
+ */
8663
+ assets_product_id: string;
8664
+ /**
8665
+ * ID of the company that owns this record.
8666
+ */
8667
+ company_id: string;
8668
+ /**
8669
+ * Whether the item is an individually-tracked serial unit or a quantity-tracked bulk stock record; one of serial or bulk.
8670
+ */
8671
+ type: 'serial' | 'bulk';
8672
+ /**
8673
+ * Serial number identifying the individual physical unit; unique within its product.
8674
+ */
8675
+ serial_number: string | null;
8676
+ /**
8677
+ * Placement status of the item: available, or assigned when held by a user.
8678
+ */
8679
+ status: 'available' | 'assigned' | null;
8680
+ /**
8681
+ * When the item was purchased (ISO 8601).
8682
+ */
8683
+ purchase_date: string | null;
8684
+ /**
8685
+ * Purchase price in cents, in the item's currency.
8686
+ */
8687
+ purchase_price_cents: string | null;
8688
+ /**
8689
+ * ISO 4217 currency code for the purchase price — the company's default currency; read-only.
8690
+ */
8691
+ currency: string | null;
8692
+ /**
8693
+ * Identifier for this item in an external system.
8694
+ */
8695
+ external_id: string | null;
8696
+ /**
8697
+ * URL to this item in an external system.
8698
+ */
8699
+ external_system_url: string | null;
8700
+ /**
8701
+ * Whether this item can hold other items (its product is flagged as a container). Only container items have contents.
8702
+ */
8703
+ container: boolean;
8704
+ /**
8705
+ * Items currently held inside this container, one entry per contained item; empty unless the item is a container.
8706
+ */
8707
+ contents: Array<{
8708
+ /**
8709
+ * ID of the contained item.
8710
+ */
8711
+ item_id: string;
8712
+ /**
8255
8713
  * Units of the contained item held in this container (1 for a serial, a count for bulk stock).
8256
8714
  */
8257
8715
  quantity: number;
@@ -15131,6 +15589,10 @@ export type CreateWageDeterminationErrors = {
15131
15589
  * Forbidden
15132
15590
  */
15133
15591
  403: Problem;
15592
+ /**
15593
+ * Not Found
15594
+ */
15595
+ 404: Problem;
15134
15596
  /**
15135
15597
  * Unprocessable Content
15136
15598
  */
@@ -15237,6 +15699,10 @@ export type UpdateJobWageDeterminationData = {
15237
15699
  url: '/api/v1/jobs/{job_id}/wage_determinations/{id}';
15238
15700
  };
15239
15701
  export type UpdateJobWageDeterminationErrors = {
15702
+ /**
15703
+ * Bad Request
15704
+ */
15705
+ 400: Problem;
15240
15706
  /**
15241
15707
  * Forbidden
15242
15708
  */
@@ -15341,6 +15807,10 @@ export type CreateJobData = {
15341
15807
  url: '/api/v1/jobs';
15342
15808
  };
15343
15809
  export type CreateJobErrors = {
15810
+ /**
15811
+ * Bad Request
15812
+ */
15813
+ 400: Problem;
15344
15814
  /**
15345
15815
  * Forbidden
15346
15816
  */
@@ -15393,6 +15863,10 @@ export type UpdateJobData = {
15393
15863
  url: '/api/v1/jobs/{id}';
15394
15864
  };
15395
15865
  export type UpdateJobErrors = {
15866
+ /**
15867
+ * Bad Request
15868
+ */
15869
+ 400: Problem;
15396
15870
  /**
15397
15871
  * Forbidden
15398
15872
  */
@@ -15414,6 +15888,42 @@ export type UpdateJobResponses = {
15414
15888
  200: JobResponseObject;
15415
15889
  };
15416
15890
  export type UpdateJobResponse = UpdateJobResponses[keyof UpdateJobResponses];
15891
+ export type GetOpenapiDocumentData = {
15892
+ body?: never;
15893
+ path?: never;
15894
+ query?: never;
15895
+ url: '/api/v1/openapi';
15896
+ };
15897
+ export type GetOpenapiDocumentResponses = {
15898
+ /**
15899
+ * Success
15900
+ */
15901
+ 200: {
15902
+ openapi: string;
15903
+ info: {
15904
+ [key: string]: unknown;
15905
+ };
15906
+ externalDocs: {
15907
+ [key: string]: unknown;
15908
+ };
15909
+ tags: Array<{
15910
+ [key: string]: unknown;
15911
+ }>;
15912
+ 'x-tagGroups': Array<{
15913
+ [key: string]: unknown;
15914
+ }>;
15915
+ paths: {
15916
+ [key: string]: unknown;
15917
+ };
15918
+ servers: Array<{
15919
+ [key: string]: unknown;
15920
+ }>;
15921
+ components: {
15922
+ [key: string]: unknown;
15923
+ };
15924
+ };
15925
+ };
15926
+ export type GetOpenapiDocumentResponse = GetOpenapiDocumentResponses[keyof GetOpenapiDocumentResponses];
15417
15927
  export type ListSiteCheckInsData = {
15418
15928
  body?: never;
15419
15929
  path: {
@@ -15498,28 +16008,22 @@ export type GetSiteCheckInResponses = {
15498
16008
  200: SiteCheckInResponseObject;
15499
16009
  };
15500
16010
  export type GetSiteCheckInResponse = GetSiteCheckInResponses[keyof GetSiteCheckInResponses];
15501
- export type ListPayPeriodsData = {
15502
- body?: never;
15503
- path?: never;
15504
- query?: {
15505
- 'filter[start_time][gte]'?: string;
15506
- 'filter[start_time][lte]'?: string;
15507
- filter?: string;
15508
- 'filter[unexpected]'?: string;
15509
- /**
15510
- * This pagination cursor corresponds to the cursor value found in the response in
15511
- * `meta.page.next_cursor`.
15512
- */
15513
- 'page[cursor]'?: string;
16011
+ export type ShiftOvertimeRuleGenesisData = {
16012
+ body: OvertimeRuleGenesisParameters;
16013
+ headers: {
15514
16014
  /**
15515
- * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
16015
+ * Version validator this write is composed against the `ETag` from a read of this rule, or `*` to write against whatever exists. See "Version validators" in the API overview.
15516
16016
  */
15517
- 'page[limit]'?: number;
15518
- page?: string;
16017
+ 'If-Match': string;
15519
16018
  };
15520
- url: '/api/v1/pay_periods';
16019
+ path: {
16020
+ overtime_package_id: string;
16021
+ overtime_rule_id: string;
16022
+ };
16023
+ query?: never;
16024
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{overtime_rule_id}/genesis';
15521
16025
  };
15522
- export type ListPayPeriodsErrors = {
16026
+ export type ShiftOvertimeRuleGenesisErrors = {
15523
16027
  /**
15524
16028
  * Bad Request
15525
16029
  */
@@ -15528,44 +16032,961 @@ export type ListPayPeriodsErrors = {
15528
16032
  * Forbidden
15529
16033
  */
15530
16034
  403: Problem;
16035
+ /**
16036
+ * Not Found
16037
+ */
16038
+ 404: Problem;
16039
+ /**
16040
+ * Conflict
16041
+ */
16042
+ 409: Problem;
16043
+ /**
16044
+ * Precondition Failed
16045
+ */
16046
+ 412: Problem;
15531
16047
  /**
15532
16048
  * Unprocessable Content
15533
16049
  */
15534
16050
  422: Problem;
16051
+ /**
16052
+ * Precondition Required
16053
+ */
16054
+ 428: Problem;
15535
16055
  };
15536
- export type ListPayPeriodsError = ListPayPeriodsErrors[keyof ListPayPeriodsErrors];
15537
- export type ListPayPeriodsResponses = {
16056
+ export type ShiftOvertimeRuleGenesisError = ShiftOvertimeRuleGenesisErrors[keyof ShiftOvertimeRuleGenesisErrors];
16057
+ export type ShiftOvertimeRuleGenesisResponses = {
15538
16058
  /**
15539
16059
  * Success
15540
16060
  */
15541
- 200: PayPeriodsResponseObject;
16061
+ 200: OvertimeRuleResponseObject;
15542
16062
  };
15543
- export type ListPayPeriodsResponse = ListPayPeriodsResponses[keyof ListPayPeriodsResponses];
15544
- export type ListCompensationElementsData = {
16063
+ export type ShiftOvertimeRuleGenesisResponse = ShiftOvertimeRuleGenesisResponses[keyof ShiftOvertimeRuleGenesisResponses];
16064
+ export type ListOvertimeRuleHistoryData = {
15545
16065
  body?: never;
15546
- path?: never;
15547
- query?: never;
15548
- url: '/api/v1/payrolls/compensation_elements';
16066
+ path: {
16067
+ overtime_package_id: string;
16068
+ /**
16069
+ * The rule's version-stable identity, as returned in `id`.
16070
+ */
16071
+ overtime_rule_id: string;
16072
+ };
16073
+ query?: {
16074
+ 'as_of[valid]'?: string;
16075
+ };
16076
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{overtime_rule_id}/history';
15549
16077
  };
15550
- export type ListCompensationElementsErrors = {
16078
+ export type ListOvertimeRuleHistoryErrors = {
16079
+ /**
16080
+ * Bad Request
16081
+ */
16082
+ 400: Problem;
15551
16083
  /**
15552
16084
  * Forbidden
15553
16085
  */
15554
16086
  403: Problem;
16087
+ /**
16088
+ * Not Found
16089
+ */
16090
+ 404: Problem;
15555
16091
  };
15556
- export type ListCompensationElementsError = ListCompensationElementsErrors[keyof ListCompensationElementsErrors];
15557
- export type ListCompensationElementsResponses = {
16092
+ export type ListOvertimeRuleHistoryError = ListOvertimeRuleHistoryErrors[keyof ListOvertimeRuleHistoryErrors];
16093
+ export type ListOvertimeRuleHistoryResponses = {
15558
16094
  /**
15559
16095
  * Success
15560
16096
  */
15561
16097
  200: {
15562
16098
  meta: Meta;
15563
16099
  links: Links;
15564
- data: Array<CompensationElementResponseObject>;
16100
+ data: Array<OvertimeRuleHistoryVersionObject>;
15565
16101
  };
15566
16102
  };
15567
- export type ListCompensationElementsResponse = ListCompensationElementsResponses[keyof ListCompensationElementsResponses];
15568
- export type GetCompensationElementData = {
16103
+ export type ListOvertimeRuleHistoryResponse = ListOvertimeRuleHistoryResponses[keyof ListOvertimeRuleHistoryResponses];
16104
+ export type CancelOvertimeRuleScheduledChangesData = {
16105
+ body?: never;
16106
+ headers: {
16107
+ /**
16108
+ * Version validator this write is composed against — the `ETag` from a read of this rule, or `*` to write against whatever exists. See "Version validators" in the API overview.
16109
+ */
16110
+ 'If-Match': string;
16111
+ };
16112
+ path: {
16113
+ overtime_package_id: string;
16114
+ overtime_rule_id: string;
16115
+ };
16116
+ query?: never;
16117
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{overtime_rule_id}/scheduled_changes';
16118
+ };
16119
+ export type CancelOvertimeRuleScheduledChangesErrors = {
16120
+ /**
16121
+ * Forbidden
16122
+ */
16123
+ 403: Problem;
16124
+ /**
16125
+ * Not Found
16126
+ */
16127
+ 404: Problem;
16128
+ /**
16129
+ * Precondition Failed
16130
+ */
16131
+ 412: Problem;
16132
+ /**
16133
+ * Unprocessable Content
16134
+ */
16135
+ 422: Problem;
16136
+ /**
16137
+ * Precondition Required
16138
+ */
16139
+ 428: Problem;
16140
+ };
16141
+ export type CancelOvertimeRuleScheduledChangesError = CancelOvertimeRuleScheduledChangesErrors[keyof CancelOvertimeRuleScheduledChangesErrors];
16142
+ export type CancelOvertimeRuleScheduledChangesResponses = {
16143
+ /**
16144
+ * Success
16145
+ */
16146
+ 200: OvertimeRuleResponseObject;
16147
+ };
16148
+ export type CancelOvertimeRuleScheduledChangesResponse = CancelOvertimeRuleScheduledChangesResponses[keyof CancelOvertimeRuleScheduledChangesResponses];
16149
+ export type ListOvertimeRuleScheduledChangesData = {
16150
+ body?: never;
16151
+ path: {
16152
+ overtime_package_id: string;
16153
+ overtime_rule_id: string;
16154
+ };
16155
+ query?: never;
16156
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{overtime_rule_id}/scheduled_changes';
16157
+ };
16158
+ export type ListOvertimeRuleScheduledChangesErrors = {
16159
+ /**
16160
+ * Forbidden
16161
+ */
16162
+ 403: Problem;
16163
+ /**
16164
+ * Not Found
16165
+ */
16166
+ 404: Problem;
16167
+ };
16168
+ export type ListOvertimeRuleScheduledChangesError = ListOvertimeRuleScheduledChangesErrors[keyof ListOvertimeRuleScheduledChangesErrors];
16169
+ export type ListOvertimeRuleScheduledChangesResponses = {
16170
+ /**
16171
+ * Success with scheduled changes
16172
+ */
16173
+ 200: Array<OvertimeRuleResponseObject>;
16174
+ };
16175
+ export type ListOvertimeRuleScheduledChangesResponse = ListOvertimeRuleScheduledChangesResponses[keyof ListOvertimeRuleScheduledChangesResponses];
16176
+ export type ScheduleOvertimeRuleChangeData = {
16177
+ body: OvertimeRuleScheduledChangeParameters;
16178
+ headers: {
16179
+ /**
16180
+ * Version validator this write is composed against — the `ETag` from a read of this rule, or `*` to write against whatever exists. See "Version validators" in the API overview.
16181
+ */
16182
+ 'If-Match': string;
16183
+ };
16184
+ path: {
16185
+ overtime_package_id: string;
16186
+ overtime_rule_id: string;
16187
+ };
16188
+ query?: never;
16189
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{overtime_rule_id}/scheduled_changes';
16190
+ };
16191
+ export type ScheduleOvertimeRuleChangeErrors = {
16192
+ /**
16193
+ * Bad Request
16194
+ */
16195
+ 400: Problem;
16196
+ /**
16197
+ * Forbidden
16198
+ */
16199
+ 403: Problem;
16200
+ /**
16201
+ * Not Found
16202
+ */
16203
+ 404: Problem;
16204
+ /**
16205
+ * Conflict
16206
+ */
16207
+ 409: Problem;
16208
+ /**
16209
+ * Precondition Failed
16210
+ */
16211
+ 412: Problem;
16212
+ /**
16213
+ * Unprocessable Content
16214
+ */
16215
+ 422: Problem;
16216
+ /**
16217
+ * Precondition Required
16218
+ */
16219
+ 428: Problem;
16220
+ };
16221
+ export type ScheduleOvertimeRuleChangeError = ScheduleOvertimeRuleChangeErrors[keyof ScheduleOvertimeRuleChangeErrors];
16222
+ export type ScheduleOvertimeRuleChangeResponses = {
16223
+ /**
16224
+ * Success (already scheduled)
16225
+ */
16226
+ 200: OvertimeRuleResponseObject;
16227
+ /**
16228
+ * Created
16229
+ */
16230
+ 201: OvertimeRuleResponseObject;
16231
+ };
16232
+ export type ScheduleOvertimeRuleChangeResponse = ScheduleOvertimeRuleChangeResponses[keyof ScheduleOvertimeRuleChangeResponses];
16233
+ export type CancelOvertimeRuleScheduledTerminationData = {
16234
+ body?: never;
16235
+ headers: {
16236
+ /**
16237
+ * Version validator this write is composed against — the `ETag` from a read of this rule, or `*` to write against whatever exists. See "Version validators" in the API overview.
16238
+ */
16239
+ 'If-Match': string;
16240
+ };
16241
+ path: {
16242
+ overtime_package_id: string;
16243
+ overtime_rule_id: string;
16244
+ };
16245
+ query?: never;
16246
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{overtime_rule_id}/scheduled_termination';
16247
+ };
16248
+ export type CancelOvertimeRuleScheduledTerminationErrors = {
16249
+ /**
16250
+ * Forbidden
16251
+ */
16252
+ 403: Problem;
16253
+ /**
16254
+ * Not Found
16255
+ */
16256
+ 404: Problem;
16257
+ /**
16258
+ * Precondition Failed
16259
+ */
16260
+ 412: Problem;
16261
+ /**
16262
+ * Unprocessable Content
16263
+ */
16264
+ 422: Problem;
16265
+ /**
16266
+ * Precondition Required
16267
+ */
16268
+ 428: Problem;
16269
+ };
16270
+ export type CancelOvertimeRuleScheduledTerminationError = CancelOvertimeRuleScheduledTerminationErrors[keyof CancelOvertimeRuleScheduledTerminationErrors];
16271
+ export type CancelOvertimeRuleScheduledTerminationResponses = {
16272
+ /**
16273
+ * Success
16274
+ */
16275
+ 200: OvertimeRuleResponseObject;
16276
+ };
16277
+ export type CancelOvertimeRuleScheduledTerminationResponse = CancelOvertimeRuleScheduledTerminationResponses[keyof CancelOvertimeRuleScheduledTerminationResponses];
16278
+ export type ScheduleOvertimeRuleTerminationData = {
16279
+ body: OvertimeRuleScheduledTerminationParameters;
16280
+ headers: {
16281
+ /**
16282
+ * Version validator this write is composed against — the `ETag` from a read of this rule, or `*` to write against whatever exists. See "Version validators" in the API overview.
16283
+ */
16284
+ 'If-Match': string;
16285
+ };
16286
+ path: {
16287
+ overtime_package_id: string;
16288
+ overtime_rule_id: string;
16289
+ };
16290
+ query?: never;
16291
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{overtime_rule_id}/scheduled_termination';
16292
+ };
16293
+ export type ScheduleOvertimeRuleTerminationErrors = {
16294
+ /**
16295
+ * Bad Request
16296
+ */
16297
+ 400: Problem;
16298
+ /**
16299
+ * Forbidden
16300
+ */
16301
+ 403: Problem;
16302
+ /**
16303
+ * Not Found
16304
+ */
16305
+ 404: Problem;
16306
+ /**
16307
+ * Conflict
16308
+ */
16309
+ 409: Problem;
16310
+ /**
16311
+ * Precondition Failed
16312
+ */
16313
+ 412: Problem;
16314
+ /**
16315
+ * Unprocessable Content
16316
+ */
16317
+ 422: Problem;
16318
+ /**
16319
+ * Precondition Required
16320
+ */
16321
+ 428: Problem;
16322
+ };
16323
+ export type ScheduleOvertimeRuleTerminationError = ScheduleOvertimeRuleTerminationErrors[keyof ScheduleOvertimeRuleTerminationErrors];
16324
+ export type ScheduleOvertimeRuleTerminationResponses = {
16325
+ /**
16326
+ * Created
16327
+ */
16328
+ 201: OvertimeRuleResponseObject;
16329
+ };
16330
+ export type ScheduleOvertimeRuleTerminationResponse = ScheduleOvertimeRuleTerminationResponses[keyof ScheduleOvertimeRuleTerminationResponses];
16331
+ export type ListOvertimeRulesData = {
16332
+ body?: never;
16333
+ path: {
16334
+ overtime_package_id: string;
16335
+ };
16336
+ query?: {
16337
+ /**
16338
+ * Read the version valid at this point in time. Defaults to now.
16339
+ */
16340
+ 'as_of[valid]'?: string;
16341
+ as_of?: string;
16342
+ 'as_of[bogus_axis]'?: string;
16343
+ 'as_of[valid][gte]'?: string;
16344
+ 'as_of[transaction]'?: string;
16345
+ filter?: string;
16346
+ 'filter[unexpected]'?: string;
16347
+ /**
16348
+ * This pagination cursor corresponds to the cursor value found in the response in
16349
+ * `meta.page.next_cursor`.
16350
+ */
16351
+ 'page[cursor]'?: string;
16352
+ /**
16353
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
16354
+ */
16355
+ 'page[limit]'?: number;
16356
+ page?: string;
16357
+ };
16358
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules';
16359
+ };
16360
+ export type ListOvertimeRulesErrors = {
16361
+ /**
16362
+ * Bad Request
16363
+ */
16364
+ 400: Problem;
16365
+ /**
16366
+ * Forbidden
16367
+ */
16368
+ 403: Problem;
16369
+ /**
16370
+ * Unprocessable Content
16371
+ */
16372
+ 422: Problem;
16373
+ };
16374
+ export type ListOvertimeRulesError = ListOvertimeRulesErrors[keyof ListOvertimeRulesErrors];
16375
+ export type ListOvertimeRulesResponses = {
16376
+ /**
16377
+ * Success
16378
+ */
16379
+ 200: {
16380
+ meta: Meta;
16381
+ links: Links;
16382
+ data: Array<OvertimeRuleResponseObject>;
16383
+ };
16384
+ };
16385
+ export type ListOvertimeRulesResponse = ListOvertimeRulesResponses[keyof ListOvertimeRulesResponses];
16386
+ export type CreateOvertimeRuleData = {
16387
+ body: OvertimeRuleParameters;
16388
+ path: {
16389
+ overtime_package_id: string;
16390
+ };
16391
+ query?: never;
16392
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules';
16393
+ };
16394
+ export type CreateOvertimeRuleErrors = {
16395
+ /**
16396
+ * Bad Request (unknown body key)
16397
+ */
16398
+ 400: Problem;
16399
+ /**
16400
+ * Forbidden
16401
+ */
16402
+ 403: Problem;
16403
+ /**
16404
+ * Not Found
16405
+ */
16406
+ 404: Problem;
16407
+ /**
16408
+ * Unprocessable Content
16409
+ */
16410
+ 422: Problem;
16411
+ };
16412
+ export type CreateOvertimeRuleError = CreateOvertimeRuleErrors[keyof CreateOvertimeRuleErrors];
16413
+ export type CreateOvertimeRuleResponses = {
16414
+ /**
16415
+ * Created
16416
+ */
16417
+ 201: OvertimeRuleResponseObject;
16418
+ };
16419
+ export type CreateOvertimeRuleResponse = CreateOvertimeRuleResponses[keyof CreateOvertimeRuleResponses];
16420
+ export type DeleteOvertimeRuleData = {
16421
+ body?: never;
16422
+ headers: {
16423
+ /**
16424
+ * Version validator this write is composed against — the `ETag` from a read of this rule, or `*` to write against whatever exists. See "Version validators" in the API overview.
16425
+ */
16426
+ 'If-Match': string;
16427
+ };
16428
+ path: {
16429
+ overtime_package_id: string;
16430
+ id: string;
16431
+ };
16432
+ query?: never;
16433
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{id}';
16434
+ };
16435
+ export type DeleteOvertimeRuleErrors = {
16436
+ /**
16437
+ * Forbidden
16438
+ */
16439
+ 403: Problem;
16440
+ /**
16441
+ * Not Found
16442
+ */
16443
+ 404: Problem;
16444
+ /**
16445
+ * Precondition Failed
16446
+ */
16447
+ 412: Problem;
16448
+ /**
16449
+ * Precondition Required
16450
+ */
16451
+ 428: Problem;
16452
+ };
16453
+ export type DeleteOvertimeRuleError = DeleteOvertimeRuleErrors[keyof DeleteOvertimeRuleErrors];
16454
+ export type DeleteOvertimeRuleResponses = {
16455
+ /**
16456
+ * Success
16457
+ */
16458
+ 200: OvertimeRuleResponseObject;
16459
+ };
16460
+ export type DeleteOvertimeRuleResponse = DeleteOvertimeRuleResponses[keyof DeleteOvertimeRuleResponses];
16461
+ export type GetOvertimeRuleData = {
16462
+ body?: never;
16463
+ path: {
16464
+ overtime_package_id: string;
16465
+ id: string;
16466
+ };
16467
+ query?: {
16468
+ /**
16469
+ * Read the version valid at this point in time. Defaults to now.
16470
+ */
16471
+ 'as_of[valid]'?: string;
16472
+ };
16473
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{id}';
16474
+ };
16475
+ export type GetOvertimeRuleErrors = {
16476
+ /**
16477
+ * Forbidden
16478
+ */
16479
+ 403: Problem;
16480
+ /**
16481
+ * Not Found
16482
+ */
16483
+ 404: Problem;
16484
+ };
16485
+ export type GetOvertimeRuleError = GetOvertimeRuleErrors[keyof GetOvertimeRuleErrors];
16486
+ export type GetOvertimeRuleResponses = {
16487
+ /**
16488
+ * Success
16489
+ */
16490
+ 200: OvertimeRuleResponseObject;
16491
+ };
16492
+ export type GetOvertimeRuleResponse = GetOvertimeRuleResponses[keyof GetOvertimeRuleResponses];
16493
+ export type UpdateOvertimeRuleData = {
16494
+ body: OvertimeRuleUpdateParameters;
16495
+ headers: {
16496
+ /**
16497
+ * Version validator this write is composed against — the `ETag` from a read of this rule, or `*` to write against whatever exists. See "Version validators" in the API overview.
16498
+ */
16499
+ 'If-Match': string;
16500
+ };
16501
+ path: {
16502
+ overtime_package_id: string;
16503
+ id: string;
16504
+ };
16505
+ query?: never;
16506
+ url: '/api/v1/overtime_packages/{overtime_package_id}/overtime_rules/{id}';
16507
+ };
16508
+ export type UpdateOvertimeRuleErrors = {
16509
+ /**
16510
+ * Bad Request (unknown body key)
16511
+ */
16512
+ 400: Problem;
16513
+ /**
16514
+ * Forbidden
16515
+ */
16516
+ 403: Problem;
16517
+ /**
16518
+ * Not Found
16519
+ */
16520
+ 404: Problem;
16521
+ /**
16522
+ * Conflict
16523
+ */
16524
+ 409: Problem;
16525
+ /**
16526
+ * Precondition Failed
16527
+ */
16528
+ 412: Problem;
16529
+ /**
16530
+ * Unprocessable Content
16531
+ */
16532
+ 422: Problem;
16533
+ /**
16534
+ * Precondition Required
16535
+ */
16536
+ 428: Problem;
16537
+ };
16538
+ export type UpdateOvertimeRuleError = UpdateOvertimeRuleErrors[keyof UpdateOvertimeRuleErrors];
16539
+ export type UpdateOvertimeRuleResponses = {
16540
+ /**
16541
+ * Success
16542
+ */
16543
+ 200: OvertimeRuleResponseObject;
16544
+ };
16545
+ export type UpdateOvertimeRuleResponse = UpdateOvertimeRuleResponses[keyof UpdateOvertimeRuleResponses];
16546
+ export type ListAggregateTimeImportsData = {
16547
+ body?: never;
16548
+ path: {
16549
+ pay_period_id: string;
16550
+ };
16551
+ query?: {
16552
+ /**
16553
+ * Filter by import status:
16554
+ * * `pending`
16555
+ * * `processing`
16556
+ * * `processed`
16557
+ * * `success`
16558
+ * * `failed`
16559
+ *
16560
+ */
16561
+ 'filter[status]'?: string;
16562
+ filter?: string;
16563
+ 'filter[unexpected]'?: string;
16564
+ 'filter[completed_at][gte]'?: string;
16565
+ 'filter[completed_at][lte]'?: string;
16566
+ 'filter[created_at][gte]'?: string;
16567
+ 'filter[created_at][lte]'?: string;
16568
+ 'filter[updated_at][gte]'?: string;
16569
+ 'filter[updated_at][lte]'?: string;
16570
+ /**
16571
+ * This pagination cursor corresponds to the cursor value found in the response in
16572
+ * `meta.page.next_cursor`.
16573
+ */
16574
+ 'page[cursor]'?: string;
16575
+ /**
16576
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
16577
+ */
16578
+ 'page[limit]'?: number;
16579
+ page?: string;
16580
+ };
16581
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/aggregate_times';
16582
+ };
16583
+ export type ListAggregateTimeImportsErrors = {
16584
+ /**
16585
+ * Bad Request
16586
+ */
16587
+ 400: Problem;
16588
+ /**
16589
+ * Forbidden
16590
+ */
16591
+ 403: Problem;
16592
+ /**
16593
+ * Unprocessable Content
16594
+ */
16595
+ 422: Problem;
16596
+ };
16597
+ export type ListAggregateTimeImportsError = ListAggregateTimeImportsErrors[keyof ListAggregateTimeImportsErrors];
16598
+ export type ListAggregateTimeImportsResponses = {
16599
+ /**
16600
+ * Success
16601
+ */
16602
+ 200: {
16603
+ meta: Meta;
16604
+ links: Links;
16605
+ data: Array<AggregateTimeImportResponseObject>;
16606
+ };
16607
+ };
16608
+ export type ListAggregateTimeImportsResponse = ListAggregateTimeImportsResponses[keyof ListAggregateTimeImportsResponses];
16609
+ export type CreateAggregateTimeImportData = {
16610
+ body: AggregateTimeImportParameters;
16611
+ path: {
16612
+ pay_period_id: string;
16613
+ };
16614
+ query?: never;
16615
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/aggregate_times';
16616
+ };
16617
+ export type CreateAggregateTimeImportErrors = {
16618
+ /**
16619
+ * Bad Request
16620
+ */
16621
+ 400: Problem;
16622
+ /**
16623
+ * Forbidden
16624
+ */
16625
+ 403: Problem;
16626
+ /**
16627
+ * Not Found
16628
+ */
16629
+ 404: Problem;
16630
+ /**
16631
+ * Conflict
16632
+ */
16633
+ 409: Problem;
16634
+ /**
16635
+ * Unprocessable Content
16636
+ */
16637
+ 422: Problem;
16638
+ };
16639
+ export type CreateAggregateTimeImportError = CreateAggregateTimeImportErrors[keyof CreateAggregateTimeImportErrors];
16640
+ export type CreateAggregateTimeImportResponses = {
16641
+ /**
16642
+ * Created
16643
+ */
16644
+ 201: AggregateTimeImportResponseObject;
16645
+ };
16646
+ export type CreateAggregateTimeImportResponse = CreateAggregateTimeImportResponses[keyof CreateAggregateTimeImportResponses];
16647
+ export type GetAggregateTimeImportData = {
16648
+ body?: never;
16649
+ path: {
16650
+ pay_period_id: string;
16651
+ id: string;
16652
+ };
16653
+ query?: never;
16654
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/aggregate_times/{id}';
16655
+ };
16656
+ export type GetAggregateTimeImportErrors = {
16657
+ /**
16658
+ * Forbidden
16659
+ */
16660
+ 403: Problem;
16661
+ /**
16662
+ * Not Found
16663
+ */
16664
+ 404: Problem;
16665
+ };
16666
+ export type GetAggregateTimeImportError = GetAggregateTimeImportErrors[keyof GetAggregateTimeImportErrors];
16667
+ export type GetAggregateTimeImportResponses = {
16668
+ /**
16669
+ * Success
16670
+ */
16671
+ 200: AggregateTimeImportResponseObject;
16672
+ };
16673
+ export type GetAggregateTimeImportResponse = GetAggregateTimeImportResponses[keyof GetAggregateTimeImportResponses];
16674
+ export type ListDsptchCprImportsData = {
16675
+ body?: never;
16676
+ path: {
16677
+ pay_period_id: string;
16678
+ };
16679
+ query?: {
16680
+ /**
16681
+ * Filter by import status:
16682
+ * * `pending`
16683
+ * * `processing`
16684
+ * * `processed`
16685
+ * * `success`
16686
+ * * `failed`
16687
+ *
16688
+ */
16689
+ 'filter[status]'?: string;
16690
+ filter?: string;
16691
+ 'filter[unexpected]'?: string;
16692
+ 'filter[completed_at][gte]'?: string;
16693
+ 'filter[completed_at][lte]'?: string;
16694
+ 'filter[created_at][gte]'?: string;
16695
+ 'filter[created_at][lte]'?: string;
16696
+ 'filter[updated_at][gte]'?: string;
16697
+ 'filter[updated_at][lte]'?: string;
16698
+ /**
16699
+ * This pagination cursor corresponds to the cursor value found in the response in
16700
+ * `meta.page.next_cursor`.
16701
+ */
16702
+ 'page[cursor]'?: string;
16703
+ /**
16704
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
16705
+ */
16706
+ 'page[limit]'?: number;
16707
+ page?: string;
16708
+ };
16709
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/dsptch_cprs';
16710
+ };
16711
+ export type ListDsptchCprImportsErrors = {
16712
+ /**
16713
+ * Bad Request
16714
+ */
16715
+ 400: Problem;
16716
+ /**
16717
+ * Forbidden
16718
+ */
16719
+ 403: Problem;
16720
+ /**
16721
+ * Unprocessable Content
16722
+ */
16723
+ 422: Problem;
16724
+ };
16725
+ export type ListDsptchCprImportsError = ListDsptchCprImportsErrors[keyof ListDsptchCprImportsErrors];
16726
+ export type ListDsptchCprImportsResponses = {
16727
+ /**
16728
+ * Success
16729
+ */
16730
+ 200: {
16731
+ meta: Meta;
16732
+ links: Links;
16733
+ data: Array<DsptchCprImportResponseObject>;
16734
+ };
16735
+ };
16736
+ export type ListDsptchCprImportsResponse = ListDsptchCprImportsResponses[keyof ListDsptchCprImportsResponses];
16737
+ export type CreateDsptchCprImportData = {
16738
+ body: DsptchCprImportParameters;
16739
+ path: {
16740
+ pay_period_id: string;
16741
+ };
16742
+ query?: never;
16743
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/dsptch_cprs';
16744
+ };
16745
+ export type CreateDsptchCprImportErrors = {
16746
+ /**
16747
+ * Bad Request
16748
+ */
16749
+ 400: Problem;
16750
+ /**
16751
+ * Forbidden
16752
+ */
16753
+ 403: Problem;
16754
+ /**
16755
+ * Not Found
16756
+ */
16757
+ 404: Problem;
16758
+ /**
16759
+ * Unprocessable Content
16760
+ */
16761
+ 422: Problem;
16762
+ };
16763
+ export type CreateDsptchCprImportError = CreateDsptchCprImportErrors[keyof CreateDsptchCprImportErrors];
16764
+ export type CreateDsptchCprImportResponses = {
16765
+ /**
16766
+ * Created
16767
+ */
16768
+ 201: DsptchCprImportResponseObject;
16769
+ };
16770
+ export type CreateDsptchCprImportResponse = CreateDsptchCprImportResponses[keyof CreateDsptchCprImportResponses];
16771
+ export type GetDsptchCprImportData = {
16772
+ body?: never;
16773
+ path: {
16774
+ pay_period_id: string;
16775
+ id: string;
16776
+ };
16777
+ query?: never;
16778
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/dsptch_cprs/{id}';
16779
+ };
16780
+ export type GetDsptchCprImportErrors = {
16781
+ /**
16782
+ * Forbidden
16783
+ */
16784
+ 403: Problem;
16785
+ /**
16786
+ * Not Found
16787
+ */
16788
+ 404: Problem;
16789
+ };
16790
+ export type GetDsptchCprImportError = GetDsptchCprImportErrors[keyof GetDsptchCprImportErrors];
16791
+ export type GetDsptchCprImportResponses = {
16792
+ /**
16793
+ * Success
16794
+ */
16795
+ 200: DsptchCprImportResponseObject;
16796
+ };
16797
+ export type GetDsptchCprImportResponse = GetDsptchCprImportResponses[keyof GetDsptchCprImportResponses];
16798
+ export type ListTimeEntryImportsData = {
16799
+ body?: never;
16800
+ path: {
16801
+ pay_period_id: string;
16802
+ };
16803
+ query?: {
16804
+ /**
16805
+ * Filter by import status:
16806
+ * * `pending`
16807
+ * * `processing`
16808
+ * * `processed`
16809
+ * * `success`
16810
+ * * `failed`
16811
+ *
16812
+ */
16813
+ 'filter[status]'?: string;
16814
+ filter?: string;
16815
+ 'filter[unexpected]'?: string;
16816
+ 'filter[completed_at][gte]'?: string;
16817
+ 'filter[completed_at][lte]'?: string;
16818
+ 'filter[created_at][gte]'?: string;
16819
+ 'filter[created_at][lte]'?: string;
16820
+ 'filter[updated_at][gte]'?: string;
16821
+ 'filter[updated_at][lte]'?: string;
16822
+ /**
16823
+ * This pagination cursor corresponds to the cursor value found in the response in
16824
+ * `meta.page.next_cursor`.
16825
+ */
16826
+ 'page[cursor]'?: string;
16827
+ /**
16828
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
16829
+ */
16830
+ 'page[limit]'?: number;
16831
+ page?: string;
16832
+ };
16833
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries';
16834
+ };
16835
+ export type ListTimeEntryImportsErrors = {
16836
+ /**
16837
+ * Bad Request
16838
+ */
16839
+ 400: Problem;
16840
+ /**
16841
+ * Forbidden
16842
+ */
16843
+ 403: Problem;
16844
+ /**
16845
+ * Unprocessable Content
16846
+ */
16847
+ 422: Problem;
16848
+ };
16849
+ export type ListTimeEntryImportsError = ListTimeEntryImportsErrors[keyof ListTimeEntryImportsErrors];
16850
+ export type ListTimeEntryImportsResponses = {
16851
+ /**
16852
+ * Success
16853
+ */
16854
+ 200: {
16855
+ meta: Meta;
16856
+ links: Links;
16857
+ data: Array<TimeEntryImportResponseObject>;
16858
+ };
16859
+ };
16860
+ export type ListTimeEntryImportsResponse = ListTimeEntryImportsResponses[keyof ListTimeEntryImportsResponses];
16861
+ export type CreateTimeEntryImportData = {
16862
+ body: TimeEntryImportParameters;
16863
+ path: {
16864
+ pay_period_id: string;
16865
+ };
16866
+ query?: never;
16867
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries';
16868
+ };
16869
+ export type CreateTimeEntryImportErrors = {
16870
+ /**
16871
+ * Bad Request
16872
+ */
16873
+ 400: Problem;
16874
+ /**
16875
+ * Forbidden
16876
+ */
16877
+ 403: Problem;
16878
+ /**
16879
+ * Not Found
16880
+ */
16881
+ 404: Problem;
16882
+ /**
16883
+ * Unprocessable Content
16884
+ */
16885
+ 422: Problem;
16886
+ };
16887
+ export type CreateTimeEntryImportError = CreateTimeEntryImportErrors[keyof CreateTimeEntryImportErrors];
16888
+ export type CreateTimeEntryImportResponses = {
16889
+ /**
16890
+ * Created
16891
+ */
16892
+ 201: TimeEntryImportResponseObject;
16893
+ };
16894
+ export type CreateTimeEntryImportResponse = CreateTimeEntryImportResponses[keyof CreateTimeEntryImportResponses];
16895
+ export type GetTimeEntryImportData = {
16896
+ body?: never;
16897
+ path: {
16898
+ pay_period_id: string;
16899
+ id: string;
16900
+ };
16901
+ query?: never;
16902
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries/{id}';
16903
+ };
16904
+ export type GetTimeEntryImportErrors = {
16905
+ /**
16906
+ * Forbidden
16907
+ */
16908
+ 403: Problem;
16909
+ /**
16910
+ * Not Found
16911
+ */
16912
+ 404: Problem;
16913
+ };
16914
+ export type GetTimeEntryImportError = GetTimeEntryImportErrors[keyof GetTimeEntryImportErrors];
16915
+ export type GetTimeEntryImportResponses = {
16916
+ /**
16917
+ * Success
16918
+ */
16919
+ 200: TimeEntryImportResponseObject;
16920
+ };
16921
+ export type GetTimeEntryImportResponse = GetTimeEntryImportResponses[keyof GetTimeEntryImportResponses];
16922
+ export type ListPayPeriodsData = {
16923
+ body?: never;
16924
+ path?: never;
16925
+ query?: {
16926
+ 'filter[start_time][gte]'?: string;
16927
+ 'filter[start_time][lte]'?: string;
16928
+ filter?: string;
16929
+ 'filter[unexpected]'?: string;
16930
+ /**
16931
+ * This pagination cursor corresponds to the cursor value found in the response in
16932
+ * `meta.page.next_cursor`.
16933
+ */
16934
+ 'page[cursor]'?: string;
16935
+ /**
16936
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
16937
+ */
16938
+ 'page[limit]'?: number;
16939
+ page?: string;
16940
+ };
16941
+ url: '/api/v1/pay_periods';
16942
+ };
16943
+ export type ListPayPeriodsErrors = {
16944
+ /**
16945
+ * Bad Request
16946
+ */
16947
+ 400: Problem;
16948
+ /**
16949
+ * Forbidden
16950
+ */
16951
+ 403: Problem;
16952
+ /**
16953
+ * Unprocessable Content
16954
+ */
16955
+ 422: Problem;
16956
+ };
16957
+ export type ListPayPeriodsError = ListPayPeriodsErrors[keyof ListPayPeriodsErrors];
16958
+ export type ListPayPeriodsResponses = {
16959
+ /**
16960
+ * Success
16961
+ */
16962
+ 200: PayPeriodsResponseObject;
16963
+ };
16964
+ export type ListPayPeriodsResponse = ListPayPeriodsResponses[keyof ListPayPeriodsResponses];
16965
+ export type ListCompensationElementsData = {
16966
+ body?: never;
16967
+ path?: never;
16968
+ query?: never;
16969
+ url: '/api/v1/payrolls/compensation_elements';
16970
+ };
16971
+ export type ListCompensationElementsErrors = {
16972
+ /**
16973
+ * Forbidden
16974
+ */
16975
+ 403: Problem;
16976
+ };
16977
+ export type ListCompensationElementsError = ListCompensationElementsErrors[keyof ListCompensationElementsErrors];
16978
+ export type ListCompensationElementsResponses = {
16979
+ /**
16980
+ * Success
16981
+ */
16982
+ 200: {
16983
+ meta: Meta;
16984
+ links: Links;
16985
+ data: Array<CompensationElementResponseObject>;
16986
+ };
16987
+ };
16988
+ export type ListCompensationElementsResponse = ListCompensationElementsResponses[keyof ListCompensationElementsResponses];
16989
+ export type GetCompensationElementData = {
15569
16990
  body?: never;
15570
16991
  path: {
15571
16992
  id: string;
@@ -16044,6 +17465,10 @@ export type UpdatePayrollRunErrors = {
16044
17465
  * Not Found
16045
17466
  */
16046
17467
  404: Problem;
17468
+ /**
17469
+ * Unprocessable Content
17470
+ */
17471
+ 422: Problem;
16047
17472
  };
16048
17473
  export type UpdatePayrollRunError = UpdatePayrollRunErrors[keyof UpdatePayrollRunErrors];
16049
17474
  export type UpdatePayrollRunResponses = {
@@ -17114,6 +18539,189 @@ export type UpdateCompanyUserDetailResponses = {
17114
18539
  200: PwaCompanyUserDetailsResponseObject;
17115
18540
  };
17116
18541
  export type UpdateCompanyUserDetailResponse = UpdateCompanyUserDetailResponses[keyof UpdateCompanyUserDetailResponses];
18542
+ export type ListApprenticeshipOccupationsData = {
18543
+ body?: never;
18544
+ path: {
18545
+ trade_id: string;
18546
+ };
18547
+ query?: {
18548
+ /**
18549
+ * Filter by apprenticeship occupation.
18550
+ */
18551
+ 'filter[apprenticeship_occupation_id]'?: string;
18552
+ /**
18553
+ * Filter by verdict.
18554
+ */
18555
+ 'filter[scope_status]'?: 'in_scope' | 'out_of_scope';
18556
+ /**
18557
+ * This pagination cursor corresponds to the cursor value found in the response in
18558
+ * `meta.page.next_cursor`.
18559
+ */
18560
+ 'page[cursor]'?: string;
18561
+ /**
18562
+ * Maximum number of records to return per page. Defaults to 20. A value above 100 is capped to 100 rather than rejected; a value that is zero, negative, or not an integer is rejected with a `400`.
18563
+ */
18564
+ 'page[limit]'?: number;
18565
+ page?: string;
18566
+ 'filter[created_at][gte]'?: string;
18567
+ 'filter[created_at][lte]'?: string;
18568
+ filter?: string;
18569
+ 'filter[unexpected]'?: string;
18570
+ };
18571
+ url: '/api/v1/pwa/trades/{trade_id}/apprenticeship_occupations';
18572
+ };
18573
+ export type ListApprenticeshipOccupationsErrors = {
18574
+ /**
18575
+ * Bad Request
18576
+ */
18577
+ 400: Problem;
18578
+ /**
18579
+ * Forbidden
18580
+ */
18581
+ 403: Problem;
18582
+ /**
18583
+ * Not Found
18584
+ */
18585
+ 404: Problem;
18586
+ /**
18587
+ * Unprocessable Content
18588
+ */
18589
+ 422: Problem;
18590
+ };
18591
+ export type ListApprenticeshipOccupationsError = ListApprenticeshipOccupationsErrors[keyof ListApprenticeshipOccupationsErrors];
18592
+ export type ListApprenticeshipOccupationsResponses = {
18593
+ /**
18594
+ * Success
18595
+ */
18596
+ 200: {
18597
+ meta: Meta;
18598
+ links: Links;
18599
+ data: Array<PwaTradeApprenticeshipOccupationResponseObject>;
18600
+ };
18601
+ };
18602
+ export type ListApprenticeshipOccupationsResponse = ListApprenticeshipOccupationsResponses[keyof ListApprenticeshipOccupationsResponses];
18603
+ export type CreateApprenticeshipOccupationData = {
18604
+ body: PwaTradeApprenticeshipOccupationCreateParameters;
18605
+ path: {
18606
+ trade_id: string;
18607
+ };
18608
+ query?: never;
18609
+ url: '/api/v1/pwa/trades/{trade_id}/apprenticeship_occupations';
18610
+ };
18611
+ export type CreateApprenticeshipOccupationErrors = {
18612
+ /**
18613
+ * Bad Request
18614
+ */
18615
+ 400: Problem;
18616
+ /**
18617
+ * Forbidden
18618
+ */
18619
+ 403: Problem;
18620
+ /**
18621
+ * Unprocessable Content
18622
+ */
18623
+ 422: Problem;
18624
+ };
18625
+ export type CreateApprenticeshipOccupationError = CreateApprenticeshipOccupationErrors[keyof CreateApprenticeshipOccupationErrors];
18626
+ export type CreateApprenticeshipOccupationResponses = {
18627
+ /**
18628
+ * Created
18629
+ */
18630
+ 201: PwaTradeApprenticeshipOccupationResponseObject;
18631
+ };
18632
+ export type CreateApprenticeshipOccupationResponse = CreateApprenticeshipOccupationResponses[keyof CreateApprenticeshipOccupationResponses];
18633
+ export type DeleteApprenticeshipOccupationData = {
18634
+ body?: never;
18635
+ path: {
18636
+ trade_id: string;
18637
+ id: string;
18638
+ };
18639
+ query?: never;
18640
+ url: '/api/v1/pwa/trades/{trade_id}/apprenticeship_occupations/{id}';
18641
+ };
18642
+ export type DeleteApprenticeshipOccupationErrors = {
18643
+ /**
18644
+ * Forbidden
18645
+ */
18646
+ 403: Problem;
18647
+ /**
18648
+ * Not Found
18649
+ */
18650
+ 404: Problem;
18651
+ };
18652
+ export type DeleteApprenticeshipOccupationError = DeleteApprenticeshipOccupationErrors[keyof DeleteApprenticeshipOccupationErrors];
18653
+ export type DeleteApprenticeshipOccupationResponses = {
18654
+ /**
18655
+ * Success
18656
+ */
18657
+ 200: PwaTradeApprenticeshipOccupationResponseObject;
18658
+ };
18659
+ export type DeleteApprenticeshipOccupationResponse = DeleteApprenticeshipOccupationResponses[keyof DeleteApprenticeshipOccupationResponses];
18660
+ export type UpdateApprenticeshipOccupationData = {
18661
+ body: PwaTradeApprenticeshipOccupationUpdateParameters;
18662
+ path: {
18663
+ trade_id: string;
18664
+ id: string;
18665
+ };
18666
+ query?: never;
18667
+ url: '/api/v1/pwa/trades/{trade_id}/apprenticeship_occupations/{id}';
18668
+ };
18669
+ export type UpdateApprenticeshipOccupationErrors = {
18670
+ /**
18671
+ * Bad Request
18672
+ */
18673
+ 400: Problem;
18674
+ /**
18675
+ * Forbidden
18676
+ */
18677
+ 403: Problem;
18678
+ /**
18679
+ * Unprocessable Content
18680
+ */
18681
+ 422: Problem;
18682
+ };
18683
+ export type UpdateApprenticeshipOccupationError = UpdateApprenticeshipOccupationErrors[keyof UpdateApprenticeshipOccupationErrors];
18684
+ export type UpdateApprenticeshipOccupationResponses = {
18685
+ /**
18686
+ * Success
18687
+ */
18688
+ 200: PwaTradeApprenticeshipOccupationResponseObject;
18689
+ };
18690
+ export type UpdateApprenticeshipOccupationResponse = UpdateApprenticeshipOccupationResponses[keyof UpdateApprenticeshipOccupationResponses];
18691
+ export type CreateMergeData = {
18692
+ body: PwaTradeMergeParameters;
18693
+ path: {
18694
+ trade_id: string;
18695
+ };
18696
+ query?: never;
18697
+ url: '/api/v1/pwa/trades/{trade_id}/merges';
18698
+ };
18699
+ export type CreateMergeErrors = {
18700
+ /**
18701
+ * Bad Request
18702
+ */
18703
+ 400: Problem;
18704
+ /**
18705
+ * Forbidden
18706
+ */
18707
+ 403: Problem;
18708
+ /**
18709
+ * Not Found
18710
+ */
18711
+ 404: Problem;
18712
+ /**
18713
+ * Unprocessable Content
18714
+ */
18715
+ 422: Problem;
18716
+ };
18717
+ export type CreateMergeError = CreateMergeErrors[keyof CreateMergeErrors];
18718
+ export type CreateMergeResponses = {
18719
+ /**
18720
+ * Success
18721
+ */
18722
+ 200: PwaTradeResponseObject;
18723
+ };
18724
+ export type CreateMergeResponse = CreateMergeResponses[keyof CreateMergeResponses];
17117
18725
  export type ListTradesData = {
17118
18726
  body?: never;
17119
18727
  path?: never;
@@ -17123,9 +18731,13 @@ export type ListTradesData = {
17123
18731
  */
17124
18732
  'filter[project_id]'?: string;
17125
18733
  /**
17126
- * Filter by owning job
18734
+ * Filter by owning job. Only a standalone job owns trades — a job inside a project consumes its project root's pool, so filter by that root's `project_id` instead. Filtering by such a job's own id returns an empty list.
17127
18735
  */
17128
18736
  'filter[job_id]'?: string;
18737
+ /**
18738
+ * Fuzzy match on the craft name, e.g. `Electrican` finds `Electrician`.
18739
+ */
18740
+ 'filter[name]'?: string;
17129
18741
  'filter[created_at][gte]'?: string;
17130
18742
  'filter[created_at][lte]'?: string;
17131
18743
  'filter[updated_at][gte]'?: string;
@@ -17171,6 +18783,36 @@ export type ListTradesResponses = {
17171
18783
  };
17172
18784
  };
17173
18785
  export type ListTradesResponse = ListTradesResponses[keyof ListTradesResponses];
18786
+ export type DeleteTradeData = {
18787
+ body?: never;
18788
+ path: {
18789
+ id: string;
18790
+ };
18791
+ query?: never;
18792
+ url: '/api/v1/pwa/trades/{id}';
18793
+ };
18794
+ export type DeleteTradeErrors = {
18795
+ /**
18796
+ * Forbidden
18797
+ */
18798
+ 403: Problem;
18799
+ /**
18800
+ * Not Found
18801
+ */
18802
+ 404: Problem;
18803
+ /**
18804
+ * Unprocessable Content
18805
+ */
18806
+ 422: Problem;
18807
+ };
18808
+ export type DeleteTradeError = DeleteTradeErrors[keyof DeleteTradeErrors];
18809
+ export type DeleteTradeResponses = {
18810
+ /**
18811
+ * Success
18812
+ */
18813
+ 200: PwaTradeResponseObject;
18814
+ };
18815
+ export type DeleteTradeResponse = DeleteTradeResponses[keyof DeleteTradeResponses];
17174
18816
  export type GetTradeData = {
17175
18817
  body?: never;
17176
18818
  path: {
@@ -17197,6 +18839,40 @@ export type GetTradeResponses = {
17197
18839
  200: PwaTradeResponseObject;
17198
18840
  };
17199
18841
  export type GetTradeResponse = GetTradeResponses[keyof GetTradeResponses];
18842
+ export type UpdateTradeData = {
18843
+ body: PwaTradeUpdateParameters;
18844
+ path: {
18845
+ id: string;
18846
+ };
18847
+ query?: never;
18848
+ url: '/api/v1/pwa/trades/{id}';
18849
+ };
18850
+ export type UpdateTradeErrors = {
18851
+ /**
18852
+ * Bad Request
18853
+ */
18854
+ 400: Problem;
18855
+ /**
18856
+ * Forbidden
18857
+ */
18858
+ 403: Problem;
18859
+ /**
18860
+ * Not Found
18861
+ */
18862
+ 404: Problem;
18863
+ /**
18864
+ * Unprocessable Content
18865
+ */
18866
+ 422: Problem;
18867
+ };
18868
+ export type UpdateTradeError = UpdateTradeErrors[keyof UpdateTradeErrors];
18869
+ export type UpdateTradeResponses = {
18870
+ /**
18871
+ * Success
18872
+ */
18873
+ 200: PwaTradeResponseObject;
18874
+ };
18875
+ export type UpdateTradeResponse = UpdateTradeResponses[keyof UpdateTradeResponses];
17200
18876
  export type CreateFormAssignmentTaskData = {
17201
18877
  body?: {
17202
18878
  form_definition_id: string;
@@ -17536,6 +19212,10 @@ export type ListTimeCardPerDiemsErrors = {
17536
19212
  * Forbidden
17537
19213
  */
17538
19214
  403: Problem;
19215
+ /**
19216
+ * Not Found
19217
+ */
19218
+ 404: Problem;
17539
19219
  };
17540
19220
  export type ListTimeCardPerDiemsError = ListTimeCardPerDiemsErrors[keyof ListTimeCardPerDiemsErrors];
17541
19221
  export type ListTimeCardPerDiemsResponses = {