fern_gusto 0.0.6.pre.alpha6

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.
Files changed (515) hide show
  1. checksums.yaml +7 -0
  2. data/lib/base_gusto.rb +175 -0
  3. data/lib/core/file_utilities.rb +27 -0
  4. data/lib/environment.rb +9 -0
  5. data/lib/fern_gusto/ach_transactions/client.rb +119 -0
  6. data/lib/fern_gusto/admins/types/admin.rb +82 -0
  7. data/lib/fern_gusto/companies/attachments/client.rb +335 -0
  8. data/lib/fern_gusto/companies/attachments/types/attachments_create_request_category.rb +15 -0
  9. data/lib/fern_gusto/companies/attachments/types/attachments_get_download_url_response.rb +56 -0
  10. data/lib/fern_gusto/companies/bank_accounts/client.rb +435 -0
  11. data/lib/fern_gusto/companies/bank_accounts/types/bank_accounts_create_request_account_type.rb +15 -0
  12. data/lib/fern_gusto/companies/benefits/client.rb +862 -0
  13. data/lib/fern_gusto/companies/client.rb +1104 -0
  14. data/lib/fern_gusto/companies/departments/client.rb +587 -0
  15. data/lib/fern_gusto/companies/departments/types/departments_add_people_request_contractors_item.rb +59 -0
  16. data/lib/fern_gusto/companies/departments/types/departments_add_people_request_employees_item.rb +59 -0
  17. data/lib/fern_gusto/companies/departments/types/departments_remove_people_request_contractors_item.rb +59 -0
  18. data/lib/fern_gusto/companies/departments/types/departments_remove_people_request_employees_item.rb +59 -0
  19. data/lib/fern_gusto/companies/employees/client.rb +376 -0
  20. data/lib/fern_gusto/companies/external_payrolls/client.rb +605 -0
  21. data/lib/fern_gusto/companies/external_payrolls/types/external_payrolls_update_request_external_payroll_items_item.rb +98 -0
  22. data/lib/fern_gusto/companies/external_payrolls/types/external_payrolls_update_request_external_payroll_items_item_benefits_item.rb +79 -0
  23. data/lib/fern_gusto/companies/external_payrolls/types/external_payrolls_update_request_external_payroll_items_item_earnings_item.rb +87 -0
  24. data/lib/fern_gusto/companies/external_payrolls/types/external_payrolls_update_request_external_payroll_items_item_earnings_item_earning_type.rb +15 -0
  25. data/lib/fern_gusto/companies/external_payrolls/types/external_payrolls_update_request_external_payroll_items_item_taxes_item.rb +69 -0
  26. data/lib/fern_gusto/companies/external_payrolls/types/external_payrolls_update_tax_liabilities_request_liability_selections_item.rb +80 -0
  27. data/lib/fern_gusto/companies/federal_tax_details/client.rb +212 -0
  28. data/lib/fern_gusto/companies/federal_tax_details/types/federal_tax_details_update_request_tax_payer_type.rb +25 -0
  29. data/lib/fern_gusto/companies/forms/client.rb +345 -0
  30. data/lib/fern_gusto/companies/industry_selection/client.rb +207 -0
  31. data/lib/fern_gusto/companies/locations/client.rb +417 -0
  32. data/lib/fern_gusto/companies/pay_schedules/client.rb +377 -0
  33. data/lib/fern_gusto/companies/payment_configs/client.rb +198 -0
  34. data/lib/fern_gusto/companies/payment_configs/types/payment_configs_update_request_payment_speed.rb +19 -0
  35. data/lib/fern_gusto/companies/signatories/client.rb +513 -0
  36. data/lib/fern_gusto/companies/signatories/types/signatories_create_request_home_address.rb +89 -0
  37. data/lib/fern_gusto/companies/signatories/types/signatories_update_request_home_address.rb +88 -0
  38. data/lib/fern_gusto/companies/tax_requirements/client.rb +367 -0
  39. data/lib/fern_gusto/companies/tax_requirements/types/tax_requirements_list_response_item.rb +75 -0
  40. data/lib/fern_gusto/companies/tax_requirements/types/tax_requirements_update_state_request_requirement_sets_item.rb +88 -0
  41. data/lib/fern_gusto/companies/tax_requirements/types/tax_requirements_update_state_request_requirement_sets_item_requirements_item.rb +70 -0
  42. data/lib/fern_gusto/companies/types/companies_accept_terms_response.rb +56 -0
  43. data/lib/fern_gusto/companies/types/companies_create_request_company.rb +83 -0
  44. data/lib/fern_gusto/companies/types/companies_create_request_user.rb +81 -0
  45. data/lib/fern_gusto/companies/types/companies_create_response.rb +82 -0
  46. data/lib/fern_gusto/companies/types/companies_get_custom_fields_response.rb +59 -0
  47. data/lib/fern_gusto/companies/types/companies_migrate_to_embedded_payroll_response.rb +68 -0
  48. data/lib/fern_gusto/companies/types/companies_retrieve_terms_response.rb +56 -0
  49. data/lib/fern_gusto/companies/types/company.rb +223 -0
  50. data/lib/fern_gusto/companies/types/company_company_status.rb +21 -0
  51. data/lib/fern_gusto/companies/types/company_compensations.rb +85 -0
  52. data/lib/fern_gusto/companies/types/company_compensations_fixed_item.rb +55 -0
  53. data/lib/fern_gusto/companies/types/company_compensations_hourly_item.rb +65 -0
  54. data/lib/fern_gusto/companies/types/company_compensations_paid_time_off_item.rb +55 -0
  55. data/lib/fern_gusto/companies/types/company_entity_type.rb +23 -0
  56. data/lib/fern_gusto/companies/types/company_funding_type.rb +15 -0
  57. data/lib/fern_gusto/companies/types/company_onboarding_status.rb +77 -0
  58. data/lib/fern_gusto/companies/types/company_onboarding_status_onboarding_steps_item.rb +97 -0
  59. data/lib/fern_gusto/companies/types/company_pay_schedule_type.rb +15 -0
  60. data/lib/fern_gusto/companies/types/company_primary_payroll_admin.rb +80 -0
  61. data/lib/fern_gusto/companies/types/company_primary_signatory.rb +100 -0
  62. data/lib/fern_gusto/companies/types/company_primary_signatory_home_address.rb +93 -0
  63. data/lib/fern_gusto/companies/types/company_tier.rb +20 -0
  64. data/lib/fern_gusto/company_attachment/types/company_attachment.rb +81 -0
  65. data/lib/fern_gusto/company_attachment/types/company_attachment_category.rb +13 -0
  66. data/lib/fern_gusto/company_bank_accounts/types/company_bank_account.rb +157 -0
  67. data/lib/fern_gusto/company_bank_accounts/types/company_bank_account_account_type.rb +13 -0
  68. data/lib/fern_gusto/company_bank_accounts/types/company_bank_account_plaid_status.rb +14 -0
  69. data/lib/fern_gusto/company_bank_accounts/types/company_bank_account_verification_status.rb +19 -0
  70. data/lib/fern_gusto/company_bank_accounts/types/company_bank_account_verification_type.rb +17 -0
  71. data/lib/fern_gusto/company_benefits/types/benefit_summary.rb +104 -0
  72. data/lib/fern_gusto/company_benefits/types/benefit_summary_employees.rb +113 -0
  73. data/lib/fern_gusto/company_benefits/types/benefit_summary_employees_payroll_benefits.rb +107 -0
  74. data/lib/fern_gusto/company_benefits/types/benefit_summary_employees_payroll_benefits_pay_period.rb +67 -0
  75. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements.rb +156 -0
  76. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_catch_up.rb +86 -0
  77. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_catch_up_default_value.rb +67 -0
  78. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_company_contribution_annual_maximum.rb +88 -0
  79. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_company_contribution_annual_maximum_default_value.rb +68 -0
  80. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_contribution.rb +86 -0
  81. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_contribution_default_value.rb +67 -0
  82. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_coverage_amount.rb +87 -0
  83. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_coverage_amount_default_value.rb +67 -0
  84. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_coverage_salary_multiplier.rb +88 -0
  85. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_coverage_salary_multiplier_default_value.rb +67 -0
  86. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_deduct_as_percentage.rb +88 -0
  87. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_deduct_as_percentage_default_value.rb +67 -0
  88. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_employee_deduction.rb +88 -0
  89. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_employee_deduction_default_value.rb +67 -0
  90. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_limit_option.rb +86 -0
  91. data/lib/fern_gusto/company_benefits/types/benefit_type_requirements_limit_option_default_value.rb +67 -0
  92. data/lib/fern_gusto/contractor/types/contractor_onboarding_info.rb +78 -0
  93. data/lib/fern_gusto/contractor/types/contractor_onboarding_status_onboarding_status.rb +14 -0
  94. data/lib/fern_gusto/contractor/types/contractor_onboarding_status_onboarding_steps_item.rb +88 -0
  95. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_for_group.rb +145 -0
  96. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_for_group_payment_method.rb +15 -0
  97. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_for_group_status.rb +16 -0
  98. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_for_group_wage_type.rb +13 -0
  99. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_group.rb +127 -0
  100. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_group_minimal.rb +116 -0
  101. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_group_minimal_status.rb +16 -0
  102. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_group_minimal_totals.rb +74 -0
  103. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_group_status.rb +16 -0
  104. data/lib/fern_gusto/contractor_payment_groups/types/contractor_payment_group_totals.rb +74 -0
  105. data/lib/fern_gusto/contractor_payment_method/types/contractor_bank_account.rb +94 -0
  106. data/lib/fern_gusto/contractor_payment_method/types/contractor_bank_account_account_type.rb +13 -0
  107. data/lib/fern_gusto/contractor_payment_method/types/contractor_payment_method.rb +96 -0
  108. data/lib/fern_gusto/contractor_payment_method/types/contractor_payment_method_split_by.rb +15 -0
  109. data/lib/fern_gusto/contractor_payment_method/types/contractor_payment_method_type.rb +14 -0
  110. data/lib/fern_gusto/contractor_payments/types/contractor_payment.rb +146 -0
  111. data/lib/fern_gusto/contractor_payments/types/contractor_payment_payment_method.rb +15 -0
  112. data/lib/fern_gusto/contractor_payments/types/contractor_payment_status.rb +13 -0
  113. data/lib/fern_gusto/contractor_payments/types/contractor_payment_summary.rb +81 -0
  114. data/lib/fern_gusto/contractor_payments/types/contractor_payment_summary_by_dates.rb +81 -0
  115. data/lib/fern_gusto/contractor_payments/types/contractor_payment_summary_by_dates_contractor_payments_item.rb +93 -0
  116. data/lib/fern_gusto/contractor_payments/types/contractor_payment_summary_by_dates_total.rb +67 -0
  117. data/lib/fern_gusto/contractor_payments/types/contractor_payment_summary_contractor_payments_item.rb +86 -0
  118. data/lib/fern_gusto/contractor_payments/types/contractor_payment_summary_total.rb +67 -0
  119. data/lib/fern_gusto/contractor_payments/types/contractor_payment_wage_type.rb +13 -0
  120. data/lib/fern_gusto/contractors/client.rb +1025 -0
  121. data/lib/fern_gusto/contractors/documents/client.rb +269 -0
  122. data/lib/fern_gusto/contractors/documents/types/documents_sign_request_fields_item.rb +67 -0
  123. data/lib/fern_gusto/contractors/forms/client.rb +343 -0
  124. data/lib/fern_gusto/contractors/payment_groups/client.rb +569 -0
  125. data/lib/fern_gusto/contractors/payment_groups/types/payment_groups_create_request_contractor_payments_item.rb +102 -0
  126. data/lib/fern_gusto/contractors/payment_groups/types/payment_groups_create_request_contractor_payments_item_payment_method.rb +15 -0
  127. data/lib/fern_gusto/contractors/payment_groups/types/payment_groups_preview_request_contractor_payments_item.rb +102 -0
  128. data/lib/fern_gusto/contractors/payment_groups/types/payment_groups_preview_request_contractor_payments_item_payment_method.rb +15 -0
  129. data/lib/fern_gusto/contractors/payment_method/client.rb +369 -0
  130. data/lib/fern_gusto/contractors/payment_method/types/payment_method_create_bank_account_request_account_type.rb +14 -0
  131. data/lib/fern_gusto/contractors/payment_method/types/payment_method_update_request_type.rb +17 -0
  132. data/lib/fern_gusto/contractors/payments/client.rb +558 -0
  133. data/lib/fern_gusto/contractors/payments/types/payments_create_request_payment_method.rb +15 -0
  134. data/lib/fern_gusto/contractors/payments/types/payments_list_response.rb +62 -0
  135. data/lib/fern_gusto/contractors/types/contractor.rb +227 -0
  136. data/lib/fern_gusto/contractors/types/contractor_address.rb +94 -0
  137. data/lib/fern_gusto/contractors/types/contractor_onboarding_status.rb +18 -0
  138. data/lib/fern_gusto/contractors/types/contractor_type.rb +13 -0
  139. data/lib/fern_gusto/contractors/types/contractor_wage_type.rb +13 -0
  140. data/lib/fern_gusto/custom_fields/types/company_custom_field.rb +88 -0
  141. data/lib/fern_gusto/custom_fields/types/custom_field_type.rb +16 -0
  142. data/lib/fern_gusto/custom_fields/types/employee_custom_field.rb +104 -0
  143. data/lib/fern_gusto/documents/types/document.rb +167 -0
  144. data/lib/fern_gusto/documents/types/document_fields_item.rb +114 -0
  145. data/lib/fern_gusto/documents/types/document_pages_item.rb +65 -0
  146. data/lib/fern_gusto/documents/types/document_recipient_type.rb +15 -0
  147. data/lib/fern_gusto/documents/types/document_signed.rb +137 -0
  148. data/lib/fern_gusto/documents/types/document_signed_recipient_type.rb +15 -0
  149. data/lib/fern_gusto/earning_types/types/earning_type.rb +66 -0
  150. data/lib/fern_gusto/employee_employments/types/unprocessed_termination_pay_period.rb +101 -0
  151. data/lib/fern_gusto/employee_payment_method/types/employee_bank_account.rb +94 -0
  152. data/lib/fern_gusto/employee_payment_method/types/employee_bank_account_account_type.rb +13 -0
  153. data/lib/fern_gusto/employee_payment_method/types/employee_payment_method_info.rb +96 -0
  154. data/lib/fern_gusto/employee_payment_method/types/employee_payment_method_split_by.rb +15 -0
  155. data/lib/fern_gusto/employee_payment_method/types/employee_payment_method_type.rb +14 -0
  156. data/lib/fern_gusto/employee_tax_setup/types/employee_federal_tax.rb +144 -0
  157. data/lib/fern_gusto/employee_tax_setup/types/employee_federal_tax_w4data_type.rb +13 -0
  158. data/lib/fern_gusto/employee_tax_setup/types/employee_state_tax.rb +90 -0
  159. data/lib/fern_gusto/employee_tax_setup/types/employee_state_tax_answer.rb +74 -0
  160. data/lib/fern_gusto/employee_tax_setup/types/employee_state_tax_input_question_format.rb +69 -0
  161. data/lib/fern_gusto/employee_tax_setup/types/employee_state_tax_input_question_format_options_item.rb +67 -0
  162. data/lib/fern_gusto/employee_tax_setup/types/employee_state_tax_question.rb +96 -0
  163. data/lib/fern_gusto/employees/adresses/client.rb +885 -0
  164. data/lib/fern_gusto/employees/benefits/client.rb +656 -0
  165. data/lib/fern_gusto/employees/benefits/types/benefits_create_request_contribution.rb +93 -0
  166. data/lib/fern_gusto/employees/benefits/types/benefits_create_request_contribution_type.rb +23 -0
  167. data/lib/fern_gusto/employees/benefits/types/benefits_create_request_contribution_value.rb +67 -0
  168. data/lib/fern_gusto/employees/benefits/types/benefits_create_request_contribution_value_item.rb +80 -0
  169. data/lib/fern_gusto/employees/benefits/types/benefits_create_request_deduction_reduces_taxable_income.rb +18 -0
  170. data/lib/fern_gusto/employees/benefits/types/benefits_update_request_contribution.rb +93 -0
  171. data/lib/fern_gusto/employees/benefits/types/benefits_update_request_contribution_type.rb +23 -0
  172. data/lib/fern_gusto/employees/benefits/types/benefits_update_request_contribution_value.rb +67 -0
  173. data/lib/fern_gusto/employees/benefits/types/benefits_update_request_contribution_value_item.rb +80 -0
  174. data/lib/fern_gusto/employees/benefits/types/benefits_update_request_deduction_reduces_taxable_income.rb +18 -0
  175. data/lib/fern_gusto/employees/client.rb +822 -0
  176. data/lib/fern_gusto/employees/employments/client.rb +799 -0
  177. data/lib/fern_gusto/employees/employments/types/employments_get_history_response_item.rb +95 -0
  178. data/lib/fern_gusto/employees/employments/types/employments_get_history_response_item_employment_status.rb +20 -0
  179. data/lib/fern_gusto/employees/forms/client.rb +433 -0
  180. data/lib/fern_gusto/employees/forms/types/forms_generate_w2response.rb +132 -0
  181. data/lib/fern_gusto/employees/garnishments/client.rb +558 -0
  182. data/lib/fern_gusto/employees/garnishments/types/garnishments_create_request_garnishment_type.rb +20 -0
  183. data/lib/fern_gusto/employees/jobs_and_compensations/client.rb +938 -0
  184. data/lib/fern_gusto/employees/jobs_and_compensations/types/jobs_and_compensations_create_compensation_request_minimum_wages_item.rb +62 -0
  185. data/lib/fern_gusto/employees/jobs_and_compensations/types/jobs_and_compensations_create_compensation_request_payment_unit.rb +19 -0
  186. data/lib/fern_gusto/employees/jobs_and_compensations/types/jobs_and_compensations_update_compensation_request_minimum_wages_item.rb +62 -0
  187. data/lib/fern_gusto/employees/jobs_and_compensations/types/jobs_and_compensations_update_compensation_request_payment_unit.rb +19 -0
  188. data/lib/fern_gusto/employees/payment_method/client.rb +484 -0
  189. data/lib/fern_gusto/employees/payment_method/types/payment_method_create_bank_account_request_account_type.rb +14 -0
  190. data/lib/fern_gusto/employees/payment_method/types/payment_method_update_bank_account_request_account_type.rb +14 -0
  191. data/lib/fern_gusto/employees/payment_method/types/payment_method_update_request_split_by.rb +17 -0
  192. data/lib/fern_gusto/employees/payment_method/types/payment_method_update_request_splits_item.rb +83 -0
  193. data/lib/fern_gusto/employees/payment_method/types/payment_method_update_request_type.rb +16 -0
  194. data/lib/fern_gusto/employees/tax_setup/client.rb +422 -0
  195. data/lib/fern_gusto/employees/tax_setup/types/tax_setup_update_state_taxes_request_states_item.rb +73 -0
  196. data/lib/fern_gusto/employees/tax_setup/types/tax_setup_update_state_taxes_request_states_item_questions_item.rb +73 -0
  197. data/lib/fern_gusto/employees/tax_setup/types/tax_setup_update_state_taxes_request_states_item_questions_item_answers_item.rb +77 -0
  198. data/lib/fern_gusto/employees/types/employee.rb +281 -0
  199. data/lib/fern_gusto/employees/types/employee_current_employment_status.rb +20 -0
  200. data/lib/fern_gusto/employees/types/employee_onboarding_info.rb +77 -0
  201. data/lib/fern_gusto/employees/types/employee_onboarding_status.rb +19 -0
  202. data/lib/fern_gusto/employees/types/employee_onboarding_status_onboarding_steps_item.rb +88 -0
  203. data/lib/fern_gusto/employees/types/employee_payment_method.rb +13 -0
  204. data/lib/fern_gusto/employees/types/employees_get_custom_fields_response.rb +59 -0
  205. data/lib/fern_gusto/employees/types/employees_get_request_include.rb +12 -0
  206. data/lib/fern_gusto/events/client.rb +144 -0
  207. data/lib/fern_gusto/events/types/events_list_request_sort_order.rb +12 -0
  208. data/lib/fern_gusto/external_payrolls/types/external_payroll.rb +158 -0
  209. data/lib/fern_gusto/external_payrolls/types/external_payroll_applicable_benefits_item.rb +73 -0
  210. data/lib/fern_gusto/external_payrolls/types/external_payroll_applicable_earnings_item.rb +87 -0
  211. data/lib/fern_gusto/external_payrolls/types/external_payroll_applicable_taxes_item.rb +85 -0
  212. data/lib/fern_gusto/external_payrolls/types/external_payroll_basic.rb +101 -0
  213. data/lib/fern_gusto/external_payrolls/types/external_payroll_basic_status.rb +16 -0
  214. data/lib/fern_gusto/external_payrolls/types/external_payroll_external_payroll_items_item.rb +93 -0
  215. data/lib/fern_gusto/external_payrolls/types/external_payroll_external_payroll_items_item_benefits_item.rb +74 -0
  216. data/lib/fern_gusto/external_payrolls/types/external_payroll_external_payroll_items_item_earnings_item.rb +81 -0
  217. data/lib/fern_gusto/external_payrolls/types/external_payroll_external_payroll_items_item_taxes_item.rb +67 -0
  218. data/lib/fern_gusto/external_payrolls/types/external_payroll_metadata.rb +56 -0
  219. data/lib/fern_gusto/external_payrolls/types/external_payroll_status.rb +16 -0
  220. data/lib/fern_gusto/external_payrolls/types/external_payroll_tax_suggestions.rb +72 -0
  221. data/lib/fern_gusto/external_payrolls/types/external_payroll_tax_suggestions_tax_suggestions.rb +68 -0
  222. data/lib/fern_gusto/external_payrolls/types/tax_liabilities_selections.rb +86 -0
  223. data/lib/fern_gusto/external_payrolls/types/tax_liabilities_selections_possible_liabilities.rb +75 -0
  224. data/lib/fern_gusto/federal_tax_details/types/federal_tax_details.rb +140 -0
  225. data/lib/fern_gusto/flows/client.rb +113 -0
  226. data/lib/fern_gusto/flows/types/flow.rb +66 -0
  227. data/lib/fern_gusto/flows/types/flows_create_request_entity_type.rb +14 -0
  228. data/lib/fern_gusto/forms/types/form.rb +123 -0
  229. data/lib/fern_gusto/forms/types/form1099.rb +126 -0
  230. data/lib/fern_gusto/generated_documents/client.rb +106 -0
  231. data/lib/fern_gusto/holiday_pay_policies/client.rb +599 -0
  232. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_add_employees_request_employees_item.rb +57 -0
  233. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays.rb +198 -0
  234. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_christmas_day.rb +57 -0
  235. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_columbus_day.rb +57 -0
  236. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_independence_day.rb +57 -0
  237. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_juneteenth.rb +57 -0
  238. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_labor_day.rb +57 -0
  239. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_memorial_day.rb +57 -0
  240. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_mlk_day.rb +57 -0
  241. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_new_years_day.rb +57 -0
  242. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_presidents_day.rb +57 -0
  243. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_thanksgiving.rb +57 -0
  244. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_create_request_federal_holidays_veterans_day.rb +57 -0
  245. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_remove_employees_request_employees_item.rb +57 -0
  246. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays.rb +198 -0
  247. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_christmas_day.rb +57 -0
  248. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_columbus_day.rb +57 -0
  249. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_independence_day.rb +57 -0
  250. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_juneteenth.rb +57 -0
  251. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_labor_day.rb +57 -0
  252. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_memorial_day.rb +57 -0
  253. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_mlk_day.rb +57 -0
  254. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_new_years_day.rb +57 -0
  255. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_presidents_day.rb +57 -0
  256. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_thanksgiving.rb +57 -0
  257. data/lib/fern_gusto/holiday_pay_policies/types/holiday_pay_policies_update_request_federal_holidays_veterans_day.rb +57 -0
  258. data/lib/fern_gusto/industry/types/industry.rb +87 -0
  259. data/lib/fern_gusto/invoices/client.rb +132 -0
  260. data/lib/fern_gusto/jobs_and_compensations/types/compensation.rb +120 -0
  261. data/lib/fern_gusto/jobs_and_compensations/types/compensation_payment_unit.rb +17 -0
  262. data/lib/fern_gusto/jobs_and_compensations/types/job.rb +161 -0
  263. data/lib/fern_gusto/locations/types/company_address.rb +103 -0
  264. data/lib/fern_gusto/locations/types/location.rb +171 -0
  265. data/lib/fern_gusto/notifications/client.rb +120 -0
  266. data/lib/fern_gusto/pay_schedules/types/pay_schedule.rb +151 -0
  267. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment.rb +103 -0
  268. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_department.rb +65 -0
  269. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_employee.rb +65 -0
  270. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_employee_change.rb +105 -0
  271. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_pay_period.rb +80 -0
  272. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_preview.rb +71 -0
  273. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_preview_type.rb +15 -0
  274. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_transition_pay_period.rb +68 -0
  275. data/lib/fern_gusto/pay_schedules/types/pay_schedule_assignment_type.rb +15 -0
  276. data/lib/fern_gusto/pay_schedules/types/pay_schedule_frequency.rb +17 -0
  277. data/lib/fern_gusto/payment_configs/types/payment_configs.rb +79 -0
  278. data/lib/fern_gusto/payroll/client.rb +1644 -0
  279. data/lib/fern_gusto/payroll/earning_types/client.rb +350 -0
  280. data/lib/fern_gusto/payroll/earning_types/types/earning_types_get_response.rb +74 -0
  281. data/lib/fern_gusto/payroll/external_payrolls/client.rb +199 -0
  282. data/lib/fern_gusto/payroll/pay_schedules/client.rb +584 -0
  283. data/lib/fern_gusto/payroll/pay_schedules/types/pay_schedules_create_request_frequency.rb +17 -0
  284. data/lib/fern_gusto/payroll/pay_schedules/types/pay_schedules_preview_request_frequency.rb +16 -0
  285. data/lib/fern_gusto/payroll/pay_schedules/types/pay_schedules_preview_response.rb +72 -0
  286. data/lib/fern_gusto/payroll/pay_schedules/types/pay_schedules_preview_response_pay_periods_item.rb +83 -0
  287. data/lib/fern_gusto/payroll/pay_schedules/types/pay_schedules_update_request_frequency.rb +17 -0
  288. data/lib/fern_gusto/payroll/types/payroll_create_request_off_cycle_reason.rb +15 -0
  289. data/lib/fern_gusto/payroll/types/payroll_create_request_withholding_pay_period.rb +18 -0
  290. data/lib/fern_gusto/payroll/types/payroll_get_request_include_item.rb +14 -0
  291. data/lib/fern_gusto/payroll/types/payroll_list_request_include_item.rb +13 -0
  292. data/lib/fern_gusto/payroll/types/payroll_list_request_payroll_types_item.rb +13 -0
  293. data/lib/fern_gusto/payroll/types/payroll_list_request_processing_statuses_item.rb +12 -0
  294. data/lib/fern_gusto/payroll/types/payroll_list_request_sort_order.rb +12 -0
  295. data/lib/fern_gusto/payroll/types/payroll_skip_payroll_request_payroll_type.rb +15 -0
  296. data/lib/fern_gusto/payroll/types/payroll_submit_request_submission_blockers_item.rb +67 -0
  297. data/lib/fern_gusto/payroll/types/payroll_update_request_employee_compensations_item.rb +133 -0
  298. data/lib/fern_gusto/payroll/types/payroll_update_request_employee_compensations_item_fixed_compensations_item.rb +79 -0
  299. data/lib/fern_gusto/payroll/types/payroll_update_request_employee_compensations_item_hourly_compensations_item.rb +79 -0
  300. data/lib/fern_gusto/payroll/types/payroll_update_request_employee_compensations_item_paid_time_off_item.rb +85 -0
  301. data/lib/fern_gusto/payroll/types/payroll_update_request_employee_compensations_item_payment_method.rb +13 -0
  302. data/lib/fern_gusto/payrolls/types/employee_pay_stub.rb +94 -0
  303. data/lib/fern_gusto/payrolls/types/paid_time_off.rb +123 -0
  304. data/lib/fern_gusto/payrolls/types/paid_time_off_name.rb +14 -0
  305. data/lib/fern_gusto/payrolls/types/pay_period.rb +86 -0
  306. data/lib/fern_gusto/payrolls/types/pay_period_payroll.rb +107 -0
  307. data/lib/fern_gusto/payrolls/types/pay_period_payroll_payroll_type.rb +13 -0
  308. data/lib/fern_gusto/payrolls/types/payroll.rb +285 -0
  309. data/lib/fern_gusto/payrolls/types/payroll_minimal.rb +250 -0
  310. data/lib/fern_gusto/payrolls/types/payroll_prepared.rb +250 -0
  311. data/lib/fern_gusto/recovery_cases/client.rb +198 -0
  312. data/lib/fern_gusto/reports/client.rb +306 -0
  313. data/lib/fern_gusto/reports/types/reports_create_request_columns_item.rb +91 -0
  314. data/lib/fern_gusto/reports/types/reports_create_request_employment_status.rb +18 -0
  315. data/lib/fern_gusto/reports/types/reports_create_request_employment_type.rb +16 -0
  316. data/lib/fern_gusto/reports/types/reports_create_request_file_type.rb +13 -0
  317. data/lib/fern_gusto/reports/types/reports_create_request_groupings_item.rb +14 -0
  318. data/lib/fern_gusto/reports/types/reports_create_request_payment_method.rb +13 -0
  319. data/lib/fern_gusto/signatories/types/signatory.rb +175 -0
  320. data/lib/fern_gusto/signatories/types/signatory_home_address.rb +93 -0
  321. data/lib/fern_gusto/signatories/types/signatory_identity_verification_status.rb +28 -0
  322. data/lib/fern_gusto/terminations/types/termination.rb +109 -0
  323. data/lib/fern_gusto/time_off_policies/client.rb +863 -0
  324. data/lib/fern_gusto/time_off_policies/types/time_off_policies_add_employees_request_employees_item.rb +67 -0
  325. data/lib/fern_gusto/time_off_policies/types/time_off_policies_create_request_accrual_method.rb +19 -0
  326. data/lib/fern_gusto/time_off_policies/types/time_off_policies_remove_employees_request_employees_item.rb +57 -0
  327. data/lib/fern_gusto/time_off_policies/types/time_off_policies_update_balance_request_employees_item.rb +67 -0
  328. data/lib/fern_gusto/time_off_policies/types/time_off_policies_update_request_accrual_method.rb +19 -0
  329. data/lib/fern_gusto/time_off_requests/types/time_off_request.rb +141 -0
  330. data/lib/fern_gusto/time_off_requests/types/time_off_request_approver.rb +66 -0
  331. data/lib/fern_gusto/time_off_requests/types/time_off_request_employee.rb +66 -0
  332. data/lib/fern_gusto/time_off_requests/types/time_off_request_initiator.rb +66 -0
  333. data/lib/fern_gusto/time_off_requests/types/time_off_request_request_type.rb +13 -0
  334. data/lib/fern_gusto/time_off_requests/types/time_off_request_status.rb +14 -0
  335. data/lib/fern_gusto/token/client.rb +270 -0
  336. data/lib/fern_gusto/token/types/token_get_info_response.rb +85 -0
  337. data/lib/fern_gusto/token/types/token_get_info_response_resource.rb +64 -0
  338. data/lib/fern_gusto/token/types/token_get_info_response_resource_owner.rb +65 -0
  339. data/lib/fern_gusto/token/types/token_get_info_response_resource_owner_type.rb +13 -0
  340. data/lib/fern_gusto/token/types/token_get_system_access_token_response.rb +77 -0
  341. data/lib/fern_gusto/types/accruing_time_off_hour.rb +64 -0
  342. data/lib/fern_gusto/types/ach_transaction.rb +162 -0
  343. data/lib/fern_gusto/types/ach_transaction_payment_direction.rb +11 -0
  344. data/lib/fern_gusto/types/ach_transaction_payment_event_type.rb +11 -0
  345. data/lib/fern_gusto/types/ach_transaction_payment_status.rb +13 -0
  346. data/lib/fern_gusto/types/ach_transaction_recipient_type.rb +11 -0
  347. data/lib/fern_gusto/types/address.rb +111 -0
  348. data/lib/fern_gusto/types/authentication.rb +96 -0
  349. data/lib/fern_gusto/types/child_support_data.rb +58 -0
  350. data/lib/fern_gusto/types/child_support_data_agencies_item.rb +104 -0
  351. data/lib/fern_gusto/types/child_support_data_agencies_item_fips_codes_item.rb +67 -0
  352. data/lib/fern_gusto/types/child_support_data_agencies_item_required_attributes_item.rb +70 -0
  353. data/lib/fern_gusto/types/child_support_data_agencies_item_required_attributes_item_key.rb +14 -0
  354. data/lib/fern_gusto/types/company_benefit.rb +135 -0
  355. data/lib/fern_gusto/types/company_benefit_with_employee_benefits.rb +148 -0
  356. data/lib/fern_gusto/types/company_benefit_with_employee_benefits_employee_benefits_item.rb +115 -0
  357. data/lib/fern_gusto/types/company_benefit_with_employee_benefits_employee_benefits_item_contribution.rb +91 -0
  358. data/lib/fern_gusto/types/company_benefit_with_employee_benefits_employee_benefits_item_contribution_value.rb +61 -0
  359. data/lib/fern_gusto/types/company_benefit_with_employee_benefits_employee_benefits_item_contribution_value_tiers.rb +60 -0
  360. data/lib/fern_gusto/types/company_benefit_with_employee_benefits_employee_benefits_item_contribution_value_tiers_tiers_item.rb +86 -0
  361. data/lib/fern_gusto/types/contractor_address_info.rb +118 -0
  362. data/lib/fern_gusto/types/contractor_body.rb +200 -0
  363. data/lib/fern_gusto/types/contractor_body_type.rb +11 -0
  364. data/lib/fern_gusto/types/contractor_body_wage_type.rb +11 -0
  365. data/lib/fern_gusto/types/contractor_payment_receipt.rb +161 -0
  366. data/lib/fern_gusto/types/contractor_payment_receipt_contractor_payments_item.rb +120 -0
  367. data/lib/fern_gusto/types/contractor_payment_receipt_licensee.rb +92 -0
  368. data/lib/fern_gusto/types/contractor_payment_receipt_totals.rb +54 -0
  369. data/lib/fern_gusto/types/create_report.rb +77 -0
  370. data/lib/fern_gusto/types/department.rb +103 -0
  371. data/lib/fern_gusto/types/department_contractors_item.rb +53 -0
  372. data/lib/fern_gusto/types/department_employees_item.rb +53 -0
  373. data/lib/fern_gusto/types/document_pdf.rb +63 -0
  374. data/lib/fern_gusto/types/employee_address.rb +139 -0
  375. data/lib/fern_gusto/types/employee_benefit.rb +220 -0
  376. data/lib/fern_gusto/types/employee_benefit_base_object.rb +199 -0
  377. data/lib/fern_gusto/types/employee_benefit_base_object_contribution.rb +89 -0
  378. data/lib/fern_gusto/types/employee_benefit_base_object_contribution_value.rb +61 -0
  379. data/lib/fern_gusto/types/employee_benefit_base_object_contribution_value_tiers.rb +59 -0
  380. data/lib/fern_gusto/types/employee_benefit_base_object_contribution_value_tiers_tiers_item.rb +85 -0
  381. data/lib/fern_gusto/types/employee_benefit_base_object_deduction_reduces_taxable_income.rb +14 -0
  382. data/lib/fern_gusto/types/employee_benefit_for_company_benefit.rb +220 -0
  383. data/lib/fern_gusto/types/employee_work_address.rb +137 -0
  384. data/lib/fern_gusto/types/entity_error_object.rb +102 -0
  385. data/lib/fern_gusto/types/entity_error_object_errors_item.rb +89 -0
  386. data/lib/fern_gusto/types/event.rb +99 -0
  387. data/lib/fern_gusto/types/flsa_status_type.rb +23 -0
  388. data/lib/fern_gusto/types/form_pdf.rb +63 -0
  389. data/lib/fern_gusto/types/garnishment.rb +172 -0
  390. data/lib/fern_gusto/types/garnishment_child_support.rb +113 -0
  391. data/lib/fern_gusto/types/garnishment_child_support_payment_period.rb +14 -0
  392. data/lib/fern_gusto/types/garnishment_garnishment_type.rb +16 -0
  393. data/lib/fern_gusto/types/generated_document.rb +70 -0
  394. data/lib/fern_gusto/types/gross_up_pay.rb +53 -0
  395. data/lib/fern_gusto/types/historical_employee_body.rb +156 -0
  396. data/lib/fern_gusto/types/historical_employee_body_employee_state_taxes.rb +80 -0
  397. data/lib/fern_gusto/types/historical_employee_body_home_address.rb +84 -0
  398. data/lib/fern_gusto/types/historical_employee_body_job.rb +53 -0
  399. data/lib/fern_gusto/types/historical_employee_body_termination.rb +53 -0
  400. data/lib/fern_gusto/types/historical_employee_body_work_address.rb +53 -0
  401. data/lib/fern_gusto/types/holiday_pay_policy.rb +88 -0
  402. data/lib/fern_gusto/types/holiday_pay_policy_employees_item.rb +53 -0
  403. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item.rb +179 -0
  404. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_columbus_day.rb +72 -0
  405. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_independence_day.rb +72 -0
  406. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_juneteenth.rb +72 -0
  407. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_labor_day.rb +72 -0
  408. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_memorial_day.rb +72 -0
  409. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_mlk_day.rb +72 -0
  410. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_new_years_day.rb +72 -0
  411. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_presidents_day.rb +72 -0
  412. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_thanksgiving.rb +72 -0
  413. data/lib/fern_gusto/types/holiday_pay_policy_federal_holidays_item_veterans_day.rb +72 -0
  414. data/lib/fern_gusto/types/invoice_data.rb +58 -0
  415. data/lib/fern_gusto/types/invoice_data_active_companies_item.rb +91 -0
  416. data/lib/fern_gusto/types/minimum_wage.rb +96 -0
  417. data/lib/fern_gusto/types/notification.rb +125 -0
  418. data/lib/fern_gusto/types/notification_resources_item.rb +85 -0
  419. data/lib/fern_gusto/types/off_cycle_reason_type.rb +19 -0
  420. data/lib/fern_gusto/types/paid_holidays.rb +61 -0
  421. data/lib/fern_gusto/types/paid_holidays_schema.rb +77 -0
  422. data/lib/fern_gusto/types/pay_schedule_assignment_body.rb +111 -0
  423. data/lib/fern_gusto/types/pay_schedule_assignment_body_departments_item.rb +65 -0
  424. data/lib/fern_gusto/types/pay_schedule_assignment_body_employees_item.rb +64 -0
  425. data/lib/fern_gusto/types/pay_schedule_assignment_body_type.rb +13 -0
  426. data/lib/fern_gusto/types/payment_method_bank_account.rb +87 -0
  427. data/lib/fern_gusto/types/payroll_blocker.rb +63 -0
  428. data/lib/fern_gusto/types/payroll_blockers_error.rb +60 -0
  429. data/lib/fern_gusto/types/payroll_blockers_error_errors_item.rb +83 -0
  430. data/lib/fern_gusto/types/payroll_blockers_error_errors_item_metadata.rb +54 -0
  431. data/lib/fern_gusto/types/payroll_check.rb +84 -0
  432. data/lib/fern_gusto/types/payroll_company_taxes_type.rb +6 -0
  433. data/lib/fern_gusto/types/payroll_company_taxes_type_item.rb +70 -0
  434. data/lib/fern_gusto/types/payroll_credit_blockers_type.rb +6 -0
  435. data/lib/fern_gusto/types/payroll_credit_blockers_type_item.rb +89 -0
  436. data/lib/fern_gusto/types/payroll_credit_blockers_type_item_status.rb +13 -0
  437. data/lib/fern_gusto/types/payroll_credit_blockers_type_item_unblock_options_item.rb +72 -0
  438. data/lib/fern_gusto/types/payroll_employee_compensations_type.rb +6 -0
  439. data/lib/fern_gusto/types/payroll_employee_compensations_type_item.rb +216 -0
  440. data/lib/fern_gusto/types/payroll_employee_compensations_type_item_benefits_item.rb +79 -0
  441. data/lib/fern_gusto/types/payroll_employee_compensations_type_item_deductions_item.rb +65 -0
  442. data/lib/fern_gusto/types/payroll_employee_compensations_type_item_fixed_compensations_item.rb +74 -0
  443. data/lib/fern_gusto/types/payroll_employee_compensations_type_item_hourly_compensations_item.rb +92 -0
  444. data/lib/fern_gusto/types/payroll_employee_compensations_type_item_paid_time_off_item.rb +76 -0
  445. data/lib/fern_gusto/types/payroll_employee_compensations_type_item_payment_method.rb +11 -0
  446. data/lib/fern_gusto/types/payroll_employee_compensations_type_item_taxes_item.rb +70 -0
  447. data/lib/fern_gusto/types/payroll_fixed_compensation_types_type.rb +6 -0
  448. data/lib/fern_gusto/types/payroll_fixed_compensation_types_type_item.rb +54 -0
  449. data/lib/fern_gusto/types/payroll_pay_period_type.rb +70 -0
  450. data/lib/fern_gusto/types/payroll_payment_speed_changed_type.rb +86 -0
  451. data/lib/fern_gusto/types/payroll_payroll_status_meta_type.rb +92 -0
  452. data/lib/fern_gusto/types/payroll_processing_request.rb +68 -0
  453. data/lib/fern_gusto/types/payroll_processing_request_status.rb +14 -0
  454. data/lib/fern_gusto/types/payroll_receipt.rb +177 -0
  455. data/lib/fern_gusto/types/payroll_receipt_employee_compensations_item.rb +116 -0
  456. data/lib/fern_gusto/types/payroll_receipt_licensee.rb +92 -0
  457. data/lib/fern_gusto/types/payroll_receipt_taxes_item.rb +63 -0
  458. data/lib/fern_gusto/types/payroll_receipt_totals.rb +85 -0
  459. data/lib/fern_gusto/types/payroll_reversal.rb +91 -0
  460. data/lib/fern_gusto/types/payroll_submission_blockers_type.rb +6 -0
  461. data/lib/fern_gusto/types/payroll_submission_blockers_type_item.rb +89 -0
  462. data/lib/fern_gusto/types/payroll_submission_blockers_type_item_status.rb +11 -0
  463. data/lib/fern_gusto/types/payroll_submission_blockers_type_item_unblock_options_item.rb +72 -0
  464. data/lib/fern_gusto/types/payroll_totals_type.rb +199 -0
  465. data/lib/fern_gusto/types/payroll_withholding_pay_period_type.rb +17 -0
  466. data/lib/fern_gusto/types/recovery_case.rb +131 -0
  467. data/lib/fern_gusto/types/recovery_case_status.rb +14 -0
  468. data/lib/fern_gusto/types/rehire.rb +116 -0
  469. data/lib/fern_gusto/types/rehire_body.rb +91 -0
  470. data/lib/fern_gusto/types/rehire_body_employment_status.rb +16 -0
  471. data/lib/fern_gusto/types/rehire_employment_status.rb +16 -0
  472. data/lib/fern_gusto/types/report.rb +72 -0
  473. data/lib/fern_gusto/types/report_template.rb +77 -0
  474. data/lib/fern_gusto/types/supported_benefit.rb +122 -0
  475. data/lib/fern_gusto/types/tax_requirement.rb +111 -0
  476. data/lib/fern_gusto/types/tax_requirement_applicable_if_item.rb +69 -0
  477. data/lib/fern_gusto/types/tax_requirement_applicable_if_item_value.rb +72 -0
  478. data/lib/fern_gusto/types/tax_requirement_effective_from.rb +5 -0
  479. data/lib/fern_gusto/types/tax_requirement_metadata.rb +182 -0
  480. data/lib/fern_gusto/types/tax_requirement_metadata_options_item.rb +70 -0
  481. data/lib/fern_gusto/types/tax_requirement_metadata_rate_type.rb +13 -0
  482. data/lib/fern_gusto/types/tax_requirement_metadata_type.rb +31 -0
  483. data/lib/fern_gusto/types/tax_requirement_metadata_validation.rb +81 -0
  484. data/lib/fern_gusto/types/tax_requirement_metadata_validation_type.rb +11 -0
  485. data/lib/fern_gusto/types/tax_requirement_set.rb +90 -0
  486. data/lib/fern_gusto/types/tax_requirements_state.rb +75 -0
  487. data/lib/fern_gusto/types/time_off_activity.rb +107 -0
  488. data/lib/fern_gusto/types/time_off_activity_time_off_type.rb +11 -0
  489. data/lib/fern_gusto/types/time_off_policy.rb +183 -0
  490. data/lib/fern_gusto/types/time_off_policy_employees_item.rb +53 -0
  491. data/lib/fern_gusto/types/time_off_policy_policy_type.rb +11 -0
  492. data/lib/fern_gusto/types/unprocessable_entity_error_body.rb +59 -0
  493. data/lib/fern_gusto/types/unprocessable_entity_error_body_errors.rb +57 -0
  494. data/lib/fern_gusto/types/unprocessable_entity_error_body_errors_base_item.rb +72 -0
  495. data/lib/fern_gusto/types/unprocessable_entity_error_body_item.rb +65 -0
  496. data/lib/fern_gusto/types/unprocessable_entity_error_body_item_questions_item.rb +69 -0
  497. data/lib/fern_gusto/types/unprocessable_entity_error_body_item_questions_item_answers_item.rb +72 -0
  498. data/lib/fern_gusto/types/unprocessable_entity_error_object.rb +63 -0
  499. data/lib/fern_gusto/types/versionable.rb +57 -0
  500. data/lib/fern_gusto/types/versionable_required.rb +55 -0
  501. data/lib/fern_gusto/types/wire_in_request.rb +170 -0
  502. data/lib/fern_gusto/types/wire_in_request_status.rb +14 -0
  503. data/lib/fern_gusto/webhooks/client.rb +627 -0
  504. data/lib/fern_gusto/webhooks/types/webhook_subscription.rb +82 -0
  505. data/lib/fern_gusto/webhooks/types/webhook_subscription_status.rb +14 -0
  506. data/lib/fern_gusto/webhooks/types/webhook_subscription_subscription_types_item.rb +25 -0
  507. data/lib/fern_gusto/webhooks/types/webhooks_create_request_subscription_types_item.rb +25 -0
  508. data/lib/fern_gusto/webhooks/types/webhooks_update_request_subscription_types_item.rb +25 -0
  509. data/lib/fern_gusto/wire_in_requests/client.rb +273 -0
  510. data/lib/fern_gusto.rb +310 -0
  511. data/lib/gemconfig.rb +13 -0
  512. data/lib/gusto_legacy.rb +19 -0
  513. data/lib/requests.rb +206 -0
  514. data/lib/types_export.rb +461 -0
  515. metadata +671 -0
