@dsptch-work/api-client 0.14.0 → 0.16.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.
@@ -176,6 +176,12 @@ export type Problem = {
176
176
  *
177
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.
178
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
+ *
179
185
  * ### product_archived
180
186
  *
181
187
  * **Product Archived**
@@ -351,7 +357,7 @@ export type Problem = {
351
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.
352
358
  *
353
359
  */
354
- 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' | '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';
355
361
  export type ApiKeyScopeResponseObject = {
356
362
  resource: string;
357
363
  action: 'read' | 'create' | 'update' | 'delete';
@@ -364,7 +370,7 @@ export type DirectUploadParameters = {
364
370
  /**
365
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.
366
372
  */
367
- resource: 'assets.items' | 'assets.items.documents' | 'assets.items.service_events' | 'assets.products' | 'assets.vendors' | 'pay_periods.imports.time_entries' | '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' | 'payrolls.payroll_runs.imports.paystubs' | 'users';
368
374
  /**
369
375
  * Metadata describing the file being registered, before its bytes are uploaded.
370
376
  */
@@ -2472,6 +2478,15 @@ export type PwaTradeUpdateParameters = {
2472
2478
  */
2473
2479
  name?: string;
2474
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
+ };
2475
2490
  /**
2476
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.
2477
2492
  */
@@ -2717,73 +2732,73 @@ export type JobResponseObject = {
2717
2732
  [key: string]: unknown;
2718
2733
  };
2719
2734
  /**
2720
- * 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.
2721
2736
  */
2722
2737
  export type PwaJobDetailsResponseObject = {
2723
2738
  /**
2724
- * 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.
2725
2740
  */
2726
- dir_awarding_body_id: string | null;
2741
+ contractor_type: 'prime_contractor' | 'sub_contractor' | null;
2727
2742
  /**
2728
- * 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.
2729
2744
  */
2730
- dir_project_id: string | null;
2745
+ pay_full_cash_fringe_by_default: boolean;
2731
2746
  /**
2732
- * 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.
2733
2748
  */
2734
- dir_project_name: string | null;
2749
+ dir_awarding_body_id?: string | null;
2735
2750
  /**
2736
- * 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.
2737
2752
  */
2738
- dir_contract_id: string | null;
2753
+ dir_project_id?: string | null;
2739
2754
  /**
2740
- * 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.
2741
2756
  */
2742
- dir_project_awarding_body_name: string | null;
2757
+ dir_project_name?: string | null;
2743
2758
  /**
2744
- * 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.
2745
2760
  */
2746
- dir_project_number: string | null;
2761
+ dir_contract_id?: string | null;
2747
2762
  /**
2748
- * 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.
2749
2764
  */
2750
- il_dol_project_id: string | null;
2765
+ dir_project_awarding_body_name?: string | null;
2751
2766
  /**
2752
- * 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.
2753
2768
  */
2754
- il_dol_state_capital_funds: boolean | null;
2769
+ dir_project_number?: string | null;
2755
2770
  /**
2756
- * 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.
2757
2772
  */
2758
- il_dol_public_body_name: string | null;
2773
+ il_dol_project_id?: string | null;
2759
2774
  /**
2760
- * 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.
2761
2776
  */
2762
- il_dol_public_body_contact_id: string | null;
2777
+ il_dol_state_capital_funds?: boolean | null;
2763
2778
  /**
2764
- * 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.
2765
2780
  */
2766
- il_dol_public_body_address_id: string | null;
2781
+ il_dol_public_body_name?: string | null;
2767
2782
  /**
2768
- * 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.
2769
2784
  */
2770
- il_dol_contract_number: string | null;
2785
+ il_dol_public_body_contact_id?: string | null;
2771
2786
  /**
2772
- * 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.
2773
2788
  */
2774
- il_shines_project_id: string | null;
2789
+ il_dol_public_body_address_id?: string | null;
2775
2790
  /**
2776
- * 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.
2777
2792
  */
2778
- ny_dol_prc_number: string | null;
2793
+ il_dol_contract_number?: string | null;
2779
2794
  /**
2780
- * 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.
2781
2796
  */
2782
- pay_full_cash_fringe_by_default: boolean;
2797
+ il_shines_project_id?: string | null;
2783
2798
  /**
2784
- * 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.
2785
2800
  */
2786
- contractor_type: string | null;
2801
+ ny_dol_prc_number?: string | null;
2787
2802
  } | null;
2788
2803
  /**
2789
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.
@@ -2806,7 +2821,7 @@ export type JobParameters = {
2806
2821
  */
2807
2822
  requested_by_company_id: string;
2808
2823
  /**
2809
- * ID of the user creating the job. Required.
2824
+ * ID of the user creating the job. Required on create and immutable thereafter — an update that sets, changes, or clears it is rejected.
2810
2825
  */
2811
2826
  created_by_user_id: string;
2812
2827
  /**
@@ -2954,17 +2969,17 @@ export type JobParameters = {
2954
2969
  value?: string | null;
2955
2970
  }> | null;
2956
2971
  /**
2957
- * 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.
2958
2973
  */
2959
2974
  pwa_details?: {
2960
2975
  /**
2961
2976
  * Role of the company on this job for PWA reporting: one of prime_contractor or sub_contractor; null when unset.
2962
2977
  */
2963
- contractor_type?: string | null;
2978
+ contractor_type?: 'prime_contractor' | 'sub_contractor' | null;
2964
2979
  /**
2965
- * 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.
2966
2981
  */
2967
- pay_full_cash_fringe_by_default?: boolean | null;
2982
+ pay_full_cash_fringe_by_default?: boolean;
2968
2983
  /**
2969
2984
  * California DIR (Department of Industrial Relations) awarding-body ID; null when not applicable.
2970
2985
  */
@@ -3001,14 +3016,6 @@ export type JobParameters = {
3001
3016
  * Illinois DOL public-body name; null when not applicable.
3002
3017
  */
3003
3018
  il_dol_public_body_name?: string | null;
3004
- /**
3005
- * Illinois DOL contract number; null when not applicable.
3006
- */
3007
- il_dol_contract_number?: string | null;
3008
- /**
3009
- * Illinois SHINES project ID; null when not applicable.
3010
- */
3011
- il_shines_project_id?: string | null;
3012
3019
  /**
3013
3020
  * ID of the Illinois DOL public-body contact; null when not applicable.
3014
3021
  */
@@ -3017,11 +3024,19 @@ export type JobParameters = {
3017
3024
  * ID of the Illinois DOL public-body address; null when not applicable.
3018
3025
  */
3019
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;
3020
3035
  /**
3021
3036
  * New York DOL prevailing-rate-case (PRC) number, a 10-digit identifier; null when not applicable.
3022
3037
  */
3023
3038
  ny_dol_prc_number?: string | null;
3024
- } | null;
3039
+ };
3025
3040
  [key: string]: unknown;
3026
3041
  };
3027
3042
  /**
@@ -4579,11 +4594,11 @@ export type PayPeriodsResponseObject = {
4579
4594
  }>;
4580
4595
  };
4581
4596
  /**
4582
- * One problem found while processing an accepted import.
4597
+ * One problem found while processing an accepted import, whatever its type.
4583
4598
  */
4584
- export type TimeEntryImportProcessingError = {
4599
+ export type ImportProcessingError = {
4585
4600
  /**
4586
- * What went wrong, as a stable slug — `no_active_employee`, `time_overlap` and so on. `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.
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.
4587
4602
  */
4588
4603
  code: string;
4589
4604
  /**
@@ -4601,6 +4616,156 @@ export type TimeEntryImportProcessingError = {
4601
4616
  [key: string]: unknown;
4602
4617
  };
4603
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.
4710
+ *
4711
+ * Because acceptance is synchronous but the write happens in the background, only one import at a time is accepted for a pay period: while an earlier one is still `pending` or `processing`, a second answers 409 naming `import_in_progress`, and nothing is written. Poll the earlier import until it reports, then submit again.
4712
+ */
4713
+ export type DsptchCprImportParameters = {
4714
+ /**
4715
+ * 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.
4716
+ */
4717
+ file_signed_id: string;
4718
+ };
4719
+ /**
4720
+ * One bulk upload of paystub amounts against a payroll run, and how it turned out.
4721
+ */
4722
+ export type PaystubImportResponseObject = {
4723
+ /**
4724
+ * Unique identifier.
4725
+ */
4726
+ id: string;
4727
+ /**
4728
+ * The payroll run the amounts were imported against.
4729
+ */
4730
+ payrolls_payroll_run_id: string;
4731
+ /**
4732
+ * Where the import has got to. `pending` until the background job starts, then `success` or `failed`.
4733
+ */
4734
+ status: 'pending' | 'processing' | 'processed' | 'success' | 'failed';
4735
+ /**
4736
+ * 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.
4737
+ */
4738
+ processed_rows_count: number;
4739
+ /**
4740
+ * Every problem found after the import was accepted, oldest row first; empty when there were none, and always empty while the import is `pending`.
4741
+ */
4742
+ processing_errors: Array<ImportProcessingError>;
4743
+ /**
4744
+ * When processing finished; null while the import is still pending.
4745
+ */
4746
+ completed_at: string | null;
4747
+ /**
4748
+ * When the import was submitted.
4749
+ */
4750
+ created_at: string;
4751
+ /**
4752
+ * When the import was last modified.
4753
+ */
4754
+ updated_at: string;
4755
+ };
4756
+ /**
4757
+ * Submit a spreadsheet of paystub amounts for a payroll run. The run's pay schedule must not be connected to a payroll provider; where one is configured the paystubs come from that connection and a file is refused. Each row is one amount: payroll_id names the employee, field_name names the pay, deduction or contribution the amount belongs to, and amount carries the value. A field_name the company has not mapped before is created on first use. Schedules that do not already record the contributor on that mapping also require a contributor column of EMPLOYEE or EMPLOYER; where the mapping carries it, the column is not read and its presence is refused. All of the columns the schedule expects must be present as headers and carry a value on every row, or the file is refused naming what is missing. 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.
4758
+ *
4759
+ * Submitting the same pay twice is refused rather than doubled: an import will not write onto a time card that already carries paystub data, so a retry after a submission that already succeeded answers 422 naming `time_card_has_paystub_data`, and no line item is written. A unique index on the line items backs that guard at the database.
4760
+ *
4761
+ * Because acceptance is synchronous but the write happens in the background, only one import at a time is accepted for a payroll run: while an earlier one is still `pending`, a second answers 409 naming `import_in_progress`, and nothing is written. Poll the earlier import until it reports, then submit again.
4762
+ */
4763
+ export type PaystubImportParameters = {
4764
+ /**
4765
+ * A signed_id from POST /api/v1/direct_uploads identifying the uploaded spreadsheet. Register the upload naming `payrolls.payroll_runs.imports.paystubs` — a signed_id issued for any other resource will not resolve here.
4766
+ */
4767
+ file_signed_id: string;
4768
+ };
4604
4769
  /**
4605
4770
  * One bulk upload of time entries against a pay period, and how it turned out.
4606
4771
  */
@@ -4624,7 +4789,7 @@ export type TimeEntryImportResponseObject = {
4624
4789
  /**
4625
4790
  * Every problem found after the import was accepted, oldest row first; empty when there were none, and always empty while the import is `pending`.
4626
4791
  */
4627
- processing_errors: Array<TimeEntryImportProcessingError>;
4792
+ processing_errors: Array<ImportProcessingError>;
4628
4793
  /**
4629
4794
  * When processing finished; null while the import is still pending.
4630
4795
  */
@@ -4640,6 +4805,8 @@ export type TimeEntryImportResponseObject = {
4640
4805
  };
4641
4806
  /**
4642
4807
  * 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.
4808
+ *
4809
+ * Because acceptance is synchronous but the write happens in the background, only one import at a time is accepted for a pay period: while an earlier one is still `pending` or `processing`, a second answers 409 naming `import_in_progress`, and nothing is written. Poll the earlier import until it reports, then submit again.
4643
4810
  */
4644
4811
  export type TimeEntryImportParameters = {
4645
4812
  /**
@@ -15694,6 +15861,10 @@ export type CreateJobData = {
15694
15861
  url: '/api/v1/jobs';
15695
15862
  };
15696
15863
  export type CreateJobErrors = {
15864
+ /**
15865
+ * Bad Request
15866
+ */
15867
+ 400: Problem;
15697
15868
  /**
15698
15869
  * Forbidden
15699
15870
  */
@@ -15746,6 +15917,10 @@ export type UpdateJobData = {
15746
15917
  url: '/api/v1/jobs/{id}';
15747
15918
  };
15748
15919
  export type UpdateJobErrors = {
15920
+ /**
15921
+ * Bad Request
15922
+ */
15923
+ 400: Problem;
15749
15924
  /**
15750
15925
  * Forbidden
15751
15926
  */
@@ -16422,7 +16597,7 @@ export type UpdateOvertimeRuleResponses = {
16422
16597
  200: OvertimeRuleResponseObject;
16423
16598
  };
16424
16599
  export type UpdateOvertimeRuleResponse = UpdateOvertimeRuleResponses[keyof UpdateOvertimeRuleResponses];
16425
- export type ListTimeEntryImportsData = {
16600
+ export type ListAggregateTimeImportsData = {
16426
16601
  body?: never;
16427
16602
  path: {
16428
16603
  pay_period_id: string;
@@ -16457,9 +16632,9 @@ export type ListTimeEntryImportsData = {
16457
16632
  'page[limit]'?: number;
16458
16633
  page?: string;
16459
16634
  };
16460
- url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries';
16635
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/aggregate_times';
16461
16636
  };
16462
- export type ListTimeEntryImportsErrors = {
16637
+ export type ListAggregateTimeImportsErrors = {
16463
16638
  /**
16464
16639
  * Bad Request
16465
16640
  */
@@ -16473,27 +16648,27 @@ export type ListTimeEntryImportsErrors = {
16473
16648
  */
16474
16649
  422: Problem;
16475
16650
  };
16476
- export type ListTimeEntryImportsError = ListTimeEntryImportsErrors[keyof ListTimeEntryImportsErrors];
16477
- export type ListTimeEntryImportsResponses = {
16651
+ export type ListAggregateTimeImportsError = ListAggregateTimeImportsErrors[keyof ListAggregateTimeImportsErrors];
16652
+ export type ListAggregateTimeImportsResponses = {
16478
16653
  /**
16479
16654
  * Success
16480
16655
  */
16481
16656
  200: {
16482
16657
  meta: Meta;
16483
16658
  links: Links;
16484
- data: Array<TimeEntryImportResponseObject>;
16659
+ data: Array<AggregateTimeImportResponseObject>;
16485
16660
  };
16486
16661
  };
16487
- export type ListTimeEntryImportsResponse = ListTimeEntryImportsResponses[keyof ListTimeEntryImportsResponses];
16488
- export type CreateTimeEntryImportData = {
16489
- body: TimeEntryImportParameters;
16662
+ export type ListAggregateTimeImportsResponse = ListAggregateTimeImportsResponses[keyof ListAggregateTimeImportsResponses];
16663
+ export type CreateAggregateTimeImportData = {
16664
+ body: AggregateTimeImportParameters;
16490
16665
  path: {
16491
16666
  pay_period_id: string;
16492
16667
  };
16493
16668
  query?: never;
16494
- url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries';
16669
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/aggregate_times';
16495
16670
  };
16496
- export type CreateTimeEntryImportErrors = {
16671
+ export type CreateAggregateTimeImportErrors = {
16497
16672
  /**
16498
16673
  * Bad Request
16499
16674
  */
@@ -16506,29 +16681,33 @@ export type CreateTimeEntryImportErrors = {
16506
16681
  * Not Found
16507
16682
  */
16508
16683
  404: Problem;
16684
+ /**
16685
+ * Conflict
16686
+ */
16687
+ 409: Problem;
16509
16688
  /**
16510
16689
  * Unprocessable Content
16511
16690
  */
16512
16691
  422: Problem;
16513
16692
  };
16514
- export type CreateTimeEntryImportError = CreateTimeEntryImportErrors[keyof CreateTimeEntryImportErrors];
16515
- export type CreateTimeEntryImportResponses = {
16693
+ export type CreateAggregateTimeImportError = CreateAggregateTimeImportErrors[keyof CreateAggregateTimeImportErrors];
16694
+ export type CreateAggregateTimeImportResponses = {
16516
16695
  /**
16517
16696
  * Created
16518
16697
  */
16519
- 201: TimeEntryImportResponseObject;
16698
+ 201: AggregateTimeImportResponseObject;
16520
16699
  };
16521
- export type CreateTimeEntryImportResponse = CreateTimeEntryImportResponses[keyof CreateTimeEntryImportResponses];
16522
- export type GetTimeEntryImportData = {
16700
+ export type CreateAggregateTimeImportResponse = CreateAggregateTimeImportResponses[keyof CreateAggregateTimeImportResponses];
16701
+ export type GetAggregateTimeImportData = {
16523
16702
  body?: never;
16524
16703
  path: {
16525
16704
  pay_period_id: string;
16526
16705
  id: string;
16527
16706
  };
16528
16707
  query?: never;
16529
- url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries/{id}';
16708
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/aggregate_times/{id}';
16530
16709
  };
16531
- export type GetTimeEntryImportErrors = {
16710
+ export type GetAggregateTimeImportErrors = {
16532
16711
  /**
16533
16712
  * Forbidden
16534
16713
  */
@@ -16538,22 +16717,38 @@ export type GetTimeEntryImportErrors = {
16538
16717
  */
16539
16718
  404: Problem;
16540
16719
  };
16541
- export type GetTimeEntryImportError = GetTimeEntryImportErrors[keyof GetTimeEntryImportErrors];
16542
- export type GetTimeEntryImportResponses = {
16720
+ export type GetAggregateTimeImportError = GetAggregateTimeImportErrors[keyof GetAggregateTimeImportErrors];
16721
+ export type GetAggregateTimeImportResponses = {
16543
16722
  /**
16544
16723
  * Success
16545
16724
  */
16546
- 200: TimeEntryImportResponseObject;
16725
+ 200: AggregateTimeImportResponseObject;
16547
16726
  };
16548
- export type GetTimeEntryImportResponse = GetTimeEntryImportResponses[keyof GetTimeEntryImportResponses];
16549
- export type ListPayPeriodsData = {
16727
+ export type GetAggregateTimeImportResponse = GetAggregateTimeImportResponses[keyof GetAggregateTimeImportResponses];
16728
+ export type ListDsptchCprImportsData = {
16550
16729
  body?: never;
16551
- path?: never;
16730
+ path: {
16731
+ pay_period_id: string;
16732
+ };
16552
16733
  query?: {
16553
- 'filter[start_time][gte]'?: string;
16554
- 'filter[start_time][lte]'?: string;
16734
+ /**
16735
+ * Filter by import status:
16736
+ * * `pending`
16737
+ * * `processing`
16738
+ * * `processed`
16739
+ * * `success`
16740
+ * * `failed`
16741
+ *
16742
+ */
16743
+ 'filter[status]'?: string;
16555
16744
  filter?: string;
16556
16745
  'filter[unexpected]'?: string;
16746
+ 'filter[completed_at][gte]'?: string;
16747
+ 'filter[completed_at][lte]'?: string;
16748
+ 'filter[created_at][gte]'?: string;
16749
+ 'filter[created_at][lte]'?: string;
16750
+ 'filter[updated_at][gte]'?: string;
16751
+ 'filter[updated_at][lte]'?: string;
16557
16752
  /**
16558
16753
  * This pagination cursor corresponds to the cursor value found in the response in
16559
16754
  * `meta.page.next_cursor`.
@@ -16565,9 +16760,9 @@ export type ListPayPeriodsData = {
16565
16760
  'page[limit]'?: number;
16566
16761
  page?: string;
16567
16762
  };
16568
- url: '/api/v1/pay_periods';
16763
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/dsptch_cprs';
16569
16764
  };
16570
- export type ListPayPeriodsErrors = {
16765
+ export type ListDsptchCprImportsErrors = {
16571
16766
  /**
16572
16767
  * Bad Request
16573
16768
  */
@@ -16581,47 +16776,31 @@ export type ListPayPeriodsErrors = {
16581
16776
  */
16582
16777
  422: Problem;
16583
16778
  };
16584
- export type ListPayPeriodsError = ListPayPeriodsErrors[keyof ListPayPeriodsErrors];
16585
- export type ListPayPeriodsResponses = {
16586
- /**
16587
- * Success
16588
- */
16589
- 200: PayPeriodsResponseObject;
16590
- };
16591
- export type ListPayPeriodsResponse = ListPayPeriodsResponses[keyof ListPayPeriodsResponses];
16592
- export type ListCompensationElementsData = {
16593
- body?: never;
16594
- path?: never;
16595
- query?: never;
16596
- url: '/api/v1/payrolls/compensation_elements';
16597
- };
16598
- export type ListCompensationElementsErrors = {
16599
- /**
16600
- * Forbidden
16601
- */
16602
- 403: Problem;
16603
- };
16604
- export type ListCompensationElementsError = ListCompensationElementsErrors[keyof ListCompensationElementsErrors];
16605
- export type ListCompensationElementsResponses = {
16779
+ export type ListDsptchCprImportsError = ListDsptchCprImportsErrors[keyof ListDsptchCprImportsErrors];
16780
+ export type ListDsptchCprImportsResponses = {
16606
16781
  /**
16607
16782
  * Success
16608
16783
  */
16609
16784
  200: {
16610
16785
  meta: Meta;
16611
16786
  links: Links;
16612
- data: Array<CompensationElementResponseObject>;
16787
+ data: Array<DsptchCprImportResponseObject>;
16613
16788
  };
16614
16789
  };
16615
- export type ListCompensationElementsResponse = ListCompensationElementsResponses[keyof ListCompensationElementsResponses];
16616
- export type GetCompensationElementData = {
16617
- body?: never;
16790
+ export type ListDsptchCprImportsResponse = ListDsptchCprImportsResponses[keyof ListDsptchCprImportsResponses];
16791
+ export type CreateDsptchCprImportData = {
16792
+ body: DsptchCprImportParameters;
16618
16793
  path: {
16619
- id: string;
16794
+ pay_period_id: string;
16620
16795
  };
16621
16796
  query?: never;
16622
- url: '/api/v1/payrolls/compensation_elements/{id}';
16797
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/dsptch_cprs';
16623
16798
  };
16624
- export type GetCompensationElementErrors = {
16799
+ export type CreateDsptchCprImportErrors = {
16800
+ /**
16801
+ * Bad Request
16802
+ */
16803
+ 400: Problem;
16625
16804
  /**
16626
16805
  * Forbidden
16627
16806
  */
@@ -16630,14 +16809,270 @@ export type GetCompensationElementErrors = {
16630
16809
  * Not Found
16631
16810
  */
16632
16811
  404: Problem;
16633
- };
16634
- export type GetCompensationElementError = GetCompensationElementErrors[keyof GetCompensationElementErrors];
16635
- export type GetCompensationElementResponses = {
16636
16812
  /**
16637
- * Success
16813
+ * Conflict
16638
16814
  */
16639
- 200: CompensationElementResponseObject;
16640
- };
16815
+ 409: Problem;
16816
+ /**
16817
+ * Unprocessable Content
16818
+ */
16819
+ 422: Problem;
16820
+ };
16821
+ export type CreateDsptchCprImportError = CreateDsptchCprImportErrors[keyof CreateDsptchCprImportErrors];
16822
+ export type CreateDsptchCprImportResponses = {
16823
+ /**
16824
+ * Created
16825
+ */
16826
+ 201: DsptchCprImportResponseObject;
16827
+ };
16828
+ export type CreateDsptchCprImportResponse = CreateDsptchCprImportResponses[keyof CreateDsptchCprImportResponses];
16829
+ export type GetDsptchCprImportData = {
16830
+ body?: never;
16831
+ path: {
16832
+ pay_period_id: string;
16833
+ id: string;
16834
+ };
16835
+ query?: never;
16836
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/dsptch_cprs/{id}';
16837
+ };
16838
+ export type GetDsptchCprImportErrors = {
16839
+ /**
16840
+ * Forbidden
16841
+ */
16842
+ 403: Problem;
16843
+ /**
16844
+ * Not Found
16845
+ */
16846
+ 404: Problem;
16847
+ };
16848
+ export type GetDsptchCprImportError = GetDsptchCprImportErrors[keyof GetDsptchCprImportErrors];
16849
+ export type GetDsptchCprImportResponses = {
16850
+ /**
16851
+ * Success
16852
+ */
16853
+ 200: DsptchCprImportResponseObject;
16854
+ };
16855
+ export type GetDsptchCprImportResponse = GetDsptchCprImportResponses[keyof GetDsptchCprImportResponses];
16856
+ export type ListTimeEntryImportsData = {
16857
+ body?: never;
16858
+ path: {
16859
+ pay_period_id: string;
16860
+ };
16861
+ query?: {
16862
+ /**
16863
+ * Filter by import status:
16864
+ * * `pending`
16865
+ * * `processing`
16866
+ * * `processed`
16867
+ * * `success`
16868
+ * * `failed`
16869
+ *
16870
+ */
16871
+ 'filter[status]'?: string;
16872
+ filter?: string;
16873
+ 'filter[unexpected]'?: string;
16874
+ 'filter[completed_at][gte]'?: string;
16875
+ 'filter[completed_at][lte]'?: string;
16876
+ 'filter[created_at][gte]'?: string;
16877
+ 'filter[created_at][lte]'?: string;
16878
+ 'filter[updated_at][gte]'?: string;
16879
+ 'filter[updated_at][lte]'?: string;
16880
+ /**
16881
+ * This pagination cursor corresponds to the cursor value found in the response in
16882
+ * `meta.page.next_cursor`.
16883
+ */
16884
+ 'page[cursor]'?: string;
16885
+ /**
16886
+ * 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`.
16887
+ */
16888
+ 'page[limit]'?: number;
16889
+ page?: string;
16890
+ };
16891
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries';
16892
+ };
16893
+ export type ListTimeEntryImportsErrors = {
16894
+ /**
16895
+ * Bad Request
16896
+ */
16897
+ 400: Problem;
16898
+ /**
16899
+ * Forbidden
16900
+ */
16901
+ 403: Problem;
16902
+ /**
16903
+ * Unprocessable Content
16904
+ */
16905
+ 422: Problem;
16906
+ };
16907
+ export type ListTimeEntryImportsError = ListTimeEntryImportsErrors[keyof ListTimeEntryImportsErrors];
16908
+ export type ListTimeEntryImportsResponses = {
16909
+ /**
16910
+ * Success
16911
+ */
16912
+ 200: {
16913
+ meta: Meta;
16914
+ links: Links;
16915
+ data: Array<TimeEntryImportResponseObject>;
16916
+ };
16917
+ };
16918
+ export type ListTimeEntryImportsResponse = ListTimeEntryImportsResponses[keyof ListTimeEntryImportsResponses];
16919
+ export type CreateTimeEntryImportData = {
16920
+ body: TimeEntryImportParameters;
16921
+ path: {
16922
+ pay_period_id: string;
16923
+ };
16924
+ query?: never;
16925
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries';
16926
+ };
16927
+ export type CreateTimeEntryImportErrors = {
16928
+ /**
16929
+ * Bad Request
16930
+ */
16931
+ 400: Problem;
16932
+ /**
16933
+ * Forbidden
16934
+ */
16935
+ 403: Problem;
16936
+ /**
16937
+ * Not Found
16938
+ */
16939
+ 404: Problem;
16940
+ /**
16941
+ * Conflict
16942
+ */
16943
+ 409: Problem;
16944
+ /**
16945
+ * Unprocessable Content
16946
+ */
16947
+ 422: Problem;
16948
+ };
16949
+ export type CreateTimeEntryImportError = CreateTimeEntryImportErrors[keyof CreateTimeEntryImportErrors];
16950
+ export type CreateTimeEntryImportResponses = {
16951
+ /**
16952
+ * Created
16953
+ */
16954
+ 201: TimeEntryImportResponseObject;
16955
+ };
16956
+ export type CreateTimeEntryImportResponse = CreateTimeEntryImportResponses[keyof CreateTimeEntryImportResponses];
16957
+ export type GetTimeEntryImportData = {
16958
+ body?: never;
16959
+ path: {
16960
+ pay_period_id: string;
16961
+ id: string;
16962
+ };
16963
+ query?: never;
16964
+ url: '/api/v1/pay_periods/{pay_period_id}/imports/time_entries/{id}';
16965
+ };
16966
+ export type GetTimeEntryImportErrors = {
16967
+ /**
16968
+ * Forbidden
16969
+ */
16970
+ 403: Problem;
16971
+ /**
16972
+ * Not Found
16973
+ */
16974
+ 404: Problem;
16975
+ };
16976
+ export type GetTimeEntryImportError = GetTimeEntryImportErrors[keyof GetTimeEntryImportErrors];
16977
+ export type GetTimeEntryImportResponses = {
16978
+ /**
16979
+ * Success
16980
+ */
16981
+ 200: TimeEntryImportResponseObject;
16982
+ };
16983
+ export type GetTimeEntryImportResponse = GetTimeEntryImportResponses[keyof GetTimeEntryImportResponses];
16984
+ export type ListPayPeriodsData = {
16985
+ body?: never;
16986
+ path?: never;
16987
+ query?: {
16988
+ 'filter[start_time][gte]'?: string;
16989
+ 'filter[start_time][lte]'?: string;
16990
+ filter?: string;
16991
+ 'filter[unexpected]'?: string;
16992
+ /**
16993
+ * This pagination cursor corresponds to the cursor value found in the response in
16994
+ * `meta.page.next_cursor`.
16995
+ */
16996
+ 'page[cursor]'?: string;
16997
+ /**
16998
+ * 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`.
16999
+ */
17000
+ 'page[limit]'?: number;
17001
+ page?: string;
17002
+ };
17003
+ url: '/api/v1/pay_periods';
17004
+ };
17005
+ export type ListPayPeriodsErrors = {
17006
+ /**
17007
+ * Bad Request
17008
+ */
17009
+ 400: Problem;
17010
+ /**
17011
+ * Forbidden
17012
+ */
17013
+ 403: Problem;
17014
+ /**
17015
+ * Unprocessable Content
17016
+ */
17017
+ 422: Problem;
17018
+ };
17019
+ export type ListPayPeriodsError = ListPayPeriodsErrors[keyof ListPayPeriodsErrors];
17020
+ export type ListPayPeriodsResponses = {
17021
+ /**
17022
+ * Success
17023
+ */
17024
+ 200: PayPeriodsResponseObject;
17025
+ };
17026
+ export type ListPayPeriodsResponse = ListPayPeriodsResponses[keyof ListPayPeriodsResponses];
17027
+ export type ListCompensationElementsData = {
17028
+ body?: never;
17029
+ path?: never;
17030
+ query?: never;
17031
+ url: '/api/v1/payrolls/compensation_elements';
17032
+ };
17033
+ export type ListCompensationElementsErrors = {
17034
+ /**
17035
+ * Forbidden
17036
+ */
17037
+ 403: Problem;
17038
+ };
17039
+ export type ListCompensationElementsError = ListCompensationElementsErrors[keyof ListCompensationElementsErrors];
17040
+ export type ListCompensationElementsResponses = {
17041
+ /**
17042
+ * Success
17043
+ */
17044
+ 200: {
17045
+ meta: Meta;
17046
+ links: Links;
17047
+ data: Array<CompensationElementResponseObject>;
17048
+ };
17049
+ };
17050
+ export type ListCompensationElementsResponse = ListCompensationElementsResponses[keyof ListCompensationElementsResponses];
17051
+ export type GetCompensationElementData = {
17052
+ body?: never;
17053
+ path: {
17054
+ id: string;
17055
+ };
17056
+ query?: never;
17057
+ url: '/api/v1/payrolls/compensation_elements/{id}';
17058
+ };
17059
+ export type GetCompensationElementErrors = {
17060
+ /**
17061
+ * Forbidden
17062
+ */
17063
+ 403: Problem;
17064
+ /**
17065
+ * Not Found
17066
+ */
17067
+ 404: Problem;
17068
+ };
17069
+ export type GetCompensationElementError = GetCompensationElementErrors[keyof GetCompensationElementErrors];
17070
+ export type GetCompensationElementResponses = {
17071
+ /**
17072
+ * Success
17073
+ */
17074
+ 200: CompensationElementResponseObject;
17075
+ };
16641
17076
  export type GetCompensationElementResponse = GetCompensationElementResponses[keyof GetCompensationElementResponses];
16642
17077
  export type ListExternalMapHistoryData = {
16643
17078
  body?: never;
@@ -16936,6 +17371,134 @@ export type UpdateFringeBenefitPlanResponses = {
16936
17371
  200: PayrollFringeBenefitPlanResponseObject;
16937
17372
  };
16938
17373
  export type UpdateFringeBenefitPlanResponse = UpdateFringeBenefitPlanResponses[keyof UpdateFringeBenefitPlanResponses];
17374
+ export type ListPaystubImportsData = {
17375
+ body?: never;
17376
+ path: {
17377
+ payroll_run_id: string;
17378
+ };
17379
+ query?: {
17380
+ /**
17381
+ * Filter by import status:
17382
+ * * `pending`
17383
+ * * `processing`
17384
+ * * `processed`
17385
+ * * `success`
17386
+ * * `failed`
17387
+ *
17388
+ */
17389
+ 'filter[status]'?: string;
17390
+ filter?: string;
17391
+ 'filter[unexpected]'?: string;
17392
+ 'filter[completed_at][gte]'?: string;
17393
+ 'filter[completed_at][lte]'?: string;
17394
+ 'filter[created_at][gte]'?: string;
17395
+ 'filter[created_at][lte]'?: string;
17396
+ 'filter[updated_at][gte]'?: string;
17397
+ 'filter[updated_at][lte]'?: string;
17398
+ /**
17399
+ * This pagination cursor corresponds to the cursor value found in the response in
17400
+ * `meta.page.next_cursor`.
17401
+ */
17402
+ 'page[cursor]'?: string;
17403
+ /**
17404
+ * 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`.
17405
+ */
17406
+ 'page[limit]'?: number;
17407
+ page?: string;
17408
+ };
17409
+ url: '/api/v1/payrolls/payroll_runs/{payroll_run_id}/imports/paystubs';
17410
+ };
17411
+ export type ListPaystubImportsErrors = {
17412
+ /**
17413
+ * Bad Request
17414
+ */
17415
+ 400: Problem;
17416
+ /**
17417
+ * Forbidden
17418
+ */
17419
+ 403: Problem;
17420
+ /**
17421
+ * Unprocessable Content
17422
+ */
17423
+ 422: Problem;
17424
+ };
17425
+ export type ListPaystubImportsError = ListPaystubImportsErrors[keyof ListPaystubImportsErrors];
17426
+ export type ListPaystubImportsResponses = {
17427
+ /**
17428
+ * Success
17429
+ */
17430
+ 200: {
17431
+ meta: Meta;
17432
+ links: Links;
17433
+ data: Array<PaystubImportResponseObject>;
17434
+ };
17435
+ };
17436
+ export type ListPaystubImportsResponse = ListPaystubImportsResponses[keyof ListPaystubImportsResponses];
17437
+ export type CreatePaystubImportData = {
17438
+ body: PaystubImportParameters;
17439
+ path: {
17440
+ payroll_run_id: string;
17441
+ };
17442
+ query?: never;
17443
+ url: '/api/v1/payrolls/payroll_runs/{payroll_run_id}/imports/paystubs';
17444
+ };
17445
+ export type CreatePaystubImportErrors = {
17446
+ /**
17447
+ * Bad Request
17448
+ */
17449
+ 400: Problem;
17450
+ /**
17451
+ * Forbidden
17452
+ */
17453
+ 403: Problem;
17454
+ /**
17455
+ * Not Found
17456
+ */
17457
+ 404: Problem;
17458
+ /**
17459
+ * Conflict
17460
+ */
17461
+ 409: Problem;
17462
+ /**
17463
+ * Unprocessable Content
17464
+ */
17465
+ 422: Problem;
17466
+ };
17467
+ export type CreatePaystubImportError = CreatePaystubImportErrors[keyof CreatePaystubImportErrors];
17468
+ export type CreatePaystubImportResponses = {
17469
+ /**
17470
+ * Created
17471
+ */
17472
+ 201: PaystubImportResponseObject;
17473
+ };
17474
+ export type CreatePaystubImportResponse = CreatePaystubImportResponses[keyof CreatePaystubImportResponses];
17475
+ export type GetPaystubImportData = {
17476
+ body?: never;
17477
+ path: {
17478
+ payroll_run_id: string;
17479
+ id: string;
17480
+ };
17481
+ query?: never;
17482
+ url: '/api/v1/payrolls/payroll_runs/{payroll_run_id}/imports/paystubs/{id}';
17483
+ };
17484
+ export type GetPaystubImportErrors = {
17485
+ /**
17486
+ * Forbidden
17487
+ */
17488
+ 403: Problem;
17489
+ /**
17490
+ * Not Found
17491
+ */
17492
+ 404: Problem;
17493
+ };
17494
+ export type GetPaystubImportError = GetPaystubImportErrors[keyof GetPaystubImportErrors];
17495
+ export type GetPaystubImportResponses = {
17496
+ /**
17497
+ * Success
17498
+ */
17499
+ 200: PaystubImportResponseObject;
17500
+ };
17501
+ export type GetPaystubImportResponse = GetPaystubImportResponses[keyof GetPaystubImportResponses];
16939
17502
  export type ListPayrollRunsData = {
16940
17503
  body?: never;
16941
17504
  path?: never;
@@ -18315,6 +18878,40 @@ export type UpdateApprenticeshipOccupationResponses = {
18315
18878
  200: PwaTradeApprenticeshipOccupationResponseObject;
18316
18879
  };
18317
18880
  export type UpdateApprenticeshipOccupationResponse = UpdateApprenticeshipOccupationResponses[keyof UpdateApprenticeshipOccupationResponses];
18881
+ export type CreateMergeData = {
18882
+ body: PwaTradeMergeParameters;
18883
+ path: {
18884
+ trade_id: string;
18885
+ };
18886
+ query?: never;
18887
+ url: '/api/v1/pwa/trades/{trade_id}/merges';
18888
+ };
18889
+ export type CreateMergeErrors = {
18890
+ /**
18891
+ * Bad Request
18892
+ */
18893
+ 400: Problem;
18894
+ /**
18895
+ * Forbidden
18896
+ */
18897
+ 403: Problem;
18898
+ /**
18899
+ * Not Found
18900
+ */
18901
+ 404: Problem;
18902
+ /**
18903
+ * Unprocessable Content
18904
+ */
18905
+ 422: Problem;
18906
+ };
18907
+ export type CreateMergeError = CreateMergeErrors[keyof CreateMergeErrors];
18908
+ export type CreateMergeResponses = {
18909
+ /**
18910
+ * Success
18911
+ */
18912
+ 200: PwaTradeResponseObject;
18913
+ };
18914
+ export type CreateMergeResponse = CreateMergeResponses[keyof CreateMergeResponses];
18318
18915
  export type ListTradesData = {
18319
18916
  body?: never;
18320
18917
  path?: never;
@@ -19359,6 +19956,10 @@ export type DeleteTimeEntryErrors = {
19359
19956
  * Forbidden
19360
19957
  */
19361
19958
  403: Problem;
19959
+ /**
19960
+ * Not Found
19961
+ */
19962
+ 404: Problem;
19362
19963
  /**
19363
19964
  * Unprocessable Content
19364
19965
  */
@@ -19392,6 +19993,10 @@ export type UpdateTimeEntryErrors = {
19392
19993
  * Forbidden
19393
19994
  */
19394
19995
  403: Problem;
19996
+ /**
19997
+ * Not Found
19998
+ */
19999
+ 404: Problem;
19395
20000
  /**
19396
20001
  * Unprocessable Content
19397
20002
  */