brynq-sdk-acerta 1.1.1__py3-none-any.whl

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 (34) hide show
  1. brynq_sdk_acerta/__init__.py +14 -0
  2. brynq_sdk_acerta/acerta.py +118 -0
  3. brynq_sdk_acerta/addresses.py +99 -0
  4. brynq_sdk_acerta/agreements.py +426 -0
  5. brynq_sdk_acerta/bank_accounts.py +90 -0
  6. brynq_sdk_acerta/code_lists.py +264 -0
  7. brynq_sdk_acerta/company_cars.py +135 -0
  8. brynq_sdk_acerta/contact_information.py +79 -0
  9. brynq_sdk_acerta/cost_centers.py +94 -0
  10. brynq_sdk_acerta/employees.py +121 -0
  11. brynq_sdk_acerta/employees_additional_information.py +87 -0
  12. brynq_sdk_acerta/employer.py +179 -0
  13. brynq_sdk_acerta/family_members.py +99 -0
  14. brynq_sdk_acerta/family_situation.py +99 -0
  15. brynq_sdk_acerta/inservice.py +99 -0
  16. brynq_sdk_acerta/salaries.py +74 -0
  17. brynq_sdk_acerta/schemas/__init__.py +135 -0
  18. brynq_sdk_acerta/schemas/address.py +80 -0
  19. brynq_sdk_acerta/schemas/agreement.py +982 -0
  20. brynq_sdk_acerta/schemas/bank_account.py +87 -0
  21. brynq_sdk_acerta/schemas/company_car.py +124 -0
  22. brynq_sdk_acerta/schemas/contact_information.py +83 -0
  23. brynq_sdk_acerta/schemas/cost_center.py +82 -0
  24. brynq_sdk_acerta/schemas/employee.py +406 -0
  25. brynq_sdk_acerta/schemas/employer.py +71 -0
  26. brynq_sdk_acerta/schemas/family.py +220 -0
  27. brynq_sdk_acerta/schemas/in_service.py +243 -0
  28. brynq_sdk_acerta/schemas/in_service_config.py +28 -0
  29. brynq_sdk_acerta/schemas/planning.py +37 -0
  30. brynq_sdk_acerta/schemas/salaries.py +84 -0
  31. brynq_sdk_acerta-1.1.1.dist-info/METADATA +21 -0
  32. brynq_sdk_acerta-1.1.1.dist-info/RECORD +34 -0
  33. brynq_sdk_acerta-1.1.1.dist-info/WHEEL +5 -0
  34. brynq_sdk_acerta-1.1.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,982 @@
