@dsptch-work/api-client 0.26.0 → 0.28.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.
@@ -201,6 +201,12 @@ export type Problem = {
201
201
  *
202
202
  * 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.
203
203
  *
204
+ * ### pay_schedule_already_exists
205
+ *
206
+ * **Pay Schedule Already Exists**
207
+ *
208
+ * The company already has a pay schedule, including one starting in the future or ending in the past. Use the existing schedule instead of creating another.
209
+ *
204
210
  * ### product_archived
205
211
  *
206
212
  * **Product Archived**
@@ -376,7 +382,7 @@ export type Problem = {
376
382
  * 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.
377
383
  *
378
384
  */
379
- 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' | 'forbidden_key' | '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';
385
+ 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' | 'forbidden_key' | 'insufficient_api_key_scope' | 'user_scoped_key_required' | 'not_found' | 'already_terminated' | 'import_in_progress' | 'pay_schedule_already_exists' | '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';
380
386
  export type ApiKeyScopeResponseObject = {
381
387
  resource: string;
382
388
  action: 'read' | 'create' | 'update' | 'delete';
@@ -2472,7 +2478,7 @@ export type PerDiemUpdateParameters = {
2472
2478
  timekeeping_timecode_ids?: Array<string>;
2473
2479
  };
2474
2480
  /**
2475
- * The product's filled attribute values — one entry per attribute assigned to its category.
2481
+ * The filled attribute values of a product or item — one entry per attribute its category makes fillable on that record.
2476
2482
  */
2477
2483
  export type AssetsAttributeValueObjects = Array<{
2478
2484
  /**
@@ -3002,7 +3008,68 @@ export type AttestationConfigParameters = {
3002
3008
  us_state_id?: string | null;
3003
3009
  };
3004
3010
  /**
3005
- * A pay schedule (PayPeriodConfig) — the top-level timekeeping unit that sets a company's payroll cadence and tracking modes and generates its stream of pay periods. Read-only; only the currently-valid version is returned, keyed by its stable id.
3011
+ * Create the company's first pay schedule. Time and payroll modes inherit company defaults.
3012
+ */
3013
+ export type PayPeriodConfigParameters = {
3014
+ /**
3015
+ * First effective date (YYYY-MM-DD), at midnight in tz_name; its weekday must match start_day_of_week.
3016
+ */
3017
+ effective_date: string;
3018
+ /**
3019
+ * Pay frequency: weekly (7 days) or biweekly (14 days).
3020
+ */
3021
+ frequency: 'weekly' | 'biweekly';
3022
+ /**
3023
+ * Day the pay period begins, 0 (Sunday) through 6 (Saturday).
3024
+ */
3025
+ start_day_of_week: 0 | 1 | 2 | 3 | 4 | 5 | 6;
3026
+ /**
3027
+ * Supported IANA time zone for schedule dates and deadlines (e.g. US/Central).
3028
+ */
3029
+ tz_name: string;
3030
+ /**
3031
+ * ISO 4217 currency code; defaults to USD.
3032
+ */
3033
+ currency?: string;
3034
+ /**
3035
+ * Time rounding in minutes, 1 or 15; defaults to 1.
3036
+ */
3037
+ rounding_interval?: 1 | 15;
3038
+ /**
3039
+ * Payroll provider; omit or send null when none.
3040
+ */
3041
+ payroll_system?: 'rippling' | 'quickbooks_online' | 'paychex' | 'gusto' | null;
3042
+ /**
3043
+ * Move pay dates after banking holidays rather than before; defaults to true.
3044
+ */
3045
+ paid_after_holiday?: boolean;
3046
+ /**
3047
+ * Whole days from the pay period's end to payday; must cover both deadline intervals.
3048
+ */
3049
+ arrear_days: number;
3050
+ /**
3051
+ * Calendar-day lead for the pay-run deadline; 1 with a clock time of 17:00 means seven hours before payday.
3052
+ */
3053
+ pay_run_deadline_days: number;
3054
+ /**
3055
+ * Pay-run deadline's local clock time (HH:MM).
3056
+ */
3057
+ pay_run_deadline_clock_time: string;
3058
+ /**
3059
+ * Whole calendar days before the pay-run deadline's date when approvals are due.
3060
+ */
3061
+ approvals_deadline_days: number;
3062
+ /**
3063
+ * Approvals deadline's local clock time (HH:MM).
3064
+ */
3065
+ approvals_deadline_clock_time: string;
3066
+ /**
3067
+ * Signed days from the pay-run deadline until time cards lock; negative values lock earlier, 0 locks at the deadline, null disables locking.
3068
+ */
3069
+ time_card_auto_lock_days?: number | null;
3070
+ };
3071
+ /**
3072
+ * A pay schedule (PayPeriodConfig) — the top-level timekeeping unit that sets a company's payroll cadence and tracking modes and generates its stream of pay periods. Reads return the version valid at the requested time; create returns the new schedule, keyed by its stable id.
3006
3073
  */
3007
3074
  export type PayPeriodConfigResponseObject = {
3008
3075
  /**
@@ -3719,6 +3786,10 @@ export type JobResponseObject = {
3719
3786
  * ID of the project this job belongs to; null when the job is not part of a project.
3720
3787
  */
3721
3788
  project_id: string | null;
3789
+ /**
3790
+ * ID of the provider company's department assigned to this job; null when unassigned. Retrieve department IDs from GET /api/v1/companies/departments.
3791
+ */
3792
+ companies_department_id: string | null;
3722
3793
  /**
3723
3794
  * The job's managers, each as a minimal object; empty when the job has no managers.
3724
3795
  */
@@ -3911,10 +3982,6 @@ export type JobParameters = {
3911
3982
  * ID of the company that requested the job (for example a general contractor). Required on create; omit on update to preserve the existing requester.
3912
3983
  */
3913
3984
  requested_by_company_id?: string;
3914
- /**
3915
- * ID of the user creating the job. Required on create and immutable thereafter — an update that sets, changes, or clears it is rejected.
3916
- */
3917
- created_by_user_id?: string;
3918
3985
  /**
3919
3986
  * IDs of the users who manage the job; null when the job has no managers.
3920
3987
  */
@@ -3927,6 +3994,10 @@ export type JobParameters = {
3927
3994
  * ID of the project this job belongs to; null when the job is not part of a project.
3928
3995
  */
3929
3996
  project_id?: string | null;
3997
+ /**
3998
+ * ID of a department belonging to the job's provider company. Retrieve department IDs from GET /api/v1/companies/departments. Send null to clear the assignment; omit on update to preserve it, or on create to preserve a copied template's assignment. A new job without a template starts unassigned.
3999
+ */
4000
+ companies_department_id?: string | null;
3930
4001
  /**
3931
4002
  * Federal prevailing-wage / apprenticeship (PWA) tracking mode: one of all (both prevailing wage and apprenticeship), pw_only, ap_only, or none.
3932
4003
  */
@@ -4124,6 +4195,10 @@ export type JobParameters = {
4124
4195
  * Parameters for creating a job. `requested_by_company_id` and `created_by_user_id` are required. Sets the job's schedule, work types, address, custom-field values, and optional Prevailing Wage / Apprenticeship (PWA) compliance.
4125
4196
  */
4126
4197
  export type JobCreateParameters = JobParameters & {
4198
+ /**
4199
+ * ID of the user creating the job. Required on create; the creator cannot be changed afterward.
4200
+ */
4201
+ created_by_user_id: string;
4127
4202
  /**
4128
4203
  * ID of a job template to copy this job from; when set, the new job is created from that template. Null or omit to start from a blank job.
4129
4204
  */
@@ -4143,7 +4218,7 @@ export type JobCreateParameters = JobParameters & {
4143
4218
  }>;
4144
4219
  };
4145
4220
  /**
4146
- * Parameters for updating an existing job. Every field is optional; omit a field to preserve its current value. The resulting job must still satisfy schedule and PWA validation rules. Accepts every shared job field plus a directly settable status and custom-field changes.
4221
+ * Parameters for updating an existing job. Every field is optional; omit a field to preserve its current value. The resulting job must still satisfy schedule and PWA validation rules. Accepts every shared job field plus a directly settable status and custom-field changes. Sending `created_by_user_id` returns 400 unknown_key, including when it matches the existing creator or is null.
4147
4222
  */
4148
4223
  export type JobUpdateParameters = JobParameters & {
4149
4224
  /**
@@ -5064,6 +5139,10 @@ export type FormDefinitionObject = {
5064
5139
  * Whether the form is always shown to users.
5065
5140
  */
5066
5141
  always_visible: boolean;
5142
+ /**
5143
+ * Whether the form is hidden from free-submit catalogs and available only through assignments and tasks.
5144
+ */
5145
+ assignment_only: boolean;
5067
5146
  /**
5068
5147
  * Whether the form collects sensitive data.
5069
5148
  */
@@ -7033,7 +7112,7 @@ export type PayrollRunResponseObject = {
7033
7112
  updated_at: string;
7034
7113
  };
7035
7114
  /**
7036
- * Create a payroll run. company_id, run_type, and run_date are required; an on-cycle run additionally requires timekeeping_pay_period_id.
7115
+ * Create a payroll run. Company-scoped keys and company-admin user-scoped keys accept the same fields. Manager and technician user keys cannot create runs. company_id, run_type, and run_date are required; an on-cycle run additionally requires timekeeping_pay_period_id.
7037
7116
  */
7038
7117
  export type PayrollRunParameters = {
7039
7118
  /**
@@ -7062,7 +7141,7 @@ export type PayrollRunParameters = {
7062
7141
  external_id?: string | null;
7063
7142
  };
7064
7143
  /**
7065
- * Update a payroll run. Every field is optional — send only what changes. The run's company is fixed at creation.
7144
+ * Update a payroll run. Company-scoped keys and company-admin user-scoped keys accept the same fields. Manager and technician user keys cannot update runs. Every field is optional — send only what changes. The run's company is fixed at creation.
7066
7145
  */
7067
7146
  export type PayrollRunUpdateParameters = {
7068
7147
  /**
@@ -8661,163 +8740,679 @@ export type JobSiteUpdateParameters = {
8661
8740
  feature_ids?: Array<string>;
8662
8741
  };
8663
8742
  /**
8664
- * A spot to be filled on a job — one worker's assignment and the unit against which they track time, carrying the schedule window, assigned worker, function, and the planned pay and fringe rates (including PWA prevailing-wage compliance rates). Always accessed nested under a job.
8743
+ * A form-completion task attached to a job — a SurveyJS form assigned to users with a due time, optional recurrence, and reminders. Path `{id}` is the `Tasks::JobFormAssignmentTask` id, not the web show `Task#uid`.
8665
8744
  */
8666
- export type PositionResponseObject = {
8745
+ export type JobFormAssignmentResponseObject = {
8667
8746
  /**
8668
8747
  * Unique identifier.
8669
8748
  */
8670
8749
  id: string;
8671
8750
  /**
8672
- * ID of the job this position belongs to; always matches the job in the URL path.
8751
+ * ID of the job this form task belongs to; always matches the job in the URL path.
8673
8752
  */
8674
8753
  job_id: string;
8675
8754
  /**
8676
- * ID of the worker assigned to fill this position; null when the position is unfilled.
8755
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
8677
8756
  */
8678
- fulfilled_by_user_id: string | null;
8757
+ form_definition_id: string;
8679
8758
  /**
8680
- * ID of the pay-rate rule package applied to this position, or null when none is set.
8759
+ * Name of the form task; defaults to the form definition's name.
8681
8760
  */
8682
- pay_rates_rule_package_id: string | null;
8683
- position_function: PositionFunction;
8761
+ name: string;
8684
8762
  /**
8685
- * Name of the per diem applied to this position; null when none is set.
8763
+ * Free-text description of the task.
8686
8764
  */
8687
- per_diem_name: string | null;
8765
+ description: string | null;
8688
8766
  /**
8689
- * ISO 4217 currency code for the per-diem rate; null when no per diem is set.
8767
+ * IANA time zone in which time_due is interpreted; always set, defaulting to US/Central.
8690
8768
  */
8691
- per_diem_currency: string | null;
8769
+ tz_name: string;
8692
8770
  /**
8693
- * Per-diem amount in cents, as a string; null when no per diem is set.
8771
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
8694
8772
  */
8695
- per_diem_rate_cents: string | null;
8773
+ time_due: string | null;
8696
8774
  /**
8697
- * Planned base hourly pay rate in cents, as a string; null when no rate is set.
8775
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
8698
8776
  */
8699
- hourly_rate_cents: string | null;
8777
+ frequency: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
8700
8778
  /**
8701
- * Where the hourly rate came from: one of user_default, prevailing_wage, or custom; null when no rate is set.
8779
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
8702
8780
  */
8703
- hourly_rate_src_type: string | null;
8781
+ recurrence_end_time: string | null;
8704
8782
  /**
8705
- * Planned hourly cash-fringe rate in cents, as a string; null when unset.
8783
+ * IDs of the users this form task is assigned to.
8706
8784
  */
8707
- cash_fringe_rate_cents: string | null;
8785
+ task_assignee_user_ids: Array<string>;
8708
8786
  /**
8709
- * Where the cash-fringe rate came from: one of prevailing_wage or custom; null when unset.
8787
+ * Reminder notifications for this task, each scheduled at an offset from the due time.
8710
8788
  */
8711
- cash_fringe_rate_src_type: string | null;
8789
+ reminders: Array<{
8790
+ /**
8791
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
8792
+ */
8793
+ offset: string;
8794
+ /**
8795
+ * When the reminder fires (ISO 8601), computed as the due time plus the offset.
8796
+ */
8797
+ remind_at: string;
8798
+ }>;
8799
+ };
8800
+ /**
8801
+ * A form-completion task attached to a site — a SurveyJS form assigned to users with a due time, optional recurrence, and reminders. Path `{id}` is the `Tasks::SiteFormAssignmentTask` id, not the web show `Task#uid`. Sites are shared across companies; another company's assignment on the same site is not found. An empty assignee list is valid.
8802
+ */
8803
+ export type SiteFormAssignmentResponseObject = {
8712
8804
  /**
8713
- * Hourly wage-pay rate in cents applied to PWA (prevailing-wage / apprenticeship) eligible time on this position, as a string; null for non-PWA positions.
8805
+ * Unique identifier.
8714
8806
  */
8715
- pwa_wage_pay_rate_cents: string | null;
8807
+ id: string;
8716
8808
  /**
8717
- * Where the PWA wage-pay rate came from: one of user_default, prevailing_wage, or custom; null for non-PWA positions.
8809
+ * ID of the site this form task belongs to; always matches the site in the URL path.
8718
8810
  */
8719
- pwa_wage_pay_rate_src_type: string | null;
8811
+ site_id: string;
8720
8812
  /**
8721
- * Hourly wage-adder rate in cents, as a string; null when unset. Excluded from cash-in-lieu-of-fringe calculations.
8813
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
8722
8814
  */
8723
- wage_adder_rate_cents: string | null;
8815
+ form_definition_id: string;
8724
8816
  /**
8725
- * Whether this position tracks Prevailing Wage / Apprenticeship (PWA) compliance; when true, the PWA rate fields and wage-determination associations apply.
8817
+ * Name of the form task; defaults to the form definition's name.
8726
8818
  */
8727
- pwa: boolean;
8819
+ name: string;
8728
8820
  /**
8729
- * IDs of the federal (Davis-Bacon) wage determinations applied to this position; empty when none.
8821
+ * Free-text description of the task.
8730
8822
  */
8731
- federal_wage_determination_ids: Array<string>;
8823
+ description: string | null;
8732
8824
  /**
8733
- * IDs of the regional (state) wage determinations applied to this position; empty when none.
8825
+ * IANA time zone in which time_due is interpreted; always set, defaulting to US/Central.
8734
8826
  */
8735
- regional_wage_determination_ids: Array<string>;
8827
+ tz_name: string;
8736
8828
  /**
8737
- * PWA classification detail for this position; carries skill_level, the apprenticeship or skill classification, which is null when unset.
8829
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
8738
8830
  */
8739
- pwa_details: {
8740
- /**
8741
- * The apprenticeship or skill classification; null when unset.
8742
- */
8743
- skill_level: string | null;
8744
- };
8831
+ time_due: string | null;
8745
8832
  /**
8746
- * Start of the position's scheduled window (ISO 8601); null when unscheduled.
8833
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
8747
8834
  */
8748
- start_time: string | null;
8835
+ frequency: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
8749
8836
  /**
8750
- * End of the position's scheduled window (ISO 8601); null when unscheduled.
8837
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
8751
8838
  */
8752
- end_time: string | null;
8839
+ recurrence_end_time: string | null;
8753
8840
  /**
8754
- * When the record was created (ISO 8601).
8841
+ * IDs of the users this form task is assigned to.
8755
8842
  */
8756
- created_at: string;
8843
+ task_assignee_user_ids: Array<string>;
8757
8844
  /**
8758
- * When the record was last updated (ISO 8601).
8845
+ * Reminder notifications for this task, each scheduled at an offset from the due time.
8759
8846
  */
8760
- updated_at: string;
8847
+ reminders: Array<{
8848
+ /**
8849
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
8850
+ */
8851
+ offset: string;
8852
+ /**
8853
+ * When the reminder fires (ISO 8601), computed as the due time plus the offset.
8854
+ */
8855
+ remind_at: string;
8856
+ }>;
8761
8857
  };
8762
8858
  /**
8763
- * A company-owned collection of conditional wage and fringe adjustments, optionally scoped to a job.
8859
+ * Create a site form assignment. form_definition_id and task_attributes are required, and task_attributes.created_by_user_id is required (a missing value returns 400). site_id comes from the path and is not part of the body. recurring gates the recurrence fields. An empty task_assignee_user_ids list is valid. The company must hold a SiteClaim on the site with site_forms enabled.
8764
8860
  */
8765
- export type PayRatesRulePackageResponseObject = {
8766
- /**
8767
- * Unique identifier of the rule package.
8768
- */
8769
- id: string;
8770
- /**
8771
- * Human-readable package name.
8772
- */
8773
- name: string;
8774
- /**
8775
- * Free-form package description, or null.
8776
- */
8777
- description: string | null;
8778
- /**
8779
- * ID of the job this package is scoped to, or null for a company-wide package.
8780
- */
8781
- scoped_to_job_id: string | null;
8782
- /**
8783
- * Whether this is the default package within its company-wide or job scope.
8784
- */
8785
- default: boolean;
8861
+ export type SiteFormAssignmentParameters = {
8786
8862
  /**
8787
- * Whether users may select this package directly in configuration workflows.
8863
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
8788
8864
  */
8789
- selectable: boolean;
8865
+ form_definition_id: string;
8790
8866
  /**
8791
- * When the record was created (ISO 8601).
8867
+ * When true, frequency and recurrence_end_time apply; when false or omitted, the task is one-time and those fields are cleared.
8792
8868
  */
8793
- created_at: string;
8869
+ recurring?: boolean;
8794
8870
  /**
8795
- * When the record was last updated (ISO 8601).
8871
+ * The underlying task's name, schedule, assignees, and reminders.
8796
8872
  */
8797
- updated_at: string;
8873
+ task_attributes: {
8874
+ /**
8875
+ * Name of the form task; defaults to the form definition's name.
8876
+ */
8877
+ name?: string | null;
8878
+ /**
8879
+ * Free-text description of the task.
8880
+ */
8881
+ description?: string | null;
8882
+ /**
8883
+ * ID of the user creating the task, recorded as its creator. Required; a missing value returns 400.
8884
+ */
8885
+ created_by_user_id: string;
8886
+ /**
8887
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
8888
+ */
8889
+ time_due?: string | null;
8890
+ /**
8891
+ * IANA time zone in which time_due is interpreted; null for an unscheduled task.
8892
+ */
8893
+ tz_name?: string | null;
8894
+ /**
8895
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
8896
+ */
8897
+ frequency?: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
8898
+ /**
8899
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
8900
+ */
8901
+ recurrence_end_time?: string | null;
8902
+ /**
8903
+ * IDs of the users this form task is assigned to.
8904
+ */
8905
+ task_assignee_user_ids?: Array<string>;
8906
+ /**
8907
+ * Reminders to attach, each an offset from the due time. On update, replaces the existing set.
8908
+ */
8909
+ reminders_attributes?: Array<{
8910
+ /**
8911
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
8912
+ */
8913
+ offset: 'PT0S' | 'PT-1M' | 'PT-5M' | 'PT-10M' | 'PT-15M' | 'PT-30M' | 'PT-1H' | 'PT-2H' | 'P-1D' | 'P-2D' | 'P-3D' | 'P-4D' | 'P-5D' | 'P-6D' | 'P-1W' | 'P-2W' | 'P-1M' | 'P-2M' | 'P-3M' | 'P-6M' | 'P-1Y' | 'PT5M' | 'PT15M' | 'PT30M' | 'PT1H' | 'PT6H' | 'PT12H' | 'P1D' | 'P2D' | 'P3D' | 'P4D' | 'P5D' | 'P6D' | 'P1W' | 'P2W' | 'P3W';
8914
+ }>;
8915
+ };
8798
8916
  };
8799
8917
  /**
8800
- * Parameters for creating a company-wide pay-rate rule package.
8918
+ * Update a site form assignment. All fields are optional — send only what changes. site_id comes from the path and cannot be sent. recurring gates the recurrence fields, and task_attributes.reminders_attributes replaces the existing reminder set when supplied. An empty task_assignee_user_ids list is valid. The creator is set at creation and cannot be sent.
8801
8919
  */
8802
- export type PayRatesRulePackageParameters = {
8920
+ export type SiteFormAssignmentUpdateParameters = {
8803
8921
  /**
8804
- * Human-readable package name.
8922
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
8805
8923
  */
8806
- name: string;
8924
+ form_definition_id?: string;
8807
8925
  /**
8808
- * Free-form package description; send null or omit it when no description is needed.
8926
+ * When true, frequency and recurrence_end_time apply; when false or omitted, the task is one-time and those fields are cleared.
8809
8927
  */
8810
- description?: string | null;
8811
- };
8812
- /**
8813
- * Request body for updating a pay-rate rule package. Send only the fields to change. `default`, `selectable`, and `scoped_to_job_id` are not writable on this operation.
8814
- */
8815
- export type PayRatesRulePackageUpdateParameters = {
8928
+ recurring?: boolean;
8816
8929
  /**
8817
- * Human-readable package name. Omit to leave it unchanged.
8930
+ * The underlying task's name, schedule, assignees, and reminders.
8818
8931
  */
8819
- name?: string;
8820
- /**
8932
+ task_attributes?: {
8933
+ /**
8934
+ * Name of the form task; defaults to the form definition's name.
8935
+ */
8936
+ name?: string | null;
8937
+ /**
8938
+ * Free-text description of the task.
8939
+ */
8940
+ description?: string | null;
8941
+ /**
8942
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
8943
+ */
8944
+ time_due?: string | null;
8945
+ /**
8946
+ * IANA time zone in which time_due is interpreted; null for an unscheduled task.
8947
+ */
8948
+ tz_name?: string | null;
8949
+ /**
8950
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
8951
+ */
8952
+ frequency?: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
8953
+ /**
8954
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
8955
+ */
8956
+ recurrence_end_time?: string | null;
8957
+ /**
8958
+ * IDs of the users this form task is assigned to.
8959
+ */
8960
+ task_assignee_user_ids?: Array<string>;
8961
+ /**
8962
+ * Reminders to attach, each an offset from the due time. On update, replaces the existing set.
8963
+ */
8964
+ reminders_attributes?: Array<{
8965
+ /**
8966
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
8967
+ */
8968
+ offset: 'PT0S' | 'PT-1M' | 'PT-5M' | 'PT-10M' | 'PT-15M' | 'PT-30M' | 'PT-1H' | 'PT-2H' | 'P-1D' | 'P-2D' | 'P-3D' | 'P-4D' | 'P-5D' | 'P-6D' | 'P-1W' | 'P-2W' | 'P-1M' | 'P-2M' | 'P-3M' | 'P-6M' | 'P-1Y' | 'PT5M' | 'PT15M' | 'PT30M' | 'PT1H' | 'PT6H' | 'PT12H' | 'P1D' | 'P2D' | 'P3D' | 'P4D' | 'P5D' | 'P6D' | 'P1W' | 'P2W' | 'P3W';
8969
+ }>;
8970
+ };
8971
+ };
8972
+ /**
8973
+ * A form-completion task attached to a site feature — a SurveyJS form assigned to users with a due time, optional recurrence, and reminders. Path `{id}` is the `Tasks::FeatureFormAssignmentTask` id, not the web show `Task#uid`. Sites and features are shared across companies; another company's assignment on the same feature is not found. An empty assignee list is valid. The assignment does not include site_id.
8974
+ */
8975
+ export type FeatureFormAssignmentResponseObject = {
8976
+ /**
8977
+ * Unique identifier.
8978
+ */
8979
+ id: string;
8980
+ /**
8981
+ * ID of the feature this form task belongs to; always matches the feature in the URL path.
8982
+ */
8983
+ feature_id: string;
8984
+ /**
8985
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
8986
+ */
8987
+ form_definition_id: string;
8988
+ /**
8989
+ * Name of the form task; defaults to the form definition's name.
8990
+ */
8991
+ name: string;
8992
+ /**
8993
+ * Free-text description of the task.
8994
+ */
8995
+ description: string | null;
8996
+ /**
8997
+ * IANA time zone in which time_due is interpreted; always set, defaulting to US/Central.
8998
+ */
8999
+ tz_name: string;
9000
+ /**
9001
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
9002
+ */
9003
+ time_due: string | null;
9004
+ /**
9005
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
9006
+ */
9007
+ frequency: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
9008
+ /**
9009
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
9010
+ */
9011
+ recurrence_end_time: string | null;
9012
+ /**
9013
+ * IDs of the users this form task is assigned to.
9014
+ */
9015
+ task_assignee_user_ids: Array<string>;
9016
+ /**
9017
+ * Reminder notifications for this task, each scheduled at an offset from the due time.
9018
+ */
9019
+ reminders: Array<{
9020
+ /**
9021
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
9022
+ */
9023
+ offset: string;
9024
+ /**
9025
+ * When the reminder fires (ISO 8601), computed as the due time plus the offset.
9026
+ */
9027
+ remind_at: string;
9028
+ }>;
9029
+ };
9030
+ /**
9031
+ * Create a feature form assignment. form_definition_id and task_attributes are required, and task_attributes.created_by_user_id is required (a missing value returns 400). site_id and feature_id come from the path and are not part of the body. recurring gates the recurrence fields. An empty task_assignee_user_ids list is valid. The company must hold a SiteClaim on the path's site with site_forms enabled, and the feature must belong to that site.
9032
+ */
9033
+ export type FeatureFormAssignmentParameters = {
9034
+ /**
9035
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
9036
+ */
9037
+ form_definition_id: string;
9038
+ /**
9039
+ * When true, frequency and recurrence_end_time apply; when false or omitted, the task is one-time and those fields are cleared.
9040
+ */
9041
+ recurring?: boolean;
9042
+ /**
9043
+ * The underlying task's name, schedule, assignees, and reminders.
9044
+ */
9045
+ task_attributes: {
9046
+ /**
9047
+ * Name of the form task; defaults to the form definition's name.
9048
+ */
9049
+ name?: string | null;
9050
+ /**
9051
+ * Free-text description of the task.
9052
+ */
9053
+ description?: string | null;
9054
+ /**
9055
+ * ID of the user creating the task, recorded as its creator. Required; a missing value returns 400.
9056
+ */
9057
+ created_by_user_id: string;
9058
+ /**
9059
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
9060
+ */
9061
+ time_due?: string | null;
9062
+ /**
9063
+ * IANA time zone in which time_due is interpreted; null for an unscheduled task.
9064
+ */
9065
+ tz_name?: string | null;
9066
+ /**
9067
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
9068
+ */
9069
+ frequency?: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
9070
+ /**
9071
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
9072
+ */
9073
+ recurrence_end_time?: string | null;
9074
+ /**
9075
+ * IDs of the users this form task is assigned to.
9076
+ */
9077
+ task_assignee_user_ids?: Array<string>;
9078
+ /**
9079
+ * Reminders to attach, each an offset from the due time. On update, replaces the existing set.
9080
+ */
9081
+ reminders_attributes?: Array<{
9082
+ /**
9083
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
9084
+ */
9085
+ offset: 'PT0S' | 'PT-1M' | 'PT-5M' | 'PT-10M' | 'PT-15M' | 'PT-30M' | 'PT-1H' | 'PT-2H' | 'P-1D' | 'P-2D' | 'P-3D' | 'P-4D' | 'P-5D' | 'P-6D' | 'P-1W' | 'P-2W' | 'P-1M' | 'P-2M' | 'P-3M' | 'P-6M' | 'P-1Y' | 'PT5M' | 'PT15M' | 'PT30M' | 'PT1H' | 'PT6H' | 'PT12H' | 'P1D' | 'P2D' | 'P3D' | 'P4D' | 'P5D' | 'P6D' | 'P1W' | 'P2W' | 'P3W';
9086
+ }>;
9087
+ };
9088
+ };
9089
+ /**
9090
+ * Update a feature form assignment. All fields are optional — send only what changes. site_id and feature_id come from the path and cannot be sent. recurring gates the recurrence fields, and task_attributes.reminders_attributes replaces the existing reminder set when supplied. An empty task_assignee_user_ids list is valid. The creator is set at creation and cannot be sent.
9091
+ */
9092
+ export type FeatureFormAssignmentUpdateParameters = {
9093
+ /**
9094
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
9095
+ */
9096
+ form_definition_id?: string;
9097
+ /**
9098
+ * When true, frequency and recurrence_end_time apply; when false or omitted, the task is one-time and those fields are cleared.
9099
+ */
9100
+ recurring?: boolean;
9101
+ /**
9102
+ * The underlying task's name, schedule, assignees, and reminders.
9103
+ */
9104
+ task_attributes?: {
9105
+ /**
9106
+ * Name of the form task; defaults to the form definition's name.
9107
+ */
9108
+ name?: string | null;
9109
+ /**
9110
+ * Free-text description of the task.
9111
+ */
9112
+ description?: string | null;
9113
+ /**
9114
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
9115
+ */
9116
+ time_due?: string | null;
9117
+ /**
9118
+ * IANA time zone in which time_due is interpreted; null for an unscheduled task.
9119
+ */
9120
+ tz_name?: string | null;
9121
+ /**
9122
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
9123
+ */
9124
+ frequency?: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
9125
+ /**
9126
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
9127
+ */
9128
+ recurrence_end_time?: string | null;
9129
+ /**
9130
+ * IDs of the users this form task is assigned to.
9131
+ */
9132
+ task_assignee_user_ids?: Array<string>;
9133
+ /**
9134
+ * Reminders to attach, each an offset from the due time. On update, replaces the existing set.
9135
+ */
9136
+ reminders_attributes?: Array<{
9137
+ /**
9138
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
9139
+ */
9140
+ offset: 'PT0S' | 'PT-1M' | 'PT-5M' | 'PT-10M' | 'PT-15M' | 'PT-30M' | 'PT-1H' | 'PT-2H' | 'P-1D' | 'P-2D' | 'P-3D' | 'P-4D' | 'P-5D' | 'P-6D' | 'P-1W' | 'P-2W' | 'P-1M' | 'P-2M' | 'P-3M' | 'P-6M' | 'P-1Y' | 'PT5M' | 'PT15M' | 'PT30M' | 'PT1H' | 'PT6H' | 'PT12H' | 'P1D' | 'P2D' | 'P3D' | 'P4D' | 'P5D' | 'P6D' | 'P1W' | 'P2W' | 'P3W';
9141
+ }>;
9142
+ };
9143
+ };
9144
+ /**
9145
+ * Create a job form assignment. form_definition_id and task_attributes are required, and task_attributes.created_by_user_id is required (a missing value returns 400). job_id comes from the path and is not part of the body. recurring gates the recurrence fields. An assignee outside the credential company returns 422, and a creator outside it returns 403.
9146
+ */
9147
+ export type JobFormAssignmentParameters = {
9148
+ /**
9149
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
9150
+ */
9151
+ form_definition_id: string;
9152
+ /**
9153
+ * When true, frequency and recurrence_end_time apply; when false or omitted, the task is one-time and those fields are cleared.
9154
+ */
9155
+ recurring?: boolean;
9156
+ /**
9157
+ * The underlying task's name, schedule, assignees, and reminders.
9158
+ */
9159
+ task_attributes: {
9160
+ /**
9161
+ * Name of the form task; defaults to the form definition's name.
9162
+ */
9163
+ name?: string | null;
9164
+ /**
9165
+ * Free-text description of the task.
9166
+ */
9167
+ description?: string | null;
9168
+ /**
9169
+ * ID of the user creating the task, recorded as its creator. Required; a missing value returns 400.
9170
+ */
9171
+ created_by_user_id: string;
9172
+ /**
9173
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
9174
+ */
9175
+ time_due?: string | null;
9176
+ /**
9177
+ * IANA time zone in which time_due is interpreted; null for an unscheduled task.
9178
+ */
9179
+ tz_name?: string | null;
9180
+ /**
9181
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
9182
+ */
9183
+ frequency?: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
9184
+ /**
9185
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
9186
+ */
9187
+ recurrence_end_time?: string | null;
9188
+ /**
9189
+ * IDs of the users this form task is assigned to.
9190
+ */
9191
+ task_assignee_user_ids?: Array<string>;
9192
+ /**
9193
+ * Reminders to attach, each an offset from the due time. On update, replaces the existing set.
9194
+ */
9195
+ reminders_attributes?: Array<{
9196
+ /**
9197
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
9198
+ */
9199
+ offset: 'PT0S' | 'PT-1M' | 'PT-5M' | 'PT-10M' | 'PT-15M' | 'PT-30M' | 'PT-1H' | 'PT-2H' | 'P-1D' | 'P-2D' | 'P-3D' | 'P-4D' | 'P-5D' | 'P-6D' | 'P-1W' | 'P-2W' | 'P-1M' | 'P-2M' | 'P-3M' | 'P-6M' | 'P-1Y' | 'PT5M' | 'PT15M' | 'PT30M' | 'PT1H' | 'PT6H' | 'PT12H' | 'P1D' | 'P2D' | 'P3D' | 'P4D' | 'P5D' | 'P6D' | 'P1W' | 'P2W' | 'P3W';
9200
+ }>;
9201
+ };
9202
+ };
9203
+ /**
9204
+ * Update a job form assignment. All fields are optional — send only what changes. job_id comes from the path and cannot be sent. recurring gates the recurrence fields, and task_attributes.reminders_attributes replaces the existing reminder set when supplied. A newly added assignee outside the credential company returns 422. The creator is set at creation and cannot be sent.
9205
+ */
9206
+ export type JobFormAssignmentUpdateParameters = {
9207
+ /**
9208
+ * ID of the form definition (a SurveyJS form template) this assignment is for.
9209
+ */
9210
+ form_definition_id?: string;
9211
+ /**
9212
+ * When true, frequency and recurrence_end_time apply; when false or omitted, the task is one-time and those fields are cleared.
9213
+ */
9214
+ recurring?: boolean;
9215
+ /**
9216
+ * The underlying task's name, schedule, assignees, and reminders.
9217
+ */
9218
+ task_attributes?: {
9219
+ /**
9220
+ * Name of the form task; defaults to the form definition's name.
9221
+ */
9222
+ name?: string | null;
9223
+ /**
9224
+ * Free-text description of the task.
9225
+ */
9226
+ description?: string | null;
9227
+ /**
9228
+ * When the form task is due (ISO 8601), interpreted in tz_name; null for an unscheduled task.
9229
+ */
9230
+ time_due?: string | null;
9231
+ /**
9232
+ * IANA time zone in which time_due is interpreted; null for an unscheduled task.
9233
+ */
9234
+ tz_name?: string | null;
9235
+ /**
9236
+ * How often this form task recurs: one of DAILY, WORKDAILY, WORKDAILYSIX, WEEKLY, BIWEEKLY, MONTHLY, or QUARTERLY. Null for a one-time assignment; on write, applied only when recurring is true.
9237
+ */
9238
+ frequency?: 'DAILY' | 'WORKDAILY' | 'WORKDAILYSIX' | 'WEEKLY' | 'BIWEEKLY' | 'MONTHLY' | 'QUARTERLY' | null;
9239
+ /**
9240
+ * When recurrence stops (ISO 8601); null for a non-recurring or open-ended task.
9241
+ */
9242
+ recurrence_end_time?: string | null;
9243
+ /**
9244
+ * IDs of the users this form task is assigned to.
9245
+ */
9246
+ task_assignee_user_ids?: Array<string>;
9247
+ /**
9248
+ * Reminders to attach, each an offset from the due time. On update, replaces the existing set.
9249
+ */
9250
+ reminders_attributes?: Array<{
9251
+ /**
9252
+ * ISO 8601 duration offset from the due time for the reminder (e.g. -PT1H for one hour before); must be one of the preset reminder times.
9253
+ */
9254
+ offset: 'PT0S' | 'PT-1M' | 'PT-5M' | 'PT-10M' | 'PT-15M' | 'PT-30M' | 'PT-1H' | 'PT-2H' | 'P-1D' | 'P-2D' | 'P-3D' | 'P-4D' | 'P-5D' | 'P-6D' | 'P-1W' | 'P-2W' | 'P-1M' | 'P-2M' | 'P-3M' | 'P-6M' | 'P-1Y' | 'PT5M' | 'PT15M' | 'PT30M' | 'PT1H' | 'PT6H' | 'PT12H' | 'P1D' | 'P2D' | 'P3D' | 'P4D' | 'P5D' | 'P6D' | 'P1W' | 'P2W' | 'P3W';
9255
+ }>;
9256
+ };
9257
+ };
9258
+ /**
9259
+ * A spot to be filled on a job — one worker's assignment and the unit against which they track time, carrying the schedule window, assigned worker, function, and the planned pay and fringe rates (including PWA prevailing-wage compliance rates). Always accessed nested under a job.
9260
+ */
9261
+ export type PositionResponseObject = {
9262
+ /**
9263
+ * Unique identifier.
9264
+ */
9265
+ id: string;
9266
+ /**
9267
+ * ID of the job this position belongs to; always matches the job in the URL path.
9268
+ */
9269
+ job_id: string;
9270
+ /**
9271
+ * ID of the worker assigned to fill this position; null when the position is unfilled.
9272
+ */
9273
+ fulfilled_by_user_id: string | null;
9274
+ /**
9275
+ * ID of the pay-rate rule package applied to this position, or null when none is set.
9276
+ */
9277
+ pay_rates_rule_package_id: string | null;
9278
+ position_function: PositionFunction;
9279
+ /**
9280
+ * Name of the per diem applied to this position; null when none is set.
9281
+ */
9282
+ per_diem_name: string | null;
9283
+ /**
9284
+ * ISO 4217 currency code for the per-diem rate; null when no per diem is set.
9285
+ */
9286
+ per_diem_currency: string | null;
9287
+ /**
9288
+ * Per-diem amount in cents, as a string; null when no per diem is set.
9289
+ */
9290
+ per_diem_rate_cents: string | null;
9291
+ /**
9292
+ * Planned base hourly pay rate in cents, as a string; null when no rate is set.
9293
+ */
9294
+ hourly_rate_cents: string | null;
9295
+ /**
9296
+ * Where the hourly rate came from: one of user_default, prevailing_wage, or custom; null when no rate is set.
9297
+ */
9298
+ hourly_rate_src_type: string | null;
9299
+ /**
9300
+ * Planned hourly cash-fringe rate in cents, as a string; null when unset.
9301
+ */
9302
+ cash_fringe_rate_cents: string | null;
9303
+ /**
9304
+ * Where the cash-fringe rate came from: one of prevailing_wage or custom; null when unset.
9305
+ */
9306
+ cash_fringe_rate_src_type: string | null;
9307
+ /**
9308
+ * Hourly wage-pay rate in cents applied to PWA (prevailing-wage / apprenticeship) eligible time on this position, as a string; null for non-PWA positions.
9309
+ */
9310
+ pwa_wage_pay_rate_cents: string | null;
9311
+ /**
9312
+ * Where the PWA wage-pay rate came from: one of user_default, prevailing_wage, or custom; null for non-PWA positions.
9313
+ */
9314
+ pwa_wage_pay_rate_src_type: string | null;
9315
+ /**
9316
+ * Hourly wage-adder rate in cents, as a string; null when unset. Excluded from cash-in-lieu-of-fringe calculations.
9317
+ */
9318
+ wage_adder_rate_cents: string | null;
9319
+ /**
9320
+ * Whether this position tracks Prevailing Wage / Apprenticeship (PWA) compliance; when true, the PWA rate fields and wage-determination associations apply.
9321
+ */
9322
+ pwa: boolean;
9323
+ /**
9324
+ * IDs of the federal (Davis-Bacon) wage determinations applied to this position; empty when none.
9325
+ */
9326
+ federal_wage_determination_ids: Array<string>;
9327
+ /**
9328
+ * IDs of the regional (state) wage determinations applied to this position; empty when none.
9329
+ */
9330
+ regional_wage_determination_ids: Array<string>;
9331
+ /**
9332
+ * PWA classification detail for this position; carries skill_level, the apprenticeship or skill classification, which is null when unset.
9333
+ */
9334
+ pwa_details: {
9335
+ /**
9336
+ * The apprenticeship or skill classification; null when unset.
9337
+ */
9338
+ skill_level: string | null;
9339
+ };
9340
+ /**
9341
+ * Start of the position's scheduled window (ISO 8601); null when unscheduled.
9342
+ */
9343
+ start_time: string | null;
9344
+ /**
9345
+ * End of the position's scheduled window (ISO 8601); null when unscheduled.
9346
+ */
9347
+ end_time: string | null;
9348
+ /**
9349
+ * When the record was created (ISO 8601).
9350
+ */
9351
+ created_at: string;
9352
+ /**
9353
+ * When the record was last updated (ISO 8601).
9354
+ */
9355
+ updated_at: string;
9356
+ };
9357
+ /**
9358
+ * A company-owned collection of conditional wage and fringe adjustments, optionally scoped to a job.
9359
+ */
9360
+ export type PayRatesRulePackageResponseObject = {
9361
+ /**
9362
+ * Unique identifier of the rule package.
9363
+ */
9364
+ id: string;
9365
+ /**
9366
+ * Human-readable package name.
9367
+ */
9368
+ name: string;
9369
+ /**
9370
+ * Free-form package description, or null.
9371
+ */
9372
+ description: string | null;
9373
+ /**
9374
+ * ID of the job this package is scoped to, or null for a company-wide package.
9375
+ */
9376
+ scoped_to_job_id: string | null;
9377
+ /**
9378
+ * Whether this is the default package within its company-wide or job scope.
9379
+ */
9380
+ default: boolean;
9381
+ /**
9382
+ * Whether users may select this package directly in configuration workflows.
9383
+ */
9384
+ selectable: boolean;
9385
+ /**
9386
+ * When the record was created (ISO 8601).
9387
+ */
9388
+ created_at: string;
9389
+ /**
9390
+ * When the record was last updated (ISO 8601).
9391
+ */
9392
+ updated_at: string;
9393
+ };
9394
+ /**
9395
+ * Parameters for creating a company-wide pay-rate rule package.
9396
+ */
9397
+ export type PayRatesRulePackageParameters = {
9398
+ /**
9399
+ * Human-readable package name.
9400
+ */
9401
+ name: string;
9402
+ /**
9403
+ * Free-form package description; send null or omit it when no description is needed.
9404
+ */
9405
+ description?: string | null;
9406
+ };
9407
+ /**
9408
+ * Request body for updating a pay-rate rule package. Send only the fields to change. `default`, `selectable`, and `scoped_to_job_id` are not writable on this operation.
9409
+ */
9410
+ export type PayRatesRulePackageUpdateParameters = {
9411
+ /**
9412
+ * Human-readable package name. Omit to leave it unchanged.
9413
+ */
9414
+ name?: string;
9415
+ /**
8821
9416
  * Free-form package description; omit to leave it unchanged, or send null to clear it.
8822
9417
  */
8823
9418
  description?: string | null;
@@ -8837,10 +9432,6 @@ export type PositionsResponseObject = {
8837
9432
  * Request body for creating or updating a position on a job. The job is taken from the URL path.
8838
9433
  */
8839
9434
  export type PositionParameters = {
8840
- /**
8841
- * ID of the job the position belongs to; taken from the URL path, not the request body.
8842
- */
8843
- job_id?: string;
8844
9435
  /**
8845
9436
  * ID of the worker to assign; cannot be changed once the position has tracked time.
8846
9437
  */
@@ -8982,6 +9573,29 @@ export type ProductionJobScopePriceResponseObject = {
8982
9573
  * A completion's payload shape follows the production tracking kind of the scope price's job — the server derives the completable subtype from the job, never from the request. Feature-tracked jobs record which feature was completed (feature payload); quantity-tracked jobs record how many units were completed (quantity payload). The two payloads are mutually exclusive: sending the other kind's completable key returns 422.
8983
9574
  */
8984
9575
  export type ProductionCompletionParameters = ProductionFeatureCompletionParameters | ProductionQuantityCompletionParameters;
9576
+ /**
9577
+ * Update a completion. Send only the fields to change. The scope price, filer, and feature reference are fixed at creation. Sending production_job_scope_price_id or performed_by_user_id on update returns 400 unknown_key. Feature completions accept no completable changes; quantity completions accept quantity_completed. A key for the other subtype returns 422.
9578
+ */
9579
+ export type ProductionCompletionUpdateParameters = {
9580
+ /**
9581
+ * Free-text notes; omit to preserve them, or send null to clear them.
9582
+ */
9583
+ notes?: string | null;
9584
+ /**
9585
+ * Date the work was performed (YYYY-MM-DD); omit to preserve it.
9586
+ */
9587
+ work_date?: string;
9588
+ /**
9589
+ * Job positions that performed the work. Omit to preserve the crew; a supplied list replaces it and must retain at least one position.
9590
+ */
9591
+ position_ids?: Array<string>;
9592
+ completable_attributes?: {
9593
+ /**
9594
+ * Number of units completed, for quantity completions only. Omit to preserve it.
9595
+ */
9596
+ quantity_completed?: number;
9597
+ };
9598
+ };
8985
9599
  /**
8986
9600
  * Fields shared by both completion payload kinds.
8987
9601
  */
@@ -9391,7 +10005,7 @@ export type CertificationResponseObject = {
9391
10005
  updated_at: string;
9392
10006
  };
9393
10007
  /**
9394
- * Request body for recording a certification held by a worker — who holds it, which certification, when it was received, and optional proof, expiry, and verification details.
10008
+ * Request body for recording a certification held by a worker — who holds it, which certification, when it was received, and optional proof and expiry. Verification is read-only for all API keys; employer approval is a separate action.
9395
10009
  */
9396
10010
  export type UserCertificationParameters = {
9397
10011
  /**
@@ -9399,7 +10013,7 @@ export type UserCertificationParameters = {
9399
10013
  */
9400
10014
  user_id: string;
9401
10015
  /**
9402
- * Id of the certification held. Required. A worker can hold each certification at most once.
10016
+ * Id of a certification visible to the key in its company, or a global certification. Required. A worker can hold each certification at most once.
9403
10017
  */
9404
10018
  certification_id: string;
9405
10019
  /**
@@ -9420,11 +10034,7 @@ export type UserCertificationParameters = {
9420
10034
  content: string;
9421
10035
  } | null;
9422
10036
  /**
9423
- * Whether DSPTCH has verified this held certification. Distinct from the verified flag on the certification definition itself.
9424
- */
9425
- verified?: boolean;
9426
- /**
9427
- * When the held certification expires (YYYY-MM-DD). Must be after received_at; null when it does not expire.
10037
+ * Company keys only: when the held certification expires (YYYY-MM-DD). On creation, must be after received_at; null when it does not expire. User keys must omit this field; supplying it returns 403. Creation and receipt or certification changes currently recalculate expiry from the catalog duration.
9428
10038
  */
9429
10039
  expiration_date?: string | null;
9430
10040
  /**
@@ -9437,7 +10047,7 @@ export type UserCertificationParameters = {
9437
10047
  archived_at?: string | null;
9438
10048
  };
9439
10049
  /**
9440
- * Request body for updating a certification held by a worker. Every field is optional; omit a field to preserve its current value. The resulting certification must still have a receipt date and verification state, and any expiry date must remain after its receipt date. Changing anything but verified revokes an approval; approve through the approval endpoint.
10050
+ * Request body for updating a certification held by a worker. Every field is optional; omit a field to preserve its current value. The resulting certification must still have a receipt date. Verification is read-only for all API keys. Changes to the worker, certification, receipt date, credential number, proof document, or explicit expiration revoke DSPTCH/provider verification. Unchanged evidence, archiving, and employer approval preserve verification. Changing approved content revokes employer approval; approve through the approval endpoint.
9441
10051
  */
9442
10052
  export type UserCertificationUpdateParameters = {
9443
10053
  /**
@@ -9445,7 +10055,7 @@ export type UserCertificationUpdateParameters = {
9445
10055
  */
9446
10056
  user_id?: string;
9447
10057
  /**
9448
- * Id of the certification held. Omit to preserve the current certification; a worker can hold each certification at most once.
10058
+ * Id of a certification visible to the key in its company, or a global certification. Omit or repeat the stored id to preserve the current certification; a worker can hold each certification at most once.
9449
10059
  */
9450
10060
  certification_id?: string;
9451
10061
  /**
@@ -9466,11 +10076,7 @@ export type UserCertificationUpdateParameters = {
9466
10076
  content: string;
9467
10077
  } | null;
9468
10078
  /**
9469
- * Whether DSPTCH has verified this held certification. Distinct from the verified flag on the certification definition itself.
9470
- */
9471
- verified?: boolean;
9472
- /**
9473
- * When the held certification expires (YYYY-MM-DD). Must be after received_at; null when it does not expire.
10079
+ * Company keys only: when the held certification expires (YYYY-MM-DD). On creation, must be after received_at; null when it does not expire. User keys must omit this field; supplying it returns 403. Creation and receipt or certification changes currently recalculate expiry from the catalog duration.
9474
10080
  */
9475
10081
  expiration_date?: string | null;
9476
10082
  /**
@@ -9487,7 +10093,7 @@ export type UserCertificationUpdateParameters = {
9487
10093
  */
9488
10094
  export type UserCertificationApprovalParameters = {
9489
10095
  /**
9490
- * Company keys only: the approver to record. Required with a company key.
10096
+ * Company keys only: a visible admin, manager, or safety manager at the key's company to record as approver. Required with a company key.
9491
10097
  */
9492
10098
  approved_by_user_id?: string;
9493
10099
  };
@@ -9523,9 +10129,9 @@ export type UserCertificationResponseObject = {
9523
10129
  */
9524
10130
  received_at: string;
9525
10131
  /**
9526
- * Whether DSPTCH has verified this held certification.
10132
+ * Whether DSPTCH or a trusted provider has verified the current evidence. Read-only for every API key and independent of employer approval. Ordinary changes to the worker, certification, issuer, receipt date, credential number, proof document, or explicit expiration revoke verification. Unchanged evidence, archiving, employer approval, and automatic expiration recalculation preserve it. A trusted provider can verify replacement evidence.
9527
10133
  */
9528
- verified: boolean;
10134
+ readonly verified: boolean;
9529
10135
  /**
9530
10136
  * Id of the company or organization that granted the certification to the worker. Set to your company for records created through the API; null when unknown.
9531
10137
  */
@@ -9693,6 +10299,10 @@ export type WageDeterminationResponseObject = {
9693
10299
  * Identifier of this determination record — permanent, because the record is an immutable DOL publication; a DOL revision arrives as a new record linked through superseded_by_wage_determination_id, not a rewrite of this one.
9694
10300
  */
9695
10301
  id: string;
10302
+ /**
10303
+ * Stable UUID identifying the annual general decision family, shared by every modification. A successor-year general decision has its own UID. Use id to retrieve a specific published revision.
10304
+ */
10305
+ uid: string;
9696
10306
  /**
9697
10307
  * DOL general decision number identifying this determination (e.g. "CA20240001"); combine with modification_number for the full versioned identifier (e.g. "CA20240001/1").
9698
10308
  */
@@ -11145,6 +11755,7 @@ export type AssetsItemResponseObject = {
11145
11755
  */
11146
11756
  quantity: number;
11147
11757
  }>;
11758
+ attributes: AssetsAttributeValueObjects;
11148
11759
  /**
11149
11760
  * Images attached to the item; each carries a download url for its file.
11150
11761
  */
@@ -11163,7 +11774,7 @@ export type AssetsItemResponseObject = {
11163
11774
  updated_at: string;
11164
11775
  };
11165
11776
  /**
11166
- * Create an asset item. The write API creates serial items only; assets_product_id and serial_number identify the product and serial number. On create you may also place the item — assets_site_id to stock it at a site, or user_id to assign it to a user (the two are mutually exclusive). performed_by_user_id is required.
11777
+ * Create an asset item. The write API creates serial items only; assets_product_id and serial_number identify the product and serial number. `attribute_values` fills the item-level attributes of the product's category. On create you may also place the item — assets_site_id to stock it at a site, or user_id to assign it to a user (the two are mutually exclusive). performed_by_user_id is required.
11167
11778
  */
11168
11779
  export type AssetsItemParameters = {
11169
11780
  /**
@@ -11202,6 +11813,23 @@ export type AssetsItemParameters = {
11202
11813
  * URL to this item in an external system.
11203
11814
  */
11204
11815
  external_system_url?: string;
11816
+ /**
11817
+ * Upserts the values of the item-level attributes of the product's category, one entry per attribute. Send a blank value and null assets_attribute_option_id to clear one.
11818
+ */
11819
+ attribute_values?: Array<{
11820
+ /**
11821
+ * ID of the attribute definition.
11822
+ */
11823
+ assets_attribute_id: string;
11824
+ /**
11825
+ * The entered value for a non-select attribute (text, number, date, or boolean as a string); null for a select attribute or when unfilled.
11826
+ */
11827
+ value?: string | null;
11828
+ /**
11829
+ * ID of the chosen option for a select attribute; null otherwise.
11830
+ */
11831
+ assets_attribute_option_id?: string | null;
11832
+ }>;
11205
11833
  /**
11206
11834
  * Image attachments. Send file with a signed_id to add one; include id with _destroy to remove an existing one.
11207
11835
  */
@@ -11228,7 +11856,7 @@ export type AssetsItemParameters = {
11228
11856
  performed_by_user_id: string;
11229
11857
  };
11230
11858
  /**
11231
- * Update an asset item. All item fields are optional — send only what changes — but performed_by_user_id is required to record the updater. Omitted attributes retain their existing values.
11859
+ * Update an asset item. All item fields are optional — send only what changes — but performed_by_user_id is required to record the updater. Omitted attributes retain their existing values. `attribute_values` upserts the item-level attributes of the product's category.
11232
11860
  */
11233
11861
  export type AssetsItemUpdateParameters = {
11234
11862
  /**
@@ -11267,6 +11895,23 @@ export type AssetsItemUpdateParameters = {
11267
11895
  * URL to this item in an external system.
11268
11896
  */
11269
11897
  external_system_url?: string;
11898
+ /**
11899
+ * Upserts the values of the item-level attributes of the product's category, one entry per attribute. Send a blank value and null assets_attribute_option_id to clear one.
11900
+ */
11901
+ attribute_values?: Array<{
11902
+ /**
11903
+ * ID of the attribute definition.
11904
+ */
11905
+ assets_attribute_id: string;
11906
+ /**
11907
+ * The entered value for a non-select attribute (text, number, date, or boolean as a string); null for a select attribute or when unfilled.
11908
+ */
11909
+ value?: string | null;
11910
+ /**
11911
+ * ID of the chosen option for a select attribute; null otherwise.
11912
+ */
11913
+ assets_attribute_option_id?: string | null;
11914
+ }>;
11270
11915
  /**
11271
11916
  * Image attachments. Send file with a signed_id to add one; include id with _destroy to remove an existing one.
11272
11917
  */
@@ -12534,17 +13179,9 @@ export type AssetsSubLocationParameters = {
12534
13179
  code: string;
12535
13180
  };
12536
13181
  /**
12537
- * Update a storage location. All fields are optional — send only what changes. The holder fields cannot change after creation; renaming code cascades new path codes through the node's subtree.
13182
+ * Update a storage location. All fields are optional — send only what changes. Sending assets_site_id or container_item_id on update returns 400 unknown_key. Holder fields are accepted only on create; renaming code cascades new path codes through the node's subtree.
12538
13183
  */
12539
13184
  export type AssetsSubLocationUpdateParameters = {
12540
- /**
12541
- * ID of the site the location belongs to. Top-level nodes only — exactly one of assets_site_id or container_item_id; nested nodes inherit the parent's holder.
12542
- */
12543
- assets_site_id?: string;
12544
- /**
12545
- * ID of the container item the location belongs to. Top-level nodes only — exactly one of assets_site_id or container_item_id; the container's product must be flagged as a container.
12546
- */
12547
- container_item_id?: string;
12548
13185
  /**
12549
13186
  * ID of the enclosing location for a nested node; omit for a top-level node.
12550
13187
  */
@@ -12749,6 +13386,78 @@ export type AssetsArchiveParameters = {
12749
13386
  */
12750
13387
  performed_by_user_id: string;
12751
13388
  };
13389
+ /**
13390
+ * A page of certifications held by your company's workers.
13391
+ */
13392
+ export type UserCertificationsResponseObjWritable = {
13393
+ meta: Meta;
13394
+ links: Links;
13395
+ /**
13396
+ * The page of held certifications.
13397
+ */
13398
+ data: Array<UserCertificationResponseObjectWritable>;
13399
+ };
13400
+ /**
13401
+ * A certification held by a worker — the record that a worker earned a certification, with its receipt date, optional expiry, and verification state.
13402
+ */
13403
+ export type UserCertificationResponseObjectWritable = {
13404
+ /**
13405
+ * Unique identifier of the held certification.
13406
+ */
13407
+ id: string;
13408
+ /**
13409
+ * Id of the worker who holds the certification.
13410
+ */
13411
+ user_id: string;
13412
+ /**
13413
+ * Id of the certification held.
13414
+ */
13415
+ certification_id: string;
13416
+ /**
13417
+ * When the worker earned the certification (ISO 8601).
13418
+ */
13419
+ received_at: string;
13420
+ /**
13421
+ * Id of the company or organization that granted the certification to the worker. Set to your company for records created through the API; null when unknown.
13422
+ */
13423
+ issuer_company_id: string | null;
13424
+ /**
13425
+ * When the held certification expires (YYYY-MM-DD); null when it does not expire.
13426
+ */
13427
+ expiration_date: string | null;
13428
+ /**
13429
+ * The credential or document number for the held certification, as issued by the issuer; null when none.
13430
+ */
13431
+ credential_id: string | null;
13432
+ /**
13433
+ * Id of the user who approved this held certification; null when unapproved. Set through the approval endpoint.
13434
+ */
13435
+ approved_by_user_id: string | null;
13436
+ /**
13437
+ * Id of the user who created the record; null when unrecorded (records created through the API do not set it).
13438
+ */
13439
+ created_by_user_id: string | null;
13440
+ /**
13441
+ * Id of the user who last updated the record; null when unrecorded.
13442
+ */
13443
+ updated_by_user_id: string | null;
13444
+ /**
13445
+ * When the held certification was archived (ISO 8601); null while active.
13446
+ */
13447
+ archived_at: string | null;
13448
+ /**
13449
+ * When the current approval was recorded (ISO 8601); null when unapproved.
13450
+ */
13451
+ approved_at: string | null;
13452
+ /**
13453
+ * When the record was created (ISO 8601).
13454
+ */
13455
+ created_at: string;
13456
+ /**
13457
+ * When the record was last updated (ISO 8601).
13458
+ */
13459
+ updated_at: string;
13460
+ };
12752
13461
  export type ListApiKeyScopesData = {
12753
13462
  body?: never;
12754
13463
  path?: never;
@@ -12967,6 +13676,10 @@ export type ListApprenticesData = {
12967
13676
  *
12968
13677
  */
12969
13678
  'filter[status]'?: string;
13679
+ /**
13680
+ * Fuzzy-matches the enrolled worker name (trigram word-similarity). Matches the user name only — not the program, occupation, or wage-schedule name.
13681
+ */
13682
+ 'filter[name]'?: string;
12970
13683
  'filter[created_at][gte]'?: string;
12971
13684
  'filter[created_at][lte]'?: string;
12972
13685
  'filter[updated_at][gte]'?: string;
@@ -14615,7 +15328,7 @@ export type CreateItemErrors = {
14615
15328
  */
14616
15329
  404: Problem;
14617
15330
  /**
14618
- * Unprocessable Content (conflicting placement)
15331
+ * Unprocessable Content (missing required attribute)
14619
15332
  */
14620
15333
  422: Problem;
14621
15334
  };
@@ -16088,6 +16801,10 @@ export type CreateSubLocationData = {
16088
16801
  url: '/api/v1/assets/sub_locations';
16089
16802
  };
16090
16803
  export type CreateSubLocationErrors = {
16804
+ /**
16805
+ * Bad Request
16806
+ */
16807
+ 400: Problem;
16091
16808
  /**
16092
16809
  * Forbidden
16093
16810
  */
@@ -16100,7 +16817,7 @@ export type CreateSubLocationErrors = {
16100
16817
  export type CreateSubLocationError = CreateSubLocationErrors[keyof CreateSubLocationErrors];
16101
16818
  export type CreateSubLocationResponses = {
16102
16819
  /**
16103
- * Created
16820
+ * Created with an explicit holder
16104
16821
  */
16105
16822
  201: AssetsSubLocationResponseObject;
16106
16823
  };
@@ -16170,6 +16887,10 @@ export type UpdateSubLocationData = {
16170
16887
  url: '/api/v1/assets/sub_locations/{id}';
16171
16888
  };
16172
16889
  export type UpdateSubLocationErrors = {
16890
+ /**
16891
+ * Bad Request (create-only holder)
16892
+ */
16893
+ 400: Problem;
16173
16894
  /**
16174
16895
  * Forbidden
16175
16896
  */
@@ -17012,6 +17733,12 @@ export type ListCertificationsData = {
17012
17733
  body?: never;
17013
17734
  path?: never;
17014
17735
  query?: {
17736
+ /**
17737
+ * Fuzzy-matches the certification name (trigram word-similarity). Matches the name column only.
17738
+ */
17739
+ 'filter[name]'?: string;
17740
+ filter?: string;
17741
+ 'filter[unexpected]'?: string;
17015
17742
  /**
17016
17743
  * This pagination cursor corresponds to the cursor value found in the response in
17017
17744
  * `meta.page.next_cursor`.
@@ -17157,6 +17884,10 @@ export type ListDepartmentsData = {
17157
17884
  body?: never;
17158
17885
  path?: never;
17159
17886
  query?: {
17887
+ /**
17888
+ * Fuzzy-matches the department name (trigram word-similarity). Matches the name column only.
17889
+ */
17890
+ 'filter[name]'?: string;
17160
17891
  'filter[created_at][gte]'?: string;
17161
17892
  'filter[created_at][lte]'?: string;
17162
17893
  'filter[updated_at][gte]'?: string;
@@ -17800,6 +18531,10 @@ export type ListFormDefinitionsData = {
17800
18531
  body?: never;
17801
18532
  path?: never;
17802
18533
  query?: {
18534
+ /**
18535
+ * Fuzzy-matches the form definition name (trigram word-similarity). Matches the name column only — not tags.
18536
+ */
18537
+ 'filter[name]'?: string;
17803
18538
  'filter[created_at][gte]'?: string;
17804
18539
  'filter[created_at][lte]'?: string;
17805
18540
  'filter[updated_at][gte]'?: string;
@@ -18085,6 +18820,12 @@ export type ListGroupsData = {
18085
18820
  body?: never;
18086
18821
  path?: never;
18087
18822
  query?: {
18823
+ /**
18824
+ * Fuzzy-matches the group name (trigram word-similarity). Matches the name column only.
18825
+ */
18826
+ 'filter[name]'?: string;
18827
+ filter?: string;
18828
+ 'filter[unexpected]'?: string;
18088
18829
  /**
18089
18830
  * This pagination cursor corresponds to the cursor value found in the response in
18090
18831
  * `meta.page.next_cursor`.
@@ -18234,6 +18975,147 @@ export type UpdateGroupResponses = {
18234
18975
  200: GroupResponseObject;
18235
18976
  };
18236
18977
  export type UpdateGroupResponse = UpdateGroupResponses[keyof UpdateGroupResponses];
18978
+ export type ListJobFormAssignmentTasksData = {
18979
+ body?: never;
18980
+ path: {
18981
+ job_id: string;
18982
+ };
18983
+ query?: {
18984
+ /**
18985
+ * This pagination cursor corresponds to the cursor value found in the response in
18986
+ * `meta.page.next_cursor`.
18987
+ */
18988
+ 'page[cursor]'?: string;
18989
+ /**
18990
+ * 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`.
18991
+ */
18992
+ 'page[limit]'?: number;
18993
+ page?: string;
18994
+ };
18995
+ url: '/api/v1/jobs/{job_id}/form_assignment_tasks';
18996
+ };
18997
+ export type ListJobFormAssignmentTasksErrors = {
18998
+ /**
18999
+ * Bad Request
19000
+ */
19001
+ 400: Problem;
19002
+ /**
19003
+ * Forbidden
19004
+ */
19005
+ 403: Problem;
19006
+ /**
19007
+ * Not Found
19008
+ */
19009
+ 404: Problem;
19010
+ };
19011
+ export type ListJobFormAssignmentTasksError = ListJobFormAssignmentTasksErrors[keyof ListJobFormAssignmentTasksErrors];
19012
+ export type ListJobFormAssignmentTasksResponses = {
19013
+ /**
19014
+ * Success
19015
+ */
19016
+ 200: {
19017
+ meta: Meta;
19018
+ links: Links;
19019
+ data: Array<JobFormAssignmentResponseObject>;
19020
+ };
19021
+ };
19022
+ export type ListJobFormAssignmentTasksResponse = ListJobFormAssignmentTasksResponses[keyof ListJobFormAssignmentTasksResponses];
19023
+ export type CreateJobFormAssignmentTaskData = {
19024
+ body: JobFormAssignmentParameters;
19025
+ path: {
19026
+ job_id: string;
19027
+ };
19028
+ query?: never;
19029
+ url: '/api/v1/jobs/{job_id}/form_assignment_tasks';
19030
+ };
19031
+ export type CreateJobFormAssignmentTaskErrors = {
19032
+ /**
19033
+ * Bad Request
19034
+ */
19035
+ 400: Problem;
19036
+ /**
19037
+ * Forbidden
19038
+ */
19039
+ 403: Problem;
19040
+ /**
19041
+ * Not Found
19042
+ */
19043
+ 404: Problem;
19044
+ /**
19045
+ * Unprocessable Content
19046
+ */
19047
+ 422: Problem;
19048
+ };
19049
+ export type CreateJobFormAssignmentTaskError = CreateJobFormAssignmentTaskErrors[keyof CreateJobFormAssignmentTaskErrors];
19050
+ export type CreateJobFormAssignmentTaskResponses = {
19051
+ /**
19052
+ * Created (recurring, with assignees and reminders)
19053
+ */
19054
+ 201: JobFormAssignmentResponseObject;
19055
+ };
19056
+ export type CreateJobFormAssignmentTaskResponse = CreateJobFormAssignmentTaskResponses[keyof CreateJobFormAssignmentTaskResponses];
19057
+ export type GetJobFormAssignmentTaskData = {
19058
+ body?: never;
19059
+ path: {
19060
+ job_id: string;
19061
+ id: string;
19062
+ };
19063
+ query?: never;
19064
+ url: '/api/v1/jobs/{job_id}/form_assignment_tasks/{id}';
19065
+ };
19066
+ export type GetJobFormAssignmentTaskErrors = {
19067
+ /**
19068
+ * Forbidden
19069
+ */
19070
+ 403: Problem;
19071
+ /**
19072
+ * Not Found
19073
+ */
19074
+ 404: Problem;
19075
+ };
19076
+ export type GetJobFormAssignmentTaskError = GetJobFormAssignmentTaskErrors[keyof GetJobFormAssignmentTaskErrors];
19077
+ export type GetJobFormAssignmentTaskResponses = {
19078
+ /**
19079
+ * Success
19080
+ */
19081
+ 200: JobFormAssignmentResponseObject;
19082
+ };
19083
+ export type GetJobFormAssignmentTaskResponse = GetJobFormAssignmentTaskResponses[keyof GetJobFormAssignmentTaskResponses];
19084
+ export type UpdateJobFormAssignmentTaskData = {
19085
+ body: JobFormAssignmentUpdateParameters;
19086
+ path: {
19087
+ job_id: string;
19088
+ id: string;
19089
+ };
19090
+ query?: never;
19091
+ url: '/api/v1/jobs/{job_id}/form_assignment_tasks/{id}';
19092
+ };
19093
+ export type UpdateJobFormAssignmentTaskErrors = {
19094
+ /**
19095
+ * Bad Request
19096
+ */
19097
+ 400: Problem;
19098
+ /**
19099
+ * Forbidden
19100
+ */
19101
+ 403: Problem;
19102
+ /**
19103
+ * Not Found
19104
+ */
19105
+ 404: Problem;
19106
+ /**
19107
+ * Unprocessable Content
19108
+ */
19109
+ 422: Problem;
19110
+ };
19111
+ export type UpdateJobFormAssignmentTaskError = UpdateJobFormAssignmentTaskErrors[keyof UpdateJobFormAssignmentTaskErrors];
19112
+ export type UpdateJobFormAssignmentTaskResponses = {
19113
+ /**
19114
+ * Success
19115
+ */
19116
+ 200: JobFormAssignmentResponseObject;
19117
+ };
19118
+ export type UpdateJobFormAssignmentTaskResponse = UpdateJobFormAssignmentTaskResponses[keyof UpdateJobFormAssignmentTaskResponses];
18237
19119
  export type ListJobScopePricesData = {
18238
19120
  body?: never;
18239
19121
  path: {
@@ -19285,6 +20167,14 @@ export type ListJobsData = {
19285
20167
  * Returns jobs in the given project and all of its descendant projects
19286
20168
  */
19287
20169
  'filter[project_id]'?: string;
20170
+ /**
20171
+ * Returns jobs assigned to this provider-company department. Retrieve department IDs from GET /api/v1/companies/departments.
20172
+ */
20173
+ 'filter[companies_department_id]'?: string;
20174
+ /**
20175
+ * Use true for jobs without a department or false for jobs with a department. Use this instead of the department ID filter.
20176
+ */
20177
+ 'filter[companies_department_id][null]'?: boolean;
19288
20178
  /**
19289
20179
  * Returns jobs whose status is any of the given values. Comma-separate to match multiple (e.g. `ready,completed`). Accepts each concrete status (pending_provider, pending_schedule, pending_workers, ready, disputed, completed, cancelled) plus the aggregates `pending` (any pending_* status) and `active` (ready or disputed).
19290
20180
  */
@@ -19553,6 +20443,284 @@ export type GetSiteCheckInResponses = {
19553
20443
  200: SiteCheckInResponseObject;
19554
20444
  };
19555
20445
  export type GetSiteCheckInResponse = GetSiteCheckInResponses[keyof GetSiteCheckInResponses];
20446
+ export type ListFeatureFormAssignmentTasksData = {
20447
+ body?: never;
20448
+ path: {
20449
+ site_id: string;
20450
+ feature_id: string;
20451
+ };
20452
+ query?: {
20453
+ /**
20454
+ * This pagination cursor corresponds to the cursor value found in the response in
20455
+ * `meta.page.next_cursor`.
20456
+ */
20457
+ 'page[cursor]'?: string;
20458
+ /**
20459
+ * 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`.
20460
+ */
20461
+ 'page[limit]'?: number;
20462
+ page?: string;
20463
+ };
20464
+ url: '/api/v1/oversite/sites/{site_id}/features/{feature_id}/form_assignment_tasks';
20465
+ };
20466
+ export type ListFeatureFormAssignmentTasksErrors = {
20467
+ /**
20468
+ * Bad Request
20469
+ */
20470
+ 400: Problem;
20471
+ /**
20472
+ * Forbidden
20473
+ */
20474
+ 403: Problem;
20475
+ /**
20476
+ * Not Found
20477
+ */
20478
+ 404: Problem;
20479
+ };
20480
+ export type ListFeatureFormAssignmentTasksError = ListFeatureFormAssignmentTasksErrors[keyof ListFeatureFormAssignmentTasksErrors];
20481
+ export type ListFeatureFormAssignmentTasksResponses = {
20482
+ /**
20483
+ * Success
20484
+ */
20485
+ 200: {
20486
+ meta: Meta;
20487
+ links: Links;
20488
+ data: Array<FeatureFormAssignmentResponseObject>;
20489
+ };
20490
+ };
20491
+ export type ListFeatureFormAssignmentTasksResponse = ListFeatureFormAssignmentTasksResponses[keyof ListFeatureFormAssignmentTasksResponses];
20492
+ export type CreateFeatureFormAssignmentTaskData = {
20493
+ body: FeatureFormAssignmentParameters;
20494
+ path: {
20495
+ site_id: string;
20496
+ feature_id: string;
20497
+ };
20498
+ query?: never;
20499
+ url: '/api/v1/oversite/sites/{site_id}/features/{feature_id}/form_assignment_tasks';
20500
+ };
20501
+ export type CreateFeatureFormAssignmentTaskErrors = {
20502
+ /**
20503
+ * Bad Request
20504
+ */
20505
+ 400: Problem;
20506
+ /**
20507
+ * Forbidden
20508
+ */
20509
+ 403: Problem;
20510
+ /**
20511
+ * Not Found
20512
+ */
20513
+ 404: Problem;
20514
+ /**
20515
+ * Unprocessable Content
20516
+ */
20517
+ 422: Problem;
20518
+ };
20519
+ export type CreateFeatureFormAssignmentTaskError = CreateFeatureFormAssignmentTaskErrors[keyof CreateFeatureFormAssignmentTaskErrors];
20520
+ export type CreateFeatureFormAssignmentTaskResponses = {
20521
+ /**
20522
+ * Created
20523
+ */
20524
+ 201: FeatureFormAssignmentResponseObject;
20525
+ };
20526
+ export type CreateFeatureFormAssignmentTaskResponse = CreateFeatureFormAssignmentTaskResponses[keyof CreateFeatureFormAssignmentTaskResponses];
20527
+ export type GetFeatureFormAssignmentTaskData = {
20528
+ body?: never;
20529
+ path: {
20530
+ site_id: string;
20531
+ feature_id: string;
20532
+ id: string;
20533
+ };
20534
+ query?: never;
20535
+ url: '/api/v1/oversite/sites/{site_id}/features/{feature_id}/form_assignment_tasks/{id}';
20536
+ };
20537
+ export type GetFeatureFormAssignmentTaskErrors = {
20538
+ /**
20539
+ * Forbidden
20540
+ */
20541
+ 403: Problem;
20542
+ /**
20543
+ * Not Found
20544
+ */
20545
+ 404: Problem;
20546
+ };
20547
+ export type GetFeatureFormAssignmentTaskError = GetFeatureFormAssignmentTaskErrors[keyof GetFeatureFormAssignmentTaskErrors];
20548
+ export type GetFeatureFormAssignmentTaskResponses = {
20549
+ /**
20550
+ * Success
20551
+ */
20552
+ 200: FeatureFormAssignmentResponseObject;
20553
+ };
20554
+ export type GetFeatureFormAssignmentTaskResponse = GetFeatureFormAssignmentTaskResponses[keyof GetFeatureFormAssignmentTaskResponses];
20555
+ export type UpdateFeatureFormAssignmentTaskData = {
20556
+ body: FeatureFormAssignmentUpdateParameters;
20557
+ path: {
20558
+ site_id: string;
20559
+ feature_id: string;
20560
+ id: string;
20561
+ };
20562
+ query?: never;
20563
+ url: '/api/v1/oversite/sites/{site_id}/features/{feature_id}/form_assignment_tasks/{id}';
20564
+ };
20565
+ export type UpdateFeatureFormAssignmentTaskErrors = {
20566
+ /**
20567
+ * Bad Request
20568
+ */
20569
+ 400: Problem;
20570
+ /**
20571
+ * Forbidden
20572
+ */
20573
+ 403: Problem;
20574
+ /**
20575
+ * Not Found
20576
+ */
20577
+ 404: Problem;
20578
+ };
20579
+ export type UpdateFeatureFormAssignmentTaskError = UpdateFeatureFormAssignmentTaskErrors[keyof UpdateFeatureFormAssignmentTaskErrors];
20580
+ export type UpdateFeatureFormAssignmentTaskResponses = {
20581
+ /**
20582
+ * Success
20583
+ */
20584
+ 200: FeatureFormAssignmentResponseObject;
20585
+ };
20586
+ export type UpdateFeatureFormAssignmentTaskResponse = UpdateFeatureFormAssignmentTaskResponses[keyof UpdateFeatureFormAssignmentTaskResponses];
20587
+ export type ListSiteFormAssignmentTasksData = {
20588
+ body?: never;
20589
+ path: {
20590
+ site_id: string;
20591
+ };
20592
+ query?: {
20593
+ /**
20594
+ * This pagination cursor corresponds to the cursor value found in the response in
20595
+ * `meta.page.next_cursor`.
20596
+ */
20597
+ 'page[cursor]'?: string;
20598
+ /**
20599
+ * 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`.
20600
+ */
20601
+ 'page[limit]'?: number;
20602
+ page?: string;
20603
+ };
20604
+ url: '/api/v1/oversite/sites/{site_id}/form_assignment_tasks';
20605
+ };
20606
+ export type ListSiteFormAssignmentTasksErrors = {
20607
+ /**
20608
+ * Bad Request
20609
+ */
20610
+ 400: Problem;
20611
+ /**
20612
+ * Forbidden
20613
+ */
20614
+ 403: Problem;
20615
+ /**
20616
+ * Not Found
20617
+ */
20618
+ 404: Problem;
20619
+ };
20620
+ export type ListSiteFormAssignmentTasksError = ListSiteFormAssignmentTasksErrors[keyof ListSiteFormAssignmentTasksErrors];
20621
+ export type ListSiteFormAssignmentTasksResponses = {
20622
+ /**
20623
+ * Success
20624
+ */
20625
+ 200: {
20626
+ meta: Meta;
20627
+ links: Links;
20628
+ data: Array<SiteFormAssignmentResponseObject>;
20629
+ };
20630
+ };
20631
+ export type ListSiteFormAssignmentTasksResponse = ListSiteFormAssignmentTasksResponses[keyof ListSiteFormAssignmentTasksResponses];
20632
+ export type CreateSiteFormAssignmentTaskData = {
20633
+ body: SiteFormAssignmentParameters;
20634
+ path: {
20635
+ site_id: string;
20636
+ };
20637
+ query?: never;
20638
+ url: '/api/v1/oversite/sites/{site_id}/form_assignment_tasks';
20639
+ };
20640
+ export type CreateSiteFormAssignmentTaskErrors = {
20641
+ /**
20642
+ * Bad Request
20643
+ */
20644
+ 400: Problem;
20645
+ /**
20646
+ * Forbidden
20647
+ */
20648
+ 403: Problem;
20649
+ /**
20650
+ * Not Found
20651
+ */
20652
+ 404: Problem;
20653
+ /**
20654
+ * Unprocessable Content
20655
+ */
20656
+ 422: Problem;
20657
+ };
20658
+ export type CreateSiteFormAssignmentTaskError = CreateSiteFormAssignmentTaskErrors[keyof CreateSiteFormAssignmentTaskErrors];
20659
+ export type CreateSiteFormAssignmentTaskResponses = {
20660
+ /**
20661
+ * Created
20662
+ */
20663
+ 201: SiteFormAssignmentResponseObject;
20664
+ };
20665
+ export type CreateSiteFormAssignmentTaskResponse = CreateSiteFormAssignmentTaskResponses[keyof CreateSiteFormAssignmentTaskResponses];
20666
+ export type GetSiteFormAssignmentTaskData = {
20667
+ body?: never;
20668
+ path: {
20669
+ site_id: string;
20670
+ id: string;
20671
+ };
20672
+ query?: never;
20673
+ url: '/api/v1/oversite/sites/{site_id}/form_assignment_tasks/{id}';
20674
+ };
20675
+ export type GetSiteFormAssignmentTaskErrors = {
20676
+ /**
20677
+ * Forbidden
20678
+ */
20679
+ 403: Problem;
20680
+ /**
20681
+ * Not Found
20682
+ */
20683
+ 404: Problem;
20684
+ };
20685
+ export type GetSiteFormAssignmentTaskError = GetSiteFormAssignmentTaskErrors[keyof GetSiteFormAssignmentTaskErrors];
20686
+ export type GetSiteFormAssignmentTaskResponses = {
20687
+ /**
20688
+ * Success
20689
+ */
20690
+ 200: SiteFormAssignmentResponseObject;
20691
+ };
20692
+ export type GetSiteFormAssignmentTaskResponse = GetSiteFormAssignmentTaskResponses[keyof GetSiteFormAssignmentTaskResponses];
20693
+ export type UpdateSiteFormAssignmentTaskData = {
20694
+ body: SiteFormAssignmentUpdateParameters;
20695
+ path: {
20696
+ site_id: string;
20697
+ id: string;
20698
+ };
20699
+ query?: never;
20700
+ url: '/api/v1/oversite/sites/{site_id}/form_assignment_tasks/{id}';
20701
+ };
20702
+ export type UpdateSiteFormAssignmentTaskErrors = {
20703
+ /**
20704
+ * Bad Request
20705
+ */
20706
+ 400: Problem;
20707
+ /**
20708
+ * Forbidden
20709
+ */
20710
+ 403: Problem;
20711
+ /**
20712
+ * Not Found
20713
+ */
20714
+ 404: Problem;
20715
+ };
20716
+ export type UpdateSiteFormAssignmentTaskError = UpdateSiteFormAssignmentTaskErrors[keyof UpdateSiteFormAssignmentTaskErrors];
20717
+ export type UpdateSiteFormAssignmentTaskResponses = {
20718
+ /**
20719
+ * Success
20720
+ */
20721
+ 200: SiteFormAssignmentResponseObject;
20722
+ };
20723
+ export type UpdateSiteFormAssignmentTaskResponse = UpdateSiteFormAssignmentTaskResponses[keyof UpdateSiteFormAssignmentTaskResponses];
19556
20724
  export type ShiftOvertimeRuleGenesisData = {
19557
20725
  body: OvertimeRuleGenesisParameters;
19558
20726
  headers: {
@@ -20690,6 +21858,10 @@ export type ListPayRateRulePackagesData = {
20690
21858
  * Filter by whether users can select the package.
20691
21859
  */
20692
21860
  'filter[selectable]'?: boolean;
21861
+ /**
21862
+ * Fuzzy-matches the rule package name (trigram word-similarity). Matches the name column only.
21863
+ */
21864
+ 'filter[name]'?: string;
20693
21865
  'filter[created_at][gte]'?: string;
20694
21866
  'filter[created_at][lte]'?: string;
20695
21867
  'filter[updated_at][gte]'?: string;
@@ -23003,6 +24175,10 @@ export type ListPerDiemsData = {
23003
24175
  * Filter by taxable status
23004
24176
  */
23005
24177
  'filter[taxable]'?: boolean;
24178
+ /**
24179
+ * Fuzzy-matches the per diem name (trigram word-similarity). Matches the name column only.
24180
+ */
24181
+ 'filter[name]'?: string;
23006
24182
  'filter[created_at][gte]'?: string;
23007
24183
  'filter[created_at][lte]'?: string;
23008
24184
  'filter[updated_at][gte]'?: string;
@@ -23344,6 +24520,22 @@ export type ListCompletionsData = {
23344
24520
  'filter[scope_kind]'?: string;
23345
24521
  'filter[feature_id]'?: string;
23346
24522
  'filter[created_by_user_id]'?: string;
24523
+ /**
24524
+ * Feature completions on this site, or quantity completions on a job that has exactly this one site.
24525
+ */
24526
+ 'filter[site_id]'?: string;
24527
+ /**
24528
+ * Completions whose crew includes this worker. Distinct from created_by_user_id (the filer).
24529
+ */
24530
+ 'filter[crew_user_id]'?: string;
24531
+ /**
24532
+ * Completions whose crew includes a current member of this department.
24533
+ */
24534
+ 'filter[crew_department_id]'?: string;
24535
+ /**
24536
+ * Completions whose crew includes a member of this group.
24537
+ */
24538
+ 'filter[crew_group_id]'?: string;
23347
24539
  'filter[created_at][gte]'?: string;
23348
24540
  'filter[created_at][lte]'?: string;
23349
24541
  'filter[updated_at][gte]'?: string;
@@ -23476,7 +24668,7 @@ export type GetCompletionResponses = {
23476
24668
  };
23477
24669
  export type GetCompletionResponse = GetCompletionResponses[keyof GetCompletionResponses];
23478
24670
  export type UpdateCompletionData = {
23479
- body?: ProductionCompletionParameters;
24671
+ body?: ProductionCompletionUpdateParameters;
23480
24672
  path: {
23481
24673
  id: string;
23482
24674
  };
@@ -23484,6 +24676,10 @@ export type UpdateCompletionData = {
23484
24676
  url: '/api/v1/production/completions/{id}';
23485
24677
  };
23486
24678
  export type UpdateCompletionErrors = {
24679
+ /**
24680
+ * Bad Request (create-only lookup)
24681
+ */
24682
+ 400: Problem;
23487
24683
  /**
23488
24684
  * Forbidden
23489
24685
  */
@@ -26339,6 +27535,38 @@ export type ListPayPeriodConfigsResponses = {
26339
27535
  };
26340
27536
  };
26341
27537
  export type ListPayPeriodConfigsResponse = ListPayPeriodConfigsResponses[keyof ListPayPeriodConfigsResponses];
27538
+ export type CreatePayPeriodConfigData = {
27539
+ body: PayPeriodConfigParameters;
27540
+ path?: never;
27541
+ query?: never;
27542
+ url: '/api/v1/timekeeping/pay_period_configs';
27543
+ };
27544
+ export type CreatePayPeriodConfigErrors = {
27545
+ /**
27546
+ * Bad Request
27547
+ */
27548
+ 400: Problem;
27549
+ /**
27550
+ * Forbidden
27551
+ */
27552
+ 403: Problem;
27553
+ /**
27554
+ * Pay schedule already exists
27555
+ */
27556
+ 409: Problem;
27557
+ /**
27558
+ * Invalid configuration
27559
+ */
27560
+ 422: Problem;
27561
+ };
27562
+ export type CreatePayPeriodConfigError = CreatePayPeriodConfigErrors[keyof CreatePayPeriodConfigErrors];
27563
+ export type CreatePayPeriodConfigResponses = {
27564
+ /**
27565
+ * Created
27566
+ */
27567
+ 201: PayPeriodConfigResponseObject;
27568
+ };
27569
+ export type CreatePayPeriodConfigResponse = CreatePayPeriodConfigResponses[keyof CreatePayPeriodConfigResponses];
26342
27570
  export type GetPayPeriodConfigData = {
26343
27571
  body?: never;
26344
27572
  path: {