@@ -0,0 +1,1644 @@
1
+ # frozen_string_literal: true
2
+ require_relative "../../requests"
3
+ require_relative "external_payrolls/client"
4
+ require_relative "pay_schedules/client"
5
+ require_relative "earning_types/client"
6
+ require_relative "types/payroll_list_request_processing_statuses_item"
7
+ require_relative "types/payroll_list_request_payroll_types_item"
8
+ require_relative "types/payroll_list_request_include_item"
9
+ require_relative "types/payroll_list_request_sort_order"
10
+ require_relative "../payrolls/types/payroll_minimal"
11
+ require "json"
12
+ require_relative "types/payroll_create_request_off_cycle_reason"
13
+ require_relative "types/payroll_create_request_withholding_pay_period"
14
+ require_relative "../payrolls/types/payroll_prepared"
15
+ require_relative "../types/payroll_reversal"
16
+ require_relative "types/payroll_get_request_include_item"
17
+ require_relative "../payrolls/types/payroll"
18
+ require_relative "types/payroll_update_request_employee_compensations_item"
19
+ require_relative "../types/payroll_receipt"
20
+ require_relative "../types/payroll_blocker"
21
+ require_relative "types/payroll_skip_payroll_request_payroll_type"
22
+ require_relative "../types/gross_up_pay"
23
+ require_relative "types/payroll_submit_request_submission_blockers_item"
24
+ require_relative "../payrolls/types/employee_pay_stub"
25
+ require_relative "../types/payroll_check"
26
+ require "async"
27
+ require "async"
28
+ require "async"
29
+ require "async"
30
+ require "async"
31
+ require "async"
32
+ require "async"
33
+ require "async"
34
+ require "async"
35
+ require "async"
36
+ require "async"
37
+ require "async"
38
+ require "async"
39
+ require "async"
40
+ require "async"
41
+ require "async"
42
+ require "async"
43
+ require_relative "../../requests"
44
+
45
+ module Gusto
46
+ class PayrollClient
47
+ # @return [Gusto::RequestClient]
48
+ attr_reader :request_client
49
+ # @return [Gusto::Payroll::ExternalPayrollsClient]
50
+ attr_reader :external_payrolls
51
+ # @return [Gusto::Payroll::PaySchedulesClient]
52
+ attr_reader :pay_schedules
53
+ # @return [Gusto::Payroll::EarningTypesClient]
54
+ attr_reader :earning_types
55
+
56
+
57
+ # @param request_client [Gusto::RequestClient]
58
+ # @return [Gusto::PayrollClient]
59
+ def initialize(request_client:)
60
+ @request_client = request_client
61
+ @external_payrolls = Gusto::Payroll::ExternalPayrollsClient.new(request_client: request_client)
62
+ @pay_schedules = Gusto::Payroll::PaySchedulesClient.new(request_client: request_client)
63
+ @earning_types = Gusto::Payroll::EarningTypesClient.new(request_client: request_client)
64
+ end
65
+ # Returns a list of payrolls for a company. You can change the payrolls returned
66
+ # by updating the processing_status, payroll_types, start_date, & end_date params.
67
+ # By default, will return processed, regular payrolls for the past 6 months.
68
+ # Notes:
69
+ # - Dollar amounts are returned as string representations of numeric decimals, are
70
+ # represented to the cent.
71
+ # - end_date can be at most 3 months in the future and start_date and end_date
72
+ # can't be more than 1 year apart.
73
+ # scope: `payrolls:read`
74
+ #
75
+ # @param company_id [String] The UUID of the company
76
+ # @param processing_statuses [Gusto::Payroll::PayrollListRequestProcessingStatusesItem] Whether to include processed and/or unprocessed payrolls in the response,
77
+ # defaults to processed, for multiple attributes comma separate the values, i.e.
78
+ # `?processing_statuses=processed,unprocessed`
79
+ # @param payroll_types [Gusto::Payroll::PayrollListRequestPayrollTypesItem] Whether to include regular and/or off_cycle payrolls in the response, defaults
80
+ # to regular, for multiple attributes comma separate the values, i.e.
81
+ # `?payroll_types=regular,off_cycle`
82
+ # @param include [Gusto::Payroll::PayrollListRequestIncludeItem] Include the requested attribute in the response. The risk_blockers option will
83
+ # include submission_blockers and credit_blockers if applicable. In v2023-04-01
84
+ # totals are no longer included by default. For multiple attributes comma separate
85
+ # the values, i.e. `?include=totals,payroll_status_meta`
86
+ # @param start_date [String] Return payrolls whose pay period is after the start date
87
+ # @param end_date [String] Return payrolls whose pay period is before the end date. If left empty, defaults
88
+ # to today's date.
89
+ # @param sort_order [Gusto::Payroll::PayrollListRequestSortOrder] A string indicating whether to sort resulting events in ascending (asc) or
90
+ # descending (desc) chronological order. Events are sorted by their `timestamp`.
91
+ # Defaults to asc if left empty.
92
+ # @param request_options [Gusto::RequestOptions]
93
+ # @return [Array<Gusto::Payrolls::PayrollMinimal>]
94
+ # @example
95
+ # api = Gusto::Client.new(
96
+ # base_url: "https://api.example.com",
97
+ # environment: Gusto::Environment::DEMO,
98
+ # token: "YOUR_AUTH_TOKEN"
99
+ # )
100
+ # api.payroll.list(company_id: "company_id")
101
+ def list(company_id:, processing_statuses: nil, payroll_types: nil, include: nil, start_date: nil, end_date: nil, sort_order: nil, request_options: nil)
102
+ response = @request_client.conn.get do | req |
103
+ unless request_options&.timeout_in_seconds.nil?
104
+ req.options.timeout = request_options.timeout_in_seconds
105
+ end
106
+ unless request_options&.token.nil?
107
+ req.headers["Authorization"] = request_options.token
108
+ end
109
+ unless request_options&.gusto_api_version.nil?
110
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
111
+ end
112
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
113
+ req.params = { **(request_options&.additional_query_parameters || {}), "processing_statuses": processing_statuses, "payroll_types": payroll_types, "include": include, "start_date": start_date, "end_date": end_date, "sort_order": sort_order }.compact
114
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
115
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
116
+ end
117
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls"
118
+ end
119
+ parsed_json = JSON.parse(response.body)
120
+ parsed_json&.map do | item |
121
+ item = item.to_json
122
+ Gusto::Payrolls::PayrollMinimal.from_json(json_object: item)
123
+ end
124
+ end
125
+ # Creates a new, unprocessed, off-cycle payroll.
126
+ # ## `off_cycle_reason`
127
+ # - External benefits and deductions will be included when the `off_cycle_reason`
128
+ # is set to `Correction`.
129
+ # - All benefits and deductions are blocked when the `off_cycle_reason` is set to
130
+ # `Bonus`.
131
+ # scope: `payrolls:run`
132
+ #
133
+ # @param company_id [String] The UUID of the company
134
+ # @param off_cycle [Boolean] Whether it is an off cycle payroll.
135
+ # @param off_cycle_reason [Gusto::Payroll::PayrollCreateRequestOffCycleReason] An off cycle payroll reason. Select one from the following list.
136
+ # @param start_date [String] Pay period start date.
137
+ # @param end_date [String] Pay period end date. If left empty, defaults to today's date.
138
+ # @param pay_schedule_uuid [String] A pay schedule is required for Transition from old pay schedule payroll to
139
+ # identify the matching transition pay period.
140
+ # @param employee_uuids [Array<String>] A list of employee uuids to include on the payroll.
141
+ # @param check_date [String] Payment date.
142
+ # @param withholding_pay_period [Gusto::Payroll::PayrollCreateRequestWithholdingPayPeriod] The payment schedule tax rate the payroll is based on
143
+ # @param skip_regular_deductions [Boolean] Block regular deductions and contributions for this payroll.
144
+ # @param fixed_withholding_rate [Boolean] Enable taxes to be withheld at the IRS's required rate of 22% for federal income
145
+ # taxes. State income taxes will be taxed at the state's supplemental tax rate.
146
+ # Otherwise, we'll sum the entirety of the employee's wages and withhold taxes on
147
+ # the entire amount at the rate for regular wages.
148
+ # @param request_options [Gusto::RequestOptions]
149
+ # @return [Gusto::Payrolls::PayrollPrepared]
150
+ # @example
151
+ # api = Gusto::Client.new(
152
+ # base_url: "https://api.example.com",
153
+ # environment: Gusto::Environment::DEMO,
154
+ # token: "YOUR_AUTH_TOKEN"
155
+ # )
156
+ # api.payroll.create(
157
+ # company_id: "company_id",
158
+ # off_cycle: true,
159
+ # off_cycle_reason: BONUS,
160
+ # start_date: "start_date",
161
+ # end_date: "end_date"
162
+ # )
163
+ def create(company_id:, off_cycle:, off_cycle_reason:, start_date:, end_date:, pay_schedule_uuid: nil, employee_uuids: nil, check_date: nil, withholding_pay_period: nil, skip_regular_deductions: nil, fixed_withholding_rate: nil, request_options: nil)
164
+ response = @request_client.conn.post do | req |
165
+ unless request_options&.timeout_in_seconds.nil?
166
+ req.options.timeout = request_options.timeout_in_seconds
167
+ end
168
+ unless request_options&.token.nil?
169
+ req.headers["Authorization"] = request_options.token
170
+ end
171
+ unless request_options&.gusto_api_version.nil?
172
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
173
+ end
174
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
175
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
176
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
177
+ end
178
+ req.body = { **(request_options&.additional_body_parameters || {}), off_cycle: off_cycle, off_cycle_reason: off_cycle_reason, start_date: start_date, end_date: end_date, pay_schedule_uuid: pay_schedule_uuid, employee_uuids: employee_uuids, check_date: check_date, withholding_pay_period: withholding_pay_period, skip_regular_deductions: skip_regular_deductions, fixed_withholding_rate: fixed_withholding_rate }.compact
179
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls"
180
+ end
181
+ Gusto::Payrolls::PayrollPrepared.from_json(json_object: response.body)
182
+ end
183
+ # Returns all approved Payroll Reversals for a Company.
184
+ # scope: `payrolls:read`
185
+ #
186
+ # @param company_id [String] The UUID of the company
187
+ # @param page [Float] The page that is requested. When unspecified, will load all objects unless
188
+ # endpoint forces pagination.
189
+ # @param per [Float] Number of objects per page. For majority of endpoints will default to 25
190
+ # @param request_options [Gusto::RequestOptions]
191
+ # @return [Gusto::PayrollReversal]
192
+ # @example
193
+ # api = Gusto::Client.new(
194
+ # base_url: "https://api.example.com",
195
+ # environment: Gusto::Environment::DEMO,
196
+ # token: "YOUR_AUTH_TOKEN"
197
+ # )
198
+ # api.payroll.get_reversals(company_id: "company_id")
199
+ def get_reversals(company_id:, page: nil, per: nil, request_options: nil)
200
+ response = @request_client.conn.get do | req |
201
+ unless request_options&.timeout_in_seconds.nil?
202
+ req.options.timeout = request_options.timeout_in_seconds
203
+ end
204
+ unless request_options&.token.nil?
205
+ req.headers["Authorization"] = request_options.token
206
+ end
207
+ unless request_options&.gusto_api_version.nil?
208
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
209
+ end
210
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
211
+ req.params = { **(request_options&.additional_query_parameters || {}), "page": page, "per": per }.compact
212
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
213
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
214
+ end
215
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payroll_reversals"
216
+ end
217
+ Gusto::PayrollReversal.from_json(json_object: response.body)
218
+ end
219
+ # Returns a payroll. If payroll is calculated or processed, will return
220
+ # employee_compensations and totals.
221
+ # Notes:
222
+ # - Hour and dollar amounts are returned as string representations of numeric
223
+ # decimals.
224
+ # - Hours are represented to the thousands place; dollar amounts are represented
225
+ # to the cent.
226
+ # - Every eligible compensation is returned for each employee. If no data has yet
227
+ # be inserted for a given field, it defaults to “0.00” (for fixed amounts) or
228
+ # “0.000” (for hours ).
229
+ # - To return future payrolls, you must include an `end_date` in the future.
230
+ # - When include parameter with benefits value is passed, employee_benefits:read
231
+ # scope is required to return benefits
232
+ # - Benefits containing PHI are only visible with the
233
+ # `employee_benefits:read:phi` scope
234
+ # scope: `payrolls:read`
235
+ #
236
+ # @param company_id [String] The UUID of the company
237
+ # @param payroll_id [String] The UUID of the payroll
238
+ # @param include [Gusto::Payroll::PayrollGetRequestIncludeItem] Include the requested attribute in the response, for multiple attributes comma
239
+ # separate the values, i.e. `?include=benefits,deductions,taxes`
240
+ # @param request_options [Gusto::RequestOptions]
241
+ # @return [Gusto::Payrolls::Payroll]
242
+ # @example
243
+ # api = Gusto::Client.new(
244
+ # base_url: "https://api.example.com",
245
+ # environment: Gusto::Environment::DEMO,
246
+ # token: "YOUR_AUTH_TOKEN"
247
+ # )
248
+ # api.payroll.get(company_id: "company_id", payroll_id: "payroll_id")
249
+ def get(company_id:, payroll_id:, include: nil, request_options: nil)
250
+ response = @request_client.conn.get do | req |
251
+ unless request_options&.timeout_in_seconds.nil?
252
+ req.options.timeout = request_options.timeout_in_seconds
253
+ end
254
+ unless request_options&.token.nil?
255
+ req.headers["Authorization"] = request_options.token
256
+ end
257
+ unless request_options&.gusto_api_version.nil?
258
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
259
+ end
260
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
261
+ req.params = { **(request_options&.additional_query_parameters || {}), "include": include }.compact
262
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
263
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
264
+ end
265
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}"
266
+ end
267
+ Gusto::Payrolls::Payroll.from_json(json_object: response.body)
268
+ end
269
+ # This endpoint allows you to update information for one or more employees for a
270
+ # specific **unprocessed** payroll. You can think of the **unprocessed**
271
+ # payroll object as a template of fields that you can update. You cannot modify
272
+ # the structure of the payroll object through this endpoint, only values
273
+ # of the fields included in the payroll. If you do not include specific employee
274
+ # compensations or fixed/hourly compensations in your request body, they
275
+ # will not be removed from the payroll.
276
+ # scope: `payrolls:write`
277
+ #
278
+ # @param company_id [String] The UUID of the company
279
+ # @param payroll_id [String] The UUID of the payroll
280
+ # @param employee_compensations [Array<Hash>] Request of type Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItem>, as a Hash
281
+ # * :employee_uuid (String)
282
+ # * :version (String)
283
+ # * :excluded (Boolean)
284
+ # * :payment_method (Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemPaymentMethod)
285
+ # * :memo (String)
286
+ # * :fixed_compensations (Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemFixedCompensationsItem>)
287
+ # * :hourly_compensations (Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemHourlyCompensationsItem>)
288
+ # * :paid_time_off (Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemPaidTimeOffItem>)
289
+ # @param request_options [Gusto::RequestOptions]
290
+ # @return [Gusto::Payrolls::PayrollPrepared]
291
+ # @example
292
+ # api = Gusto::Client.new(
293
+ # base_url: "https://api.example.com",
294
+ # environment: Gusto::Environment::DEMO,
295
+ # token: "YOUR_AUTH_TOKEN"
296
+ # )
297
+ # api.payroll.update(
298
+ # company_id: "company_id",
299
+ # payroll_id: "payroll_id",
300
+ # employee_compensations: [{ }]
301
+ # )
302
+ def update(company_id:, payroll_id:, employee_compensations:, request_options: nil)
303
+ response = @request_client.conn.put do | req |
304
+ unless request_options&.timeout_in_seconds.nil?
305
+ req.options.timeout = request_options.timeout_in_seconds
306
+ end
307
+ unless request_options&.token.nil?
308
+ req.headers["Authorization"] = request_options.token
309
+ end
310
+ unless request_options&.gusto_api_version.nil?
311
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
312
+ end
313
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
314
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
315
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
316
+ end
317
+ req.body = { **(request_options&.additional_body_parameters || {}), employee_compensations: employee_compensations }.compact
318
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}"
319
+ end
320
+ Gusto::Payrolls::PayrollPrepared.from_json(json_object: response.body)
321
+ end
322
+ # This endpoint allows you to delete an **unprocessed** payroll.
323
+ # By default the payroll and associated data is deleted synchronously. To request
324
+ # an asynchronous delete, use the `async=true` query parameter. In both cases
325
+ # validation of ability to delete will be performed and an Unprocessable Entity
326
+ # error will be returned if the payroll is not able to be deleted. A successful
327
+ # synchronous delete will return `204/No Content`. When a payroll has been
328
+ # enqueued for asynchronous deletion, `202/Accepted` will be returned.
329
+ # scope: `payrolls:run`
330
+ #
331
+ # @param company_id [String] The UUID of the company
332
+ # @param payroll_id [String] The UUID of the payroll
333
+ # @param async [Boolean] When true, request an asynchronous delete of the payroll.
334
+ # @param request_options [Gusto::RequestOptions]
335
+ # @return [Void]
336
+ # @example
337
+ # api = Gusto::Client.new(
338
+ # base_url: "https://api.example.com",
339
+ # environment: Gusto::Environment::DEMO,
340
+ # token: "YOUR_AUTH_TOKEN"
341
+ # )
342
+ # api.payroll.delete(company_id: "company_id", payroll_id: "payroll_id")
343
+ def delete(company_id:, payroll_id:, async: nil, request_options: nil)
344
+ response = @request_client.conn.delete do | req |
345
+ unless request_options&.timeout_in_seconds.nil?
346
+ req.options.timeout = request_options.timeout_in_seconds
347
+ end
348
+ unless request_options&.token.nil?
349
+ req.headers["Authorization"] = request_options.token
350
+ end
351
+ unless request_options&.gusto_api_version.nil?
352
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
353
+ end
354
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
355
+ req.params = { **(request_options&.additional_query_parameters || {}), "async": async }.compact
356
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
357
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
358
+ end
359
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}"
360
+ end
361
+ end
362
+ # This endpoint will build the payroll and get it ready for making updates. This
363
+ # includes adding/removing eligible employees from the Payroll and updating the
364
+ # check_date, payroll_deadline, and payroll_status_meta dates & times.
365
+ # Notes:
366
+ # - Will null out calculated_at & totals if a payroll has already been calculated.
367
+ # - Will return the version param used for updating the payroll
368
+ # scope: `payrolls:write`
369
+ #
370
+ # @param company_id [String] The UUID of the company
371
+ # @param payroll_id [String] The UUID of the payroll
372
+ # @param request_options [Gusto::RequestOptions]
373
+ # @return [Gusto::Payrolls::PayrollPrepared]
374
+ # @example
375
+ # api = Gusto::Client.new(
376
+ # base_url: "https://api.example.com",
377
+ # environment: Gusto::Environment::DEMO,
378
+ # token: "YOUR_AUTH_TOKEN"
379
+ # )
380
+ # api.payroll.prepare(company_id: "company_id", payroll_id: "payroll_id")
381
+ def prepare(company_id:, payroll_id:, request_options: nil)
382
+ response = @request_client.conn.put do | req |
383
+ unless request_options&.timeout_in_seconds.nil?
384
+ req.options.timeout = request_options.timeout_in_seconds
385
+ end
386
+ unless request_options&.token.nil?
387
+ req.headers["Authorization"] = request_options.token
388
+ end
389
+ unless request_options&.gusto_api_version.nil?
390
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
391
+ end
392
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
393
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
394
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
395
+ end
396
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
397
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
398
+ end
399
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/prepare"
400
+ end
401
+ Gusto::Payrolls::PayrollPrepared.from_json(json_object: response.body)
402
+ end
403
+ # Returns a payroll receipt.
404
+ # Notes:
405
+ # - Hour and dollar amounts are returned as string representations of numeric
406
+ # decimals.
407
+ # - Dollar amounts are represented to the cent.
408
+ # - If no data has yet be inserted for a given field, it defaults to “0.00” (for
409
+ # fixed amounts).
410
+ # scope: `payrolls:read`
411
+ #
412
+ # @param payroll_uuid [String] The UUID of the payroll
413
+ # @param request_options [Gusto::RequestOptions]
414
+ # @return [Gusto::PayrollReceipt]
415
+ # @example
416
+ # api = Gusto::Client.new(
417
+ # base_url: "https://api.example.com",
418
+ # environment: Gusto::Environment::DEMO,
419
+ # token: "YOUR_AUTH_TOKEN"
420
+ # )
421
+ # api.payroll.get_receipt(payroll_uuid: "payroll_uuid")
422
+ def get_receipt(payroll_uuid:, request_options: nil)
423
+ response = @request_client.conn.get do | req |
424
+ unless request_options&.timeout_in_seconds.nil?
425
+ req.options.timeout = request_options.timeout_in_seconds
426
+ end
427
+ unless request_options&.token.nil?
428
+ req.headers["Authorization"] = request_options.token
429
+ end
430
+ unless request_options&.gusto_api_version.nil?
431
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
432
+ end
433
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
434
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
435
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
436
+ end
437
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
438
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
439
+ end
440
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_uuid}/receipt"
441
+ end
442
+ Gusto::PayrollReceipt.from_json(json_object: response.body)
443
+ end
444
+ # Returns a list of reasons that prevent the company from running payrolls. See
445
+ # the [payroll blockers
446
+ # guide](https://docs.gusto.com/embedded-payroll/docs/payroll-blockers) for a
447
+ # complete list of reasons.
448
+ # The list is empty if there are no payroll blockers.
449
+ # scope: `payrolls:run`
450
+ #
451
+ # @param company_uuid [String] The UUID of the company
452
+ # @param request_options [Gusto::RequestOptions]
453
+ # @return [Array<Gusto::PayrollBlocker>]
454
+ # @example
455
+ # api = Gusto::Client.new(
456
+ # base_url: "https://api.example.com",
457
+ # environment: Gusto::Environment::DEMO,
458
+ # token: "YOUR_AUTH_TOKEN"
459
+ # )
460
+ # api.payroll.get_blockers(company_uuid: "company_uuid")
461
+ def get_blockers(company_uuid:, request_options: nil)
462
+ response = @request_client.conn.get do | req |
463
+ unless request_options&.timeout_in_seconds.nil?
464
+ req.options.timeout = request_options.timeout_in_seconds
465
+ end
466
+ unless request_options&.token.nil?
467
+ req.headers["Authorization"] = request_options.token
468
+ end
469
+ unless request_options&.gusto_api_version.nil?
470
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
471
+ end
472
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
473
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
474
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
475
+ end
476
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
477
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
478
+ end
479
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_uuid}/payrolls/blockers"
480
+ end
481
+ parsed_json = JSON.parse(response.body)
482
+ parsed_json&.map do | item |
483
+ item = item.to_json
484
+ Gusto::PayrollBlocker.from_json(json_object: item)
485
+ end
486
+ end
487
+ # Submits a $0 payroll for employees associated with the pay schedule to skip
488
+ # payroll. This submission is asynchronous and a successful request responds with
489
+ # a 202 HTTP status. Upon success, the payroll is transitioned to the `processed`
490
+ # state.
491
+ # If the company is blocked from running payroll due to issues like incomplete
492
+ # setup, missing information or other compliance issues, the response will be 422
493
+ # Unprocessable Entity with a categorization of the blockers as described in the
494
+ # error responses.
495
+ # scope: `payrolls:run`
496
+ #
497
+ # @param company_uuid [String] The UUID of the company
498
+ # @param payroll_type [Gusto::Payroll::PayrollSkipPayrollRequestPayrollType] Payroll type
499
+ # @param start_date [String] Pay period start date
500
+ # @param end_date [String] Pay period end date. If left empty, defaults to today's date.
501
+ # @param pay_schedule_uuid [String] The UUID of the pay schedule
502
+ # @param employee_uuids [Array<String>] An array of employees. This field is only applicable to new hire payroll and
503
+ # termination payroll
504
+ # @param request_options [Gusto::RequestOptions]
505
+ # @return [Void]
506
+ # @example
507
+ # api = Gusto::Client.new(
508
+ # base_url: "https://api.example.com",
509
+ # environment: Gusto::Environment::DEMO,
510
+ # token: "YOUR_AUTH_TOKEN"
511
+ # )
512
+ # api.payroll.skip_payroll(
513
+ # company_uuid: "company_uuid",
514
+ # payroll_type: REGULAR,
515
+ # start_date: "2023-05-26",
516
+ # end_date: "2023-06-25",
517
+ # pay_schedule_uuid: "85100524-4b42-4d2d-bd62-9d864f9aea64"
518
+ # )
519
+ def skip_payroll(company_uuid:, payroll_type:, start_date: nil, end_date: nil, pay_schedule_uuid: nil, employee_uuids: nil, request_options: nil)
520
+ response = @request_client.conn.post do | req |
521
+ unless request_options&.timeout_in_seconds.nil?
522
+ req.options.timeout = request_options.timeout_in_seconds
523
+ end
524
+ unless request_options&.token.nil?
525
+ req.headers["Authorization"] = request_options.token
526
+ end
527
+ unless request_options&.gusto_api_version.nil?
528
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
529
+ end
530
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
531
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
532
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
533
+ end
534
+ req.body = { **(request_options&.additional_body_parameters || {}), payroll_type: payroll_type, start_date: start_date, end_date: end_date, pay_schedule_uuid: pay_schedule_uuid, employee_uuids: employee_uuids }.compact
535
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_uuid}/payrolls/skip"
536
+ end
537
+ end
538
+ # Calculates gross up earnings for an employee's payroll, given net earnings. This
539
+ # endpoint is only applicable to off-cycle unprocessed payrolls.
540
+ # The gross up amount must then be mapped to the corresponding fixed compensation
541
+ # earning type to get the correct payroll amount. For example, for bonus
542
+ # off-cycles, the gross up amount should be set with the Bonus earning type in the
543
+ # payroll `fixed_compensations` field.
544
+ # scope: `payrolls:run`
545
+ #
546
+ # @param payroll_uuid [String] The UUID of the payroll
547
+ # @param employee_uuid [String] Employee UUID
548
+ # @param net_pay [String] Employee net earnings
549
+ # @param request_options [Gusto::RequestOptions]
550
+ # @return [Gusto::GrossUpPay]
551
+ # @example
552
+ # api = Gusto::Client.new(
553
+ # base_url: "https://api.example.com",
554
+ # environment: Gusto::Environment::DEMO,
555
+ # token: "YOUR_AUTH_TOKEN"
556
+ # )
557
+ # api.payroll.gross_up(
558
+ # payroll_uuid: "payroll_uuid",
559
+ # employee_uuid: "be48c41e-142d-4116-9430-5aba2313fac7",
560
+ # net_pay: "1000.00"
561
+ # )
562
+ def gross_up(payroll_uuid:, employee_uuid:, net_pay:, request_options: nil)
563
+ response = @request_client.conn.post do | req |
564
+ unless request_options&.timeout_in_seconds.nil?
565
+ req.options.timeout = request_options.timeout_in_seconds
566
+ end
567
+ unless request_options&.token.nil?
568
+ req.headers["Authorization"] = request_options.token
569
+ end
570
+ unless request_options&.gusto_api_version.nil?
571
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
572
+ end
573
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
574
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
575
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
576
+ end
577
+ req.body = { **(request_options&.additional_body_parameters || {}), employee_uuid: employee_uuid, net_pay: net_pay }.compact
578
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_uuid}/gross_up"
579
+ end
580
+ Gusto::GrossUpPay.from_json(json_object: response.body)
581
+ end
582
+ # Performs calculations for taxes, benefits, and deductions for an unprocessed
583
+ # payroll. The calculated payroll details provide a preview of the actual values
584
+ # that will be used when the payroll is run.
585
+ # This calculation is asynchronous and a successful request responds with a 202
586
+ # HTTP status. To view the details of the calculated payroll, use the GET
587
+ # /v1/companies/{company_id}/payrolls/{payroll_id} endpoint with
588
+ # _include=taxes,benefits,deductions_ params.
589
+ # In v2023-04-01, _show_calculation=true_ is no longer required.
590
+ # If the company is blocked from running payroll due to issues like incomplete
591
+ # setup, missing information or other compliance issues, the response will be 422
592
+ # Unprocessable Entity with a categorization of the blockers as described in the
593
+ # error responses.
594
+ #
595
+ # @param company_id [String] The UUID of the company
596
+ # @param payroll_id [String] The UUID of the payroll
597
+ # @param request_options [Gusto::RequestOptions]
598
+ # @return [Void]
599
+ # @example
600
+ # api = Gusto::Client.new(
601
+ # base_url: "https://api.example.com",
602
+ # environment: Gusto::Environment::DEMO,
603
+ # token: "YOUR_AUTH_TOKEN"
604
+ # )
605
+ # api.payroll.calculate(company_id: "company_id", payroll_id: "payroll_id")
606
+ def calculate(company_id:, payroll_id:, request_options: nil)
607
+ response = @request_client.conn.put do | req |
608
+ unless request_options&.timeout_in_seconds.nil?
609
+ req.options.timeout = request_options.timeout_in_seconds
610
+ end
611
+ unless request_options&.token.nil?
612
+ req.headers["Authorization"] = request_options.token
613
+ end
614
+ unless request_options&.gusto_api_version.nil?
615
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
616
+ end
617
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
618
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
619
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
620
+ end
621
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
622
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
623
+ end
624
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/calculate"
625
+ end
626
+ end
627
+ # Submits an unprocessed payroll to be calculated and run. This submission is
628
+ # asynchronous and a successful request responds with a 202 HTTP status. Upon
629
+ # success, transitions the payroll to the `processed` state.
630
+ # You should poll to ensure that payroll is processed successfully, as async
631
+ # errors only occur after async processing is complete.
632
+ # If the company is blocked from running payroll due to issues like incomplete
633
+ # setup, missing information or other compliance issues, the response will be 422
634
+ # Unprocessable Entity with a categorization of the blockers as described in the
635
+ # error responses.
636
+ # scope: `payrolls:run`
637
+ #
638
+ # @param company_id [String] The UUID of the company
639
+ # @param payroll_id [String] The UUID of the payroll
640
+ # @param submission_blockers [Array<Hash>] An array of submission_blockers, each with a selected unblock option.Request of type Array<Gusto::Payroll::PayrollSubmitRequestSubmissionBlockersItem>, as a Hash
641
+ # * :blocker_type (String)
642
+ # * :selected_option (String)
643
+ # @param request_options [Gusto::RequestOptions]
644
+ # @return [Void]
645
+ # @example
646
+ # api = Gusto::Client.new(
647
+ # base_url: "https://api.example.com",
648
+ # environment: Gusto::Environment::DEMO,
649
+ # token: "YOUR_AUTH_TOKEN"
650
+ # )
651
+ # api.payroll.submit(company_id: "company_id", payroll_id: "payroll_id")
652
+ def submit(company_id:, payroll_id:, submission_blockers: nil, request_options: nil)
653
+ response = @request_client.conn.put do | req |
654
+ unless request_options&.timeout_in_seconds.nil?
655
+ req.options.timeout = request_options.timeout_in_seconds
656
+ end
657
+ unless request_options&.token.nil?
658
+ req.headers["Authorization"] = request_options.token
659
+ end
660
+ unless request_options&.gusto_api_version.nil?
661
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
662
+ end
663
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
664
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
665
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
666
+ end
667
+ req.body = { **(request_options&.additional_body_parameters || {}), submission_blockers: submission_blockers }.compact
668
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/submit"
669
+ end
670
+ end
671
+ # Transitions a `processed` payroll back to the `unprocessed` state. A payroll can
672
+ # be canceled if it meets both criteria:
673
+ # - `processed` is true
674
+ # - Current time is earlier than 3:30pm PT on the payroll_deadline
675
+ # scope: `payrolls:run`
676
+ #
677
+ # @param company_id [String] The UUID of the company
678
+ # @param payroll_id [String] The UUID of the payroll
679
+ # @param request_options [Gusto::RequestOptions]
680
+ # @return [Gusto::Payrolls::Payroll]
681
+ # @example
682
+ # api = Gusto::Client.new(
683
+ # base_url: "https://api.example.com",
684
+ # environment: Gusto::Environment::DEMO,
685
+ # token: "YOUR_AUTH_TOKEN"
686
+ # )
687
+ # api.payroll.cancel(company_id: "company_id", payroll_id: "payroll_id")
688
+ def cancel(company_id:, payroll_id:, request_options: nil)
689
+ response = @request_client.conn.put do | req |
690
+ unless request_options&.timeout_in_seconds.nil?
691
+ req.options.timeout = request_options.timeout_in_seconds
692
+ end
693
+ unless request_options&.token.nil?
694
+ req.headers["Authorization"] = request_options.token
695
+ end
696
+ unless request_options&.gusto_api_version.nil?
697
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
698
+ end
699
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
700
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
701
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
702
+ end
703
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
704
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
705
+ end
706
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/cancel"
707
+ end
708
+ Gusto::Payrolls::Payroll.from_json(json_object: response.body)
709
+ end
710
+ # Get an employee's pay stub for the specified payroll. By default, an
711
+ # application/pdf response will be returned. No other content types are currently
712
+ # supported, but may be supported in the future.
713
+ # scope: `pay_stubs:read`
714
+ #
715
+ # @param payroll_id [String] The UUID of the payroll
716
+ # @param employee_id [String] The UUID of the employee
717
+ # @param request_options [Gusto::RequestOptions]
718
+ # @return [Void]
719
+ # @example
720
+ # api = Gusto::Client.new(
721
+ # base_url: "https://api.example.com",
722
+ # environment: Gusto::Environment::DEMO,
723
+ # token: "YOUR_AUTH_TOKEN"
724
+ # )
725
+ # api.payroll.get_pay_stub(payroll_id: "payroll_id", employee_id: "employee_id")
726
+ def get_pay_stub(payroll_id:, employee_id:, request_options: nil)
727
+ response = @request_client.conn.get do | req |
728
+ unless request_options&.timeout_in_seconds.nil?
729
+ req.options.timeout = request_options.timeout_in_seconds
730
+ end
731
+ unless request_options&.token.nil?
732
+ req.headers["Authorization"] = request_options.token
733
+ end
734
+ unless request_options&.gusto_api_version.nil?
735
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
736
+ end
737
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
738
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
739
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
740
+ end
741
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
742
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
743
+ end
744
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_id}/employees/#{employee_id}/pay_stub"
745
+ end
746
+ end
747
+ # Get an employee's pay stubs
748
+ # scope: `pay_stubs:read`
749
+ #
750
+ # @param employee_id [String] The UUID of the employee
751
+ # @param request_options [Gusto::RequestOptions]
752
+ # @return [Array<Gusto::Payrolls::EmployeePayStub>]
753
+ # @example
754
+ # api = Gusto::Client.new(
755
+ # base_url: "https://api.example.com",
756
+ # environment: Gusto::Environment::DEMO,
757
+ # token: "YOUR_AUTH_TOKEN"
758
+ # )
759
+ # api.payroll.list_pay_stubs(employee_id: "employee_id")
760
+ def list_pay_stubs(employee_id:, request_options: nil)
761
+ response = @request_client.conn.get do | req |
762
+ unless request_options&.timeout_in_seconds.nil?
763
+ req.options.timeout = request_options.timeout_in_seconds
764
+ end
765
+ unless request_options&.token.nil?
766
+ req.headers["Authorization"] = request_options.token
767
+ end
768
+ unless request_options&.gusto_api_version.nil?
769
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
770
+ end
771
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
772
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
773
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
774
+ end
775
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
776
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
777
+ end
778
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/employees/#{employee_id}/pay_stubs"
779
+ end
780
+ parsed_json = JSON.parse(response.body)
781
+ parsed_json&.map do | item |
782
+ item = item.to_json
783
+ Gusto::Payrolls::EmployeePayStub.from_json(json_object: item)
784
+ end
785
+ end
786
+ # This endpoint initiates the generation of employee checks for the payroll
787
+ # specified by payroll_id. A generation status and corresponding generated
788
+ # document request_uuid will be returned. Use the generated document GET endpoint
789
+ # with document_type: `printable_payroll_checks` and request_uuid to poll the
790
+ # check generation process and retrieve the generated check URL upon completion.
791
+ # scope: `generated_documents:write`
792
+ #
793
+ # @param payroll_id [String] The UUID of the payroll
794
+ # @param printing_format [String] The type of check stock being printed. Check this
795
+ # [link](https://support.gusto.com/article/999877761000000/Pay-your-team-by-check)
796
+ # for more info on check types
797
+ # @param starting_check_number [Integer] The starting check number for the checks being generated
798
+ # @param request_options [Gusto::RequestOptions]
799
+ # @return [Gusto::PayrollCheck]
800
+ # @example
801
+ # api = Gusto::Client.new(
802
+ # base_url: "https://api.example.com",
803
+ # environment: Gusto::Environment::DEMO,
804
+ # token: "YOUR_AUTH_TOKEN"
805
+ # )
806
+ # api.payroll.generate_printable_checks(payroll_id: "payroll_id", printing_format: "printing_format")
807
+ def generate_printable_checks(payroll_id:, printing_format:, starting_check_number: nil, request_options: nil)
808
+ response = @request_client.conn.post do | req |
809
+ unless request_options&.timeout_in_seconds.nil?
810
+ req.options.timeout = request_options.timeout_in_seconds
811
+ end
812
+ unless request_options&.token.nil?
813
+ req.headers["Authorization"] = request_options.token
814
+ end
815
+ unless request_options&.gusto_api_version.nil?
816
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
817
+ end
818
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
819
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
820
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
821
+ end
822
+ req.body = { **(request_options&.additional_body_parameters || {}), printing_format: printing_format, starting_check_number: starting_check_number }.compact
823
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_id}/generated_documents/printable_payroll_checks"
824
+ end
825
+ Gusto::PayrollCheck.from_json(json_object: response.body)
826
+ end
827
+ end
828
+ class AsyncPayrollClient
829
+ # @return [Gusto::AsyncRequestClient]
830
+ attr_reader :request_client
831
+ # @return [Gusto::Payroll::ExternalPayrollsClient]
832
+ attr_reader :external_payrolls
833
+ # @return [Gusto::Payroll::PaySchedulesClient]
834
+ attr_reader :pay_schedules
835
+ # @return [Gusto::Payroll::EarningTypesClient]
836
+ attr_reader :earning_types
837
+
838
+
839
+ # @param request_client [Gusto::RequestClient]
840
+ # @return [Gusto::AsyncPayrollClient]
841
+ def initialize(request_client:)
842
+ @request_client = request_client
843
+ @external_payrolls = Gusto::Payroll::AsyncExternalPayrollsClient.new(request_client: request_client)
844
+ @pay_schedules = Gusto::Payroll::AsyncPaySchedulesClient.new(request_client: request_client)
845
+ @earning_types = Gusto::Payroll::AsyncEarningTypesClient.new(request_client: request_client)
846
+ end
847
+ # Returns a list of payrolls for a company. You can change the payrolls returned
848
+ # by updating the processing_status, payroll_types, start_date, & end_date params.
849
+ # By default, will return processed, regular payrolls for the past 6 months.
850
+ # Notes:
851
+ # - Dollar amounts are returned as string representations of numeric decimals, are
852
+ # represented to the cent.
853
+ # - end_date can be at most 3 months in the future and start_date and end_date
854
+ # can't be more than 1 year apart.
855
+ # scope: `payrolls:read`
856
+ #
857
+ # @param company_id [String] The UUID of the company
858
+ # @param processing_statuses [Gusto::Payroll::PayrollListRequestProcessingStatusesItem] Whether to include processed and/or unprocessed payrolls in the response,
859
+ # defaults to processed, for multiple attributes comma separate the values, i.e.
860
+ # `?processing_statuses=processed,unprocessed`
861
+ # @param payroll_types [Gusto::Payroll::PayrollListRequestPayrollTypesItem] Whether to include regular and/or off_cycle payrolls in the response, defaults
862
+ # to regular, for multiple attributes comma separate the values, i.e.
863
+ # `?payroll_types=regular,off_cycle`
864
+ # @param include [Gusto::Payroll::PayrollListRequestIncludeItem] Include the requested attribute in the response. The risk_blockers option will
865
+ # include submission_blockers and credit_blockers if applicable. In v2023-04-01
866
+ # totals are no longer included by default. For multiple attributes comma separate
867
+ # the values, i.e. `?include=totals,payroll_status_meta`
868
+ # @param start_date [String] Return payrolls whose pay period is after the start date
869
+ # @param end_date [String] Return payrolls whose pay period is before the end date. If left empty, defaults
870
+ # to today's date.
871
+ # @param sort_order [Gusto::Payroll::PayrollListRequestSortOrder] A string indicating whether to sort resulting events in ascending (asc) or
872
+ # descending (desc) chronological order. Events are sorted by their `timestamp`.
873
+ # Defaults to asc if left empty.
874
+ # @param request_options [Gusto::RequestOptions]
875
+ # @return [Array<Gusto::Payrolls::PayrollMinimal>]
876
+ # @example
877
+ # api = Gusto::Client.new(
878
+ # base_url: "https://api.example.com",
879
+ # environment: Gusto::Environment::DEMO,
880
+ # token: "YOUR_AUTH_TOKEN"
881
+ # )
882
+ # api.payroll.list(company_id: "company_id")
883
+ def list(company_id:, processing_statuses: nil, payroll_types: nil, include: nil, start_date: nil, end_date: nil, sort_order: nil, request_options: nil)
884
+ Async do
885
+ response = @request_client.conn.get do | req |
886
+ unless request_options&.timeout_in_seconds.nil?
887
+ req.options.timeout = request_options.timeout_in_seconds
888
+ end
889
+ unless request_options&.token.nil?
890
+ req.headers["Authorization"] = request_options.token
891
+ end
892
+ unless request_options&.gusto_api_version.nil?
893
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
894
+ end
895
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
896
+ req.params = { **(request_options&.additional_query_parameters || {}), "processing_statuses": processing_statuses, "payroll_types": payroll_types, "include": include, "start_date": start_date, "end_date": end_date, "sort_order": sort_order }.compact
897
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
898
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
899
+ end
900
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls"
901
+ end
902
+ parsed_json = JSON.parse(response.body)
903
+ parsed_json&.map do | item |
904
+ item = item.to_json
905
+ Gusto::Payrolls::PayrollMinimal.from_json(json_object: item)
906
+ end
907
+ end
908
+ end
909
+ # Creates a new, unprocessed, off-cycle payroll.
910
+ # ## `off_cycle_reason`
911
+ # - External benefits and deductions will be included when the `off_cycle_reason`
912
+ # is set to `Correction`.
913
+ # - All benefits and deductions are blocked when the `off_cycle_reason` is set to
914
+ # `Bonus`.
915
+ # scope: `payrolls:run`
916
+ #
917
+ # @param company_id [String] The UUID of the company
918
+ # @param off_cycle [Boolean] Whether it is an off cycle payroll.
919
+ # @param off_cycle_reason [Gusto::Payroll::PayrollCreateRequestOffCycleReason] An off cycle payroll reason. Select one from the following list.
920
+ # @param start_date [String] Pay period start date.
921
+ # @param end_date [String] Pay period end date. If left empty, defaults to today's date.
922
+ # @param pay_schedule_uuid [String] A pay schedule is required for Transition from old pay schedule payroll to
923
+ # identify the matching transition pay period.
924
+ # @param employee_uuids [Array<String>] A list of employee uuids to include on the payroll.
925
+ # @param check_date [String] Payment date.
926
+ # @param withholding_pay_period [Gusto::Payroll::PayrollCreateRequestWithholdingPayPeriod] The payment schedule tax rate the payroll is based on
927
+ # @param skip_regular_deductions [Boolean] Block regular deductions and contributions for this payroll.
928
+ # @param fixed_withholding_rate [Boolean] Enable taxes to be withheld at the IRS's required rate of 22% for federal income
929
+ # taxes. State income taxes will be taxed at the state's supplemental tax rate.
930
+ # Otherwise, we'll sum the entirety of the employee's wages and withhold taxes on
931
+ # the entire amount at the rate for regular wages.
932
+ # @param request_options [Gusto::RequestOptions]
933
+ # @return [Gusto::Payrolls::PayrollPrepared]
934
+ # @example
935
+ # api = Gusto::Client.new(
936
+ # base_url: "https://api.example.com",
937
+ # environment: Gusto::Environment::DEMO,
938
+ # token: "YOUR_AUTH_TOKEN"
939
+ # )
940
+ # api.payroll.create(
941
+ # company_id: "company_id",
942
+ # off_cycle: true,
943
+ # off_cycle_reason: BONUS,
944
+ # start_date: "start_date",
945
+ # end_date: "end_date"
946
+ # )
947
+ def create(company_id:, off_cycle:, off_cycle_reason:, start_date:, end_date:, pay_schedule_uuid: nil, employee_uuids: nil, check_date: nil, withholding_pay_period: nil, skip_regular_deductions: nil, fixed_withholding_rate: nil, request_options: nil)
948
+ Async do
949
+ response = @request_client.conn.post do | req |
950
+ unless request_options&.timeout_in_seconds.nil?
951
+ req.options.timeout = request_options.timeout_in_seconds
952
+ end
953
+ unless request_options&.token.nil?
954
+ req.headers["Authorization"] = request_options.token
955
+ end
956
+ unless request_options&.gusto_api_version.nil?
957
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
958
+ end
959
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
960
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
961
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
962
+ end
963
+ req.body = { **(request_options&.additional_body_parameters || {}), off_cycle: off_cycle, off_cycle_reason: off_cycle_reason, start_date: start_date, end_date: end_date, pay_schedule_uuid: pay_schedule_uuid, employee_uuids: employee_uuids, check_date: check_date, withholding_pay_period: withholding_pay_period, skip_regular_deductions: skip_regular_deductions, fixed_withholding_rate: fixed_withholding_rate }.compact
964
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls"
965
+ end
966
+ Gusto::Payrolls::PayrollPrepared.from_json(json_object: response.body)
967
+ end
968
+ end
969
+ # Returns all approved Payroll Reversals for a Company.
970
+ # scope: `payrolls:read`
971
+ #
972
+ # @param company_id [String] The UUID of the company
973
+ # @param page [Float] The page that is requested. When unspecified, will load all objects unless
974
+ # endpoint forces pagination.
975
+ # @param per [Float] Number of objects per page. For majority of endpoints will default to 25
976
+ # @param request_options [Gusto::RequestOptions]
977
+ # @return [Gusto::PayrollReversal]
978
+ # @example
979
+ # api = Gusto::Client.new(
980
+ # base_url: "https://api.example.com",
981
+ # environment: Gusto::Environment::DEMO,
982
+ # token: "YOUR_AUTH_TOKEN"
983
+ # )
984
+ # api.payroll.get_reversals(company_id: "company_id")
985
+ def get_reversals(company_id:, page: nil, per: nil, request_options: nil)
986
+ Async do
987
+ response = @request_client.conn.get do | req |
988
+ unless request_options&.timeout_in_seconds.nil?
989
+ req.options.timeout = request_options.timeout_in_seconds
990
+ end
991
+ unless request_options&.token.nil?
992
+ req.headers["Authorization"] = request_options.token
993
+ end
994
+ unless request_options&.gusto_api_version.nil?
995
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
996
+ end
997
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
998
+ req.params = { **(request_options&.additional_query_parameters || {}), "page": page, "per": per }.compact
999
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1000
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1001
+ end
1002
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payroll_reversals"
1003
+ end
1004
+ Gusto::PayrollReversal.from_json(json_object: response.body)
1005
+ end
1006
+ end
1007
+ # Returns a payroll. If payroll is calculated or processed, will return
1008
+ # employee_compensations and totals.
1009
+ # Notes:
1010
+ # - Hour and dollar amounts are returned as string representations of numeric
1011
+ # decimals.
1012
+ # - Hours are represented to the thousands place; dollar amounts are represented
1013
+ # to the cent.
1014
+ # - Every eligible compensation is returned for each employee. If no data has yet
1015
+ # be inserted for a given field, it defaults to “0.00” (for fixed amounts) or
1016
+ # “0.000” (for hours ).
1017
+ # - To return future payrolls, you must include an `end_date` in the future.
1018
+ # - When include parameter with benefits value is passed, employee_benefits:read
1019
+ # scope is required to return benefits
1020
+ # - Benefits containing PHI are only visible with the
1021
+ # `employee_benefits:read:phi` scope
1022
+ # scope: `payrolls:read`
1023
+ #
1024
+ # @param company_id [String] The UUID of the company
1025
+ # @param payroll_id [String] The UUID of the payroll
1026
+ # @param include [Gusto::Payroll::PayrollGetRequestIncludeItem] Include the requested attribute in the response, for multiple attributes comma
1027
+ # separate the values, i.e. `?include=benefits,deductions,taxes`
1028
+ # @param request_options [Gusto::RequestOptions]
1029
+ # @return [Gusto::Payrolls::Payroll]
1030
+ # @example
1031
+ # api = Gusto::Client.new(
1032
+ # base_url: "https://api.example.com",
1033
+ # environment: Gusto::Environment::DEMO,
1034
+ # token: "YOUR_AUTH_TOKEN"
1035
+ # )
1036
+ # api.payroll.get(company_id: "company_id", payroll_id: "payroll_id")
1037
+ def get(company_id:, payroll_id:, include: nil, request_options: nil)
1038
+ Async do
1039
+ response = @request_client.conn.get do | req |
1040
+ unless request_options&.timeout_in_seconds.nil?
1041
+ req.options.timeout = request_options.timeout_in_seconds
1042
+ end
1043
+ unless request_options&.token.nil?
1044
+ req.headers["Authorization"] = request_options.token
1045
+ end
1046
+ unless request_options&.gusto_api_version.nil?
1047
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1048
+ end
1049
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1050
+ req.params = { **(request_options&.additional_query_parameters || {}), "include": include }.compact
1051
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1052
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1053
+ end
1054
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}"
1055
+ end
1056
+ Gusto::Payrolls::Payroll.from_json(json_object: response.body)
1057
+ end
1058
+ end
1059
+ # This endpoint allows you to update information for one or more employees for a
1060
+ # specific **unprocessed** payroll. You can think of the **unprocessed**
1061
+ # payroll object as a template of fields that you can update. You cannot modify
1062
+ # the structure of the payroll object through this endpoint, only values
1063
+ # of the fields included in the payroll. If you do not include specific employee
1064
+ # compensations or fixed/hourly compensations in your request body, they
1065
+ # will not be removed from the payroll.
1066
+ # scope: `payrolls:write`
1067
+ #
1068
+ # @param company_id [String] The UUID of the company
1069
+ # @param payroll_id [String] The UUID of the payroll
1070
+ # @param employee_compensations [Array<Hash>] Request of type Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItem>, as a Hash
1071
+ # * :employee_uuid (String)
1072
+ # * :version (String)
1073
+ # * :excluded (Boolean)
1074
+ # * :payment_method (Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemPaymentMethod)
1075
+ # * :memo (String)
1076
+ # * :fixed_compensations (Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemFixedCompensationsItem>)
1077
+ # * :hourly_compensations (Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemHourlyCompensationsItem>)
1078
+ # * :paid_time_off (Array<Gusto::Payroll::PayrollUpdateRequestEmployeeCompensationsItemPaidTimeOffItem>)
1079
+ # @param request_options [Gusto::RequestOptions]
1080
+ # @return [Gusto::Payrolls::PayrollPrepared]
1081
+ # @example
1082
+ # api = Gusto::Client.new(
1083
+ # base_url: "https://api.example.com",
1084
+ # environment: Gusto::Environment::DEMO,
1085
+ # token: "YOUR_AUTH_TOKEN"
1086
+ # )
1087
+ # api.payroll.update(
1088
+ # company_id: "company_id",
1089
+ # payroll_id: "payroll_id",
1090
+ # employee_compensations: [{ }]
1091
+ # )
1092
+ def update(company_id:, payroll_id:, employee_compensations:, request_options: nil)
1093
+ Async do
1094
+ response = @request_client.conn.put do | req |
1095
+ unless request_options&.timeout_in_seconds.nil?
1096
+ req.options.timeout = request_options.timeout_in_seconds
1097
+ end
1098
+ unless request_options&.token.nil?
1099
+ req.headers["Authorization"] = request_options.token
1100
+ end
1101
+ unless request_options&.gusto_api_version.nil?
1102
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1103
+ end
1104
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1105
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1106
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1107
+ end
1108
+ req.body = { **(request_options&.additional_body_parameters || {}), employee_compensations: employee_compensations }.compact
1109
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}"
1110
+ end
1111
+ Gusto::Payrolls::PayrollPrepared.from_json(json_object: response.body)
1112
+ end
1113
+ end
1114
+ # This endpoint allows you to delete an **unprocessed** payroll.
1115
+ # By default the payroll and associated data is deleted synchronously. To request
1116
+ # an asynchronous delete, use the `async=true` query parameter. In both cases
1117
+ # validation of ability to delete will be performed and an Unprocessable Entity
1118
+ # error will be returned if the payroll is not able to be deleted. A successful
1119
+ # synchronous delete will return `204/No Content`. When a payroll has been
1120
+ # enqueued for asynchronous deletion, `202/Accepted` will be returned.
1121
+ # scope: `payrolls:run`
1122
+ #
1123
+ # @param company_id [String] The UUID of the company
1124
+ # @param payroll_id [String] The UUID of the payroll
1125
+ # @param async [Boolean] When true, request an asynchronous delete of the payroll.
1126
+ # @param request_options [Gusto::RequestOptions]
1127
+ # @return [Void]
1128
+ # @example
1129
+ # api = Gusto::Client.new(
1130
+ # base_url: "https://api.example.com",
1131
+ # environment: Gusto::Environment::DEMO,
1132
+ # token: "YOUR_AUTH_TOKEN"
1133
+ # )
1134
+ # api.payroll.delete(company_id: "company_id", payroll_id: "payroll_id")
1135
+ def delete(company_id:, payroll_id:, async: nil, request_options: nil)
1136
+ Async do
1137
+ response = @request_client.conn.delete do | req |
1138
+ unless request_options&.timeout_in_seconds.nil?
1139
+ req.options.timeout = request_options.timeout_in_seconds
1140
+ end
1141
+ unless request_options&.token.nil?
1142
+ req.headers["Authorization"] = request_options.token
1143
+ end
1144
+ unless request_options&.gusto_api_version.nil?
1145
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1146
+ end
1147
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1148
+ req.params = { **(request_options&.additional_query_parameters || {}), "async": async }.compact
1149
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1150
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1151
+ end
1152
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}"
1153
+ end
1154
+ end
1155
+ end
1156
+ # This endpoint will build the payroll and get it ready for making updates. This
1157
+ # includes adding/removing eligible employees from the Payroll and updating the
1158
+ # check_date, payroll_deadline, and payroll_status_meta dates & times.
1159
+ # Notes:
1160
+ # - Will null out calculated_at & totals if a payroll has already been calculated.
1161
+ # - Will return the version param used for updating the payroll
1162
+ # scope: `payrolls:write`
1163
+ #
1164
+ # @param company_id [String] The UUID of the company
1165
+ # @param payroll_id [String] The UUID of the payroll
1166
+ # @param request_options [Gusto::RequestOptions]
1167
+ # @return [Gusto::Payrolls::PayrollPrepared]
1168
+ # @example
1169
+ # api = Gusto::Client.new(
1170
+ # base_url: "https://api.example.com",
1171
+ # environment: Gusto::Environment::DEMO,
1172
+ # token: "YOUR_AUTH_TOKEN"
1173
+ # )
1174
+ # api.payroll.prepare(company_id: "company_id", payroll_id: "payroll_id")
1175
+ def prepare(company_id:, payroll_id:, request_options: nil)
1176
+ Async do
1177
+ response = @request_client.conn.put do | req |
1178
+ unless request_options&.timeout_in_seconds.nil?
1179
+ req.options.timeout = request_options.timeout_in_seconds
1180
+ end
1181
+ unless request_options&.token.nil?
1182
+ req.headers["Authorization"] = request_options.token
1183
+ end
1184
+ unless request_options&.gusto_api_version.nil?
1185
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1186
+ end
1187
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1188
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1189
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1190
+ end
1191
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1192
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1193
+ end
1194
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/prepare"
1195
+ end
1196
+ Gusto::Payrolls::PayrollPrepared.from_json(json_object: response.body)
1197
+ end
1198
+ end
1199
+ # Returns a payroll receipt.
1200
+ # Notes:
1201
+ # - Hour and dollar amounts are returned as string representations of numeric
1202
+ # decimals.
1203
+ # - Dollar amounts are represented to the cent.
1204
+ # - If no data has yet be inserted for a given field, it defaults to “0.00” (for
1205
+ # fixed amounts).
1206
+ # scope: `payrolls:read`
1207
+ #
1208
+ # @param payroll_uuid [String] The UUID of the payroll
1209
+ # @param request_options [Gusto::RequestOptions]
1210
+ # @return [Gusto::PayrollReceipt]
1211
+ # @example
1212
+ # api = Gusto::Client.new(
1213
+ # base_url: "https://api.example.com",
1214
+ # environment: Gusto::Environment::DEMO,
1215
+ # token: "YOUR_AUTH_TOKEN"
1216
+ # )
1217
+ # api.payroll.get_receipt(payroll_uuid: "payroll_uuid")
1218
+ def get_receipt(payroll_uuid:, request_options: nil)
1219
+ Async do
1220
+ response = @request_client.conn.get do | req |
1221
+ unless request_options&.timeout_in_seconds.nil?
1222
+ req.options.timeout = request_options.timeout_in_seconds
1223
+ end
1224
+ unless request_options&.token.nil?
1225
+ req.headers["Authorization"] = request_options.token
1226
+ end
1227
+ unless request_options&.gusto_api_version.nil?
1228
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1229
+ end
1230
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1231
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1232
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1233
+ end
1234
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1235
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1236
+ end
1237
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_uuid}/receipt"
1238
+ end
1239
+ Gusto::PayrollReceipt.from_json(json_object: response.body)
1240
+ end
1241
+ end
1242
+ # Returns a list of reasons that prevent the company from running payrolls. See
1243
+ # the [payroll blockers
1244
+ # guide](https://docs.gusto.com/embedded-payroll/docs/payroll-blockers) for a
1245
+ # complete list of reasons.
1246
+ # The list is empty if there are no payroll blockers.
1247
+ # scope: `payrolls:run`
1248
+ #
1249
+ # @param company_uuid [String] The UUID of the company
1250
+ # @param request_options [Gusto::RequestOptions]
1251
+ # @return [Array<Gusto::PayrollBlocker>]
1252
+ # @example
1253
+ # api = Gusto::Client.new(
1254
+ # base_url: "https://api.example.com",
1255
+ # environment: Gusto::Environment::DEMO,
1256
+ # token: "YOUR_AUTH_TOKEN"
1257
+ # )
1258
+ # api.payroll.get_blockers(company_uuid: "company_uuid")
1259
+ def get_blockers(company_uuid:, request_options: nil)
1260
+ Async do
1261
+ response = @request_client.conn.get do | req |
1262
+ unless request_options&.timeout_in_seconds.nil?
1263
+ req.options.timeout = request_options.timeout_in_seconds
1264
+ end
1265
+ unless request_options&.token.nil?
1266
+ req.headers["Authorization"] = request_options.token
1267
+ end
1268
+ unless request_options&.gusto_api_version.nil?
1269
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1270
+ end
1271
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1272
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1273
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1274
+ end
1275
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1276
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1277
+ end
1278
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_uuid}/payrolls/blockers"
1279
+ end
1280
+ parsed_json = JSON.parse(response.body)
1281
+ parsed_json&.map do | item |
1282
+ item = item.to_json
1283
+ Gusto::PayrollBlocker.from_json(json_object: item)
1284
+ end
1285
+ end
1286
+ end
1287
+ # Submits a $0 payroll for employees associated with the pay schedule to skip
1288
+ # payroll. This submission is asynchronous and a successful request responds with
1289
+ # a 202 HTTP status. Upon success, the payroll is transitioned to the `processed`
1290
+ # state.
1291
+ # If the company is blocked from running payroll due to issues like incomplete
1292
+ # setup, missing information or other compliance issues, the response will be 422
1293
+ # Unprocessable Entity with a categorization of the blockers as described in the
1294
+ # error responses.
1295
+ # scope: `payrolls:run`
1296
+ #
1297
+ # @param company_uuid [String] The UUID of the company
1298
+ # @param payroll_type [Gusto::Payroll::PayrollSkipPayrollRequestPayrollType] Payroll type
1299
+ # @param start_date [String] Pay period start date
1300
+ # @param end_date [String] Pay period end date. If left empty, defaults to today's date.
1301
+ # @param pay_schedule_uuid [String] The UUID of the pay schedule
1302
+ # @param employee_uuids [Array<String>] An array of employees. This field is only applicable to new hire payroll and
1303
+ # termination payroll
1304
+ # @param request_options [Gusto::RequestOptions]
1305
+ # @return [Void]
1306
+ # @example
1307
+ # api = Gusto::Client.new(
1308
+ # base_url: "https://api.example.com",
1309
+ # environment: Gusto::Environment::DEMO,
1310
+ # token: "YOUR_AUTH_TOKEN"
1311
+ # )
1312
+ # api.payroll.skip_payroll(
1313
+ # company_uuid: "company_uuid",
1314
+ # payroll_type: REGULAR,
1315
+ # start_date: "2023-05-26",
1316
+ # end_date: "2023-06-25",
1317
+ # pay_schedule_uuid: "85100524-4b42-4d2d-bd62-9d864f9aea64"
1318
+ # )
1319
+ def skip_payroll(company_uuid:, payroll_type:, start_date: nil, end_date: nil, pay_schedule_uuid: nil, employee_uuids: nil, request_options: nil)
1320
+ Async do
1321
+ response = @request_client.conn.post do | req |
1322
+ unless request_options&.timeout_in_seconds.nil?
1323
+ req.options.timeout = request_options.timeout_in_seconds
1324
+ end
1325
+ unless request_options&.token.nil?
1326
+ req.headers["Authorization"] = request_options.token
1327
+ end
1328
+ unless request_options&.gusto_api_version.nil?
1329
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1330
+ end
1331
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1332
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1333
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1334
+ end
1335
+ req.body = { **(request_options&.additional_body_parameters || {}), payroll_type: payroll_type, start_date: start_date, end_date: end_date, pay_schedule_uuid: pay_schedule_uuid, employee_uuids: employee_uuids }.compact
1336
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_uuid}/payrolls/skip"
1337
+ end
1338
+ end
1339
+ end
1340
+ # Calculates gross up earnings for an employee's payroll, given net earnings. This
1341
+ # endpoint is only applicable to off-cycle unprocessed payrolls.
1342
+ # The gross up amount must then be mapped to the corresponding fixed compensation
1343
+ # earning type to get the correct payroll amount. For example, for bonus
1344
+ # off-cycles, the gross up amount should be set with the Bonus earning type in the
1345
+ # payroll `fixed_compensations` field.
1346
+ # scope: `payrolls:run`
1347
+ #
1348
+ # @param payroll_uuid [String] The UUID of the payroll
1349
+ # @param employee_uuid [String] Employee UUID
1350
+ # @param net_pay [String] Employee net earnings
1351
+ # @param request_options [Gusto::RequestOptions]
1352
+ # @return [Gusto::GrossUpPay]
1353
+ # @example
1354
+ # api = Gusto::Client.new(
1355
+ # base_url: "https://api.example.com",
1356
+ # environment: Gusto::Environment::DEMO,
1357
+ # token: "YOUR_AUTH_TOKEN"
1358
+ # )
1359
+ # api.payroll.gross_up(
1360
+ # payroll_uuid: "payroll_uuid",
1361
+ # employee_uuid: "be48c41e-142d-4116-9430-5aba2313fac7",
1362
+ # net_pay: "1000.00"
1363
+ # )
1364
+ def gross_up(payroll_uuid:, employee_uuid:, net_pay:, request_options: nil)
1365
+ Async do
1366
+ response = @request_client.conn.post do | req |
1367
+ unless request_options&.timeout_in_seconds.nil?
1368
+ req.options.timeout = request_options.timeout_in_seconds
1369
+ end
1370
+ unless request_options&.token.nil?
1371
+ req.headers["Authorization"] = request_options.token
1372
+ end
1373
+ unless request_options&.gusto_api_version.nil?
1374
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1375
+ end
1376
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1377
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1378
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1379
+ end
1380
+ req.body = { **(request_options&.additional_body_parameters || {}), employee_uuid: employee_uuid, net_pay: net_pay }.compact
1381
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_uuid}/gross_up"
1382
+ end
1383
+ Gusto::GrossUpPay.from_json(json_object: response.body)
1384
+ end
1385
+ end
1386
+ # Performs calculations for taxes, benefits, and deductions for an unprocessed
1387
+ # payroll. The calculated payroll details provide a preview of the actual values
1388
+ # that will be used when the payroll is run.
1389
+ # This calculation is asynchronous and a successful request responds with a 202
1390
+ # HTTP status. To view the details of the calculated payroll, use the GET
1391
+ # /v1/companies/{company_id}/payrolls/{payroll_id} endpoint with
1392
+ # _include=taxes,benefits,deductions_ params.
1393
+ # In v2023-04-01, _show_calculation=true_ is no longer required.
1394
+ # If the company is blocked from running payroll due to issues like incomplete
1395
+ # setup, missing information or other compliance issues, the response will be 422
1396
+ # Unprocessable Entity with a categorization of the blockers as described in the
1397
+ # error responses.
1398
+ #
1399
+ # @param company_id [String] The UUID of the company
1400
+ # @param payroll_id [String] The UUID of the payroll
1401
+ # @param request_options [Gusto::RequestOptions]
1402
+ # @return [Void]
1403
+ # @example
1404
+ # api = Gusto::Client.new(
1405
+ # base_url: "https://api.example.com",
1406
+ # environment: Gusto::Environment::DEMO,
1407
+ # token: "YOUR_AUTH_TOKEN"
1408
+ # )
1409
+ # api.payroll.calculate(company_id: "company_id", payroll_id: "payroll_id")
1410
+ def calculate(company_id:, payroll_id:, request_options: nil)
1411
+ Async do
1412
+ response = @request_client.conn.put do | req |
1413
+ unless request_options&.timeout_in_seconds.nil?
1414
+ req.options.timeout = request_options.timeout_in_seconds
1415
+ end
1416
+ unless request_options&.token.nil?
1417
+ req.headers["Authorization"] = request_options.token
1418
+ end
1419
+ unless request_options&.gusto_api_version.nil?
1420
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1421
+ end
1422
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1423
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1424
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1425
+ end
1426
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1427
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1428
+ end
1429
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/calculate"
1430
+ end
1431
+ end
1432
+ end
1433
+ # Submits an unprocessed payroll to be calculated and run. This submission is
1434
+ # asynchronous and a successful request responds with a 202 HTTP status. Upon
1435
+ # success, transitions the payroll to the `processed` state.
1436
+ # You should poll to ensure that payroll is processed successfully, as async
1437
+ # errors only occur after async processing is complete.
1438
+ # If the company is blocked from running payroll due to issues like incomplete
1439
+ # setup, missing information or other compliance issues, the response will be 422
1440
+ # Unprocessable Entity with a categorization of the blockers as described in the
1441
+ # error responses.
1442
+ # scope: `payrolls:run`
1443
+ #
1444
+ # @param company_id [String] The UUID of the company
1445
+ # @param payroll_id [String] The UUID of the payroll
1446
+ # @param submission_blockers [Array<Hash>] An array of submission_blockers, each with a selected unblock option.Request of type Array<Gusto::Payroll::PayrollSubmitRequestSubmissionBlockersItem>, as a Hash
1447
+ # * :blocker_type (String)
1448
+ # * :selected_option (String)
1449
+ # @param request_options [Gusto::RequestOptions]
1450
+ # @return [Void]
1451
+ # @example
1452
+ # api = Gusto::Client.new(
1453
+ # base_url: "https://api.example.com",
1454
+ # environment: Gusto::Environment::DEMO,
1455
+ # token: "YOUR_AUTH_TOKEN"
1456
+ # )
1457
+ # api.payroll.submit(company_id: "company_id", payroll_id: "payroll_id")
1458
+ def submit(company_id:, payroll_id:, submission_blockers: nil, request_options: nil)
1459
+ Async do
1460
+ response = @request_client.conn.put do | req |
1461
+ unless request_options&.timeout_in_seconds.nil?
1462
+ req.options.timeout = request_options.timeout_in_seconds
1463
+ end
1464
+ unless request_options&.token.nil?
1465
+ req.headers["Authorization"] = request_options.token
1466
+ end
1467
+ unless request_options&.gusto_api_version.nil?
1468
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1469
+ end
1470
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1471
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1472
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1473
+ end
1474
+ req.body = { **(request_options&.additional_body_parameters || {}), submission_blockers: submission_blockers }.compact
1475
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/submit"
1476
+ end
1477
+ end
1478
+ end
1479
+ # Transitions a `processed` payroll back to the `unprocessed` state. A payroll can
1480
+ # be canceled if it meets both criteria:
1481
+ # - `processed` is true
1482
+ # - Current time is earlier than 3:30pm PT on the payroll_deadline
1483
+ # scope: `payrolls:run`
1484
+ #
1485
+ # @param company_id [String] The UUID of the company
1486
+ # @param payroll_id [String] The UUID of the payroll
1487
+ # @param request_options [Gusto::RequestOptions]
1488
+ # @return [Gusto::Payrolls::Payroll]
1489
+ # @example
1490
+ # api = Gusto::Client.new(
1491
+ # base_url: "https://api.example.com",
1492
+ # environment: Gusto::Environment::DEMO,
1493
+ # token: "YOUR_AUTH_TOKEN"
1494
+ # )
1495
+ # api.payroll.cancel(company_id: "company_id", payroll_id: "payroll_id")
1496
+ def cancel(company_id:, payroll_id:, request_options: nil)
1497
+ Async do
1498
+ response = @request_client.conn.put do | req |
1499
+ unless request_options&.timeout_in_seconds.nil?
1500
+ req.options.timeout = request_options.timeout_in_seconds
1501
+ end
1502
+ unless request_options&.token.nil?
1503
+ req.headers["Authorization"] = request_options.token
1504
+ end
1505
+ unless request_options&.gusto_api_version.nil?
1506
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1507
+ end
1508
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1509
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1510
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1511
+ end
1512
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1513
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1514
+ end
1515
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/companies/#{company_id}/payrolls/#{payroll_id}/cancel"
1516
+ end
1517
+ Gusto::Payrolls::Payroll.from_json(json_object: response.body)
1518
+ end
1519
+ end
1520
+ # Get an employee's pay stub for the specified payroll. By default, an
1521
+ # application/pdf response will be returned. No other content types are currently
1522
+ # supported, but may be supported in the future.
1523
+ # scope: `pay_stubs:read`
1524
+ #
1525
+ # @param payroll_id [String] The UUID of the payroll
1526
+ # @param employee_id [String] The UUID of the employee
1527
+ # @param request_options [Gusto::RequestOptions]
1528
+ # @return [Void]
1529
+ # @example
1530
+ # api = Gusto::Client.new(
1531
+ # base_url: "https://api.example.com",
1532
+ # environment: Gusto::Environment::DEMO,
1533
+ # token: "YOUR_AUTH_TOKEN"
1534
+ # )
1535
+ # api.payroll.get_pay_stub(payroll_id: "payroll_id", employee_id: "employee_id")
1536
+ def get_pay_stub(payroll_id:, employee_id:, request_options: nil)
1537
+ Async do
1538
+ response = @request_client.conn.get do | req |
1539
+ unless request_options&.timeout_in_seconds.nil?
1540
+ req.options.timeout = request_options.timeout_in_seconds
1541
+ end
1542
+ unless request_options&.token.nil?
1543
+ req.headers["Authorization"] = request_options.token
1544
+ end
1545
+ unless request_options&.gusto_api_version.nil?
1546
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1547
+ end
1548
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1549
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1550
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1551
+ end
1552
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1553
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1554
+ end
1555
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_id}/employees/#{employee_id}/pay_stub"
1556
+ end
1557
+ end
1558
+ end
1559
+ # Get an employee's pay stubs
1560
+ # scope: `pay_stubs:read`
1561
+ #
1562
+ # @param employee_id [String] The UUID of the employee
1563
+ # @param request_options [Gusto::RequestOptions]
1564
+ # @return [Array<Gusto::Payrolls::EmployeePayStub>]
1565
+ # @example
1566
+ # api = Gusto::Client.new(
1567
+ # base_url: "https://api.example.com",
1568
+ # environment: Gusto::Environment::DEMO,
1569
+ # token: "YOUR_AUTH_TOKEN"
1570
+ # )
1571
+ # api.payroll.list_pay_stubs(employee_id: "employee_id")
1572
+ def list_pay_stubs(employee_id:, request_options: nil)
1573
+ Async do
1574
+ response = @request_client.conn.get do | req |
1575
+ unless request_options&.timeout_in_seconds.nil?
1576
+ req.options.timeout = request_options.timeout_in_seconds
1577
+ end
1578
+ unless request_options&.token.nil?
1579
+ req.headers["Authorization"] = request_options.token
1580
+ end
1581
+ unless request_options&.gusto_api_version.nil?
1582
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1583
+ end
1584
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1585
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1586
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1587
+ end
1588
+ unless request_options.nil? || request_options&.additional_body_parameters.nil?
1589
+ req.body = { **(request_options&.additional_body_parameters || {}) }.compact
1590
+ end
1591
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/employees/#{employee_id}/pay_stubs"
1592
+ end
1593
+ parsed_json = JSON.parse(response.body)
1594
+ parsed_json&.map do | item |
1595
+ item = item.to_json
1596
+ Gusto::Payrolls::EmployeePayStub.from_json(json_object: item)
1597
+ end
1598
+ end
1599
+ end
1600
+ # This endpoint initiates the generation of employee checks for the payroll
1601
+ # specified by payroll_id. A generation status and corresponding generated
1602
+ # document request_uuid will be returned. Use the generated document GET endpoint
1603
+ # with document_type: `printable_payroll_checks` and request_uuid to poll the
1604
+ # check generation process and retrieve the generated check URL upon completion.
1605
+ # scope: `generated_documents:write`
1606
+ #
1607
+ # @param payroll_id [String] The UUID of the payroll
1608
+ # @param printing_format [String] The type of check stock being printed. Check this
1609
+ # [link](https://support.gusto.com/article/999877761000000/Pay-your-team-by-check)
1610
+ # for more info on check types
1611
+ # @param starting_check_number [Integer] The starting check number for the checks being generated
1612
+ # @param request_options [Gusto::RequestOptions]
1613
+ # @return [Gusto::PayrollCheck]
1614
+ # @example
1615
+ # api = Gusto::Client.new(
1616
+ # base_url: "https://api.example.com",
1617
+ # environment: Gusto::Environment::DEMO,
1618
+ # token: "YOUR_AUTH_TOKEN"
1619
+ # )
1620
+ # api.payroll.generate_printable_checks(payroll_id: "payroll_id", printing_format: "printing_format")
1621
+ def generate_printable_checks(payroll_id:, printing_format:, starting_check_number: nil, request_options: nil)
1622
+ Async do
1623
+ response = @request_client.conn.post do | req |
1624
+ unless request_options&.timeout_in_seconds.nil?
1625
+ req.options.timeout = request_options.timeout_in_seconds
1626
+ end
1627
+ unless request_options&.token.nil?
1628
+ req.headers["Authorization"] = request_options.token
1629
+ end
1630
+ unless request_options&.gusto_api_version.nil?
1631
+ req.headers["X-Gusto-API-Version"] = request_options.gusto_api_version
1632
+ end
1633
+ req.headers = { **(req.headers || {}), **@request_client.get_headers, **(request_options&.additional_headers || {}) }.compact
1634
+ unless request_options.nil? || request_options&.additional_query_parameters.nil?
1635
+ req.params = { **(request_options&.additional_query_parameters || {}) }.compact
1636
+ end
1637
+ req.body = { **(request_options&.additional_body_parameters || {}), printing_format: printing_format, starting_check_number: starting_check_number }.compact
1638
+ req.url "#{@request_client.get_url(request_options: request_options)}/v1/payrolls/#{payroll_id}/generated_documents/printable_payroll_checks"
1639
+ end
1640
+ Gusto::PayrollCheck.from_json(json_object: response.body)
1641
+ end
1642
+ end
1643
+ end
1644
+ end