factorial_api 3.0.1

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 (851) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +307 -0
  3. data/lib/f.rb +4 -0
  4. data/lib/factorial_api/api/api_public_credential_api.rb +79 -0
  5. data/lib/factorial_api/api/api_public_webhook_subscription_api.rb +351 -0
  6. data/lib/factorial_api/api/approvals_materialized_approvals_flow_api.rb +150 -0
  7. data/lib/factorial_api/api/ats_answer_api.rb +212 -0
  8. data/lib/factorial_api/api/ats_application_api.rb +491 -0
  9. data/lib/factorial_api/api/ats_application_phase_api.rb +148 -0
  10. data/lib/factorial_api/api/ats_candidate_api.rb +372 -0
  11. data/lib/factorial_api/api/ats_candidate_source_api.rb +145 -0
  12. data/lib/factorial_api/api/ats_evaluation_form_api.rb +215 -0
  13. data/lib/factorial_api/api/ats_feedback_api.rb +348 -0
  14. data/lib/factorial_api/api/ats_hiring_stage_api.rb +148 -0
  15. data/lib/factorial_api/api/ats_job_posting_api.rb +422 -0
  16. data/lib/factorial_api/api/ats_message_api.rb +280 -0
  17. data/lib/factorial_api/api/ats_question_api.rb +345 -0
  18. data/lib/factorial_api/api/ats_rejection_reason_api.rb +148 -0
  19. data/lib/factorial_api/api/attendance_break_configuration_api.rb +288 -0
  20. data/lib/factorial_api/api/attendance_edit_timesheet_request_api.rb +357 -0
  21. data/lib/factorial_api/api/attendance_estimated_time_api.rb +100 -0
  22. data/lib/factorial_api/api/attendance_open_shift_api.rb +82 -0
  23. data/lib/factorial_api/api/attendance_overtime_request_api.rb +493 -0
  24. data/lib/factorial_api/api/attendance_review_api.rb +235 -0
  25. data/lib/factorial_api/api/attendance_shift_api.rb +764 -0
  26. data/lib/factorial_api/api/attendance_worked_time_api.rb +168 -0
  27. data/lib/factorial_api/api/banking_bank_account_api.rb +218 -0
  28. data/lib/factorial_api/api/banking_card_payment_api.rb +161 -0
  29. data/lib/factorial_api/api/banking_transaction_api.rb +160 -0
  30. data/lib/factorial_api/api/bookkeepers_management_incidence_api.rb +251 -0
  31. data/lib/factorial_api/api/companies_legal_entity_api.rb +218 -0
  32. data/lib/factorial_api/api/compensations_additional_compensation_api.rb +351 -0
  33. data/lib/factorial_api/api/compensations_concept_api.rb +291 -0
  34. data/lib/factorial_api/api/compensations_cycle_api.rb +166 -0
  35. data/lib/factorial_api/api/compensations_employees_compensation_api.rb +354 -0
  36. data/lib/factorial_api/api/compensations_payroll_result_api.rb +221 -0
  37. data/lib/factorial_api/api/compensations_payroll_run_api.rb +166 -0
  38. data/lib/factorial_api/api/compensations_payroll_run_employees_compensation_api.rb +164 -0
  39. data/lib/factorial_api/api/contracts_compensation_api.rb +345 -0
  40. data/lib/factorial_api/api/contracts_contract_activity_period_api.rb +86 -0
  41. data/lib/factorial_api/api/contracts_contract_api.rb +151 -0
  42. data/lib/factorial_api/api/contracts_contract_template_api.rb +151 -0
  43. data/lib/factorial_api/api/contracts_contract_version_api.rb +361 -0
  44. data/lib/factorial_api/api/contracts_contract_version_history_api.rb +160 -0
  45. data/lib/factorial_api/api/contracts_contract_version_meta_datum_api.rb +86 -0
  46. data/lib/factorial_api/api/contracts_french_contract_type_api.rb +148 -0
  47. data/lib/factorial_api/api/contracts_german_contract_type_api.rb +148 -0
  48. data/lib/factorial_api/api/contracts_legal_entity_change_api.rb +86 -0
  49. data/lib/factorial_api/api/contracts_materialized_template_api.rb +114 -0
  50. data/lib/factorial_api/api/contracts_portuguese_contract_type_api.rb +148 -0
  51. data/lib/factorial_api/api/contracts_reference_contract_api.rb +89 -0
  52. data/lib/factorial_api/api/contracts_spanish_contract_type_api.rb +215 -0
  53. data/lib/factorial_api/api/contracts_spanish_education_level_api.rb +212 -0
  54. data/lib/factorial_api/api/contracts_spanish_professional_category_api.rb +212 -0
  55. data/lib/factorial_api/api/contracts_spanish_working_day_type_api.rb +212 -0
  56. data/lib/factorial_api/api/contracts_taxonomy_api.rb +151 -0
  57. data/lib/factorial_api/api/custom_fields_field_api.rb +288 -0
  58. data/lib/factorial_api/api/custom_fields_option_api.rb +212 -0
  59. data/lib/factorial_api/api/custom_fields_resource_field_api.rb +215 -0
  60. data/lib/factorial_api/api/custom_fields_value_api.rb +300 -0
  61. data/lib/factorial_api/api/custom_resources_resource_api.rb +148 -0
  62. data/lib/factorial_api/api/custom_resources_schema_api.rb +209 -0
  63. data/lib/factorial_api/api/custom_resources_value_api.rb +212 -0
  64. data/lib/factorial_api/api/documents_document_api.rb +570 -0
  65. data/lib/factorial_api/api/documents_download_url_api.rb +86 -0
  66. data/lib/factorial_api/api/documents_folder_api.rb +288 -0
  67. data/lib/factorial_api/api/employee_updates_absence_api.rb +145 -0
  68. data/lib/factorial_api/api/employee_updates_contract_change_api.rb +145 -0
  69. data/lib/factorial_api/api/employee_updates_new_hire_api.rb +145 -0
  70. data/lib/factorial_api/api/employee_updates_personal_change_api.rb +145 -0
  71. data/lib/factorial_api/api/employee_updates_summary_api.rb +160 -0
  72. data/lib/factorial_api/api/employee_updates_termination_api.rb +145 -0
  73. data/lib/factorial_api/api/employees_employee_api.rb +576 -0
  74. data/lib/factorial_api/api/expenses_expensable_api.rb +324 -0
  75. data/lib/factorial_api/api/expenses_expense_api.rb +183 -0
  76. data/lib/factorial_api/api/expenses_mileage_api.rb +183 -0
  77. data/lib/factorial_api/api/expenses_per_diem_api.rb +151 -0
  78. data/lib/factorial_api/api/finance_account_api.rb +291 -0
  79. data/lib/factorial_api/api/finance_accounting_setting_api.rb +215 -0
  80. data/lib/factorial_api/api/finance_budget_option_api.rb +165 -0
  81. data/lib/factorial_api/api/finance_category_api.rb +185 -0
  82. data/lib/factorial_api/api/finance_contact_api.rb +307 -0
  83. data/lib/factorial_api/api/finance_cost_center_api.rb +348 -0
  84. data/lib/factorial_api/api/finance_cost_center_membership_api.rb +164 -0
  85. data/lib/factorial_api/api/finance_financial_document_api.rb +357 -0
  86. data/lib/factorial_api/api/finance_journal_entry_api.rb +235 -0
  87. data/lib/factorial_api/api/finance_journal_line_api.rb +167 -0
  88. data/lib/factorial_api/api/finance_ledger_account_resource_api.rb +228 -0
  89. data/lib/factorial_api/api/finance_tax_rate_api.rb +285 -0
  90. data/lib/factorial_api/api/finance_tax_type_api.rb +292 -0
  91. data/lib/factorial_api/api/holidays_company_holiday_api.rb +160 -0
  92. data/lib/factorial_api/api/integrations_sync_run_api.rb +223 -0
  93. data/lib/factorial_api/api/integrations_sync_run_output_api.rb +105 -0
  94. data/lib/factorial_api/api/integrations_syncable_state_api.rb +154 -0
  95. data/lib/factorial_api/api/integrations_syncable_sync_run_api.rb +282 -0
  96. data/lib/factorial_api/api/it_management_asset_category_api.rb +145 -0
  97. data/lib/factorial_api/api/it_management_it_asset_api.rb +363 -0
  98. data/lib/factorial_api/api/it_management_it_asset_model_api.rb +279 -0
  99. data/lib/factorial_api/api/job_catalog_level_api.rb +148 -0
  100. data/lib/factorial_api/api/job_catalog_node_attribute_api.rb +93 -0
  101. data/lib/factorial_api/api/job_catalog_role_api.rb +145 -0
  102. data/lib/factorial_api/api/job_catalog_tree_node_api.rb +100 -0
  103. data/lib/factorial_api/api/locations_location_api.rb +348 -0
  104. data/lib/factorial_api/api/locations_work_area_api.rb +417 -0
  105. data/lib/factorial_api/api/marketplace_installation_api.rb +86 -0
  106. data/lib/factorial_api/api/marketplace_installation_setting_api.rb +93 -0
  107. data/lib/factorial_api/api/payroll_employees_german_employee_datum_api.rb +282 -0
  108. data/lib/factorial_api/api/payroll_employees_identifier_api.rb +360 -0
  109. data/lib/factorial_api/api/payroll_family_situation_api.rb +216 -0
  110. data/lib/factorial_api/api/payroll_integrations_base_code_api.rb +292 -0
  111. data/lib/factorial_api/api/payroll_policy_period_api.rb +86 -0
  112. data/lib/factorial_api/api/payroll_supplement_api.rb +364 -0
  113. data/lib/factorial_api/api/performance_agreement_api.rb +279 -0
  114. data/lib/factorial_api/api/performance_company_employee_score_scale_api.rb +209 -0
  115. data/lib/factorial_api/api/performance_employee_score_scale_api.rb +145 -0
  116. data/lib/factorial_api/api/performance_review_evaluation_answer_api.rb +82 -0
  117. data/lib/factorial_api/api/performance_review_evaluation_api.rb +233 -0
  118. data/lib/factorial_api/api/performance_review_evaluation_score_api.rb +160 -0
  119. data/lib/factorial_api/api/performance_review_owner_api.rb +209 -0
  120. data/lib/factorial_api/api/performance_review_process_api.rb +1363 -0
  121. data/lib/factorial_api/api/performance_review_process_custom_template_api.rb +151 -0
  122. data/lib/factorial_api/api/performance_review_process_estimated_target_api.rb +85 -0
  123. data/lib/factorial_api/api/performance_review_process_target_api.rb +425 -0
  124. data/lib/factorial_api/api/performance_review_questionnaire_by_strategy_api.rb +273 -0
  125. data/lib/factorial_api/api/performance_review_visibility_setting_api.rb +152 -0
  126. data/lib/factorial_api/api/performance_target_manager_api.rb +152 -0
  127. data/lib/factorial_api/api/posts_comment_api.rb +349 -0
  128. data/lib/factorial_api/api/posts_group_api.rb +409 -0
  129. data/lib/factorial_api/api/posts_post_api.rb +351 -0
  130. data/lib/factorial_api/api/processes_materialized_process_api.rb +86 -0
  131. data/lib/factorial_api/api/processes_process_api.rb +151 -0
  132. data/lib/factorial_api/api/procurement_po_field_value_api.rb +154 -0
  133. data/lib/factorial_api/api/procurement_po_line_item_api.rb +148 -0
  134. data/lib/factorial_api/api/procurement_po_template_api.rb +145 -0
  135. data/lib/factorial_api/api/procurement_po_template_field_definition_api.rb +151 -0
  136. data/lib/factorial_api/api/procurement_po_template_version_api.rb +151 -0
  137. data/lib/factorial_api/api/procurement_purchase_order_api.rb +292 -0
  138. data/lib/factorial_api/api/procurement_purchase_request_api.rb +158 -0
  139. data/lib/factorial_api/api/procurement_type_api.rb +145 -0
  140. data/lib/factorial_api/api/project_management_budget_strategy_api.rb +351 -0
  141. data/lib/factorial_api/api/project_management_expense_record_api.rb +169 -0
  142. data/lib/factorial_api/api/project_management_exportable_expense_api.rb +100 -0
  143. data/lib/factorial_api/api/project_management_imputable_project_api.rb +157 -0
  144. data/lib/factorial_api/api/project_management_planned_record_api.rb +354 -0
  145. data/lib/factorial_api/api/project_management_project_api.rb +630 -0
  146. data/lib/factorial_api/api/project_management_project_task_api.rb +563 -0
  147. data/lib/factorial_api/api/project_management_project_worker_api.rb +434 -0
  148. data/lib/factorial_api/api/project_management_rate_api.rb +188 -0
  149. data/lib/factorial_api/api/project_management_subproject_api.rb +424 -0
  150. data/lib/factorial_api/api/project_management_time_record_api.rb +552 -0
  151. data/lib/factorial_api/api/shift_management_shift_api.rb +424 -0
  152. data/lib/factorial_api/api/tasks_task_api.rb +691 -0
  153. data/lib/factorial_api/api/tasks_task_file_api.rb +291 -0
  154. data/lib/factorial_api/api/teams_membership_api.rb +418 -0
  155. data/lib/factorial_api/api/teams_team_api.rb +406 -0
  156. data/lib/factorial_api/api/time_planning_planned_break_api.rb +255 -0
  157. data/lib/factorial_api/api/time_planning_planning_version_api.rb +363 -0
  158. data/lib/factorial_api/api/time_settings_break_configuration_api.rb +286 -0
  159. data/lib/factorial_api/api/time_settings_split_custom_time_range_category_api.rb +151 -0
  160. data/lib/factorial_api/api/timeoff_allowance_api.rb +412 -0
  161. data/lib/factorial_api/api/timeoff_allowance_incidence_api.rb +348 -0
  162. data/lib/factorial_api/api/timeoff_allowance_stat_api.rb +157 -0
  163. data/lib/factorial_api/api/timeoff_blocked_period_api.rb +345 -0
  164. data/lib/factorial_api/api/timeoff_french_leave_day_count_api.rb +98 -0
  165. data/lib/factorial_api/api/timeoff_leave_api.rb +644 -0
  166. data/lib/factorial_api/api/timeoff_leave_type_api.rb +303 -0
  167. data/lib/factorial_api/api/timeoff_policy_api.rb +345 -0
  168. data/lib/factorial_api/api/timeoff_policy_assignment_api.rb +348 -0
  169. data/lib/factorial_api/api/timeoff_policy_timeline_api.rb +93 -0
  170. data/lib/factorial_api/api/trainings_category_api.rb +272 -0
  171. data/lib/factorial_api/api/trainings_session_access_membership_api.rb +289 -0
  172. data/lib/factorial_api/api/trainings_session_api.rb +375 -0
  173. data/lib/factorial_api/api/trainings_session_attendance_api.rb +221 -0
  174. data/lib/factorial_api/api/trainings_training_api.rb +564 -0
  175. data/lib/factorial_api/api/trainings_training_class_api.rb +357 -0
  176. data/lib/factorial_api/api/trainings_training_membership_api.rb +368 -0
  177. data/lib/factorial_api/api/work_schedule_day_configuration_api.rb +215 -0
  178. data/lib/factorial_api/api/work_schedule_overlap_period_api.rb +342 -0
  179. data/lib/factorial_api/api/work_schedule_schedule_api.rb +357 -0
  180. data/lib/factorial_api/api.rb +182 -0
  181. data/lib/factorial_api/api_client.rb +441 -0
  182. data/lib/factorial_api/api_error.rb +58 -0
  183. data/lib/factorial_api/api_model_base.rb +88 -0
  184. data/lib/factorial_api/configuration.rb +407 -0
  185. data/lib/factorial_api/models/api_public_credential.rb +381 -0
  186. data/lib/factorial_api/models/api_public_credentials_get200_response.rb +158 -0
  187. data/lib/factorial_api/models/api_public_webhook_subscription.rb +326 -0
  188. data/lib/factorial_api/models/api_public_webhook_subscriptions_get200_response.rb +158 -0
  189. data/lib/factorial_api/models/api_public_webhook_subscriptions_id_put_request.rb +260 -0
  190. data/lib/factorial_api/models/api_public_webhook_subscriptions_post_request.rb +296 -0
  191. data/lib/factorial_api/models/approvals_materialized_approvals_flow.rb +543 -0
  192. data/lib/factorial_api/models/approvals_materialized_approvals_flow_approvers_inner.rb +323 -0
  193. data/lib/factorial_api/models/approvals_materialized_approvals_flows_approve_resource_post_request.rb +194 -0
  194. data/lib/factorial_api/models/approvals_materialized_approvals_flows_reject_resource_post_request.rb +204 -0
  195. data/lib/factorial_api/models/ats_answer.rb +349 -0
  196. data/lib/factorial_api/models/ats_answers_get200_response.rb +158 -0
  197. data/lib/factorial_api/models/ats_answers_post_request.rb +301 -0
  198. data/lib/factorial_api/models/ats_application.rb +387 -0
  199. data/lib/factorial_api/models/ats_application_cv.rb +256 -0
  200. data/lib/factorial_api/models/ats_application_phase.rb +358 -0
  201. data/lib/factorial_api/models/ats_application_phases_get200_response.rb +158 -0
  202. data/lib/factorial_api/models/ats_applications_apply_post_request.rb +332 -0
  203. data/lib/factorial_api/models/ats_applications_get200_response.rb +158 -0
  204. data/lib/factorial_api/models/ats_applications_id_put_request.rb +290 -0
  205. data/lib/factorial_api/models/ats_applications_move_to_phase_post_request.rb +194 -0
  206. data/lib/factorial_api/models/ats_applications_post_request.rb +302 -0
  207. data/lib/factorial_api/models/ats_applications_post_request_answers_inner.rb +175 -0
  208. data/lib/factorial_api/models/ats_candidate.rb +500 -0
  209. data/lib/factorial_api/models/ats_candidate_source.rb +301 -0
  210. data/lib/factorial_api/models/ats_candidate_sources_get200_response.rb +158 -0
  211. data/lib/factorial_api/models/ats_candidates_get200_response.rb +158 -0
  212. data/lib/factorial_api/models/ats_candidates_id_put_request.rb +236 -0
  213. data/lib/factorial_api/models/ats_candidates_post_request.rb +302 -0
  214. data/lib/factorial_api/models/ats_evaluation_form.rb +328 -0
  215. data/lib/factorial_api/models/ats_evaluation_form_questions_inner.rb +201 -0
  216. data/lib/factorial_api/models/ats_evaluation_forms_get200_response.rb +158 -0
  217. data/lib/factorial_api/models/ats_evaluation_forms_save_as_template_post_request.rb +166 -0
  218. data/lib/factorial_api/models/ats_feedback.rb +284 -0
  219. data/lib/factorial_api/models/ats_feedback_evaluation_form_answers_inner.rb +201 -0
  220. data/lib/factorial_api/models/ats_feedbacks_get200_response.rb +158 -0
  221. data/lib/factorial_api/models/ats_feedbacks_id_put_request.rb +178 -0
  222. data/lib/factorial_api/models/ats_feedbacks_post_request.rb +228 -0
  223. data/lib/factorial_api/models/ats_hiring_stage.rb +301 -0
  224. data/lib/factorial_api/models/ats_hiring_stages_get200_response.rb +158 -0
  225. data/lib/factorial_api/models/ats_job_posting.rb +728 -0
  226. data/lib/factorial_api/models/ats_job_postings_get200_response.rb +158 -0
  227. data/lib/factorial_api/models/ats_job_postings_id_put_request.rb +493 -0
  228. data/lib/factorial_api/models/ats_job_postings_post_request.rb +526 -0
  229. data/lib/factorial_api/models/ats_message.rb +401 -0
  230. data/lib/factorial_api/models/ats_messages_get200_response.rb +158 -0
  231. data/lib/factorial_api/models/ats_question.rb +425 -0
  232. data/lib/factorial_api/models/ats_questions_get200_response.rb +158 -0
  233. data/lib/factorial_api/models/ats_questions_id_put_request.rb +218 -0
  234. data/lib/factorial_api/models/ats_questions_post_request.rb +333 -0
  235. data/lib/factorial_api/models/ats_questions_post_request_options_inner.rb +174 -0
  236. data/lib/factorial_api/models/ats_rejection_reason.rb +329 -0
  237. data/lib/factorial_api/models/ats_rejection_reasons_get200_response.rb +158 -0
  238. data/lib/factorial_api/models/attendance_break_configuration.rb +269 -0
  239. data/lib/factorial_api/models/attendance_break_configurations_get200_response.rb +158 -0
  240. data/lib/factorial_api/models/attendance_break_configurations_id_put_request.rb +176 -0
  241. data/lib/factorial_api/models/attendance_break_configurations_post_request.rb +222 -0
  242. data/lib/factorial_api/models/attendance_edit_timesheet_request.rb +397 -0
  243. data/lib/factorial_api/models/attendance_edit_timesheet_requests_get200_response.rb +158 -0
  244. data/lib/factorial_api/models/attendance_edit_timesheet_requests_id_put_request.rb +348 -0
  245. data/lib/factorial_api/models/attendance_edit_timesheet_requests_post_request.rb +359 -0
  246. data/lib/factorial_api/models/attendance_estimated_time.rb +523 -0
  247. data/lib/factorial_api/models/attendance_estimated_time_breaks_inner.rb +386 -0
  248. data/lib/factorial_api/models/attendance_estimated_time_shifts_inner.rb +246 -0
  249. data/lib/factorial_api/models/attendance_estimated_times_get200_response.rb +158 -0
  250. data/lib/factorial_api/models/attendance_open_shift.rb +425 -0
  251. data/lib/factorial_api/models/attendance_open_shifts_get200_response.rb +158 -0
  252. data/lib/factorial_api/models/attendance_overtime_request.rb +433 -0
  253. data/lib/factorial_api/models/attendance_overtime_requests_approve_post_request.rb +183 -0
  254. data/lib/factorial_api/models/attendance_overtime_requests_get200_response.rb +158 -0
  255. data/lib/factorial_api/models/attendance_overtime_requests_id_put_request.rb +201 -0
  256. data/lib/factorial_api/models/attendance_overtime_requests_post_request.rb +237 -0
  257. data/lib/factorial_api/models/attendance_overtime_requests_reject_post_request.rb +201 -0
  258. data/lib/factorial_api/models/attendance_review.rb +277 -0
  259. data/lib/factorial_api/models/attendance_reviews_bulk_create_post_request.rb +252 -0
  260. data/lib/factorial_api/models/attendance_reviews_bulk_destroy_post_request.rb +224 -0
  261. data/lib/factorial_api/models/attendance_reviews_get200_response.rb +158 -0
  262. data/lib/factorial_api/models/attendance_shift.rb +578 -0
  263. data/lib/factorial_api/models/attendance_shifts_autofill_post_request.rb +234 -0
  264. data/lib/factorial_api/models/attendance_shifts_break_end_post_request.rb +204 -0
  265. data/lib/factorial_api/models/attendance_shifts_break_start_post_request.rb +196 -0
  266. data/lib/factorial_api/models/attendance_shifts_clock_in_post_request.rb +300 -0
  267. data/lib/factorial_api/models/attendance_shifts_clock_out_post_request.rb +216 -0
  268. data/lib/factorial_api/models/attendance_shifts_get200_response.rb +158 -0
  269. data/lib/factorial_api/models/attendance_shifts_id_put_request.rb +280 -0
  270. data/lib/factorial_api/models/attendance_shifts_post_request.rb +342 -0
  271. data/lib/factorial_api/models/attendance_shifts_toggle_clock_post_request.rb +268 -0
  272. data/lib/factorial_api/models/attendance_worked_time.rb +462 -0
  273. data/lib/factorial_api/models/attendance_worked_time_worked_time_blocks_inner.rb +513 -0
  274. data/lib/factorial_api/models/attendance_worked_times_get200_response.rb +158 -0
  275. data/lib/factorial_api/models/banking_bank_account.rb +521 -0
  276. data/lib/factorial_api/models/banking_bank_account_number.rb +283 -0
  277. data/lib/factorial_api/models/banking_bank_accounts_create_manual_post_request.rb +315 -0
  278. data/lib/factorial_api/models/banking_bank_accounts_get200_response.rb +158 -0
  279. data/lib/factorial_api/models/banking_card_payment.rb +548 -0
  280. data/lib/factorial_api/models/banking_card_payments_get200_response.rb +158 -0
  281. data/lib/factorial_api/models/banking_transaction.rb +433 -0
  282. data/lib/factorial_api/models/banking_transactions_get200_response.rb +158 -0
  283. data/lib/factorial_api/models/bookkeepers_management_incidence.rb +485 -0
  284. data/lib/factorial_api/models/bookkeepers_management_incidences_get200_response.rb +158 -0
  285. data/lib/factorial_api/models/bookkeepers_management_incidences_id_put_request.rb +215 -0
  286. data/lib/factorial_api/models/companies_legal_entities_get200_response.rb +158 -0
  287. data/lib/factorial_api/models/companies_legal_entities_post_request.rb +310 -0
  288. data/lib/factorial_api/models/companies_legal_entity.rb +348 -0
  289. data/lib/factorial_api/models/compensations_additional_compensation.rb +490 -0
  290. data/lib/factorial_api/models/compensations_additional_compensations_get200_response.rb +158 -0
  291. data/lib/factorial_api/models/compensations_additional_compensations_id_put_request.rb +299 -0
  292. data/lib/factorial_api/models/compensations_additional_compensations_post_request.rb +334 -0
  293. data/lib/factorial_api/models/compensations_additional_compensations_post_request_per_worked_day_definition.rb +235 -0
  294. data/lib/factorial_api/models/compensations_concept.rb +458 -0
  295. data/lib/factorial_api/models/compensations_concepts_get200_response.rb +158 -0
  296. data/lib/factorial_api/models/compensations_concepts_id_put_request.rb +272 -0
  297. data/lib/factorial_api/models/compensations_concepts_post_request.rb +277 -0
  298. data/lib/factorial_api/models/compensations_cycle.rb +302 -0
  299. data/lib/factorial_api/models/compensations_cycles_get200_response.rb +158 -0
  300. data/lib/factorial_api/models/compensations_employees_compensation.rb +469 -0
  301. data/lib/factorial_api/models/compensations_employees_compensations_get200_response.rb +158 -0
  302. data/lib/factorial_api/models/compensations_employees_compensations_id_put_request.rb +287 -0
  303. data/lib/factorial_api/models/compensations_employees_compensations_post_request.rb +334 -0
  304. data/lib/factorial_api/models/compensations_payroll_result.rb +427 -0
  305. data/lib/factorial_api/models/compensations_payroll_results_bulk_create_post_request.rb +196 -0
  306. data/lib/factorial_api/models/compensations_payroll_results_bulk_create_post_request_results_inner.rb +196 -0
  307. data/lib/factorial_api/models/compensations_payroll_results_bulk_create_post_request_results_inner_items_inner.rb +194 -0
  308. data/lib/factorial_api/models/compensations_payroll_results_get200_response.rb +158 -0
  309. data/lib/factorial_api/models/compensations_payroll_run.rb +438 -0
  310. data/lib/factorial_api/models/compensations_payroll_run_employees_compensation.rb +395 -0
  311. data/lib/factorial_api/models/compensations_payroll_run_employees_compensations_get200_response.rb +158 -0
  312. data/lib/factorial_api/models/compensations_payroll_runs_get200_response.rb +158 -0
  313. data/lib/factorial_api/models/contracts_compensation.rb +420 -0
  314. data/lib/factorial_api/models/contracts_compensations_get200_response.rb +158 -0
  315. data/lib/factorial_api/models/contracts_compensations_id_put_request.rb +334 -0
  316. data/lib/factorial_api/models/contracts_compensations_post_request.rb +352 -0
  317. data/lib/factorial_api/models/contracts_contract.rb +395 -0
  318. data/lib/factorial_api/models/contracts_contract_activity_period.rb +311 -0
  319. data/lib/factorial_api/models/contracts_contract_activity_periods_get200_response.rb +158 -0
  320. data/lib/factorial_api/models/contracts_contract_flow.rb +836 -0
  321. data/lib/factorial_api/models/contracts_contract_template.rb +186 -0
  322. data/lib/factorial_api/models/contracts_contract_templates_get200_response.rb +158 -0
  323. data/lib/factorial_api/models/contracts_contract_version.rb +856 -0
  324. data/lib/factorial_api/models/contracts_contract_version_histories_get200_response.rb +158 -0
  325. data/lib/factorial_api/models/contracts_contract_version_history.rb +850 -0
  326. data/lib/factorial_api/models/contracts_contract_version_meta_data.rb +176 -0
  327. data/lib/factorial_api/models/contracts_contract_version_meta_data_get200_response.rb +158 -0
  328. data/lib/factorial_api/models/contracts_contract_version_request.rb +1126 -0
  329. data/lib/factorial_api/models/contracts_contract_version_version_data.rb +148 -0
  330. data/lib/factorial_api/models/contracts_contract_version_version_data_country_data.rb +222 -0
  331. data/lib/factorial_api/models/contracts_contract_version_version_data_country_data_fields_inner.rb +228 -0
  332. data/lib/factorial_api/models/contracts_contract_version_version_data_country_data_template_fragments.rb +166 -0
  333. data/lib/factorial_api/models/contracts_contract_versions_get200_response.rb +158 -0
  334. data/lib/factorial_api/models/contracts_contract_versions_id_put_request.rb +444 -0
  335. data/lib/factorial_api/models/contracts_contract_versions_post_request.rb +490 -0
  336. data/lib/factorial_api/models/contracts_contract_versions_post_request_country_data_inputs_inner.rb +214 -0
  337. data/lib/factorial_api/models/contracts_contracts_get200_response.rb +158 -0
  338. data/lib/factorial_api/models/contracts_french_contract_type.rb +194 -0
  339. data/lib/factorial_api/models/contracts_french_contract_types_get200_response.rb +158 -0
  340. data/lib/factorial_api/models/contracts_german_contract_type.rb +194 -0
  341. data/lib/factorial_api/models/contracts_german_contract_types_get200_response.rb +158 -0
  342. data/lib/factorial_api/models/contracts_legal_entity_changes_post_request.rb +193 -0
  343. data/lib/factorial_api/models/contracts_legal_entity_changes_post_request_contract_details.rb +413 -0
  344. data/lib/factorial_api/models/contracts_materialized_template.rb +295 -0
  345. data/lib/factorial_api/models/contracts_materialized_template_template_inner.rb +358 -0
  346. data/lib/factorial_api/models/contracts_materialized_template_template_inner_dependencies_inner.rb +224 -0
  347. data/lib/factorial_api/models/contracts_materialized_template_template_inner_options_inner.rb +309 -0
  348. data/lib/factorial_api/models/contracts_materialized_templates_get200_response.rb +158 -0
  349. data/lib/factorial_api/models/contracts_portuguese_contract_type.rb +194 -0
  350. data/lib/factorial_api/models/contracts_portuguese_contract_types_get200_response.rb +158 -0
  351. data/lib/factorial_api/models/contracts_spanish_contract_type.rb +214 -0
  352. data/lib/factorial_api/models/contracts_spanish_contract_types_get200_response.rb +158 -0
  353. data/lib/factorial_api/models/contracts_spanish_contract_types_post_request.rb +194 -0
  354. data/lib/factorial_api/models/contracts_spanish_education_level.rb +214 -0
  355. data/lib/factorial_api/models/contracts_spanish_education_levels_get200_response.rb +158 -0
  356. data/lib/factorial_api/models/contracts_spanish_professional_categories_get200_response.rb +158 -0
  357. data/lib/factorial_api/models/contracts_spanish_professional_category.rb +214 -0
  358. data/lib/factorial_api/models/contracts_spanish_working_day_type.rb +214 -0
  359. data/lib/factorial_api/models/contracts_spanish_working_day_types_get200_response.rb +158 -0
  360. data/lib/factorial_api/models/contracts_spanish_working_day_types_post_request.rb +176 -0
  361. data/lib/factorial_api/models/contracts_taxonomies_get200_response.rb +158 -0
  362. data/lib/factorial_api/models/contracts_taxonomy.rb +273 -0
  363. data/lib/factorial_api/models/custom_fields_field.rb +315 -0
  364. data/lib/factorial_api/models/custom_fields_fields_get200_response.rb +158 -0
  365. data/lib/factorial_api/models/custom_fields_fields_post_request.rb +321 -0
  366. data/lib/factorial_api/models/custom_fields_option.rb +206 -0
  367. data/lib/factorial_api/models/custom_fields_options_get200_response.rb +158 -0
  368. data/lib/factorial_api/models/custom_fields_options_post_request.rb +204 -0
  369. data/lib/factorial_api/models/custom_fields_resource_field.rb +176 -0
  370. data/lib/factorial_api/models/custom_fields_resource_fields_get200_response.rb +158 -0
  371. data/lib/factorial_api/models/custom_fields_resource_fields_post_request.rb +383 -0
  372. data/lib/factorial_api/models/custom_fields_value.rb +378 -0
  373. data/lib/factorial_api/models/custom_fields_values_get200_response.rb +158 -0
  374. data/lib/factorial_api/models/custom_fields_values_id_put_request.rb +156 -0
  375. data/lib/factorial_api/models/custom_fields_values_post_request.rb +250 -0
  376. data/lib/factorial_api/models/custom_resources_resource.rb +250 -0
  377. data/lib/factorial_api/models/custom_resources_resources_get200_response.rb +158 -0
  378. data/lib/factorial_api/models/custom_resources_schema.rb +260 -0
  379. data/lib/factorial_api/models/custom_resources_schemas_get200_response.rb +158 -0
  380. data/lib/factorial_api/models/custom_resources_schemas_post_request.rb +252 -0
  381. data/lib/factorial_api/models/custom_resources_value.rb +204 -0
  382. data/lib/factorial_api/models/custom_resources_values_get200_response.rb +158 -0
  383. data/lib/factorial_api/models/custom_resources_values_post_request.rb +260 -0
  384. data/lib/factorial_api/models/documents_document.rb +482 -0
  385. data/lib/factorial_api/models/documents_documents_get200_response.rb +158 -0
  386. data/lib/factorial_api/models/documents_documents_id_put_request.rb +272 -0
  387. data/lib/factorial_api/models/documents_documents_move_to_trash_bin_post_request.rb +168 -0
  388. data/lib/factorial_api/models/documents_download_url.rb +194 -0
  389. data/lib/factorial_api/models/documents_download_urls_bulk_create_post_request.rb +150 -0
  390. data/lib/factorial_api/models/documents_folder.rb +270 -0
  391. data/lib/factorial_api/models/documents_folders_get200_response.rb +158 -0
  392. data/lib/factorial_api/models/documents_folders_id_put_request.rb +222 -0
  393. data/lib/factorial_api/models/documents_folders_post_request.rb +222 -0
  394. data/lib/factorial_api/models/employee_updates_absence.rb +314 -0
  395. data/lib/factorial_api/models/employee_updates_absences_get200_response.rb +158 -0
  396. data/lib/factorial_api/models/employee_updates_contract_change.rb +771 -0
  397. data/lib/factorial_api/models/employee_updates_contract_changes_get200_response.rb +158 -0
  398. data/lib/factorial_api/models/employee_updates_new_hire.rb +569 -0
  399. data/lib/factorial_api/models/employee_updates_new_hires_get200_response.rb +158 -0
  400. data/lib/factorial_api/models/employee_updates_personal_change.rb +457 -0
  401. data/lib/factorial_api/models/employee_updates_personal_changes_get200_response.rb +158 -0
  402. data/lib/factorial_api/models/employee_updates_summaries_get200_response.rb +158 -0
  403. data/lib/factorial_api/models/employee_updates_summary.rb +300 -0
  404. data/lib/factorial_api/models/employee_updates_termination.rb +322 -0
  405. data/lib/factorial_api/models/employee_updates_termination_remaining_holidays_inner.rb +192 -0
  406. data/lib/factorial_api/models/employee_updates_terminations_get200_response.rb +158 -0
  407. data/lib/factorial_api/models/employees_employee.rb +910 -0
  408. data/lib/factorial_api/models/employees_employees_create_with_contract_post_request.rb +676 -0
  409. data/lib/factorial_api/models/employees_employees_get200_response.rb +158 -0
  410. data/lib/factorial_api/models/employees_employees_id_put_request.rb +540 -0
  411. data/lib/factorial_api/models/employees_employees_invite_post_request.rb +194 -0
  412. data/lib/factorial_api/models/employees_employees_set_regular_access_start_date_post_request.rb +176 -0
  413. data/lib/factorial_api/models/employees_employees_terminate_post_request.rb +224 -0
  414. data/lib/factorial_api/models/expenses_expensable.rb +626 -0
  415. data/lib/factorial_api/models/expenses_expensables_bulk_set_to_paid_post_request.rb +168 -0
  416. data/lib/factorial_api/models/expenses_expensables_get200_response.rb +158 -0
  417. data/lib/factorial_api/models/expenses_expensables_update_reimbursable_amount_post_request.rb +194 -0
  418. data/lib/factorial_api/models/expenses_expense.rb +749 -0
  419. data/lib/factorial_api/models/expenses_expense_card.rb +175 -0
  420. data/lib/factorial_api/models/expenses_expense_files_inner.rb +246 -0
  421. data/lib/factorial_api/models/expenses_expense_signed_document.rb +285 -0
  422. data/lib/factorial_api/models/expenses_expense_taxes_inner.rb +215 -0
  423. data/lib/factorial_api/models/expenses_expenses_get200_response.rb +158 -0
  424. data/lib/factorial_api/models/expenses_mileage.rb +630 -0
  425. data/lib/factorial_api/models/expenses_mileages_get200_response.rb +158 -0
  426. data/lib/factorial_api/models/expenses_per_diem.rb +581 -0
  427. data/lib/factorial_api/models/expenses_per_diem_rates_inner.rb +219 -0
  428. data/lib/factorial_api/models/expenses_per_diems_get200_response.rb +158 -0
  429. data/lib/factorial_api/models/finance_account.rb +349 -0
  430. data/lib/factorial_api/models/finance_accounting_setting.rb +350 -0
  431. data/lib/factorial_api/models/finance_accounting_settings_get200_response.rb +158 -0
  432. data/lib/factorial_api/models/finance_accounting_settings_upsert_post_request.rb +266 -0
  433. data/lib/factorial_api/models/finance_accounts_get200_response.rb +158 -0
  434. data/lib/factorial_api/models/finance_accounts_id_put_request.rb +260 -0
  435. data/lib/factorial_api/models/finance_accounts_post_request.rb +293 -0
  436. data/lib/factorial_api/models/finance_budget_option.rb +260 -0
  437. data/lib/factorial_api/models/finance_budget_options_get200_response.rb +158 -0
  438. data/lib/factorial_api/models/finance_categories_get200_response.rb +158 -0
  439. data/lib/factorial_api/models/finance_category.rb +326 -0
  440. data/lib/factorial_api/models/finance_contact.rb +373 -0
  441. data/lib/factorial_api/models/finance_contacts_get200_response.rb +158 -0
  442. data/lib/factorial_api/models/finance_contacts_id_put_request.rb +253 -0
  443. data/lib/factorial_api/models/finance_contacts_post_request.rb +285 -0
  444. data/lib/factorial_api/models/finance_contacts_post_request_address.rb +289 -0
  445. data/lib/factorial_api/models/finance_cost_center.rb +346 -0
  446. data/lib/factorial_api/models/finance_cost_center_membership.rb +288 -0
  447. data/lib/factorial_api/models/finance_cost_center_memberships_bulk_create_update_post_request.rb +221 -0
  448. data/lib/factorial_api/models/finance_cost_center_memberships_bulk_create_update_post_request_memberships_inner.rb +237 -0
  449. data/lib/factorial_api/models/finance_cost_center_memberships_get200_response.rb +158 -0
  450. data/lib/factorial_api/models/finance_cost_centers_edit_post_request.rb +206 -0
  451. data/lib/factorial_api/models/finance_cost_centers_get200_response.rb +158 -0
  452. data/lib/factorial_api/models/finance_cost_centers_post_request.rb +224 -0
  453. data/lib/factorial_api/models/finance_financial_document.rb +623 -0
  454. data/lib/factorial_api/models/finance_financial_document_file.rb +301 -0
  455. data/lib/factorial_api/models/finance_financial_documents_get200_response.rb +158 -0
  456. data/lib/factorial_api/models/finance_financial_documents_id_put_request.rb +409 -0
  457. data/lib/factorial_api/models/finance_financial_documents_id_put_request_taxes_inner.rb +237 -0
  458. data/lib/factorial_api/models/finance_financial_documents_id_put_request_taxes_inner_tax_rates_inner.rb +165 -0
  459. data/lib/factorial_api/models/finance_financial_documents_post_request_line_items_inner.rb +246 -0
  460. data/lib/factorial_api/models/finance_journal_entries_get200_response.rb +158 -0
  461. data/lib/factorial_api/models/finance_journal_entries_post_request.rb +310 -0
  462. data/lib/factorial_api/models/finance_journal_entries_post_request_lines_inner.rb +232 -0
  463. data/lib/factorial_api/models/finance_journal_entry.rb +438 -0
  464. data/lib/factorial_api/models/finance_journal_line.rb +354 -0
  465. data/lib/factorial_api/models/finance_journal_lines_get200_response.rb +158 -0
  466. data/lib/factorial_api/models/finance_ledger_account_resource.rb +343 -0
  467. data/lib/factorial_api/models/finance_ledger_account_resources_get200_response.rb +158 -0
  468. data/lib/factorial_api/models/finance_ledger_account_resources_upsert_post_request.rb +321 -0
  469. data/lib/factorial_api/models/finance_tax_rate.rb +270 -0
  470. data/lib/factorial_api/models/finance_tax_rates_get200_response.rb +158 -0
  471. data/lib/factorial_api/models/finance_tax_rates_id_put_request.rb +176 -0
  472. data/lib/factorial_api/models/finance_tax_rates_post_request.rb +178 -0
  473. data/lib/factorial_api/models/finance_tax_type.rb +293 -0
  474. data/lib/factorial_api/models/finance_tax_types_get200_response.rb +158 -0
  475. data/lib/factorial_api/models/finance_tax_types_id_put_request.rb +237 -0
  476. data/lib/factorial_api/models/finance_tax_types_post_request.rb +237 -0
  477. data/lib/factorial_api/models/holidays_company_holiday.rb +286 -0
  478. data/lib/factorial_api/models/holidays_company_holidays_get200_response.rb +158 -0
  479. data/lib/factorial_api/models/integrations_sync_run.rb +338 -0
  480. data/lib/factorial_api/models/integrations_sync_run_context.rb +157 -0
  481. data/lib/factorial_api/models/integrations_sync_run_output.rb +250 -0
  482. data/lib/factorial_api/models/integrations_sync_runs_get200_response.rb +158 -0
  483. data/lib/factorial_api/models/integrations_sync_runs_post_request.rb +158 -0
  484. data/lib/factorial_api/models/integrations_syncable_item.rb +244 -0
  485. data/lib/factorial_api/models/integrations_syncable_item_sync_payload.rb +372 -0
  486. data/lib/factorial_api/models/integrations_syncable_item_sync_payload_cost_center_ids_inner.rb +147 -0
  487. data/lib/factorial_api/models/integrations_syncable_item_sync_payload_taxes_inner.rb +174 -0
  488. data/lib/factorial_api/models/integrations_syncable_state.rb +390 -0
  489. data/lib/factorial_api/models/integrations_syncable_state_error_messages_inner.rb +192 -0
  490. data/lib/factorial_api/models/integrations_syncable_states_get200_response.rb +158 -0
  491. data/lib/factorial_api/models/integrations_syncable_sync_run.rb +331 -0
  492. data/lib/factorial_api/models/integrations_syncable_sync_runs_bulk_upsert_post_request.rb +196 -0
  493. data/lib/factorial_api/models/integrations_syncable_sync_runs_bulk_upsert_post_request_items_inner.rb +266 -0
  494. data/lib/factorial_api/models/integrations_syncable_sync_runs_get200_response.rb +158 -0
  495. data/lib/factorial_api/models/integrations_syncable_sync_runs_id_put_request.rb +227 -0
  496. data/lib/factorial_api/models/it_management_asset_categories_get200_response.rb +158 -0
  497. data/lib/factorial_api/models/it_management_asset_category.rb +296 -0
  498. data/lib/factorial_api/models/it_management_it_asset.rb +444 -0
  499. data/lib/factorial_api/models/it_management_it_asset_model.rb +344 -0
  500. data/lib/factorial_api/models/it_management_it_asset_models_get200_response.rb +158 -0
  501. data/lib/factorial_api/models/it_management_it_asset_models_id_put_request.rb +252 -0
  502. data/lib/factorial_api/models/it_management_it_asset_models_post_request.rb +224 -0
  503. data/lib/factorial_api/models/it_management_it_assets_get200_response.rb +158 -0
  504. data/lib/factorial_api/models/it_management_it_assets_id_put_request.rb +306 -0
  505. data/lib/factorial_api/models/it_management_it_assets_post_request.rb +304 -0
  506. data/lib/factorial_api/models/job_catalog_level.rb +334 -0
  507. data/lib/factorial_api/models/job_catalog_levels_get200_response.rb +158 -0
  508. data/lib/factorial_api/models/job_catalog_node.rb +325 -0
  509. data/lib/factorial_api/models/job_catalog_node_attribute.rb +240 -0
  510. data/lib/factorial_api/models/job_catalog_node_attribute_value_competency.rb +166 -0
  511. data/lib/factorial_api/models/job_catalog_node_attribute_value_competency_level.rb +219 -0
  512. data/lib/factorial_api/models/job_catalog_node_attribute_value_it_management_asset.rb +220 -0
  513. data/lib/factorial_api/models/job_catalog_node_attribute_value_salary_range.rb +214 -0
  514. data/lib/factorial_api/models/job_catalog_node_attribute_value_working_conditions.rb +204 -0
  515. data/lib/factorial_api/models/job_catalog_node_attributes_get200_response.rb +158 -0
  516. data/lib/factorial_api/models/job_catalog_node_full_path_to_root_inner.rb +183 -0
  517. data/lib/factorial_api/models/job_catalog_role.rb +314 -0
  518. data/lib/factorial_api/models/job_catalog_roles_get200_response.rb +158 -0
  519. data/lib/factorial_api/models/job_catalog_tree_nodes_get200_response.rb +158 -0
  520. data/lib/factorial_api/models/locations_location.rb +370 -0
  521. data/lib/factorial_api/models/locations_locations_get200_response.rb +158 -0
  522. data/lib/factorial_api/models/locations_locations_id_put_request.rb +306 -0
  523. data/lib/factorial_api/models/locations_locations_post_request.rb +360 -0
  524. data/lib/factorial_api/models/locations_work_area.rb +228 -0
  525. data/lib/factorial_api/models/locations_work_areas_get200_response.rb +158 -0
  526. data/lib/factorial_api/models/locations_work_areas_id_put_request.rb +192 -0
  527. data/lib/factorial_api/models/locations_work_areas_post_request.rb +192 -0
  528. data/lib/factorial_api/models/marketplace_installation.rb +248 -0
  529. data/lib/factorial_api/models/marketplace_installation_settings.rb +308 -0
  530. data/lib/factorial_api/models/marketplace_installation_settings_get200_response.rb +158 -0
  531. data/lib/factorial_api/models/marketplace_installation_settings_leave_types_inner.rb +201 -0
  532. data/lib/factorial_api/models/marketplace_installation_settings_payroll_concept_codes_inner.rb +219 -0
  533. data/lib/factorial_api/models/marketplace_installation_settings_timeoff_allowance_code_inner.rb +192 -0
  534. data/lib/factorial_api/models/marketplace_installations_post_request.rb +194 -0
  535. data/lib/factorial_api/models/paged_index_meta.rb +264 -0
  536. data/lib/factorial_api/models/payroll_employees_german_employee_data_get200_response.rb +158 -0
  537. data/lib/factorial_api/models/payroll_employees_german_employee_data_id_put_request.rb +396 -0
  538. data/lib/factorial_api/models/payroll_employees_german_employee_data_post_request.rb +396 -0
  539. data/lib/factorial_api/models/payroll_employees_german_employee_datum.rb +424 -0
  540. data/lib/factorial_api/models/payroll_employees_identifier.rb +265 -0
  541. data/lib/factorial_api/models/payroll_employees_identifiers_get200_response.rb +158 -0
  542. data/lib/factorial_api/models/payroll_employees_identifiers_id_put_request.rb +237 -0
  543. data/lib/factorial_api/models/payroll_employees_identifiers_post_request.rb +237 -0
  544. data/lib/factorial_api/models/payroll_family_situation.rb +248 -0
  545. data/lib/factorial_api/models/payroll_family_situations_get200_response.rb +158 -0
  546. data/lib/factorial_api/models/payroll_family_situations_id_put_request.rb +248 -0
  547. data/lib/factorial_api/models/payroll_family_situations_post_request.rb +220 -0
  548. data/lib/factorial_api/models/payroll_integrations_base_code.rb +329 -0
  549. data/lib/factorial_api/models/payroll_integrations_base_codes_get200_response.rb +158 -0
  550. data/lib/factorial_api/models/payroll_integrations_base_codes_id_put_request.rb +194 -0
  551. data/lib/factorial_api/models/payroll_integrations_base_codes_post_request.rb +273 -0
  552. data/lib/factorial_api/models/payroll_policy_period.rb +346 -0
  553. data/lib/factorial_api/models/payroll_policy_periods_change_status_post_request.rb +275 -0
  554. data/lib/factorial_api/models/payroll_supplement.rb +415 -0
  555. data/lib/factorial_api/models/payroll_supplements_get200_response.rb +158 -0
  556. data/lib/factorial_api/models/payroll_supplements_id_put_request.rb +236 -0
  557. data/lib/factorial_api/models/payroll_supplements_post_request.rb +308 -0
  558. data/lib/factorial_api/models/performance_agreement.rb +450 -0
  559. data/lib/factorial_api/models/performance_agreement_conclusions.rb +193 -0
  560. data/lib/factorial_api/models/performance_agreement_self_comments_inner.rb +246 -0
  561. data/lib/factorial_api/models/performance_agreements_bulk_initiate_post_request.rb +166 -0
  562. data/lib/factorial_api/models/performance_agreements_get200_response.rb +158 -0
  563. data/lib/factorial_api/models/performance_agreements_initiate_post_request.rb +194 -0
  564. data/lib/factorial_api/models/performance_company_employee_score_scale.rb +222 -0
  565. data/lib/factorial_api/models/performance_company_employee_score_scales_get200_response.rb +158 -0
  566. data/lib/factorial_api/models/performance_company_employee_score_scales_set_post_request.rb +192 -0
  567. data/lib/factorial_api/models/performance_employee_score_scale.rb +223 -0
  568. data/lib/factorial_api/models/performance_employee_score_scales_get200_response.rb +158 -0
  569. data/lib/factorial_api/models/performance_review_employee_score.rb +526 -0
  570. data/lib/factorial_api/models/performance_review_evaluation.rb +341 -0
  571. data/lib/factorial_api/models/performance_review_evaluation_answer.rb +239 -0
  572. data/lib/factorial_api/models/performance_review_evaluation_answer_answered_questionnaire_with_sections.rb +168 -0
  573. data/lib/factorial_api/models/performance_review_evaluation_answer_answered_questionnaire_with_sections_content_inner.rb +253 -0
  574. data/lib/factorial_api/models/performance_review_evaluation_answered_question.rb +174 -0
  575. data/lib/factorial_api/models/performance_review_evaluation_answers_get200_response.rb +158 -0
  576. data/lib/factorial_api/models/performance_review_evaluation_question_answer.rb +212 -0
  577. data/lib/factorial_api/models/performance_review_evaluation_question_answer_rating.rb +156 -0
  578. data/lib/factorial_api/models/performance_review_evaluation_score.rb +517 -0
  579. data/lib/factorial_api/models/performance_review_evaluation_scores_get200_response.rb +158 -0
  580. data/lib/factorial_api/models/performance_review_evaluations_get200_response.rb +158 -0
  581. data/lib/factorial_api/models/performance_review_evaluations_get_with_targets_managed_by_filter_parameter.rb +193 -0
  582. data/lib/factorial_api/models/performance_review_evaluations_replace_reviewer_post_request.rb +194 -0
  583. data/lib/factorial_api/models/performance_review_owner.rb +222 -0
  584. data/lib/factorial_api/models/performance_review_owners_bulk_create_post_request.rb +196 -0
  585. data/lib/factorial_api/models/performance_review_owners_get200_response.rb +158 -0
  586. data/lib/factorial_api/models/performance_review_process.rb +428 -0
  587. data/lib/factorial_api/models/performance_review_process_agreements_configuration.rb +193 -0
  588. data/lib/factorial_api/models/performance_review_process_competencies_assessments_configuration.rb +166 -0
  589. data/lib/factorial_api/models/performance_review_process_custom_template.rb +340 -0
  590. data/lib/factorial_api/models/performance_review_process_custom_template_visibility_settings.rb +220 -0
  591. data/lib/factorial_api/models/performance_review_process_custom_templates_get200_response.rb +158 -0
  592. data/lib/factorial_api/models/performance_review_process_estimated_target.rb +250 -0
  593. data/lib/factorial_api/models/performance_review_process_estimated_targets_get200_response.rb +158 -0
  594. data/lib/factorial_api/models/performance_review_process_target.rb +250 -0
  595. data/lib/factorial_api/models/performance_review_process_target_strategy.rb +200 -0
  596. data/lib/factorial_api/models/performance_review_process_targets_add_peers_post_request.rb +196 -0
  597. data/lib/factorial_api/models/performance_review_process_targets_bulk_create_post_request.rb +196 -0
  598. data/lib/factorial_api/models/performance_review_process_targets_get200_response.rb +158 -0
  599. data/lib/factorial_api/models/performance_review_process_targets_remove_peer_evaluations_post_request.rb +194 -0
  600. data/lib/factorial_api/models/performance_review_processes_create_from_template_post_request.rb +255 -0
  601. data/lib/factorial_api/models/performance_review_processes_duplicate_post_request.rb +194 -0
  602. data/lib/factorial_api/models/performance_review_processes_get200_response.rb +158 -0
  603. data/lib/factorial_api/models/performance_review_processes_post_request.rb +304 -0
  604. data/lib/factorial_api/models/performance_review_processes_remind_in_bulk_post_request.rb +178 -0
  605. data/lib/factorial_api/models/performance_review_processes_reopen_post_request.rb +194 -0
  606. data/lib/factorial_api/models/performance_review_processes_schedule_post_request.rb +194 -0
  607. data/lib/factorial_api/models/performance_review_processes_update_agreements_configuration_post_request.rb +193 -0
  608. data/lib/factorial_api/models/performance_review_processes_update_basic_info_post_request.rb +186 -0
  609. data/lib/factorial_api/models/performance_review_processes_update_reviewer_strategies_post_request.rb +196 -0
  610. data/lib/factorial_api/models/performance_review_processes_update_target_strategy_post_request.rb +222 -0
  611. data/lib/factorial_api/models/performance_review_questionnaire_by_strategies_get200_response.rb +158 -0
  612. data/lib/factorial_api/models/performance_review_questionnaire_by_strategies_update_default_rating_scale_post_request.rb +196 -0
  613. data/lib/factorial_api/models/performance_review_questionnaire_by_strategies_update_questionnaire_for_strategy_post_request.rb +247 -0
  614. data/lib/factorial_api/models/performance_review_questionnaire_question.rb +327 -0
  615. data/lib/factorial_api/models/performance_review_questionnaire_question_metadata.rb +174 -0
  616. data/lib/factorial_api/models/performance_review_questionnaire_section.rb +253 -0
  617. data/lib/factorial_api/models/performance_review_questionnaires_by_strategy.rb +287 -0
  618. data/lib/factorial_api/models/performance_review_questionnaires_by_strategy_self_questionnaire.rb +218 -0
  619. data/lib/factorial_api/models/performance_review_rating_scale_option.rb +192 -0
  620. data/lib/factorial_api/models/performance_review_visibility_setting.rb +278 -0
  621. data/lib/factorial_api/models/performance_review_visibility_settings_get200_response.rb +158 -0
  622. data/lib/factorial_api/models/performance_review_visibility_settings_id_put_request.rb +242 -0
  623. data/lib/factorial_api/models/performance_target_manager.rb +250 -0
  624. data/lib/factorial_api/models/performance_target_managers_get200_response.rb +158 -0
  625. data/lib/factorial_api/models/posts_comment.rb +278 -0
  626. data/lib/factorial_api/models/posts_comments_get200_response.rb +158 -0
  627. data/lib/factorial_api/models/posts_comments_id_put_request.rb +222 -0
  628. data/lib/factorial_api/models/posts_comments_post_request.rb +194 -0
  629. data/lib/factorial_api/models/posts_group.rb +204 -0
  630. data/lib/factorial_api/models/posts_groups_get200_response.rb +158 -0
  631. data/lib/factorial_api/models/posts_groups_id_put_request.rb +186 -0
  632. data/lib/factorial_api/models/posts_groups_post_request.rb +222 -0
  633. data/lib/factorial_api/models/posts_post.rb +355 -0
  634. data/lib/factorial_api/models/posts_posts_get200_response.rb +158 -0
  635. data/lib/factorial_api/models/posts_posts_id_put_request.rb +206 -0
  636. data/lib/factorial_api/models/posts_posts_post_request.rb +232 -0
  637. data/lib/factorial_api/models/processes_materialized_process.rb +232 -0
  638. data/lib/factorial_api/models/processes_materialized_processes_post_request.rb +204 -0
  639. data/lib/factorial_api/models/processes_process.rb +248 -0
  640. data/lib/factorial_api/models/processes_processes_get200_response.rb +158 -0
  641. data/lib/factorial_api/models/procurement_po_field_value.rb +336 -0
  642. data/lib/factorial_api/models/procurement_po_field_values_get200_response.rb +158 -0
  643. data/lib/factorial_api/models/procurement_po_line_item.rb +306 -0
  644. data/lib/factorial_api/models/procurement_po_line_items_get200_response.rb +158 -0
  645. data/lib/factorial_api/models/procurement_po_template.rb +288 -0
  646. data/lib/factorial_api/models/procurement_po_template_field_definition.rb +590 -0
  647. data/lib/factorial_api/models/procurement_po_template_field_definitions_get200_response.rb +158 -0
  648. data/lib/factorial_api/models/procurement_po_template_version.rb +374 -0
  649. data/lib/factorial_api/models/procurement_po_template_versions_get200_response.rb +158 -0
  650. data/lib/factorial_api/models/procurement_po_templates_get200_response.rb +158 -0
  651. data/lib/factorial_api/models/procurement_purchase_order.rb +498 -0
  652. data/lib/factorial_api/models/procurement_purchase_order_line_items_by_key_inner.rb +224 -0
  653. data/lib/factorial_api/models/procurement_purchase_orders_get200_response.rb +158 -0
  654. data/lib/factorial_api/models/procurement_purchase_orders_id_put_request.rb +425 -0
  655. data/lib/factorial_api/models/procurement_purchase_orders_id_put_request_cost.rb +195 -0
  656. data/lib/factorial_api/models/procurement_purchase_orders_id_put_request_line_items_by_key_inner.rb +203 -0
  657. data/lib/factorial_api/models/procurement_purchase_orders_post_request.rb +352 -0
  658. data/lib/factorial_api/models/procurement_purchase_orders_post_request_header_field_values_inner.rb +176 -0
  659. data/lib/factorial_api/models/procurement_purchase_orders_post_request_line_items_inner.rb +196 -0
  660. data/lib/factorial_api/models/procurement_purchase_request.rb +416 -0
  661. data/lib/factorial_api/models/procurement_purchase_requests_get200_response.rb +158 -0
  662. data/lib/factorial_api/models/procurement_type.rb +328 -0
  663. data/lib/factorial_api/models/procurement_types_get200_response.rb +158 -0
  664. data/lib/factorial_api/models/project_management_budget_strategies_get200_response.rb +158 -0
  665. data/lib/factorial_api/models/project_management_budget_strategies_id_put_request.rb +250 -0
  666. data/lib/factorial_api/models/project_management_budget_strategies_post_request.rb +267 -0
  667. data/lib/factorial_api/models/project_management_budget_strategy.rb +313 -0
  668. data/lib/factorial_api/models/project_management_expense_record.rb +291 -0
  669. data/lib/factorial_api/models/project_management_expense_records_get200_response.rb +158 -0
  670. data/lib/factorial_api/models/project_management_exportable_expense.rb +255 -0
  671. data/lib/factorial_api/models/project_management_exportable_expenses_get200_response.rb +158 -0
  672. data/lib/factorial_api/models/project_management_exportable_project.rb +330 -0
  673. data/lib/factorial_api/models/project_management_flexible_time_record.rb +260 -0
  674. data/lib/factorial_api/models/project_management_flexible_time_record_comment.rb +222 -0
  675. data/lib/factorial_api/models/project_management_imputable_project.rb +312 -0
  676. data/lib/factorial_api/models/project_management_imputable_projects_get200_response.rb +158 -0
  677. data/lib/factorial_api/models/project_management_planned_record.rb +318 -0
  678. data/lib/factorial_api/models/project_management_planned_records_bulk_create_post_request.rb +274 -0
  679. data/lib/factorial_api/models/project_management_planned_records_get200_response.rb +158 -0
  680. data/lib/factorial_api/models/project_management_planned_records_id_put_request.rb +272 -0
  681. data/lib/factorial_api/models/project_management_project.rb +430 -0
  682. data/lib/factorial_api/models/project_management_project_task.rb +259 -0
  683. data/lib/factorial_api/models/project_management_project_tasks_bulk_duplicate_post_request.rb +198 -0
  684. data/lib/factorial_api/models/project_management_project_tasks_get200_response.rb +158 -0
  685. data/lib/factorial_api/models/project_management_project_worker.rb +290 -0
  686. data/lib/factorial_api/models/project_management_project_workers_bulk_assign_post_request.rb +190 -0
  687. data/lib/factorial_api/models/project_management_project_workers_bulk_create_post_request.rb +196 -0
  688. data/lib/factorial_api/models/project_management_project_workers_get200_response.rb +158 -0
  689. data/lib/factorial_api/models/project_management_project_workers_post_request.rb +194 -0
  690. data/lib/factorial_api/models/project_management_projects_change_assignment_post_request.rb +192 -0
  691. data/lib/factorial_api/models/project_management_projects_change_status_post_request.rb +217 -0
  692. data/lib/factorial_api/models/project_management_projects_get200_response.rb +158 -0
  693. data/lib/factorial_api/models/project_management_projects_id_put_request.rb +254 -0
  694. data/lib/factorial_api/models/project_management_projects_post_request.rb +332 -0
  695. data/lib/factorial_api/models/project_management_rate.rb +506 -0
  696. data/lib/factorial_api/models/project_management_rates_get200_response.rb +158 -0
  697. data/lib/factorial_api/models/project_management_subproject.rb +325 -0
  698. data/lib/factorial_api/models/project_management_subprojects_get200_response.rb +158 -0
  699. data/lib/factorial_api/models/project_management_subprojects_id_put_request.rb +285 -0
  700. data/lib/factorial_api/models/project_management_subprojects_post_request.rb +192 -0
  701. data/lib/factorial_api/models/project_management_time_record.rb +330 -0
  702. data/lib/factorial_api/models/project_management_time_records_bulk_delete_post_request.rb +201 -0
  703. data/lib/factorial_api/models/project_management_time_records_bulk_process_post_request.rb +167 -0
  704. data/lib/factorial_api/models/project_management_time_records_bulk_process_post_request_items_inner.rb +203 -0
  705. data/lib/factorial_api/models/project_management_time_records_get200_response.rb +158 -0
  706. data/lib/factorial_api/models/project_management_time_records_post_request.rb +216 -0
  707. data/lib/factorial_api/models/project_management_time_records_update_observations_post_request.rb +176 -0
  708. data/lib/factorial_api/models/project_management_time_records_update_project_worker_post_request.rb +214 -0
  709. data/lib/factorial_api/models/shift_management_shift.rb +491 -0
  710. data/lib/factorial_api/models/shift_management_shifts_bulk_create_post_request.rb +180 -0
  711. data/lib/factorial_api/models/shift_management_shifts_bulk_create_post_request_planned_breaks_inner.rb +246 -0
  712. data/lib/factorial_api/models/shift_management_shifts_bulk_create_post_request_shifts_inner.rb +430 -0
  713. data/lib/factorial_api/models/shift_management_shifts_bulk_delete_post_request.rb +220 -0
  714. data/lib/factorial_api/models/shift_management_shifts_get200_response.rb +158 -0
  715. data/lib/factorial_api/models/shift_management_shifts_post_request.rb +290 -0
  716. data/lib/factorial_api/models/tasks_task.rb +401 -0
  717. data/lib/factorial_api/models/tasks_task_file.rb +288 -0
  718. data/lib/factorial_api/models/tasks_task_files_get200_response.rb +158 -0
  719. data/lib/factorial_api/models/tasks_tasks_bulk_update_post_request.rb +168 -0
  720. data/lib/factorial_api/models/tasks_tasks_bulk_update_post_request_tasks_inner.rb +276 -0
  721. data/lib/factorial_api/models/tasks_tasks_copy_post_request.rb +176 -0
  722. data/lib/factorial_api/models/tasks_tasks_create_comment_post_request.rb +257 -0
  723. data/lib/factorial_api/models/tasks_tasks_get200_response.rb +158 -0
  724. data/lib/factorial_api/models/tasks_tasks_id_put_request.rb +252 -0
  725. data/lib/factorial_api/models/tasks_tasks_post_request.rb +259 -0
  726. data/lib/factorial_api/models/teams_membership.rb +330 -0
  727. data/lib/factorial_api/models/teams_memberships_get200_response.rb +158 -0
  728. data/lib/factorial_api/models/teams_memberships_id_put_request.rb +176 -0
  729. data/lib/factorial_api/models/teams_memberships_move_post_request.rb +204 -0
  730. data/lib/factorial_api/models/teams_memberships_post_request.rb +204 -0
  731. data/lib/factorial_api/models/teams_team.rb +286 -0
  732. data/lib/factorial_api/models/teams_teams_get200_response.rb +158 -0
  733. data/lib/factorial_api/models/teams_teams_id_put_request.rb +196 -0
  734. data/lib/factorial_api/models/teams_teams_move_post_request.rb +176 -0
  735. data/lib/factorial_api/models/teams_teams_post_request.rb +186 -0
  736. data/lib/factorial_api/models/time_planning_planned_break.rb +371 -0
  737. data/lib/factorial_api/models/time_planning_planned_breaks_bulk_create_post_request.rb +168 -0
  738. data/lib/factorial_api/models/time_planning_planned_breaks_get200_response.rb +158 -0
  739. data/lib/factorial_api/models/time_planning_planning_version.rb +252 -0
  740. data/lib/factorial_api/models/time_planning_planning_versions_bulk_create_post_request.rb +244 -0
  741. data/lib/factorial_api/models/time_planning_planning_versions_get200_response.rb +158 -0
  742. data/lib/factorial_api/models/time_planning_planning_versions_id_put_request.rb +242 -0
  743. data/lib/factorial_api/models/time_planning_planning_versions_post_request.rb +242 -0
  744. data/lib/factorial_api/models/time_settings_break_configuration.rb +246 -0
  745. data/lib/factorial_api/models/time_settings_break_configurations_get200_response.rb +158 -0
  746. data/lib/factorial_api/models/time_settings_break_configurations_id_put_request.rb +192 -0
  747. data/lib/factorial_api/models/time_settings_break_configurations_post_request.rb +192 -0
  748. data/lib/factorial_api/models/time_settings_split_custom_time_range_categories_get200_response.rb +158 -0
  749. data/lib/factorial_api/models/time_settings_split_custom_time_range_category.rb +329 -0
  750. data/lib/factorial_api/models/timeoff_allowance.rb +810 -0
  751. data/lib/factorial_api/models/timeoff_allowance_incidence.rb +354 -0
  752. data/lib/factorial_api/models/timeoff_allowance_incidences_get200_response.rb +158 -0
  753. data/lib/factorial_api/models/timeoff_allowance_incidences_id_put_request.rb +249 -0
  754. data/lib/factorial_api/models/timeoff_allowance_incidences_post_request.rb +321 -0
  755. data/lib/factorial_api/models/timeoff_allowance_stats_get200_response.rb +158 -0
  756. data/lib/factorial_api/models/timeoff_allowance_stats_new.rb +694 -0
  757. data/lib/factorial_api/models/timeoff_allowance_stats_new_cycle_carry_overs_inner.rb +346 -0
  758. data/lib/factorial_api/models/timeoff_allowance_stats_new_cycle_carry_overs_inner_used_inner.rb +194 -0
  759. data/lib/factorial_api/models/timeoff_allowance_stats_new_cycles_inner.rb +300 -0
  760. data/lib/factorial_api/models/timeoff_allowance_tenure_periods_inner.rb +288 -0
  761. data/lib/factorial_api/models/timeoff_allowances_delete_with_alt_allowance_post_request.rb +193 -0
  762. data/lib/factorial_api/models/timeoff_allowances_get200_response.rb +158 -0
  763. data/lib/factorial_api/models/timeoff_allowances_id_put_request.rb +538 -0
  764. data/lib/factorial_api/models/timeoff_allowances_id_put_request_tenure_periods_inner.rb +274 -0
  765. data/lib/factorial_api/models/timeoff_allowances_post_request.rb +879 -0
  766. data/lib/factorial_api/models/timeoff_allowances_post_request_tenure_periods_inner.rb +288 -0
  767. data/lib/factorial_api/models/timeoff_blocked_periods_get200_response.rb +158 -0
  768. data/lib/factorial_api/models/timeoff_blocked_periods_id_put_request.rb +338 -0
  769. data/lib/factorial_api/models/timeoff_blocked_periods_id_put_request_time_periods_attributes_inner.rb +210 -0
  770. data/lib/factorial_api/models/timeoff_blocked_periods_policy.rb +376 -0
  771. data/lib/factorial_api/models/timeoff_blocked_periods_policy_time_periods_inner.rb +282 -0
  772. data/lib/factorial_api/models/timeoff_blocked_periods_post_request.rb +224 -0
  773. data/lib/factorial_api/models/timeoff_french_leave_day_count.rb +245 -0
  774. data/lib/factorial_api/models/timeoff_french_leave_day_counts_get200_response.rb +158 -0
  775. data/lib/factorial_api/models/timeoff_leave.rb +445 -0
  776. data/lib/factorial_api/models/timeoff_leave_duration_by_day_attributes.rb +193 -0
  777. data/lib/factorial_api/models/timeoff_leave_duration_by_day_attributes_workable_units_by_day.rb +162 -0
  778. data/lib/factorial_api/models/timeoff_leave_type.rb +550 -0
  779. data/lib/factorial_api/models/timeoff_leave_types_get200_response.rb +158 -0
  780. data/lib/factorial_api/models/timeoff_leave_types_id_put_request.rb +328 -0
  781. data/lib/factorial_api/models/timeoff_leave_types_post_request.rb +472 -0
  782. data/lib/factorial_api/models/timeoff_leaves_get200_response.rb +158 -0
  783. data/lib/factorial_api/models/timeoff_leaves_id_put_request.rb +286 -0
  784. data/lib/factorial_api/models/timeoff_leaves_post_request.rb +344 -0
  785. data/lib/factorial_api/models/timeoff_leaves_reject_post_request.rb +176 -0
  786. data/lib/factorial_api/models/timeoff_policies_get200_response.rb +158 -0
  787. data/lib/factorial_api/models/timeoff_policies_id_put_request.rb +196 -0
  788. data/lib/factorial_api/models/timeoff_policies_post_request.rb +206 -0
  789. data/lib/factorial_api/models/timeoff_policy.rb +242 -0
  790. data/lib/factorial_api/models/timeoff_policy_assignment.rb +232 -0
  791. data/lib/factorial_api/models/timeoff_policy_assignments_get200_response.rb +158 -0
  792. data/lib/factorial_api/models/timeoff_policy_assignments_id_put_request.rb +222 -0
  793. data/lib/factorial_api/models/timeoff_policy_assignments_post_request.rb +222 -0
  794. data/lib/factorial_api/models/timeoff_policy_timeline.rb +276 -0
  795. data/lib/factorial_api/models/timeoff_policy_timeline_items_inner.rb +273 -0
  796. data/lib/factorial_api/models/timeoff_policy_timeline_items_inner_policy_assignment.rb +255 -0
  797. data/lib/factorial_api/models/timeoff_policy_timelines_get200_response.rb +158 -0
  798. data/lib/factorial_api/models/trainings_categories_get200_response.rb +158 -0
  799. data/lib/factorial_api/models/trainings_categories_post_request.rb +192 -0
  800. data/lib/factorial_api/models/trainings_category.rb +237 -0
  801. data/lib/factorial_api/models/trainings_session.rb +435 -0
  802. data/lib/factorial_api/models/trainings_session_access_membership.rb +262 -0
  803. data/lib/factorial_api/models/trainings_session_access_memberships_bulk_create_post_request.rb +214 -0
  804. data/lib/factorial_api/models/trainings_session_access_memberships_bulk_destroy_post_request.rb +194 -0
  805. data/lib/factorial_api/models/trainings_session_access_memberships_get200_response.rb +158 -0
  806. data/lib/factorial_api/models/trainings_session_attendance.rb +293 -0
  807. data/lib/factorial_api/models/trainings_session_attendances_bulk_update_post_request.rb +188 -0
  808. data/lib/factorial_api/models/trainings_session_attendances_get200_response.rb +158 -0
  809. data/lib/factorial_api/models/trainings_sessions_get200_response.rb +158 -0
  810. data/lib/factorial_api/models/trainings_sessions_id_put_request.rb +338 -0
  811. data/lib/factorial_api/models/trainings_sessions_post_request.rb +382 -0
  812. data/lib/factorial_api/models/trainings_sessions_post_request_reminders_inner.rb +235 -0
  813. data/lib/factorial_api/models/trainings_training.rb +934 -0
  814. data/lib/factorial_api/models/trainings_training_class.rb +576 -0
  815. data/lib/factorial_api/models/trainings_training_classes_get200_response.rb +158 -0
  816. data/lib/factorial_api/models/trainings_training_classes_id_put_request.rb +369 -0
  817. data/lib/factorial_api/models/trainings_training_classes_post_request.rb +461 -0
  818. data/lib/factorial_api/models/trainings_training_membership.rb +321 -0
  819. data/lib/factorial_api/models/trainings_training_memberships_bulk_create_post_request.rb +178 -0
  820. data/lib/factorial_api/models/trainings_training_memberships_bulk_destroy_post_request.rb +188 -0
  821. data/lib/factorial_api/models/trainings_training_memberships_get200_response.rb +158 -0
  822. data/lib/factorial_api/models/trainings_training_memberships_id_put_request.rb +176 -0
  823. data/lib/factorial_api/models/trainings_trainings_bulk_update_catalog_post_request.rb +194 -0
  824. data/lib/factorial_api/models/trainings_trainings_get200_response.rb +158 -0
  825. data/lib/factorial_api/models/trainings_trainings_id_put_request.rb +358 -0
  826. data/lib/factorial_api/models/trainings_trainings_post_request.rb +430 -0
  827. data/lib/factorial_api/models/trainings_trainings_post_request_attachments_inner.rb +228 -0
  828. data/lib/factorial_api/models/trainings_trainings_update_status_post_request.rb +219 -0
  829. data/lib/factorial_api/models/work_schedule_day_configuration.rb +255 -0
  830. data/lib/factorial_api/models/work_schedule_day_configurations_bulk_cud_post_request.rb +194 -0
  831. data/lib/factorial_api/models/work_schedule_day_configurations_bulk_cud_post_request_day_configurations_inner.rb +210 -0
  832. data/lib/factorial_api/models/work_schedule_day_configurations_get200_response.rb +158 -0
  833. data/lib/factorial_api/models/work_schedule_overlap_period.rb +362 -0
  834. data/lib/factorial_api/models/work_schedule_overlap_periods_get200_response.rb +158 -0
  835. data/lib/factorial_api/models/work_schedule_overlap_periods_id_put_request.rb +175 -0
  836. data/lib/factorial_api/models/work_schedule_overlap_periods_id_put_request_update_params.rb +175 -0
  837. data/lib/factorial_api/models/work_schedule_overlap_periods_post_request.rb +175 -0
  838. data/lib/factorial_api/models/work_schedule_overlap_periods_post_request_create_params.rb +301 -0
  839. data/lib/factorial_api/models/work_schedule_schedule.rb +348 -0
  840. data/lib/factorial_api/models/work_schedule_schedule_periods_inner.rb +408 -0
  841. data/lib/factorial_api/models/work_schedule_schedules_get200_response.rb +158 -0
  842. data/lib/factorial_api/models/work_schedule_schedules_id_put_request.rb +176 -0
  843. data/lib/factorial_api/models/work_schedule_schedules_post_request.rb +194 -0
  844. data/lib/factorial_api/oauth.rb +289 -0
  845. data/lib/factorial_api/pagination.rb +62 -0
  846. data/lib/factorial_api/sdk.rb +7485 -0
  847. data/lib/factorial_api/token.rb +104 -0
  848. data/lib/factorial_api/version.rb +15 -0
  849. data/lib/factorial_api/webhooks.rb +1276 -0
  850. data/lib/factorial_api.rb +878 -0
  851. metadata +955 -0