1
+ """
2
+ Schemas for Agreements resource
3
+ """
4
+
5
+ import pandas as pd
6
+ import pandera as pa
7
+ from pandera.typing import Series
8
+ from pydantic import BaseModel, Field, ConfigDict
9
+ from typing import Optional, List, Literal
10
+ from brynq_sdk_functions import BrynQPanderaDataFrameModel
11
+
12
+ # GET Schema (Pandera - DataFrame)
13
+ class AgreementGet(BrynQPanderaDataFrameModel):
14
+ """Schema for GET /v3/agreements endpoint"""
15
+
16
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, description="Identifies the agreement and is unique for each agreement", alias="agreementId")
17
+ external_reference: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, description="External reference for the agreement", alias="externalReference")
18
+ employee_id: Series[pd.StringDtype] = pa.Field(coerce=True, description="The employeeId is the unique identifier for an employee", alias="employeeId")
19
+ employer_id: Series[pd.StringDtype] = pa.Field(coerce=True, description="The employerId is the unique identifier for an employer", alias="employerId")
20
+ legal_entity: Series[pd.StringDtype] = pa.Field(coerce=True, description="Legal entity identifier", alias="legalEntity")
21
+ agreement_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, description="Agreement type code", alias="agreementType.code")
22
+ agreement_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, description="Agreement type description", alias="agreementType.description")
23
+
24
+ class _Annotation:
25
+ primary_key = "agreement_id"
26
+ foreign_keys = {
27
+ "employee_id": {"parent_schema": "EmployeeGet", "parent_column": "employee_id", "cardinality": "N:1"}
28
+ }
29
+
30
+ class Config:
31
+ strict = False
32
+ metadata = {"class": "Agreement", "dependencies": []}
33
+
34
+ # POST Schema (Pydantic - Request)
35
+ class AgreementRemunerationBankAccountCreate(BaseModel):
36
+ """Schema for POST /v1/agreements/{agreementId}/remuneration-bank-account endpoint"""
37
+
38
+ iban: str = Field(..., min_length=1, max_length=34, example="BE68539007547034", description="Bank account number", alias="iban")
39
+ bic: Optional[str] = Field(None, min_length=8, max_length=11, example="GEBABEBB", description="Bank identification code", alias="bic")
40
+
41
+ class Config:
42
+ populate_by_name = True
43
+
44
+
45
+ # ==============================
46
+ # GET Schemas (Pandera - Frames)
47
+ # ==============================
48
+
49
+ class AgreementBasicInformationGet(BrynQPanderaDataFrameModel):
50
+ """Schema for GET /v3/agreements/{agreementId}/basic-information (segments)."""
51
+
52
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementId")
53
+ agreement_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementType.code")
54
+ agreement_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="agreementType.description")
55
+ period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, alias="period.startDate")
56
+ period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="period.endDate")
57
+ c32_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="c32Code.code")
58
+ c32_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="c32Code.description")
59
+
60
+ # officialEmployerData
61
+ oem_official_joint_committee_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.officialJointCommittee.code")
62
+ oem_official_joint_committee_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.officialJointCommittee.description")
63
+ oem_nsso_prefix_code: Series[pd.StringDtype] = pa.Field(coerce=True, alias="officialEmployerData.nssoPrefix.code")
64
+ oem_nsso_prefix_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.nssoPrefix.description")
65
+ oem_indexation_joint_committee_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.indexationJointCommittee.code")
66
+ oem_indexation_joint_committee_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.indexationJointCommittee.description")
67
+ oem_business_unit: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.businessUnit")
68
+ oem_point_of_operation: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.pointOfOperation")
69
+ oem_multiple_points_of_operations: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.multiplePointsOfOperations")
70
+ oem_replacement_agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployerData.replacementAgreementId")
71
+
72
+ # officialEmployeeData
73
+ oee_employee_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.employeeType.code")
74
+ oee_employee_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.employeeType.description")
75
+ oee_employee_type_detail_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.employeeTypeDetail.code")
76
+ oee_employee_type_detail_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.employeeTypeDetail.description")
77
+ oee_duration_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.duration.code")
78
+ oee_duration_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.duration.description")
79
+ oee_agreement_details_sort_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.sort.code")
80
+ oee_agreement_details_sort_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.sort.description")
81
+ oee_agreement_details_nsso_category_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.nssoCategory.code")
82
+ oee_agreement_details_nsso_category_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.nssoCategory.description")
83
+ oee_agreement_details_statute_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.statute.code")
84
+ oee_agreement_details_statute_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.statute.description")
85
+ oee_agreement_details_nsso_exemption_category_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.nssoExemptionCategory.code")
86
+ oee_agreement_details_nsso_exemption_category_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.agreementDetails.nssoExemptionCategory.description")
87
+ oee_withholding_tax_tax_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.withHoldingTax.taxType.code")
88
+ oee_withholding_tax_tax_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.withHoldingTax.taxType.description")
89
+ oee_withholding_tax_declaration_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.withHoldingTax.declaration.code")
90
+ oee_withholding_tax_declaration_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.withHoldingTax.declaration.description")
91
+ oee_withholding_tax_cross_border_worker_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.withHoldingTax.crossBorderWorker.code")
92
+ oee_withholding_tax_cross_border_worker_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.withHoldingTax.crossBorderWorker.description")
93
+ oee_withholding_tax_gross_net_contraction: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.withHoldingTax.grossNetContraction")
94
+ oee_nsso_work_place_accident_risk_category_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.nsso.workPlaceAccidentRiskCategory.code")
95
+ oee_nsso_work_place_accident_risk_category_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.nsso.workPlaceAccidentRiskCategory.description")
96
+ oee_nsso_nsso_notion_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.nsso.nssoNotion.code")
97
+ oee_nsso_nsso_notion_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.nsso.nssoNotion.description")
98
+ oee_nsso_disabled_for_nsso: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.nsso.disabledForNsso")
99
+ oee_transport_costs_fully_taxed: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="officialEmployeeData.transportCostsFullyTaxed")
100
+
101
+ # apprentice
102
+ apprentice_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="apprentice.type.code")
103
+ apprentice_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="apprentice.type.description")
104
+ apprentice_community_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="apprentice.community.code")
105
+ apprentice_community_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="apprentice.community.description")
106
+ apprentice_contract_term: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="apprentice.contractTerm")
107
+ apprentice_contract_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="apprentice.contractNumber")
108
+ apprentice_starting_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="apprentice.apprenticeStartingDate")
109
+
110
+ # earlyRetirement
111
+ early_retirement_contribution_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.earlyRetirementContribution.code")
112
+ early_retirement_contribution_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.earlyRetirementContribution.description")
113
+ early_retirement_counter_fraction_dmfa: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.counterFractionDmfa")
114
+ early_retirement_pension_category_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.pensionCategory.code")
115
+ early_retirement_pension_category_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.pensionCategory.description")
116
+ early_retirement_contribution_to_supplementary_payment_resumption_of_work_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.resumptionOfWork.code")
117
+ early_retirement_contribution_to_supplementary_payment_resumption_of_work_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.resumptionOfWork.description")
118
+ early_retirement_contribution_to_supplementary_payment_first_allocation_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.firstAllocationDate")
119
+ early_retirement_contribution_to_supplementary_payment_last_allocation_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.lastAllocationDate")
120
+ early_retirement_contribution_to_supplementary_payment_notion_debtor_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.notionDebtor.code")
121
+ early_retirement_contribution_to_supplementary_payment_notion_debtor_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.notionDebtor.description")
122
+ early_retirement_contribution_to_supplementary_payment_work_exemption_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.workExemption.code")
123
+ early_retirement_contribution_to_supplementary_payment_work_exemption_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.contributionToSupplementaryPayment.workExemption.description")
124
+ early_retirement_social_security_replacement_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="earlyRetirement.socialSecurityReplacementNumber")
125
+
126
+ # retirement
127
+ retirement_nihdi_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="retirement.nihdiCode.code")
128
+ retirement_nihdi_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="retirement.nihdiCode.description")
129
+ retirement_nihdi_frequency_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="retirement.nihdiFrequency.code")
130
+ retirement_nihdi_frequency_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="retirement.nihdiFrequency.description")
131
+
132
+ # construction
133
+ construction_c32a_current_month_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="construction.c32aCurrentMonthNumber")
134
+ construction_c32a_next_month_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="construction.c32aNextMonthNumber")
135
+
136
+ class Config:
137
+ strict = False
138
+ metadata = {"class": "AgreementBasicInformation", "dependencies": []}
139
+
140
+
141
+ class AgreementEmploymentsGet(BrynQPanderaDataFrameModel):
142
+ """Schema for GET /v3/agreements/{agreementId}/employments (segments)."""
143
+
144
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementId")
145
+ employment_period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, alias="employmentPeriod.startDate")
146
+ employment_period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="employmentPeriod.endDate")
147
+ interim_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="interimStartDate")
148
+ in_organisation_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="inOrganisationDate")
149
+ trial_period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="trialPeriodEndDate")
150
+ contractual_period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="contractualPeriodEndDate")
151
+ ignore_seniority_in_case_of_illness: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="ignoreSeniorityInCaseOfIllness")
152
+ reason_termination_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reasonTermination.code")
153
+ reason_termination_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reasonTermination.description")
154
+ notice_date_notice_served: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="notice.dateNoticeServed")
155
+ notice_letter_sent_on: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="notice.noticeLetterSentOn")
156
+ notice_period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="notice.noticePeriod.startDate")
157
+ notice_period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="notice.noticePeriod.endDate")
158
+ notice_end_disruption_period: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="notice.endDisruptionPeriod")
159
+ leaving_date_end_mutual_remuneration: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="leavingEmployment.dateEndMutualRemuneration")
160
+ leaving_date_end_goodwill_indemnity: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="leavingEmployment.dateEndGoodwillIndemnity")
161
+ leaving_date_end_integration_compensation: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="leavingEmployment.dateEndIntegrationCompensation")
162
+ leaving_date_end_non_competition_remuneration: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="leavingEmployment.dateEndNonCompetitionRemuneration")
163
+ leaving_date_end_medical_force_majeure: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="leavingEmployment.dateEndMedicalForceMajeure")
164
+ students_quarters_days_q1: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="studentsQuarters.daysOfStudentWorkFirstQuarterNumber")
165
+ students_quarters_days_q2: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="studentsQuarters.daysOfStudentWorkSecondQuarterNumber")
166
+ students_quarters_days_q3: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="studentsQuarters.daysOfStudentWorkThirdQuarterNumber")
167
+ students_quarters_days_q4: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="studentsQuarters.daysOfStudentWorkFourthQuarterNumber")
168
+ students_quarters_days_q5: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="studentsQuarters.daysOfStudentWorkFifthQuarterNumber")
169
+
170
+ class Config:
171
+ strict = False
172
+ metadata = {"class": "AgreementEmployments", "dependencies": []}
173
+
174
+
175
+ class AgreementWorkingTimeGet(BrynQPanderaDataFrameModel):
176
+ """Schema for GET /v3/agreements/{agreementId}/working-time (segments)."""
177
+
178
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementId")
179
+ period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, alias="period.startDate")
180
+ period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="period.endDate")
181
+ working_time_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, alias="workingTimeType.code")
182
+ working_time_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="workingTimeType.description")
183
+ work_schedule: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="workSchedule")
184
+ work_regime: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="workRegime")
185
+ hours_week_full_time: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="hoursWeekFullTime")
186
+ pay_on_annual_basis: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payOnAnnualBasis")
187
+ employment_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="employmentFraction.numerator")
188
+ employment_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="employmentFraction.denominator")
189
+ original_employment_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="originalEmploymentFraction.numerator")
190
+ original_employment_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="originalEmploymentFraction.denominator")
191
+ effective_employment_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="effectiveEmploymentFraction.numerator")
192
+ effective_employment_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="effectiveEmploymentFraction.denominator")
193
+ time_credits_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="timeCredits.code")
194
+ time_credits_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="timeCredits.description")
195
+ reduced_working_hours_regularity_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.regularity.code")
196
+ reduced_working_hours_regularity_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.regularity.description")
197
+ reduced_working_hours_measure_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.measure.code")
198
+ reduced_working_hours_measure_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.measure.description")
199
+ reduced_working_hours_involuntary_part_time_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.involuntaryPartTime.code")
200
+ reduced_working_hours_involuntary_part_time_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.involuntaryPartTime.description")
201
+ reduced_working_hours_refusal_of_employment_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.refusalOfEmploymentDate")
202
+ reduced_working_hours_has_progressive_work_resumption: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.hasProgressiveWorkResumption")
203
+ reduced_working_hours_illness_other_employer_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.illnessOtherEmployerStartDate")
204
+ reduced_working_hours_progressive_work_resumption_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.progressiveWorkResumptionType.code")
205
+ reduced_working_hours_progressive_work_resumption_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.progressiveWorkResumptionType.description")
206
+ reduced_working_hours_adjusted_work_regime: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.adjustedWorkRegime")
207
+ reduced_working_hours_adjusted_work_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.adjustedWorkFraction.numerator")
208
+ reduced_working_hours_adjusted_work_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.adjustedWorkFraction.denominator")
209
+ reduced_working_hours_measure1_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.measure1.code")
210
+ reduced_working_hours_measure1_percentage: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.measure1.percentage")
211
+ reduced_working_hours_measure2_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.measure2.code")
212
+ reduced_working_hours_measure2_percentage: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.measure2.percentage")
213
+ reduced_working_hours_full_time_absence: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="reducedWorkingHours.fullTimeAbsence")
214
+ exemption_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="exemptionOfWorkObligations.exemptionType.code")
215
+ exemption_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="exemptionOfWorkObligations.exemptionType.description")
216
+ art54bis_or_ter: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="exemptionOfWorkObligations.art54bisOrTer")
217
+
218
+ class Config:
219
+ strict = False
220
+ metadata = {"class": "AgreementWorkingTime", "dependencies": []}
221
+
222
+
223
+ class AgreementRemunerationGet(BrynQPanderaDataFrameModel):
224
+ """Schema for GET /v3/agreements/{agreementId}/remuneration (segments)."""
225
+
226
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementId")
227
+ period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, alias="period.startDate")
228
+ period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="period.endDate")
229
+ steering_group_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.steeringGroup.code")
230
+ steering_group_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.steeringGroup.description")
231
+ accounting_organisation_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.accountingOrganisation.code")
232
+ accounting_organisation_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.accountingOrganisation.description")
233
+ function_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.function.code")
234
+ function_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.function.description")
235
+ function_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.functionStartDate")
236
+ organisation: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.organisation")
237
+ cost_centre: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.costCentre")
238
+ cost_centre_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.costCentreDescription")
239
+ standard_accounting_profile_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.standardAccountingProfile.code")
240
+ standard_accounting_profile_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.standardAccountingProfile.description")
241
+ pay_frequency_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.frequency.code")
242
+ pay_frequency_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="generalRemuneration.frequency.description")
243
+ calculation_method_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.calculationMethod.code")
244
+ salary_split_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.salarySplit.code")
245
+ salary_qualification_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.salaryQualification.code")
246
+ payment_scheme_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.paymentScheme.code")
247
+ remuneration_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.remunerationFraction.numerator")
248
+ remuneration_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.remunerationFraction.denominator")
249
+ tip_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.tip.type.code")
250
+ tip_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.tip.type.description")
251
+ tip_professional_role_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.tip.professionalRole.code")
252
+ tip_professional_role_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.tip.professionalRole.description")
253
+ method_of_payment_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.type.code")
254
+ method_of_payment_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.type.description")
255
+ employee_main_account_iban: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employeeBankAccounts.mainAccount.iban")
256
+ employee_main_account_bic: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employeeBankAccounts.mainAccount.bic")
257
+ employee_second_account_iban: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employeeBankAccounts.secondAccount.iban")
258
+ employee_second_account_bic: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employeeBankAccounts.secondAccount.bic")
259
+ employer_main_account_iban: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employerBankAccounts.mainAccount.iban")
260
+ employer_main_account_bic: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employerBankAccounts.mainAccount.bic")
261
+ employer_second_account_iban: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employerBankAccounts.secondAccount.iban")
262
+ employer_second_account_bic: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfPayment.employerBankAccounts.secondAccount.bic")
263
+ has_group_insurance: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.hasGroupInsurance")
264
+ has_hospital_insurance: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.hasHospitalInsurance")
265
+ has_hospital_insurance_for_spouse: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.hasHospitalInsuranceForSpouse")
266
+ work_accident_insurance_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.workAccidentInsuranceNumber")
267
+ work_accident_insurance_policy_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.workAccidentInsurancePolicyNumber")
268
+ group_insurance_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.groupInsuranceNumber")
269
+ group_insurance_policy_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.groupInsurancePolicyNumber")
270
+ other_insurance_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.otherInsuranceNumber")
271
+ other_insurance_policy_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="insuranceDetails.otherInsurancePolicyNumber")
272
+ contribution_second_retirement_pillar_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.contributionSecondRetirementPillar.code")
273
+ contribution_second_retirement_pillar_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.contributionSecondRetirementPillar.description")
274
+ wage_category_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.wageCategory.code")
275
+ wage_category_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCalculation.wageCategory.description")
276
+
277
+ # Pay scale
278
+ pay_scale_use: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.usePayScale")
279
+ pay_scale_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.type.code")
280
+ pay_scale_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.type.description")
281
+ pay_scale_selection_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.payScaleSelection.code")
282
+ pay_scale_selection_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.payScaleSelection.description")
283
+ pay_scale_experience: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.experience")
284
+ pay_scale_pay_grade: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.payGrade")
285
+ pay_scale_level_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.level.code")
286
+ pay_scale_level_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.level.description")
287
+
288
+ # IFIC (within payScale)
289
+ pay_scale_ific_use: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.useIFIC")
290
+ pay_scale_ific_use_scale: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.useScale")
291
+ pay_scale_ific_seniority_year_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.seniority.yearNumber")
292
+ pay_scale_ific_seniority_month_number: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.seniority.monthNumber")
293
+ pay_scale_ific_salary_scale_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.salaryScale.code")
294
+ pay_scale_ific_salary_scale_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.salaryScale.description")
295
+ pay_scale_ific_remuneration_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.remunerationFraction.numerator")
296
+ pay_scale_ific_remuneration_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.remunerationFraction.denominator")
297
+ pay_scale_ific_function_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.function.code")
298
+ pay_scale_ific_function_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.function.description")
299
+
300
+ # IFIC hybrid functions
301
+ pay_scale_ific_hybrid1_function_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_1.function.code")
302
+ pay_scale_ific_hybrid1_function_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_1.function.description")
303
+ pay_scale_ific_hybrid1_salary_scale_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_1.salaryScale.code")
304
+ pay_scale_ific_hybrid1_salary_scale_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_1.salaryScale.description")
305
+ pay_scale_ific_hybrid1_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_1.fraction.numerator")
306
+ pay_scale_ific_hybrid1_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_1.fraction.denominator")
307
+
308
+ pay_scale_ific_hybrid2_function_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_2.function.code")
309
+ pay_scale_ific_hybrid2_function_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_2.function.description")
310
+ pay_scale_ific_hybrid2_salary_scale_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_2.salaryScale.code")
311
+ pay_scale_ific_hybrid2_salary_scale_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_2.salaryScale.description")
312
+ pay_scale_ific_hybrid2_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_2.fraction.numerator")
313
+ pay_scale_ific_hybrid2_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_2.fraction.denominator")
314
+
315
+ pay_scale_ific_hybrid3_function_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_3.function.code")
316
+ pay_scale_ific_hybrid3_function_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_3.function.description")
317
+ pay_scale_ific_hybrid3_salary_scale_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_3.salaryScale.code")
318
+ pay_scale_ific_hybrid3_salary_scale_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_3.salaryScale.description")
319
+ pay_scale_ific_hybrid3_fraction_numerator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_3.fraction.numerator")
320
+ pay_scale_ific_hybrid3_fraction_denominator: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payScale.ific.hybridFunction_3.fraction.denominator")
321
+
322
+ class Config:
323
+ strict = False
324
+ metadata = {"class": "AgreementRemuneration", "dependencies": []}
325
+
326
+
327
+ class AgreementCommutingGet(BrynQPanderaDataFrameModel):
328
+ """Schema for GET /v3/agreements/{agreementId}/commuting (segments)."""
329
+
330
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementId")
331
+ period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, alias="period.startDate")
332
+ period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="period.endDate")
333
+ commuting_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="commutingId")
334
+ pay_commuting_code: Series[pd.StringDtype] = pa.Field(coerce=True, alias="payCommuting.code")
335
+ pay_commuting_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="payCommuting.description")
336
+ method_of_transport_code: Series[pd.StringDtype] = pa.Field(coerce=True, alias="methodOfTransport.code")
337
+ method_of_transport_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="methodOfTransport.description")
338
+ distance: Series[pd.Float64Dtype] = pa.Field(coerce=True, nullable=True, alias="distance")
339
+ payment_percentage: Series[pd.Float64Dtype] = pa.Field(coerce=True, nullable=True, alias="paymentPercentage")
340
+ frequency_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="frequency.code")
341
+ frequency_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="frequency.description")
342
+ subscription_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="subscriptionType.code")
343
+ subscription_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="subscriptionType.description")
344
+ tariff_period_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="tariffPeriod.code")
345
+ tariff_period_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="tariffPeriod.description")
346
+ vehicle_is_effectively_used: Series[pd.BooleanDtype] = pa.Field(coerce=True, nullable=True, alias="vehicleIsEffectivelyUsed")
347
+
348
+ class Config:
349
+ strict = False
350
+ metadata = {"class": "AgreementCommuting", "dependencies": []}
351
+
352
+
353
+ class AgreementCustomFieldsGet(BrynQPanderaDataFrameModel):
354
+ """Schema for GET /v3/agreements/{agreementId}/custom-fields (segments)."""
355
+
356
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementId")
357
+ period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, alias="period.startDate")
358
+ period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="period.endDate")
359
+ type: Series[pd.StringDtype] = pa.Field(coerce=True, alias="type")
360
+ value_field_name: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="value.fieldName")
361
+ value_field_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="value.fieldDescription")
362
+ value_field_value: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="value.fieldValue")
363
+ value_list_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="value.listDescription")
364
+
365
+ class Config:
366
+ strict = False
367
+ metadata = {"class": "AgreementCustomFields", "dependencies": []}
368
+
369
+
370
+ class AgreementCostCenterAllocationGet(BrynQPanderaDataFrameModel):
371
+ """Schema for GET /v3/agreements/{agreementId}/cost-center-allocation (items)."""
372
+
373
+ agreement_id: Series[pd.StringDtype] = pa.Field(coerce=True, alias="agreementId")
374
+ period_start_date: Series[pd.StringDtype] = pa.Field(coerce=True, alias="period.startDate")
375
+ period_end_date: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="period.endDate")
376
+ cost_center_code: Series[pd.StringDtype] = pa.Field(coerce=True, alias="costCenterCode")
377
+ cost_center_description: Series[pd.StringDtype] = pa.Field(coerce=True, alias="costCenterDescription")
378
+ cost_center_accountancy: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="costCenterAccountancy")
379
+ allocation_percentage: Series[pd.Float64Dtype] = pa.Field(coerce=True, alias="allocationPercentage")
380
+ sequence_number: Series[pd.Int64Dtype] = pa.Field(coerce=True, alias="sequenceNumber")
381
+ category_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="category.code")
382
+ category_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="category.description")
383
+ staff_type_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="staffType.code")
384
+ staff_type_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="staffType.description")
385
+ grade_and_function_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="gradeAndFunction.code")
386
+ grade_and_function_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="gradeAndFunction.description")
387
+ service_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="service.code")
388
+ service_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="service.description")
389
+ financing_category_code: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="financingCategory.code")
390
+ financing_category_description: Series[pd.StringDtype] = pa.Field(coerce=True, nullable=True, alias="financingCategory.description")
391
+
392
+ class Config:
393
+ strict = False
394
+ metadata = {"class": "AgreementCostCenterAllocation", "dependencies": []}
395
+
396
+
397
+ # PUT Schema (Pydantic - Request)
398
+ class AgreementRemunerationBankAccountUpdate(BaseModel):
399
+ """Schema for PUT /employee-data-management/v3/employees/agreement/{agreementId}/remuneration-bank-account endpoint"""
400
+
401
+ # Function parameters
402
+ agreement_id: str = Field(..., description="Agreement identifier", alias="agreementId")
403
+
404
+ iban: str = Field(..., min_length=1, max_length=34, example="BE68539007547034", description="Bank account number", alias="iban")
405
+ bic: Optional[str] = Field(None, min_length=8, max_length=11, example="GEBABEBB", description="Bank identification code", alias="bic")
406
+
407
+ class Config:
408
+ populate_by_name = True
409
+
410
+
411
+ class PatchPeriodStartNotNullable(BaseModel):
412
+ start_date: str = Field(..., alias="startDate")
413
+ end_date: Optional[str] = Field(None, alias="endDate")
414
+
415
+ class Config:
416
+ populate_by_name = True
417
+
418
+
419
+ class PatchPeriodNullable(BaseModel):
420
+ start_date: Optional[str] = Field(None, alias="startDate")
421
+ end_date: Optional[str] = Field(None, alias="endDate")
422
+
423
+ class Config:
424
+ populate_by_name = True
425
+
426
+
427
+ # =========================
428
+ # Basic Information section
429
+ # =========================
430
+
431
+ class PatchOfficialEmployerDataRequest(BaseModel):
432
+ official_joint_committee: Optional[str] = Field(None, min_length=1, max_length=7, alias="officialJointCommittee")
433
+ nsso_prefix: Optional[str] = Field(None, min_length=1, max_length=3, alias="nssoPrefix")
434
+ indexation_joint_committee: Optional[str] = Field(None, min_length=1, max_length=7, alias="indexationJointCommittee")
435
+ business_unit: Optional[str] = Field(None, pattern=r"^\d{10}$", alias="businessUnit")
436
+ point_of_operation: Optional[str] = Field(None, min_length=1, max_length=4, alias="pointOfOperation")
437
+ multiple_points_of_operations: Optional[bool] = Field(None, alias="multiplePointsOfOperations")
438
+ replacement_agreement_id: Optional[str] = Field(None, pattern=r"^\d{11}$", alias="replacementAgreementId")
439
+
440
+ class Config:
441
+ populate_by_name = True
442
+
443
+
444
+ class PatchOfficialEmployeeDataRequest(BaseModel):
445
+ employee_type: Optional[str] = Field(None, pattern=r"^\d{2}$", alias="employeeType")
446
+ employee_type_detail: Optional[str] = Field(None, pattern=r"^\d{2}$", alias="employeeTypeDetail")
447
+ duration: Optional[str] = Field(None, pattern=r"^\d{2}$", alias="duration")
448
+
449
+ class AgreementDetails(BaseModel):
450
+ sort: Optional[str] = Field(None, pattern=r"^\d{2}$", alias="sort")
451
+ nsso_category: Optional[str] = Field(None, pattern=r"^\d{2}$", alias="nssoCategory")
452
+ statute: Optional[str] = Field(None, pattern=r"^\d{2}$", alias="statute")
453
+ nsso_exemption_category: Optional[str] = Field(None, pattern=r"^\d{2}$", alias="nssoExemptionCategory")
454
+
455
+ class Config:
456
+ populate_by_name = True
457
+
458
+ agreement_details: Optional[AgreementDetails] = Field(None, alias="agreementDetails", json_schema_extra={"prefix": "agreement_details_"})
459
+
460
+ class Config:
461
+ populate_by_name = True
462
+
463
+
464
+ class PatchOfficialApprenticeDataRequest(BaseModel):
465
+ type: Optional[str] = Field(None, min_length=1, max_length=1, alias="type")
466
+ community: Optional[str] = Field(None, min_length=1, max_length=1, alias="community")
467
+ contract_term: Optional[str] = Field(None, min_length=1, max_length=2, alias="contractTerm")
468
+ contract_number: Optional[str] = Field(None, min_length=1, max_length=15, alias="contractNumber")
469
+ apprentice_starting_date: Optional[str] = Field(None, alias="apprenticeStartingDate")
470
+
471
+ class Config:
472
+ populate_by_name = True
473
+
474
+
475
+ class ContributionToSupplementaryPaymentRequest(BaseModel):
476
+ resumption_of_work: Optional[str] = Field(None, min_length=1, max_length=1, alias="resumptionOfWork")
477
+ first_allocation_date: Optional[str] = Field(None, alias="firstAllocationDate")
478
+ last_allocation_date: Optional[str] = Field(None, alias="lastAllocationDate")
479
+ notion_debtor: Optional[str] = Field(None, min_length=1, max_length=1, alias="notionDebtor")
480
+ work_exemption: Optional[str] = Field(None, min_length=2, max_length=2, alias="workExemption")
481
+ social_security_replacement_number: Optional[str] = Field(None, pattern=r"^\d{11}$", alias="socialSecurityReplacementNumber")
482
+
483
+ class Config:
484
+ populate_by_name = True
485
+
486
+
487
+ class PatchOfficialEarlyRetirementDataRequest(BaseModel):
488
+ type: Optional[str] = Field(None, min_length=2, max_length=2, alias="type")
489
+ early_retirement_contribution: Optional[str] = Field(None, min_length=1, max_length=1, alias="earlyRetirementContribution")
490
+ counter_fraction_dmfa: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.\d{3})?$", alias="counterFractionDmfa")
491
+ contribution_to_supplementary_payment: Optional[ContributionToSupplementaryPaymentRequest] = Field(None, alias="contributionToSupplementaryPayment", json_schema_extra={"prefix": "contribution_to_supplementary_payment_"})
492
+
493
+ class Config:
494
+ populate_by_name = True
495
+
496
+
497
+ class PatchOfficialRetirementDataRequest(BaseModel):
498
+ nihdi_code: Optional[str] = Field(None, min_length=1, max_length=1, alias="nihdiCode")
499
+ nihdi_frequency: Optional[str] = Field(None, min_length=1, max_length=1, alias="nihdiFrequency")
500
+
501
+ class Config:
502
+ populate_by_name = True
503
+
504
+
505
+ class PatchAgreementRequestBasicInformation(BaseModel):
506
+ official_employer_data: Optional[PatchOfficialEmployerDataRequest] = Field(None, alias="officialEmployerData", json_schema_extra={"prefix": "official_employer_data_"})
507
+ official_employee_data: Optional[PatchOfficialEmployeeDataRequest] = Field(None, alias="officialEmployeeData", json_schema_extra={"prefix": "official_employee_data_"})
508
+ apprentice: Optional[PatchOfficialApprenticeDataRequest] = Field(None, alias="apprentice", json_schema_extra={"prefix": "apprentice_"})
509
+ early_retirement: Optional[PatchOfficialEarlyRetirementDataRequest] = Field(None, alias="earlyRetirement", json_schema_extra={"prefix": "early_retirement_"})
510
+ retirement: Optional[PatchOfficialRetirementDataRequest] = Field(None, alias="retirement", json_schema_extra={"prefix": "retirement_"})
511
+ c32_code: Optional[str] = Field(None, min_length=1, max_length=1, alias="c32Code")
512
+
513
+ class Construction(BaseModel):
514
+ c32a_current_month_number: Optional[str] = Field(None, min_length=1, max_length=13, alias="c32aCurrentMonthNumber")
515
+ c32a_next_month_number: Optional[str] = Field(None, min_length=1, max_length=13, alias="c32aNextMonthNumber")
516
+
517
+ class Config:
518
+ populate_by_name = True
519
+
520
+ construction: Optional[Construction] = Field(None, alias="construction", json_schema_extra={"prefix": "construction_"})
521
+
522
+ class Config:
523
+ populate_by_name = True
524
+
525
+
526
+ # ===============
527
+ # Employment part
528
+ # ===============
529
+
530
+ class PatchEmploymentRequestNotice(BaseModel):
531
+ date_notice_served: Optional[str] = Field(None, alias="dateNoticeServed")
532
+ notice_letter_sent_on: Optional[str] = Field(None, alias="noticeLetterSentOn")
533
+ notice_period: Optional[PatchPeriodNullable] = Field(None, alias="noticePeriod", json_schema_extra={"prefix": "notice_period_"})
534
+ end_disruption_period: Optional[str] = Field(None, alias="endDisruptionPeriod")
535
+
536
+ class Config:
537
+ populate_by_name = True
538
+
539
+
540
+ class PatchEmploymentRequestLeavingEmployment(BaseModel):
541
+ date_end_mutual_remuneration: Optional[str] = Field(None, alias="dateEndMutualRemuneration")
542
+ date_end_goodwill_indemnity: Optional[str] = Field(None, alias="dateEndGoodwillIndemnity")
543
+ date_end_integration_compensation: Optional[str] = Field(None, alias="dateEndIntegrationCompensation")
544
+ date_end_non_competition_remuneration: Optional[str] = Field(None, alias="dateEndNonCompetitionRemuneration")
545
+ date_end_medical_force_majeure: Optional[str] = Field(None, alias="dateEndMedicalForceMajeure")
546
+
547
+ class Config:
548
+ populate_by_name = True
549
+
550
+
551
+ class PatchEmploymentRequestStudentQuarters(BaseModel):
552
+ days_of_student_work_first_quarter_number: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.00)?$", alias="daysOfStudentWorkFirstQuarterNumber")
553
+ days_of_student_work_second_quarter_number: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.00)?$", alias="daysOfStudentWorkSecondQuarterNumber")
554
+ days_of_student_work_third_quarter_number: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.00)?$", alias="daysOfStudentWorkThirdQuarterNumber")
555
+ days_of_student_work_fourth_quarter_number: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.00)?$", alias="daysOfStudentWorkFourthQuarterNumber")
556
+ days_of_student_work_fifth_quarter_number: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.00)?$", alias="daysOfStudentWorkFifthQuarterNumber")
557
+
558
+ class Config:
559
+ populate_by_name = True
560
+
561
+
562
+ class PatchEmploymentRequest(BaseModel):
563
+ employment_period: Optional[PatchPeriodStartNotNullable] = Field(None, alias="employmentPeriod", json_schema_extra={"prefix": "employment_period_"})
564
+ in_organisation_date: Optional[str] = Field(None, alias="inOrganisationDate")
565
+ interim_start_date: Optional[str] = Field(None, alias="interimStartDate")
566
+ trial_period_end_date: Optional[str] = Field(None, alias="trialPeriodEndDate")
567
+ reason_termination: Optional[str] = Field(None, min_length=3, max_length=3, alias="reasonTermination")
568
+ notice: Optional[PatchEmploymentRequestNotice] = Field(None, alias="notice", json_schema_extra={"prefix": "notice_"})
569
+ leaving_employment: Optional[PatchEmploymentRequestLeavingEmployment] = Field(None, alias="leavingEmployment", json_schema_extra={"prefix": "leaving_employment_"})
570
+ ignore_seniority_in_case_of_illness: Optional[bool] = Field(None, alias="ignoreSeniorityInCaseOfIllness")
571
+ students_quarters: Optional[PatchEmploymentRequestStudentQuarters] = Field(None, alias="studentsQuarters", json_schema_extra={"prefix": "students_quarters_"})
572
+
573
+ class Config:
574
+ populate_by_name = True
575
+
576
+
577
+ # ==============
578
+ # Working Time
579
+ # ==============
580
+
581
+ class PatchWorkingTimeRequestEmploymentFraction(BaseModel):
582
+ numerator: str = Field(..., pattern=r"^\d{1,3}\.\d{3}$", alias="numerator")
583
+ denominator: str = Field(..., pattern=r"^\d{1,3}\.\d{3}$", alias="denominator")
584
+
585
+ class Config:
586
+ populate_by_name = True
587
+
588
+
589
+ class PatchFraction(BaseModel):
590
+ numerator: Optional[str] = Field(None, pattern=r"^\d{1,3}\.\d{3}$", alias="numerator")
591
+ denominator: Optional[str] = Field(None, pattern=r"^\d{1,3}\.\d{3}$", alias="denominator")
592
+
593
+ class Config:
594
+ populate_by_name = True
595
+
596
+
597
+ class PatchWorkingTimeRequestMeasure(BaseModel):
598
+ code: Optional[str] = Field(None, min_length=3, max_length=3, alias="code")
599
+ percent: Optional[str] = Field(None, pattern=r"^\d{1,3}\.\d{2}$", alias="percent")
600
+
601
+ class Config:
602
+ populate_by_name = True
603
+
604
+
605
+ class PatchReducedWorkingHoursRequest(BaseModel):
606
+ regularity: str = Field(..., min_length=1, max_length=1, alias="regularity")
607
+ measure: Optional[str] = Field(None, min_length=3, max_length=3, alias="measure")
608
+ involuntary_part_time: Optional[str] = Field(None, min_length=1, max_length=1, alias="involuntaryPartTime")
609
+ refusal_of_employment_date: Optional[str] = Field(None, alias="refusalOfEmploymentDate")
610
+ has_progressive_work_resumption: Optional[bool] = Field(None, alias="hasProgressiveWorkResumption")
611
+ illness_other_employer_start_date: Optional[str] = Field(None, alias="illnessOtherEmployerStartDate")
612
+ progressive_work_resumption_type: Optional[str] = Field(None, min_length=2, max_length=2, alias="progressiveWorkResumptionType")
613
+ adjusted_work_regime: Optional[str] = Field(None, pattern=r"^\d{1}\.\d{2}$", alias="adjustedWorkRegime")
614
+ adjusted_work_fraction: Optional[PatchFraction] = Field(None, alias="adjustedWorkFraction", json_schema_extra={"prefix": "adjusted_work_fraction_"})
615
+ measure1: Optional[PatchWorkingTimeRequestMeasure] = Field(None, alias="measure1", json_schema_extra={"prefix": "measure1_"})
616
+ measure2: Optional[PatchWorkingTimeRequestMeasure] = Field(None, alias="measure2", json_schema_extra={"prefix": "measure2_"})
617
+ full_time_absence: Optional[bool] = Field(None, alias="fullTimeAbsence")
618
+
619
+ class Config:
620
+ populate_by_name = True
621
+
622
+
623
+ class PatchWorkingTimeRequest(BaseModel):
624
+ working_time_type: str = Field(..., min_length=1, max_length=1, alias="workingTimeType")
625
+ work_schedule: Optional[str] = Field(None, min_length=1, max_length=20, alias="workSchedule")
626
+ work_regime: str = Field(..., pattern=r"^\d{1}\.\d{2}$", alias="workRegime")
627
+ hours_week_full_time: str = Field(..., pattern=r"^\d{2}\.\d{2}$", alias="hoursWeekFullTime")
628
+ pay_on_annual_basis: Optional[str] = Field(None, pattern=r"^\d{1}(\.\d{4})?$", alias="payOnAnnualBasis")
629
+ employment_fraction: PatchWorkingTimeRequestEmploymentFraction = Field(..., alias="employmentFraction", json_schema_extra={"prefix": "employment_fraction_"})
630
+ original_employment_fraction: Optional[PatchFraction] = Field(None, alias="originalEmploymentFraction", json_schema_extra={"prefix": "original_employment_fraction_"})
631
+ effective_employment_fraction: Optional[PatchFraction] = Field(None, alias="effectiveEmploymentFraction", json_schema_extra={"prefix": "effective_employment_fraction_"})
632
+ time_credits: Optional[str] = Field(None, min_length=2, max_length=2, alias="timeCredits")
633
+ exemption_type: Optional[str] = Field(None, min_length=1, max_length=2, alias="exemptionType")
634
+ art54bis_or_ter: Optional[str] = Field(None, min_length=1, max_length=2, alias="art54bisOrTer")
635
+ reduced_working_hours: Optional[PatchReducedWorkingHoursRequest] = Field(None, alias="reducedWorkingHours", json_schema_extra={"prefix": "reduced_working_hours_"})
636
+
637
+ class Config:
638
+ populate_by_name = True
639
+
640
+
641
+ # ==============
642
+ # Remuneration
643
+ # ==============
644
+
645
+ class PatchAgreementRequestGeneralRemuneration(BaseModel):
646
+ steering_group: str = Field(..., min_length=1, max_length=4, alias="steeringGroup")
647
+ accounting_organisation: str = Field(..., min_length=1, max_length=3, alias="accountingOrganisation")
648
+ function: str = Field(..., min_length=1, max_length=8, alias="function")
649
+ function_start_date: Optional[str] = Field(None, alias="functionStartDate")
650
+ organisation: Optional[str] = Field(None, min_length=1, max_length=12, alias="organisation")
651
+ cost_center: Optional[str] = Field(None, min_length=1, max_length=12, alias="costCenter")
652
+
653
+ class Config:
654
+ populate_by_name = True
655
+
656
+
657
+ class PatchAgreementRequestRemunerationPayCalculation(BaseModel):
658
+ calculation_method: Optional[str] = Field(None, min_length=1, max_length=1, alias="calculationMethod")
659
+ salary_split: Optional[str] = Field(None, min_length=1, max_length=1, alias="salarySplit")
660
+ salary_qualification: Optional[str] = Field(None, min_length=1, max_length=2, alias="salaryQualification")
661
+ adapted_holiday_pay: Optional[str] = Field(None, min_length=1, max_length=1, alias="adaptedHolidayPay")
662
+ financing_code: Optional[str] = Field(None, min_length=1, max_length=3, alias="financingCode")
663
+ payment_scheme: Optional[str] = Field(None, min_length=1, max_length=8, alias="paymentScheme")
664
+
665
+ class Tip(BaseModel):
666
+ type: Optional[str] = Field(None, min_length=1, max_length=1, alias="type")
667
+ professional_role: Optional[str] = Field(None, min_length=2, max_length=2, alias="professionalRole")
668
+
669
+ class Config:
670
+ populate_by_name = True
671
+
672
+ tip: Optional[Tip] = Field(None, alias="tip", json_schema_extra={"prefix": "tip_"})
673
+ seniority_date: Optional[str] = Field(None, alias="seniorityDate")
674
+ sector_seniority_date: Optional[str] = Field(None, alias="sectorSeniorityDate")
675
+ internal_seniority_date: Optional[str] = Field(None, alias="internalSeniorityDate")
676
+ position_seniority_date: Optional[str] = Field(None, alias="positionSeniorityDate")
677
+ remuneration_fraction: Optional[PatchFraction] = Field(None, alias="remunerationFraction", json_schema_extra={"prefix": "remuneration_fraction_"})
678
+ statutory_retirement_date: Optional[str] = Field(None, alias="statutoryRetirementDate")
679
+ contribution_second_retirement_pillar: Optional[str] = Field(None, min_length=1, max_length=1, alias="contributionSecondRetirementPillar")
680
+ wage_category: Optional[str] = Field(None, min_length=4, max_length=4, alias="wageCategory")
681
+
682
+ class Config:
683
+ populate_by_name = True
684
+
685
+
686
+ class PatchAgreementRequestPayScale(BaseModel):
687
+ use_pay_scale: bool = Field(..., alias="usePayScale")
688
+ type: Optional[str] = Field(None, min_length=1, max_length=1, alias="type")
689
+ pay_scale_selection: Optional[str] = Field(None, min_length=1, max_length=9, alias="payScaleSelection")
690
+ experience: Optional[str] = Field(None, alias="experience")
691
+ pay_grade: Optional[str] = Field(None, min_length=1, max_length=1, alias="payGrade")
692
+ level: Optional[str] = Field(None, min_length=1, max_length=1, alias="level")
693
+
694
+ class IficNullable(BaseModel):
695
+ useIFIC: Optional[bool] = Field(None, alias="useIFIC")
696
+ useScale: Optional[bool] = Field(None, alias="useScale")
697
+
698
+ class Seniority(BaseModel):
699
+ year_number: Optional[str] = Field(None, min_length=1, max_length=2, alias="yearNumber")
700
+ month_number: Optional[str] = Field(None, min_length=1, max_length=2, alias="monthNumber")
701
+
702
+ class Config:
703
+ populate_by_name = True
704
+
705
+ seniority: Optional[Seniority] = Field(None, alias="seniority", json_schema_extra={"prefix": "seniority_"})
706
+ salary_scale_number: Optional[str] = Field(None, min_length=1, max_length=9, alias="salaryScaleNumber")
707
+
708
+ class RemFrac(BaseModel):
709
+ numerator: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.\d{3})?$", alias="numerator")
710
+ denominator: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.\d{3})?$", alias="denominator")
711
+
712
+ class Config:
713
+ populate_by_name = True
714
+
715
+ remuneration_fraction: Optional[RemFrac] = Field(None, alias="remunerationFraction", json_schema_extra={"prefix": "remuneration_fraction_"})
716
+ function: Optional[str] = Field(None, min_length=4, max_length=4, alias="function")
717
+
718
+ class HybridFunction(BaseModel):
719
+ code: Optional[str] = Field(None, min_length=1, max_length=4, alias="code")
720
+ number: Optional[str] = Field(None, min_length=1, max_length=9, alias="number")
721
+
722
+ class HybridFraction(BaseModel):
723
+ numerator: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.\d{3})?$", alias="numerator")
724
+ denominator: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.\d{3})?$", alias="denominator")
725
+
726
+ class Config:
727
+ populate_by_name = True
728
+
729
+ fraction: Optional[HybridFraction] = Field(None, alias="fraction", json_schema_extra={"prefix": "fraction_"})
730
+
731
+ class Config:
732
+ populate_by_name = True
733
+
734
+ hybridFunction_1: Optional[HybridFunction] = Field(None, alias="hybridFunction_1", json_schema_extra={"prefix": "hybrid_function_1_"})
735
+ hybridFunction_2: Optional[HybridFunction] = Field(None, alias="hybridFunction_2", json_schema_extra={"prefix": "hybrid_function_2_"})
736
+ hybridFunction_3: Optional[HybridFunction] = Field(None, alias="hybridFunction_3", json_schema_extra={"prefix": "hybrid_function_3_"})
737
+
738
+ class Config:
739
+ populate_by_name = True
740
+
741
+ ific: Optional[IficNullable] = Field(None, alias="ific", json_schema_extra={"prefix": "ific_"})
742
+
743
+ class Config:
744
+ populate_by_name = True
745
+
746
+
747
+ class PatchBankAccounts(BaseModel):
748
+ main_account: Optional[str] = Field(None, min_length=1, max_length=34, alias="mainAccount")
749
+ second_account: Optional[str] = Field(None, min_length=1, max_length=34, alias="secondAccount")
750
+
751
+ class Config:
752
+ populate_by_name = True
753
+
754
+
755
+ class PatchAgreementRequestRemunerationMethodOfPayment(BaseModel):
756
+ type: str = Field(..., min_length=1, max_length=1, alias="type")
757
+ employee_bank_accounts: Optional[PatchBankAccounts] = Field(None, alias="employeeBankAccounts", json_schema_extra={"prefix": "employee_bank_accounts_"})
758
+ employer_bank_accounts: Optional[PatchBankAccounts] = Field(None, alias="employerBankAccounts", json_schema_extra={"prefix": "employer_bank_accounts_"})
759
+
760
+ class Config:
761
+ populate_by_name = True
762
+
763
+
764
+ class PatchAgreementRequestRemunerationInsuranceDetails(BaseModel):
765
+ work_accident_insurance_number: Optional[str] = Field(None, min_length=1, max_length=15, alias="workAccidentInsuranceNumber")
766
+ work_accident_insurance_policy_number: Optional[str] = Field(None, min_length=1, max_length=15, alias="workAccidentInsurancePolicyNumber")
767
+ has_groups_insurance: Optional[bool] = Field(None, alias="hasGroupsInsurance")
768
+ group_insurance_number: Optional[str] = Field(None, min_length=1, max_length=15, alias="groupInsuranceNumber")
769
+ group_insurance_policy_number: Optional[str] = Field(None, min_length=1, max_length=15, alias="groupInsurancePolicyNumber")
770
+ other_insurance_number: Optional[str] = Field(None, min_length=1, max_length=15, alias="otherInsuranceNumber")
771
+ other_insurance_policy_number: Optional[str] = Field(None, min_length=1, max_length=15, alias="otherInsurancePolicyNumber")
772
+ has_hospital_insurance: Optional[bool] = Field(None, alias="hasHospitalInsurance")
773
+ has_hospital_insurance_for_spouse: Optional[bool] = Field(None, alias="hasHospitalInsuranceForSpouse")
774
+
775
+ class Config:
776
+ populate_by_name = True
777
+
778
+
779
+ class PatchAgreementRequestRemuneration(BaseModel):
780
+ general_remuneration: Optional[PatchAgreementRequestGeneralRemuneration] = Field(None, alias="generalRemuneration", json_schema_extra={"prefix": "general_remuneration_"})
781
+ pay_calculation: Optional[PatchAgreementRequestRemunerationPayCalculation] = Field(None, alias="payCalculation", json_schema_extra={"prefix": "pay_calculation_"})
782
+ pay_scale: Optional[PatchAgreementRequestPayScale] = Field(None, alias="payScale", json_schema_extra={"prefix": "pay_scale_"})
783
+ method_of_payment: Optional[PatchAgreementRequestRemunerationMethodOfPayment] = Field(None, alias="methodOfPayment", json_schema_extra={"prefix": "method_of_payment_"})
784
+ insurance_details: Optional[PatchAgreementRequestRemunerationInsuranceDetails] = Field(None, alias="insuranceDetails", json_schema_extra={"prefix": "insurance_details_"})
785
+
786
+ class Config:
787
+ populate_by_name = True
788
+
789
+
790
+ # ========================
791
+ # Recruitment Incentives
792
+ # ========================
793
+
794
+ class RecruitmentFrameworkNullable(BaseModel):
795
+ code: Optional[str] = Field(None, min_length=3, max_length=3, alias="code")
796
+ start_date: Optional[str] = Field(None, alias="startDate")
797
+
798
+ class Config:
799
+ populate_by_name = True
800
+
801
+
802
+ class PatchAgreementRecruitmentIncentives(BaseModel):
803
+ employee_recruitment_framework: Optional[RecruitmentFrameworkNullable] = Field(None, alias="employeeRecruitmentFramework", json_schema_extra={"prefix": "employee_recruitment_framework_"})
804
+ employer_recruitment_framework: Optional[RecruitmentFrameworkNullable] = Field(None, alias="employerRecruitmentFramework", json_schema_extra={"prefix": "employer_recruitment_framework_"})
805
+ regional_recruitment_framework: Optional[RecruitmentFrameworkNullable] = Field(None, alias="regionalRecruitmentFramework", json_schema_extra={"prefix": "regional_recruitment_framework_"})
806
+ number_of_balance_months_work_benefit: Optional[str] = Field(None, pattern=r"^(0|[1-9][0-9]?)$", alias="numberOfBalanceMonthsWorkBenefit")
807
+ gesco_number: Optional[str] = Field(None, min_length=1, max_length=9, alias="gescoNumber")
808
+ career_measure: Optional[str] = Field(None, min_length=2, max_length=2, alias="careerMeasure")
809
+ start_job: Optional[str] = Field(None, min_length=2, max_length=2, alias="startJob")
810
+ restructuring_or_difficulties: Optional[str] = Field(None, min_length=1, max_length=1, alias="restructuringOrDifficulties")
811
+ other_social_services: Optional[str] = Field(None, min_length=2, max_length=2, alias="otherSocialServices")
812
+ research_percent: Optional[str] = Field(None, pattern=r"^\d{1,3}(\.\d{2})?$", alias="researchPercent")
813
+ aid_zone: Optional[str] = Field(None, min_length=1, max_length=1, alias="aidZone")
814
+
815
+ class Config:
816
+ populate_by_name = True
817
+
818
+
819
+ # =======
820
+ # Sector
821
+ # =======
822
+
823
+ class SocialProfitNumberOfWorkTimeNullable(BaseModel):
824
+ numerator: Optional[str] = Field(None, pattern=r"^(0|[1-9][0-9]?)$", alias="numerator")
825
+ denominator: Optional[str] = Field(None, pattern=r"^(10|11|12)$", alias="denominator")
826
+
827
+ class Config:
828
+ populate_by_name = True
829
+
830
+
831
+ class PatchAgreementRequestSectorSocialProfit(BaseModel):
832
+ status_target_group: Optional[str] = Field(None, min_length=1, max_length=1, alias="statusTargetGroup")
833
+ supervision_intensity_code: Optional[str] = Field(None, min_length=1, max_length=1, alias="supervisionIntensityCode")
834
+ wage_bonus_percent: Optional[float] = Field(None, alias="wageBonusPercent")
835
+ is_weak_employee: Optional[bool] = Field(None, alias="isWeakEmployee")
836
+ supervisor_qualification: Optional[str] = Field(None, min_length=2, max_length=2, alias="supervisorQualification")
837
+ occupational_class: Optional[str] = Field(None, min_length=1, max_length=1, alias="occupationalClass")
838
+ employee_qualification: Optional[str] = Field(None, min_length=2, max_length=2, alias="employeeQualification")
839
+ financing: Optional[str] = Field(None, min_length=3, max_length=3, alias="financing")
840
+ rob_particular_competence_code: Optional[str] = Field(None, min_length=1, max_length=1, alias="robParticularCompetenceCode")
841
+ staff_type: Optional[str] = Field(None, min_length=1, max_length=1, alias="staffType")
842
+ nihdi_number: Optional[str] = Field(None, pattern=r"^\d{11}$", alias="nihdiNumber")
843
+ specialism: Optional[str] = Field(None, min_length=1, max_length=3, alias="specialism")
844
+ recognition_year: Optional[str] = Field(None, pattern=r"^\d{4}$", alias="recognitionYear")
845
+ additional_qualification: Optional[str] = Field(None, min_length=1, max_length=2, alias="additionalQualification")
846
+ qualification_year: Optional[str] = Field(None, pattern=r"^\d{4}$", alias="qualificationYear")
847
+ campus: Optional[str] = Field(None, min_length=1, max_length=5, alias="campus")
848
+ hospital_statute: Optional[str] = Field(None, min_length=1, max_length=1, alias="hospitalStatute")
849
+ number_of_work_time: Optional[SocialProfitNumberOfWorkTimeNullable] = Field(None, alias="numberOfWorkTime", json_schema_extra={"prefix": "number_of_work_time_"})
850
+ has_private_practice: Optional[bool] = Field(None, alias="hasPrivatePractice")
851
+ localisation: Optional[str] = Field(None, pattern=r"^\d{4}$", alias="localisation")
852
+
853
+ class Policlinic(BaseModel):
854
+ belongs_to_the_own_hospital: Optional[bool] = Field(None, alias="belongsToTheOwnHospital")
855
+ belongs_to_another_hospital: Optional[bool] = Field(None, alias="belongsToAnotherHospital")
856
+ belongs_not_to_hospital: Optional[bool] = Field(None, alias="belongsNotToHospital")
857
+
858
+ class Config:
859
+ populate_by_name = True
860
+
861
+ policlinic: Optional[Policlinic] = Field(None, alias="policlinic", json_schema_extra={"prefix": "policlinic_"})
862
+ service_activity: Optional[str] = Field(None, min_length=1, max_length=1, alias="serviceActivity")
863
+ distinguishing_letter: Optional[str] = Field(None, min_length=1, max_length=7, alias="distinguishingLetter")
864
+ hospital_particular_competence: Optional[str] = Field(None, min_length=1, max_length=1, alias="hospitalParticularCompetence")
865
+ hospital_organisation_number: Optional[str] = Field(None, min_length=1, max_length=12, alias="hospitalOrganisationNumber")
866
+ physical_department_name: Optional[str] = Field(None, min_length=1, max_length=35, alias="physicalDepartmentName")
867
+ not_medical_registration_zone: Optional[str] = Field(None, min_length=1, max_length=50, alias="notMedicalRegistrationZone")
868
+ nursing_unit_name: Optional[str] = Field(None, min_length=1, max_length=50, alias="nursingUnitName")
869
+ diploma: Optional[str] = Field(None, min_length=1, max_length=4, alias="diploma")
870
+
871
+ class Config:
872
+ populate_by_name = True
873
+
874
+
875
+ class PatchAgreementRequestSectorTransport(BaseModel):
876
+ wage_system: Optional[str] = Field(None, min_length=1, max_length=1, alias="wageSystem")
877
+
878
+ class Config:
879
+ populate_by_name = True
880
+
881
+
882
+ class PatchAgreementRequestSectorPublicHospital(BaseModel):
883
+ unemployment: Optional[PatchPeriodNullable] = Field(None, alias="unemployment", json_schema_extra={"prefix": "unemployment_"})
884
+ illness: Optional[PatchPeriodNullable] = Field(None, alias="illness", json_schema_extra={"prefix": "illness_"})
885
+
886
+ class SickLeaveReserveNullable(BaseModel):
887
+ anniversary_date: Optional[str] = Field(None, alias="anniversaryDate")
888
+ system: Optional[str] = Field(None, min_length=1, max_length=1, alias="system")
889
+
890
+ class Config:
891
+ populate_by_name = True
892
+
893
+ sick_leave_reserve: Optional[SickLeaveReserveNullable] = Field(None, alias="sickLeaveReserve", json_schema_extra={"prefix": "sick_leave_reserve_"})
894
+
895
+ class CapeloNullable(BaseModel):
896
+ has_exception_obligation: Optional[bool] = Field(None, alias="hasExceptionObligation")
897
+ service_type: Optional[str] = Field(None, min_length=1, max_length=1, alias="serviceType")
898
+ institution_type: Optional[str] = Field(None, min_length=1, max_length=2, alias="institutionType")
899
+ function: Optional[str] = Field(None, min_length=1, max_length=1, alias="function")
900
+ staff_category: Optional[str] = Field(None, min_length=1, max_length=4, alias="staffCategory")
901
+ pdos_name: Optional[str] = Field(None, min_length=1, max_length=12, alias="pdosName")
902
+ grade: Optional[str] = Field(None, min_length=1, max_length=8, alias="grade")
903
+
904
+ class Config:
905
+ populate_by_name = True
906
+
907
+ capelo: Optional[CapeloNullable] = Field(None, alias="capelo", json_schema_extra={"prefix": "capelo_"})
908
+
909
+ class Config:
910
+ populate_by_name = True
911
+
912
+
913
+ class PatchAgreementRequestSector(BaseModel):
914
+ social_profit: Optional[PatchAgreementRequestSectorSocialProfit] = Field(None, alias="socialProfit", json_schema_extra={"prefix": "social_profit_"})
915
+ transport: Optional[PatchAgreementRequestSectorTransport] = Field(None, alias="transport", json_schema_extra={"prefix": "transport_"})
916
+ public_hospital: Optional[PatchAgreementRequestSectorPublicHospital] = Field(None, alias="publicHospital", json_schema_extra={"prefix": "public_hospital_"})
917
+
918
+ class Config:
919
+ populate_by_name = True
920
+
921
+
922
+ # ============================
923
+ # Declarations (OfficialEmployee)
924
+ # ============================
925
+
926
+ class PatchWithHoldingTaxRequest(BaseModel):
927
+ tax_type: str = Field(..., min_length=1, max_length=2, alias="taxType")
928
+ declaration: Optional[str] = Field(None, min_length=1, max_length=1, alias="declaration")
929
+ cross_border_worker: Optional[str] = Field(None, min_length=1, max_length=1, alias="crossBorderWorker")
930
+ gross_net_contraction: str = Field(..., min_length=1, max_length=2, alias="grossNetContraction")
931
+
932
+ class Config:
933
+ populate_by_name = True
934
+
935
+
936
+ class PatchOfficialEmployeeDataNSSO(BaseModel):
937
+ work_place_accident_risk_category: Optional[str] = Field(None, min_length=1, max_length=3, alias="workPlaceAccidentRiskCategory")
938
+ nsso_notion: Optional[str] = Field(None, min_length=1, max_length=2, alias="nssoNotion")
939
+ disabled_for_nsso: Optional[bool] = Field(None, alias="disabledForNsso")
940
+ custom_work_type_code: Optional[str] = Field(None, min_length=1, max_length=1, alias="customWorkTypeCode")
941
+
942
+ class Config:
943
+ populate_by_name = True
944
+
945
+
946
+ class PatchOfficialEmployeeDataRequestDeclarations(BaseModel):
947
+ with_holding_tax: Optional[PatchWithHoldingTaxRequest] = Field(None, alias="withHoldingTax", json_schema_extra={"prefix": "with_holding_tax_"})
948
+ tax_statute: Optional[str] = Field(None, min_length=1, max_length=2, alias="taxStatute")
949
+ nsso: Optional[PatchOfficialEmployeeDataNSSO] = Field(None, alias="nsso", json_schema_extra={"prefix": "nsso_"})
950
+ transport_costs_fully_taxed: Optional[bool] = Field(None, alias="transportCostsFullyTaxed")
951
+ maribel: Optional[dict] = Field(None, alias="maribel")
952
+ social_balance: Optional[bool] = Field(None, alias="socialBalance")
953
+ via: Optional[str] = Field(None, min_length=1, max_length=5, alias="via")
954
+ nace: Optional[str] = Field(None, min_length=1, max_length=5, alias="nace")
955
+ pension_system: Optional[str] = Field(None, min_length=1, max_length=2, alias="pensionSystem")
956
+ nsso_function: Optional[str] = Field(None, min_length=1, max_length=4, alias="nssoFunction")
957
+ deviating_pension_calculation: Optional[bool] = Field(None, alias="deviatingPensionCalculation")
958
+ measure_non_profit: Optional[str] = Field(None, min_length=1, max_length=2, alias="measureNonProfit")
959
+ illness6_months_date: Optional[str] = Field(None, alias="illness6MonthsDate")
960
+
961
+ class Config:
962
+ populate_by_name = True
963
+
964
+
965
+ # =============================
966
+ # ROOT: Patch Agreement Request
967
+ # =============================
968
+
969
+ class PatchAgreementRequest(BaseModel):
970
+ """Schema for PATCH /v3/agreements/{agreementId}."""
971
+ from_date: str = Field(..., alias="fromDate")
972
+
973
+ basic_information: Optional[PatchAgreementRequestBasicInformation] = Field(None, alias="basicInformation", json_schema_extra={"prefix": "basic_information_"})
974
+ employment: Optional[PatchEmploymentRequest] = Field(None, alias="employment", json_schema_extra={"prefix": "employment_"})
975
+ working_time: Optional[PatchWorkingTimeRequest] = Field(None, alias="workingTime", json_schema_extra={"prefix": "working_time_"})
976
+ remuneration: Optional[PatchAgreementRequestRemuneration] = Field(None, alias="remuneration", json_schema_extra={"prefix": "remuneration_"})
977
+ recruitment_incentives: Optional[PatchAgreementRecruitmentIncentives] = Field(None, alias="recruitmentIncentives", json_schema_extra={"prefix": "recruitment_incentives_"})
978
+ sector: Optional[PatchAgreementRequestSector] = Field(None, alias="sector", json_schema_extra={"prefix": "sector_"})
979
+ declarations: Optional[PatchOfficialEmployeeDataRequestDeclarations] = Field(None, alias="declarations", json_schema_extra={"prefix": "declarations_"})
980
+
981
+ class Config:
982
+ populate_by_name = True