@@ -0,0 +1,176 @@
1
+ =begin
2
+ #Factorial API
3
+
4
+ #No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5
+
6
+ The version of the OpenAPI document: 2026-10-01
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module F::Api
17
+ class WorkScheduleSchedulesIdPutRequest < ApiModelBase
18
+ # The new name for the schedule
19
+ attr_accessor :name
20
+
21
+ # Identifier of the schedule to update
22
+ attr_accessor :id
23
+
24
+ # Attribute mapping from ruby-style variable name to JSON key.
25
+ def self.attribute_map
26
+ {
27
+ :'name' => :'name',
28
+ :'id' => :'id'
29
+ }
30
+ end
31
+
32
+ # Returns attribute mapping this model knows about
33
+ def self.acceptable_attribute_map
34
+ attribute_map
35
+ end
36
+
37
+ # Returns all the JSON keys this model knows about
38
+ def self.acceptable_attributes
39
+ acceptable_attribute_map.values
40
+ end
41
+
42
+ # Attribute type mapping.
43
+ def self.openapi_types
44
+ {
45
+ :'name' => :'String',
46
+ :'id' => :'String'
47
+ }
48
+ end
49
+
50
+ # List of attributes with nullable: true
51
+ def self.openapi_nullable
52
+ Set.new([
53
+ ])
54
+ end
55
+
56
+ # Initializes the object
57
+ # @param [Hash] attributes Model attributes in the form of hash
58
+ def initialize(attributes = {})
59
+ if (!attributes.is_a?(Hash))
60
+ fail ArgumentError, "The input argument (attributes) must be a hash in `F::Api::WorkScheduleSchedulesIdPutRequest` initialize method"
61
+ end
62
+
63
+ # check to see if the attribute exists and convert string to symbol for hash key
64
+ acceptable_attribute_map = self.class.acceptable_attribute_map
65
+ attributes = attributes.each_with_object({}) { |(k, v), h|
66
+ if (!acceptable_attribute_map.key?(k.to_sym))
67
+ fail ArgumentError, "`#{k}` is not a valid attribute in `F::Api::WorkScheduleSchedulesIdPutRequest`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
68
+ end
69
+ h[k.to_sym] = v
70
+ }
71
+
72
+ if attributes.key?(:'name')
73
+ self.name = attributes[:'name']
74
+ end
75
+
76
+ if attributes.key?(:'id')
77
+ self.id = attributes[:'id']
78
+ else
79
+ self.id = nil
80
+ end
81
+ end
82
+
83
+ # Show invalid properties with the reasons. Usually used together with valid?
84
+ # @return Array for valid properties with the reasons
85
+ def list_invalid_properties
86
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
87
+ invalid_properties = Array.new
88
+ if @id.nil?
89
+ invalid_properties.push('invalid value for "id", id cannot be nil.')
90
+ end
91
+
92
+ invalid_properties
93
+ end
94
+
95
+ # Check to see if the all the properties in the model are valid
96
+ # @return true if the model is valid
97
+ def valid?
98
+ warn '[DEPRECATED] the `valid?` method is obsolete'
99
+ return false if @id.nil?
100
+ true
101
+ end
102
+
103
+ # Custom attribute writer method with validation
104
+ # @param [Object] id Value to be assigned
105
+ def id=(id)
106
+ if id.nil?
107
+ @id = nil
108
+ return
109
+ end
110
+
111
+ @id = id
112
+ end
113
+
114
+ # Checks equality by comparing each attribute.
115
+ # @param [Object] Object to be compared
116
+ def ==(o)
117
+ return true if self.equal?(o)
118
+ self.class == o.class &&
119
+ name == o.name &&
120
+ id == o.id
121
+ end
122
+
123
+ # @see the `==` method
124
+ # @param [Object] Object to be compared
125
+ def eql?(o)
126
+ self == o
127
+ end
128
+
129
+ # Calculates hash code according to all attributes.
130
+ # @return [Integer] Hash code
131
+ def hash
132
+ [name, id].hash
133
+ end
134
+
135
+ # Builds the object from hash
136
+ # @param [Hash] attributes Model attributes in the form of hash
137
+ # @return [Object] Returns the model itself
138
+ def self.build_from_hash(attributes)
139
+ return nil unless attributes.is_a?(Hash)
140
+ attributes = attributes.transform_keys(&:to_sym)
141
+ transformed_hash = {}
142
+ openapi_types.each_pair do |key, type|
143
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
144
+ transformed_hash["#{key}"] = nil
145
+ elsif type =~ /\AArray<(.*)>/i
146
+ # check to ensure the input is an array given that the attribute
147
+ # is documented as an array but the input is not
148
+ if attributes[attribute_map[key]].is_a?(Array)
149
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
150
+ end
151
+ elsif !attributes[attribute_map[key]].nil?
152
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
153
+ end
154
+ end
155
+ new(transformed_hash)
156
+ end
157
+
158
+ # Returns the object in the form of hash
159
+ # @return [Hash] Returns the object in the form of hash
160
+ def to_hash
161
+ hash = {}
162
+ self.class.attribute_map.each_pair do |attr, param|
163
+ value = self.send(attr)
164
+ if value.nil?
165
+ is_nullable = self.class.openapi_nullable.include?(attr)
166
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
167
+ end
168
+
169
+ hash[param] = _to_hash(value)
170
+ end
171
+ hash
172
+ end
173
+
174
+ end
175
+
176
+ end
@@ -0,0 +1,194 @@
1
+ =begin
2
+ #Factorial API
3
+
4
+ #No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5
+
6
+ The version of the OpenAPI document: 2026-10-01
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.23.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module F::Api
17
+ class WorkScheduleSchedulesPostRequest < ApiModelBase
18
+ # Name of the new schedule
19
+ attr_accessor :name
20
+
21
+ # Whether the schedule is flexible or fixed
22
+ attr_accessor :schedule_type
23
+
24
+ # Attribute mapping from ruby-style variable name to JSON key.
25
+ def self.attribute_map
26
+ {
27
+ :'name' => :'name',
28
+ :'schedule_type' => :'schedule_type'
29
+ }
30
+ end
31
+
32
+ # Returns attribute mapping this model knows about
33
+ def self.acceptable_attribute_map
34
+ attribute_map
35
+ end
36
+
37
+ # Returns all the JSON keys this model knows about
38
+ def self.acceptable_attributes
39
+ acceptable_attribute_map.values
40
+ end
41
+
42
+ # Attribute type mapping.
43
+ def self.openapi_types
44
+ {
45
+ :'name' => :'String',
46
+ :'schedule_type' => :'String'
47
+ }
48
+ end
49
+
50
+ # List of attributes with nullable: true
51
+ def self.openapi_nullable
52
+ Set.new([
53
+ ])
54
+ end
55
+
56
+ # Initializes the object
57
+ # @param [Hash] attributes Model attributes in the form of hash
58
+ def initialize(attributes = {})
59
+ if (!attributes.is_a?(Hash))
60
+ fail ArgumentError, "The input argument (attributes) must be a hash in `F::Api::WorkScheduleSchedulesPostRequest` initialize method"
61
+ end
62
+
63
+ # check to see if the attribute exists and convert string to symbol for hash key
64
+ acceptable_attribute_map = self.class.acceptable_attribute_map
65
+ attributes = attributes.each_with_object({}) { |(k, v), h|
66
+ if (!acceptable_attribute_map.key?(k.to_sym))
67
+ fail ArgumentError, "`#{k}` is not a valid attribute in `F::Api::WorkScheduleSchedulesPostRequest`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
68
+ end
69
+ h[k.to_sym] = v
70
+ }
71
+
72
+ if attributes.key?(:'name')
73
+ self.name = attributes[:'name']
74
+ else
75
+ self.name = nil
76
+ end
77
+
78
+ if attributes.key?(:'schedule_type')
79
+ self.schedule_type = attributes[:'schedule_type']
80
+ else
81
+ self.schedule_type = nil
82
+ end
83
+ end
84
+
85
+ # Show invalid properties with the reasons. Usually used together with valid?
86
+ # @return Array for valid properties with the reasons
87
+ def list_invalid_properties
88
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
89
+ invalid_properties = Array.new
90
+ if @name.nil?
91
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
92
+ end
93
+
94
+ if @schedule_type.nil?
95
+ invalid_properties.push('invalid value for "schedule_type", schedule_type cannot be nil.')
96
+ end
97
+
98
+ invalid_properties
99
+ end
100
+
101
+ # Check to see if the all the properties in the model are valid
102
+ # @return true if the model is valid
103
+ def valid?
104
+ warn '[DEPRECATED] the `valid?` method is obsolete'
105
+ return false if @name.nil?
106
+ return false if @schedule_type.nil?
107
+ true
108
+ end
109
+
110
+ # Custom attribute writer method with validation
111
+ # @param [Object] name Value to be assigned
112
+ def name=(name)
113
+ if name.nil?
114
+ @name = nil
115
+ return
116
+ end
117
+
118
+ @name = name
119
+ end
120
+
121
+ # Custom attribute writer method with validation
122
+ # @param [Object] schedule_type Value to be assigned
123
+ def schedule_type=(schedule_type)
124
+ if schedule_type.nil?
125
+ @schedule_type = nil
126
+ return
127
+ end
128
+
129
+ @schedule_type = schedule_type
130
+ end
131
+
132
+ # Checks equality by comparing each attribute.
133
+ # @param [Object] Object to be compared
134
+ def ==(o)
135
+ return true if self.equal?(o)
136
+ self.class == o.class &&
137
+ name == o.name &&
138
+ schedule_type == o.schedule_type
139
+ end
140
+
141
+ # @see the `==` method
142
+ # @param [Object] Object to be compared
143
+ def eql?(o)
144
+ self == o
145
+ end
146
+
147
+ # Calculates hash code according to all attributes.
148
+ # @return [Integer] Hash code
149
+ def hash
150
+ [name, schedule_type].hash
151
+ end
152
+
153
+ # Builds the object from hash
154
+ # @param [Hash] attributes Model attributes in the form of hash
155
+ # @return [Object] Returns the model itself
156
+ def self.build_from_hash(attributes)
157
+ return nil unless attributes.is_a?(Hash)
158
+ attributes = attributes.transform_keys(&:to_sym)
159
+ transformed_hash = {}
160
+ openapi_types.each_pair do |key, type|
161
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
162
+ transformed_hash["#{key}"] = nil
163
+ elsif type =~ /\AArray<(.*)>/i
164
+ # check to ensure the input is an array given that the attribute
165
+ # is documented as an array but the input is not
166
+ if attributes[attribute_map[key]].is_a?(Array)
167
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
168
+ end
169
+ elsif !attributes[attribute_map[key]].nil?
170
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
171
+ end
172
+ end
173
+ new(transformed_hash)
174
+ end
175
+
176
+ # Returns the object in the form of hash
177
+ # @return [Hash] Returns the object in the form of hash
178
+ def to_hash
179
+ hash = {}
180
+ self.class.attribute_map.each_pair do |attr, param|
181
+ value = self.send(attr)
182
+ if value.nil?
183
+ is_nullable = self.class.openapi_nullable.include?(attr)
184
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
185
+ end
186
+
187
+ hash[param] = _to_hash(value)
188
+ end
189
+ hash
190
+ end
191
+
192
+ end
193
+
194
+ end
@@ -0,0 +1,289 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'monitor'
4
+ require 'oauth2'
5
+ require_relative 'token'
6
+
7
+ module F
8
+ module Api
9
+ # Raised when the OAuth token endpoint answers with a non-2xx status, a
10
+ # malformed body, or a body without a token. Carries the HTTP `code` and
11
+ # the parsed response `body`, mirroring how F::Api::ApiError exposes API
12
+ # call failures.
13
+ class OAuthError < StandardError
14
+ # @return [Integer, nil] HTTP status returned by the token endpoint;
15
+ # nil when the response was unparseable before a status was known
16
+ attr_reader :code
17
+
18
+ # @return [Hash, String, nil] parsed JSON body, or the raw body when it
19
+ # wasn't JSON
20
+ attr_reader :body
21
+
22
+ def initialize(code:, body:)
23
+ @code = code
24
+ @body = body
25
+ super("OAuth token endpoint returned #{code ? "HTTP #{code}" : 'an unparseable response'}#{detail}")
26
+ end
27
+
28
+ # @return [String, nil] the OAuth error identifier ("invalid_grant", ...)
29
+ def error
30
+ body['error'] if body.is_a?(Hash)
31
+ end
32
+
33
+ private
34
+
35
+ def detail
36
+ return '' unless error
37
+
38
+ description = body['error_description']
39
+ description ? " (#{error}): #{description}" : " (#{error})"
40
+ end
41
+ end
42
+
43
+ # OAuth2 authorization_code lifecycle against a Factorial instance:
44
+ # building the authorize URL, exchanging the code, refreshing, and — via
45
+ # #session — keeping an F::Api credential fresh automatically.
46
+ #
47
+ # oauth = F::Api::OAuth.new(client_id: "...", client_secret: "...")
48
+ # oauth.authorize_url(redirect_uri: "https://myapp.com/cb") # browser step
49
+ # tokens = oauth.exchange_code(code, redirect_uri: "https://myapp.com/cb")
50
+ # session = oauth.session(tokens) { |t| save(t.refresh_token) }
51
+ # api = F::Api.new(oauth: session)
52
+ #
53
+ # Credentials fall back to the FACTORIAL_OAUTH_CLIENT_ID /
54
+ # FACTORIAL_OAUTH_CLIENT_SECRET environment variables, and the base URL
55
+ # to FACTORIAL_BASE_URL (then production), matching F::Api's conventions.
56
+ class OAuth
57
+ DEFAULT_BASE_URL = 'https://api.factorialhr.com'
58
+
59
+ attr_reader :client_id, :base_url
60
+
61
+ def initialize(client_id: ENV.fetch('FACTORIAL_OAUTH_CLIENT_ID', nil),
62
+ client_secret: ENV.fetch('FACTORIAL_OAUTH_CLIENT_SECRET', nil),
63
+ base_url: ENV.fetch('FACTORIAL_BASE_URL', nil))
64
+ @client_id = presence(client_id)
65
+ @client_secret = presence(client_secret)
66
+ @base_url = (presence(base_url) || DEFAULT_BASE_URL).chomp('/')
67
+
68
+ unless @client_id && @client_secret
69
+ raise ArgumentError,
70
+ 'provide client_id and client_secret (or set FACTORIAL_OAUTH_CLIENT_ID / ' \
71
+ 'FACTORIAL_OAUTH_CLIENT_SECRET)'
72
+ end
73
+
74
+ @oauth2_client = build_oauth2_client
75
+ end
76
+
77
+ # URL where the user grants access in the browser (by design, this step
78
+ # cannot be automated). The redirect back carries the single-use
79
+ # authorization code (?code=...), valid for ~10 minutes.
80
+ def authorize_url(redirect_uri:)
81
+ oauth2_client.auth_code.authorize_url(redirect_uri: redirect_uri)
82
+ end
83
+
84
+ # Exchanges an authorization code for tokens. The redirect_uri must be
85
+ # the same one used in the authorize step.
86
+ def exchange_code(code, redirect_uri:)
87
+ request_tokens { oauth2_client.auth_code.get_token(code, redirect_uri: redirect_uri) }
88
+ end
89
+
90
+ # Trades a refresh token for a fresh token set. Refresh tokens are
91
+ # usually single-use: the returned set normally carries a replacement —
92
+ # persist it or the chain breaks.
93
+ def refresh(refresh_token)
94
+ request_tokens { oauth2_client.get_token(grant_type: 'refresh_token', refresh_token: refresh_token) }
95
+ end
96
+
97
+ # Wraps a token set in a self-refreshing Session for F::Api's `oauth:`.
98
+ # The block is REQUIRED and receives the current Tokens after every
99
+ # refresh.
100
+ def session(tokens, margin: Token::DEFAULT_MARGIN, &)
101
+ Session.new(self, tokens, margin: margin, &)
102
+ end
103
+
104
+ private
105
+
106
+ attr_reader :oauth2_client
107
+
108
+ def presence(value)
109
+ value unless value.nil? || value.to_s.strip.empty?
110
+ end
111
+
112
+ # Protocol mechanics live in the oauth2 gem; this wrapper only maps its
113
+ # results back into the SDK's value objects and error type.
114
+ def request_tokens
115
+ Tokens.new(yield.response.parsed)
116
+ rescue OAuth2::Error => e
117
+ raise OAuthError.new(**error_details(e))
118
+ rescue JSON::ParserError => e
119
+ # Raised mid-parse when a body claims to be JSON but isn't — before
120
+ # the gem has built an error object that would carry the status.
121
+ raise OAuthError.new(code: nil, body: e.message)
122
+ end
123
+
124
+ # The gem attaches a Response to protocol failures, but raises with
125
+ # only the parsed Hash when a 2xx body lacks the access_token key.
126
+ def error_details(error)
127
+ response = error.response
128
+ if response.respond_to?(:status)
129
+ { code: response.status, body: parsed_body(response) }
130
+ else
131
+ { code: 200, body: response }
132
+ end
133
+ end
134
+
135
+ def build_oauth2_client
136
+ # Absolute authorize/token URLs: leading-slash paths would drop any
137
+ # path prefix present in base_url.
138
+ OAuth2::Client.new(
139
+ @client_id, @client_secret,
140
+ site: base_url,
141
+ authorize_url: "#{base_url}/oauth/authorize",
142
+ token_url: "#{base_url}/oauth/token",
143
+ # Doorkeeper expects the client credentials in the form body (the
144
+ # gem's default is HTTP Basic auth).
145
+ auth_scheme: :request_body
146
+ )
147
+ end
148
+
149
+ def parsed_body(response)
150
+ response.parsed || response.body
151
+ rescue StandardError
152
+ response.body
153
+ end
154
+
155
+ # One response from the token endpoint, as an immutable value. The
156
+ # access token comes pre-wrapped in F::Api::Token, so expiry and claims
157
+ # are a method call away.
158
+ class Tokens
159
+ # @return [F::Api::Token] the access token (decoded, not verified)
160
+ attr_reader :access_token
161
+
162
+ # @return [Hash] the raw token endpoint response, frozen
163
+ attr_reader :raw
164
+
165
+ # @return [Time, nil] when this set expires — the moment it was
166
+ # received plus the endpoint's `expires_in`; nil when the endpoint
167
+ # sent none
168
+ attr_reader :expires_at
169
+
170
+ def initialize(payload)
171
+ @raw = payload.dup.freeze
172
+ @access_token = Token.new(raw['access_token'])
173
+ @expires_at = (Time.now + raw['expires_in'] if raw['expires_in'].is_a?(Numeric))
174
+ freeze
175
+ end
176
+
177
+ # Whether the set is within `margin` seconds of the earliest KNOWN
178
+ # expiry. Two clocks can speak: the endpoint's `expires_in` (anchored
179
+ # to the local clock at receipt — immune to server clock skew and to
180
+ # non-JWT tokens) and the JWT `exp` claim. Whichever says "sooner"
181
+ # wins: refreshing early is harmless, serving a dead token is not.
182
+ # A set with neither never reports true — the API stays the
183
+ # authority.
184
+ #
185
+ # The expires_in anchor is set at construction: a Tokens rebuilt
186
+ # later from a persisted #to_h restarts it. Persist the
187
+ # refresh_token, not the whole set.
188
+ def expiring_soon?(margin: Token::DEFAULT_MARGIN, now: Time.now)
189
+ earliest = [expires_at, access_token.expires_at].compact.min
190
+ !earliest.nil? && (now + margin) >= earliest
191
+ end
192
+
193
+ # Same set carrying a different refresh token; used when a refresh
194
+ # response omits the field (RFC 6749 allows it) and the previous one
195
+ # must carry over.
196
+ def with_refresh_token(refresh_token)
197
+ Tokens.new(raw.merge('refresh_token' => refresh_token))
198
+ end
199
+
200
+ # @return [String, nil] the refresh token to persist
201
+ def refresh_token = raw['refresh_token']
202
+ def expires_in = raw['expires_in']
203
+ def scope = raw['scope']
204
+ def token_type = raw['token_type']
205
+ def to_h = raw
206
+ end
207
+
208
+ # The one stateful piece: holds the current Tokens and hands out an
209
+ # access token that is refreshed proactively when the set is within
210
+ # `margin` seconds of expiry (see Tokens#expiring_soon?). Thread-safe:
211
+ # a reentrant Monitor guards the swap, and a refresh holds it for the
212
+ # whole token-endpoint round trip — deliberate: it happens once per
213
+ # expiry, and letting a second thread refresh concurrently would burn
214
+ # the (usually single-use) refresh token.
215
+ #
216
+ # Built through F::Api::OAuth#session; F::Api's `oauth:` calls
217
+ # #access_token before every request, so refreshes happen mid-flight,
218
+ # invisibly. Expiry is an upper bound, not a guarantee — a token may be
219
+ # revoked at any time — so when the API rejects one with 401 the client
220
+ # refreshes reactively too (#refresh_after_reject!) and retries once.
221
+ # A failed refresh raises F::Api::OAuthError from that request's call
222
+ # site.
223
+ class Session
224
+ ROTATION_BLOCK_ERROR = 'F::Api::OAuth session requires a rotation block: each refresh ' \
225
+ 'normally invalidates the previous refresh token, so persist ' \
226
+ 'the new one — oauth.session(tokens) { |t| save(t.refresh_token) }'
227
+
228
+ # @return [Integer] seconds before expiry at which refresh kicks in
229
+ attr_reader :margin
230
+
231
+ def initialize(oauth, tokens, margin: Token::DEFAULT_MARGIN, &on_rotation)
232
+ raise ArgumentError, ROTATION_BLOCK_ERROR unless on_rotation
233
+
234
+ @oauth = oauth
235
+ @tokens = tokens
236
+ @margin = margin
237
+ @on_rotation = on_rotation
238
+ @lock = Monitor.new
239
+ end
240
+
241
+ # @return [Tokens] the current token set
242
+ def tokens
243
+ @lock.synchronize { @tokens }
244
+ end
245
+
246
+ # The bearer token to put on the wire, refreshed first when needed.
247
+ # Sets without a readable expiry and sets without a refresh token are
248
+ # returned as-is: the API stays the authority on rejection.
249
+ def access_token
250
+ @lock.synchronize do
251
+ refresh! if refreshable? && @tokens.expiring_soon?(margin: margin)
252
+ @tokens.access_token.raw
253
+ end
254
+ end
255
+
256
+ # Reactive counterpart to #access_token, called by the transport after
257
+ # the API rejected `rejected` with 401 — expiry is only an upper
258
+ # bound, and revocation is visible to the API alone. Returns whether a
259
+ # retry is worth it: whether the session now holds a different bearer.
260
+ # Single-flight under rotation: when concurrent requests fail on the
261
+ # same token, only the first one refreshes — the rest find the token
262
+ # already swapped and skip the endpoint, where a second refresh would
263
+ # burn the freshly rotated (single-use) refresh token.
264
+ def refresh_after_reject!(rejected)
265
+ @lock.synchronize do
266
+ refresh! if refreshable? && @tokens.access_token.raw == rejected
267
+ @tokens.access_token.raw != rejected
268
+ end
269
+ end
270
+
271
+ private
272
+
273
+ def refreshable?
274
+ !@tokens.refresh_token.nil?
275
+ end
276
+
277
+ def refresh!
278
+ replacement = @oauth.refresh(@tokens.refresh_token)
279
+ # RFC 6749 §6: a refresh response MAY omit refresh_token, meaning
280
+ # "keep using the previous one" — dropping it here would silently
281
+ # end refreshability and hand the rotation block a nil.
282
+ replacement = replacement.with_refresh_token(@tokens.refresh_token) if replacement.refresh_token.nil?
283
+ @tokens = replacement
284
+ @on_rotation.call(@tokens)
285
+ end
286
+ end
287
+ end
288
+ end
289
+ end