brynq-sdk-zenegy 1.3.3__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 (33) hide show
  1. brynq_sdk_zenegy/__init__.py +23 -0
  2. brynq_sdk_zenegy/absence.py +100 -0
  3. brynq_sdk_zenegy/companies.py +43 -0
  4. brynq_sdk_zenegy/cost_center.py +80 -0
  5. brynq_sdk_zenegy/departments.py +77 -0
  6. brynq_sdk_zenegy/employee_documents.py +40 -0
  7. brynq_sdk_zenegy/employees.py +301 -0
  8. brynq_sdk_zenegy/global_value_sets.py +260 -0
  9. brynq_sdk_zenegy/global_values.py +265 -0
  10. brynq_sdk_zenegy/paychecks.py +119 -0
  11. brynq_sdk_zenegy/payroll.py +117 -0
  12. brynq_sdk_zenegy/payslips.py +43 -0
  13. brynq_sdk_zenegy/pensions.py +118 -0
  14. brynq_sdk_zenegy/schemas/__init__.py +30 -0
  15. brynq_sdk_zenegy/schemas/absences.py +393 -0
  16. brynq_sdk_zenegy/schemas/companies.py +42 -0
  17. brynq_sdk_zenegy/schemas/company_cost_centers.py +48 -0
  18. brynq_sdk_zenegy/schemas/company_departments.py +147 -0
  19. brynq_sdk_zenegy/schemas/employee_documents.py +30 -0
  20. brynq_sdk_zenegy/schemas/employee_pay_checks.py +169 -0
  21. brynq_sdk_zenegy/schemas/employee_pensions.py +140 -0
  22. brynq_sdk_zenegy/schemas/employees.py +2372 -0
  23. brynq_sdk_zenegy/schemas/global_value_sets.py +185 -0
  24. brynq_sdk_zenegy/schemas/global_values.py +433 -0
  25. brynq_sdk_zenegy/schemas/payrolls.py +134 -0
  26. brynq_sdk_zenegy/schemas/payslips.py +32 -0
  27. brynq_sdk_zenegy/schemas/supplements_and_deductions_rates.py +189 -0
  28. brynq_sdk_zenegy/supplements_and_deductions_rates.py +71 -0
  29. brynq_sdk_zenegy/zenegy.py +221 -0
  30. brynq_sdk_zenegy-1.3.3.dist-info/METADATA +16 -0
  31. brynq_sdk_zenegy-1.3.3.dist-info/RECORD +33 -0
  32. brynq_sdk_zenegy-1.3.3.dist-info/WHEEL +5 -0
  33. brynq_sdk_zenegy-1.3.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,393 @@
1
+ # Generated schemas for tag: Absence
2
+
3
+ from datetime import datetime
4
+ from pydantic import BaseModel, Field
5
+ from typing import Dict, List, Optional, Any
6
+ from uuid import UUID
7
+
8
+
9
+ class Department(BaseModel):
10
+ """Schema for department information."""
11
+ name: Optional[str] = Field(default=None)
12
+ number: Optional[str] = Field(default=None)
13
+ has_work_schema: Optional[bool] = Field(alias="hasWorkSchema", default=None)
14
+ id: Optional[int] = Field(default=None)
15
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None)
16
+
17
+ class Config:
18
+ populate_by_name = True
19
+
20
+
21
+ class Center(BaseModel):
22
+ """Schema for cost center or profit center information."""
23
+ id: Optional[int] = Field(default=None)
24
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None)
25
+ name: Optional[str] = Field(default=None)
26
+ number: Optional[str] = Field(default=None)
27
+ type: Optional[str] = Field(default=None)
28
+
29
+ class Config:
30
+ populate_by_name = True
31
+
32
+
33
+ class Employee(BaseModel):
34
+ """Schema for employee information."""
35
+ title: Optional[str] = Field(default=None)
36
+ is_active: Optional[bool] = Field(alias="isActive", default=None)
37
+ is_resigned: Optional[bool] = Field(alias="isResigned", default=None)
38
+ cpr: Optional[str] = Field(default=None)
39
+ salary_type: Optional[int] = Field(alias="salaryType", default=None)
40
+ contact_phone: Optional[str] = Field(alias="contactPhone", default=None)
41
+ contact_email: Optional[str] = Field(alias="contactEmail", default=None)
42
+ department: Optional[Department] = Field(default=None)
43
+ cost_center: Optional[Center] = Field(alias="costCenter", default=None)
44
+ profit_center: Optional[Center] = Field(alias="profitCenter", default=None)
45
+ car_registration_number: Optional[str] = Field(alias="carRegistrationNumber", default=None)
46
+ type: Optional[int] = Field(default=None)
47
+ salary_payout_period: Optional[int] = Field(alias="salaryPayoutPeriod", default=None)
48
+ revenue_type: Optional[int] = Field(alias="revenueType", default=None)
49
+ income_type: Optional[int] = Field(alias="incomeType", default=None)
50
+ holiday_pay_receiver_type: Optional[int] = Field(alias="holidayPayReceiverType", default=None)
51
+ extra_holiday_entitlement_rule: Optional[str] = Field(alias="extraHolidayEntitlementRule", default=None)
52
+ name: Optional[str] = Field(default=None)
53
+ employee_number: Optional[str] = Field(alias="employeeNumber", default=None)
54
+ extra_employee_number: Optional[str] = Field(alias="extraEmployeeNumber", default=None)
55
+ id: Optional[int] = Field(default=None)
56
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None)
57
+
58
+ class Config:
59
+ populate_by_name = True
60
+
61
+
62
+ class CompanyAbsenceType(BaseModel):
63
+ """Schema for company absence type information."""
64
+ name: Optional[str] = Field(default=None)
65
+ number: Optional[str] = Field(default=None)
66
+ absence_type_name: Optional[str] = Field(alias="absenceTypeName", default=None)
67
+ absence_type: Optional[int] = Field(alias="absenceType", default=None)
68
+ is_custom_absence_type: Optional[bool] = Field(alias="isCustomAbsenceType", default=None)
69
+ search_name: Optional[str] = Field(alias="searchName", default=None)
70
+ id: Optional[int] = Field(default=None)
71
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None)
72
+
73
+ class Config:
74
+ populate_by_name = True
75
+
76
+
77
+ class AbsenceData(BaseModel):
78
+ """Schema for absence data items."""
79
+ employee: Optional[Employee] = Field(default=None)
80
+ from_date: Optional[datetime] = Field(alias="fromDate", default=None)
81
+ to_date: Optional[datetime] = Field(alias="toDate", default=None)
82
+ note: Optional[str] = Field(default=None)
83
+ absence_type: Optional[int] = Field(alias="absenceType", default=None)
84
+ status: Optional[int] = Field(default=None)
85
+ days: Optional[float] = Field(default=None)
86
+ project_id: Optional[str] = Field(alias="projectId", default=None)
87
+ attachment_count: Optional[int] = Field(alias="attachmentCount", default=None)
88
+ absence_type_name: Optional[str] = Field(alias="absenceTypeName", default=None)
89
+ company_absence_type: Optional[CompanyAbsenceType] = Field(alias="companyAbsenceType", default=None)
90
+ employee_payroll_fk: Optional[int] = Field(alias="employeePayrollFk", default=None)
91
+ id: Optional[int] = Field(default=None)
92
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None)
93
+
94
+ class Config:
95
+ populate_by_name = True
96
+
97
+
98
+ class GetAbsenceDaysPerCompanyResponse(BaseModel):
99
+ """
100
+ Schema for getting absence days per company response.
101
+
102
+ """
103
+ total_records: Optional[int] = Field(alias="totalRecords", default=None)
104
+ total_display_records: Optional[int] = Field(alias="totalDisplayRecords", default=None)
105
+ data: Optional[List[AbsenceData]] = Field(default=None)
106
+
107
+ class Config:
108
+ populate_by_name = True
109
+
110
+ class CreateAbsenceRequest(BaseModel):
111
+ """
112
+ Schema for creating absence request.
113
+ """
114
+ uid: Optional[UUID] = Field(
115
+ default=None,
116
+ description="Absence UID (server-assigned on creation)",
117
+ example="00000000-0000-0000-0000-000000000000",
118
+ )
119
+ employee_uid: UUID = Field(
120
+ alias="employeeUid",
121
+ description="UID of the employee for whom the absence is created",
122
+ example="00000000-0000-0000-0000-000000000000",
123
+ )
124
+ from_date: datetime = Field(
125
+ alias="fromDate",
126
+ description="Absence start date/time (ISO 8601)",
127
+ example="2024-01-10T00:00:00Z",
128
+ )
129
+ to_date: datetime = Field(
130
+ alias="toDate",
131
+ description="Absence end date/time (ISO 8601)",
132
+ example="2024-01-12T23:59:59Z",
133
+ )
134
+ absence_type: int = Field(
135
+ alias="absenceType",
136
+ description="Absence type code",
137
+ example=1,
138
+ )
139
+ company_absence_type_uid: Optional[UUID] = Field(
140
+ alias="companyAbsenceTypeUid", default=None,
141
+ description="Company absence type UID",
142
+ example="00000000-0000-0000-0000-000000000000",
143
+ )
144
+ note: Optional[str] = Field(
145
+ default=None,
146
+ description="Optional note for the absence",
147
+ example="Sick leave",
148
+ )
149
+ days: Optional[float] = Field(
150
+ default=None,
151
+ description="Total number of absence days",
152
+ example=2.0,
153
+ )
154
+ project_id: Optional[str] = Field(
155
+ alias="projectId", default=None,
156
+ description="Related project identifier (if any)",
157
+ example="PRJ-1001",
158
+ )
159
+ status: Optional[int] = Field(
160
+ default=None,
161
+ description="Absence status code",
162
+ example=0,
163
+ )
164
+ attachment_uids: Optional[List[UUID]] = Field(
165
+ alias="attachmentUids", default=None,
166
+ description="List of attachment UIDs",
167
+ example=["00000000-0000-0000-0000-000000000000"],
168
+ )
169
+
170
+ class Config:
171
+ populate_by_name = True
172
+
173
+ class GetAbsenceAsyncResponse(BaseModel):
174
+ """
175
+ Schema for getting absence asynchronously response.
176
+ """
177
+ attachments: Optional[List[Dict[str, Any]]] = Field(default=None)
178
+ employee: Optional[Employee] = Field(default=None)
179
+ from_date: Optional[datetime] = Field(alias="fromDate", default=None)
180
+ to_date: Optional[datetime] = Field(alias="toDate", default=None)
181
+ note: Optional[str] = Field(default=None)
182
+ absence_type: Optional[int] = Field(alias="absenceType", default=None)
183
+ status: Optional[int] = Field(default=None)
184
+ days: Optional[float] = Field(default=None)
185
+ project_id: Optional[str] = Field(alias="projectId", default=None)
186
+ attachment_count: Optional[int] = Field(alias="attachmentCount", default=None)
187
+ absence_type_name: Optional[str] = Field(alias="absenceTypeName", default=None)
188
+ company_absence_type: Optional[CompanyAbsenceType] = Field(alias="companyAbsenceType", default=None)
189
+ employee_payroll_fk: Optional[int] = Field(alias="employeePayrollFk", default=None)
190
+ id: Optional[int] = Field(default=None)
191
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None)
192
+ class Config:
193
+ populate_by_name = True
194
+
195
+ class UpdateAbsenceRequest(BaseModel):
196
+ """
197
+ Schema for updating absence request.
198
+ """
199
+ uid: Optional[UUID] = Field(
200
+ example="00000000-0000-0000-0000-000000000000", default=None,
201
+ description="Absence UID to update",
202
+ )
203
+ employee_uid: UUID = Field(
204
+ example="00000000-0000-0000-0000-000000000000", alias="employeeUid",
205
+ description="UID of the employee for whom the absence is updated",
206
+ )
207
+ from_date: datetime = Field(
208
+ alias="fromDate",
209
+ description="Absence start date/time (ISO 8601)",
210
+ example="2024-01-10T00:00:00Z",
211
+ )
212
+ to_date: datetime = Field(
213
+ alias="toDate",
214
+ description="Absence end date/time (ISO 8601)",
215
+ example="2024-01-12T23:59:59Z",
216
+ )
217
+ absence_type: int = Field(
218
+ alias="absenceType",
219
+ description="Absence type code",
220
+ example=1,
221
+ )
222
+ company_absence_type_uid: Optional[UUID] = Field(
223
+ example="00000000-0000-0000-0000-000000000000", alias="companyAbsenceTypeUid", default=None,
224
+ description="Company absence type UID",
225
+ )
226
+ note: Optional[str] = Field(
227
+ default=None,
228
+ description="Optional note for the absence",
229
+ example="Medical appointment",
230
+ )
231
+ days: Optional[float] = Field(
232
+ default=None,
233
+ description="Total number of absence days",
234
+ example=1.0,
235
+ )
236
+ project_id: Optional[str] = Field(
237
+ alias="projectId", default=None,
238
+ description="Related project identifier (if any)",
239
+ example="PRJ-1001",
240
+ )
241
+ status: Optional[int] = Field(
242
+ default=None,
243
+ description="Absence status code",
244
+ example=0,
245
+ )
246
+ attachment_uids: Optional[List[UUID]] = Field(
247
+ alias="attachmentUids", default=None,
248
+ description="List of attachment UIDs",
249
+ example=["00000000-0000-0000-0000-000000000000"],
250
+ )
251
+ class Config:
252
+ populate_by_name = True
253
+
254
+ class GetCompanyAbsenceAttachmentLocationAsyncResponse(BaseModel):
255
+ """
256
+ Schema for getting company absence attachment location asynchronously response.
257
+ """
258
+ pass
259
+ class Config:
260
+ populate_by_name = True
261
+
262
+ class InsertAbsencesAsyncRequest(BaseModel):
263
+ """
264
+ Schema for inserting absences asynchronously request.
265
+ """
266
+ absences: List[AbsenceData]
267
+ class Config:
268
+ populate_by_name = True
269
+
270
+ class GetAbsenceCalendarDaysForCompanyRequest(BaseModel):
271
+ """
272
+ Schema for getting absence calendar days for company request.
273
+
274
+ """
275
+ status: Optional[int] = Field(default=None)
276
+ types: Optional[List[int]] = Field(default=None)
277
+ company_absence_type_uids: Optional[List[UUID]] = Field(alias="companyAbsenceTypeUids", default=None)
278
+ employee_uids: Optional[List[UUID]] = Field(alias="employeeUids", default=None)
279
+ company_department_uids: Optional[List[UUID]] = Field(alias="companyDepartmentUids", default=None)
280
+ period: Optional[Dict[str, Any]] = Field(default=None)
281
+ attachments: Optional[int] = Field(default=None)
282
+ skip: Optional[int] = Field(default=None)
283
+ take: Optional[int] = Field(default=None)
284
+ class Config:
285
+ populate_by_name = True
286
+
287
+ class ValidateAbsencesAsyncRequest(BaseModel):
288
+ """
289
+ Schema for validating absences asynchronously request.
290
+ """
291
+ absences: List[AbsenceData]
292
+ class Config:
293
+ populate_by_name = True
294
+
295
+ class SplitEmployeeAbsenceRequest(BaseModel):
296
+ """
297
+ Schema for splitting employee absence request.
298
+ """
299
+ number_of_days: float = Field(alias="numberOfDays")
300
+ payroll_uid: UUID = Field(example="00000000-0000-0000-0000-000000000000", alias="payrollUid")
301
+ class Config:
302
+ populate_by_name = True
303
+
304
+ class GetAbsenceDataPerEmployeeRequest(BaseModel):
305
+ """
306
+ Schema for getting absence data per employee request.
307
+ """
308
+ datefrom: datetime = Field(alias="dateFrom")
309
+ dateto: datetime = Field(alias="dateTo")
310
+ class Config:
311
+ populate_by_name = True
312
+
313
+ # BrynQ Pandera DataFrame Model for Absence Days Per Company
314
+ from pandera.typing import Series
315
+ import pandera as pa
316
+ import pandas as pd
317
+ from brynq_sdk_functions import BrynQPanderaDataFrameModel
318
+
319
+ class AbsenceGet(BrynQPanderaDataFrameModel):
320
+ """Flattened schema for Zenegy Absence Output data"""
321
+ # Employee fields
322
+ employee_title: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee title", alias="employee__title")
323
+ employee_is_active: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Employee active status", alias="employee__isActive")
324
+ employee_is_resigned: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Employee resigned status", alias="employee__isResigned")
325
+ employee_cpr: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee CPR number", alias="employee__cpr")
326
+ employee_salary_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee salary type", alias="employee__salaryType")
327
+ employee_contact_phone: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee contact phone", alias="employee__contactPhone")
328
+ employee_contact_email: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee contact email", alias="employee__contactEmail")
329
+ employee_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee type", alias="employee__type")
330
+ employee_salary_payout_period: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee salary payout period", alias="employee__salaryPayoutPeriod")
331
+ employee_revenue_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee revenue type", alias="employee__revenueType")
332
+ employee_income_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee income type", alias="employee__incomeType")
333
+ employee_holiday_pay_receiver_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee holiday pay receiver type", alias="employee__holidayPayReceiverType")
334
+ employee_extra_holiday_entitlement_rule: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee extra holiday entitlement rule", alias="employee__extraHolidayEntitlementRule")
335
+ employee_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee name", alias="employee__name")
336
+ employee_employee_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee number", alias="employee__employeeNumber")
337
+ employee_extra_employee_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee extra employee number", alias="employee__extraEmployeeNumber")
338
+ employee_id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee ID", alias="employee__id")
339
+ employee_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee UID", alias="employee__uid")
340
+
341
+ # Department fields
342
+ employee_department_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee department name", alias="employee__department__name")
343
+ employee_department_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee department number", alias="employee__department__number")
344
+ employee_department_has_work_schema: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Employee department has work schema", alias="employee__department__hasWorkSchema")
345
+ employee_department_id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee department ID", alias="employee__department__id")
346
+ employee_department_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee department UID", alias="employee__department__uid")
347
+
348
+ # Direct Employee fields (not nested)
349
+ employee_cost_center: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee cost center", alias="employee__costCenter")
350
+ employee_profit_center: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee profit center", alias="employee__profitCenter")
351
+ employee_car_registration_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee car registration number", alias="employee__carRegistrationNumber")
352
+
353
+ # Cost Center fields (nested)
354
+ employee_cost_center_id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee cost center ID", alias="employee__costCenter__id")
355
+ employee_cost_center_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee cost center UID", alias="employee__costCenter__uid")
356
+ employee_cost_center_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee cost center name", alias="employee__costCenter__name")
357
+ employee_cost_center_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee cost center number", alias="employee__costCenter__number")
358
+ employee_cost_center_type: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee cost center type", alias="employee__costCenter__type")
359
+
360
+ # Profit Center fields
361
+ employee_profit_center_id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee profit center ID", alias="employee__profitCenter__id")
362
+ employee_profit_center_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee profit center UID", alias="employee_profitCenter__uid")
363
+ employee_profit_center_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee profit center name", alias="employee__profitCenter__name")
364
+ employee_profit_center_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee profit center number", alias="employee__profitCenter__number")
365
+ employee_profit_center_type: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee profit center type", alias="employee__profitCenter__type")
366
+
367
+ # Absence fields
368
+ from_date: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Absence from date", alias="fromDate")
369
+ to_date: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Absence to date", alias="toDate")
370
+ note: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Absence note", alias="note")
371
+ absence_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Absence type", alias="absenceType")
372
+ status: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Absence status", alias="status")
373
+ days: Optional[Series[pd.Float64Dtype]] = pa.Field(coerce=True, nullable=True, description="Absence days", alias="days")
374
+ project_id: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Project ID", alias="projectId")
375
+ attachment_count: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Attachment count", alias="attachmentCount")
376
+ absence_type_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Absence type name", alias="absenceTypeName")
377
+ employee_payroll_fk: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Employee payroll foreign key", alias="employeePayrollFk")
378
+ id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Absence ID", alias="id")
379
+ uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Absence UID", alias="uid")
380
+
381
+ # Company Absence Type fields
382
+ company_absence_type_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type name", alias="companyAbsenceType__name")
383
+ company_absence_type_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type number", alias="companyAbsenceType__number")
384
+ company_absence_type_absence_type_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type absence type name", alias="companyAbsenceType__absenceTypeName")
385
+ company_absence_type_absence_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type absence type", alias="companyAbsenceType__absenceType")
386
+ company_absence_type_is_custom_absence_type: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type is custom absence type", alias="companyAbsenceType__isCustomAbsenceType")
387
+ company_absence_type_search_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type search name", alias="companyAbsenceType__searchName")
388
+ company_absence_type_id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type ID", alias="companyAbsenceType__id")
389
+ company_absence_type_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company absence type UID", alias="companyAbsenceType__uid")
390
+
391
+ class _Annotation:
392
+ primary_key = "uid"
393
+ foreign_keys = {}
@@ -0,0 +1,42 @@
1
+ # Generated schemas for tag: Companies
2
+
3
+ from pydantic import BaseModel, Field, RootModel
4
+ from typing import Dict, List, Optional, Any
5
+ from uuid import UUID
6
+
7
+ # BrynQ Pandera DataFrame Model for Companies
8
+ from pandera.typing import Series
9
+ import pandera as pa
10
+ import pandas as pd
11
+ from brynq_sdk_functions import BrynQPanderaDataFrameModel
12
+
13
+ class CompaniesGet(BrynQPanderaDataFrameModel):
14
+ """Flattened schema for Zenegy Companies Output data"""
15
+ # Basic company fields
16
+ user_id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="User ID", alias="userId")
17
+ employee_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Employee UID", alias="employeeUid")
18
+ vat_number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="VAT number", alias="vatNumber")
19
+ is_valid: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Is valid flag", alias="isValid")
20
+ purpose_type: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Purpose type", alias="purposeType")
21
+ status: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Status", alias="status")
22
+ source: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Source", alias="source")
23
+ area: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Area", alias="area")
24
+ id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Company ID", alias="id")
25
+ uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company UID", alias="uid")
26
+ name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Company name", alias="name")
27
+ logo_url: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Logo URL", alias="logoUrl")
28
+
29
+ # Roles, products, and modules (as JSON strings since they are lists)
30
+ roles: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Roles list", alias="roles")
31
+ products: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Products list", alias="products")
32
+ modules: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Modules list", alias="modules")
33
+
34
+ # Override app scopes (as JSON string since it's a list of objects)
35
+ override_app_scopes: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Override app scopes", alias="overrideAppScopes")
36
+
37
+ # Identity providers (as JSON string since it's a list of objects)
38
+ identity_providers: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Identity providers", alias="identityProviders")
39
+
40
+ class _Annotation:
41
+ primary_key = "uid"
42
+ foreign_keys = {}
@@ -0,0 +1,48 @@
1
+ # Generated schemas for tag: CompanyCostCenter
2
+
3
+ from pydantic import BaseModel, Field, RootModel
4
+ from typing import Dict, List, Optional, Any
5
+ from uuid import UUID
6
+
7
+ from pandera.typing import Series
8
+ import pandera as pa
9
+ import pandas as pd
10
+ from brynq_sdk_functions import BrynQPanderaDataFrameModel
11
+
12
+
13
+ class CostCenterCreate(BaseModel):
14
+ cost_center_name: str = Field(
15
+ alias="costCenterName",
16
+ description="Cost center display name",
17
+ example="Finance"
18
+ )
19
+ cost_center_code: str = Field(
20
+ alias="costCenterCode",
21
+ description="Cost center code",
22
+ example="FIN"
23
+ )
24
+ type: str = Field(
25
+ description="Cost center type/category",
26
+ example="department"
27
+ )
28
+ employee_uids: Optional[List[UUID]] = Field(
29
+ alias="employeeUids", default=None,
30
+ description="List of employee UIDs assigned to the cost center",
31
+ example=["00000000-0000-0000-0000-000000000000"]
32
+ )
33
+
34
+ class Config:
35
+ populate_by_name = True
36
+
37
+
38
+ class CostCentersGet(BrynQPanderaDataFrameModel):
39
+ """Flattened schema for Zenegy Cost Centers Output data"""
40
+ cost_center_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Cost center name", alias="costCenterName")
41
+ cost_center_code: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Cost center code", alias="costCenterCode")
42
+ type: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Cost center type", alias="type")
43
+ id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Cost center ID", alias="id")
44
+ uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Cost center UID", alias="uid")
45
+
46
+ class _Annotation:
47
+ primary_key = "uid"
48
+ foreign_keys = {}
@@ -0,0 +1,147 @@
1
+ # Generated schemas for tag: CompanyDepartment
2
+
3
+ from pydantic import BaseModel, Field
4
+ from typing import Dict, List, Optional, Any
5
+ from uuid import UUID
6
+
7
+
8
+ class ResponsiblePerson(BaseModel):
9
+ """Schema for responsible person information."""
10
+ income_type: Optional[int] = Field(alias="incomeType", default=None, description="Income type code", example=1)
11
+ holiday_pay_receiver_type: Optional[int] = Field(alias="holidayPayReceiverType", default=None, description="Holiday pay receiver type code", example=2)
12
+ extra_holiday_entitlement_rule: Optional[str] = Field(alias="extraHolidayEntitlementRule", default=None, description="Extra holiday entitlement rule name/code", example="RULE_A")
13
+ name: Optional[str] = Field(default=None, description="Responsible person name", example="Jane Doe")
14
+ employee_number: Optional[str] = Field(alias="employeeNumber", default=None, description="Employee number", example="E-2001")
15
+ extra_employee_number: Optional[str] = Field(alias="extraEmployeeNumber", default=None, description="Secondary employee number", example="EXT-10")
16
+ id: Optional[int] = Field(default=None, description="Internal numeric identifier", example=12)
17
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None, description="Responsible person UID")
18
+
19
+ class Config:
20
+ populate_by_name = True
21
+
22
+
23
+ class CompanyWorkSchema(BaseModel):
24
+ """Schema for company work schema information."""
25
+ name: Optional[str] = Field(default=None, description="Work schema name", example="Standard 7.4h")
26
+ working_hours_per_day: Optional[float] = Field(alias="workingHoursPerDay", default=None, description="Working hours per day", example=7.4)
27
+ can_be_deleted: Optional[bool] = Field(alias="canBeDeleted", default=None, description="Whether this work schema can be deleted", example=True)
28
+ id: Optional[int] = Field(default=None, description="Internal numeric identifier", example=3)
29
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None, description="Work schema UID")
30
+
31
+ class Config:
32
+ populate_by_name = True
33
+
34
+
35
+ class CompanyDepartmentData(BaseModel):
36
+ """Schema for company department data."""
37
+ is_delete_allowed: Optional[bool] = Field(alias="isDeleteAllowed", default=None, description="Is delete allowed for this department", example=True)
38
+ responsible_persons: Optional[List[ResponsiblePerson]] = Field(alias="responsiblePersons", default=None, description="List of responsible persons")
39
+ company_work_schemas: Optional[List[CompanyWorkSchema]] = Field(alias="companyWorkSchemas", default=None, description="List of work schemas for this department")
40
+ name: Optional[str] = Field(default=None, description="Department name", example="Sales")
41
+ number: Optional[str] = Field(default=None, description="Department number/code", example="D-100")
42
+ has_work_schema: Optional[bool] = Field(alias="hasWorkSchema", default=None, description="Whether department has a work schema", example=True)
43
+ id: Optional[int] = Field(default=None, description="Internal numeric identifier", example=15)
44
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None, description="Department UID")
45
+
46
+ class Config:
47
+ populate_by_name = True
48
+
49
+
50
+ class GetCompanyDepartmentsAsyncResponse(BaseModel):
51
+ total_records: Optional[int] = Field(alias="totalRecords", default=None, description="Total records in data source", example=120)
52
+ total_display_records: Optional[int] = Field(alias="totalDisplayRecords", default=None, description="Total records in current page", example=50)
53
+ data: Optional[List[CompanyDepartmentData]] = Field(default=None, description="List of department data entries")
54
+ class Config:
55
+ populate_by_name = True
56
+
57
+
58
+ class InsertCompanyDepartmentRequest(BaseModel):
59
+ companydepartmenttemplateuid: UUID = Field(example="00000000-0000-0000-0000-000000000000", alias="companyDepartmentTemplateUid", description="Template UID to base the department on")
60
+ name: str = Field(description="Department name", example="Support")
61
+ number: str = Field(description="Department number/code", example="D-200")
62
+ responsibleemployeepersons: Optional[List[UUID]] = Field(alias="responsibleEmployeePersons", default=None, description="List of responsible employee UIDs", example=["00000000-0000-0000-0000-000000000000"])
63
+ class Config:
64
+ populate_by_name = True
65
+
66
+
67
+ class GetCompanyDepartmentResponse(BaseModel):
68
+ is_delete_allowed: Optional[bool] = Field(alias="isDeleteAllowed", default=None, description="Is delete allowed for this department", example=True)
69
+ responsible_persons: Optional[List[ResponsiblePerson]] = Field(alias="responsiblePersons", default=None, description="List of responsible persons")
70
+ company_work_schemas: Optional[List[CompanyWorkSchema]] = Field(alias="companyWorkSchemas", default=None, description="List of work schemas for this department")
71
+ name: Optional[str] = Field(default=None, description="Department name", example="Sales")
72
+ number: Optional[str] = Field(default=None, description="Department number/code", example="D-100")
73
+ has_work_schema: Optional[bool] = Field(alias="hasWorkSchema", default=None, description="Whether department has a work schema", example=True)
74
+ id: Optional[int] = Field(default=None, description="Internal numeric identifier", example=15)
75
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None, description="Department UID")
76
+ class Config:
77
+ populate_by_name = True
78
+
79
+
80
+ class GetWholeCompanyDepartmentResponse(BaseModel):
81
+ accountings: Optional[List[Dict[str, Any]]] = Field(default=None, description="Accounting objects related to department")
82
+ is_delete_allowed: Optional[bool] = Field(alias="isDeleteAllowed", default=None, description="Is delete allowed for this department", example=True)
83
+ responsible_persons: Optional[List[ResponsiblePerson]] = Field(alias="responsiblePersons", default=None, description="List of responsible persons")
84
+ company_work_schemas: Optional[List[CompanyWorkSchema]] = Field(alias="companyWorkSchemas", default=None, description="List of work schemas for this department")
85
+ name: Optional[str] = Field(default=None, description="Department name", example="Sales")
86
+ number: Optional[str] = Field(default=None, description="Department number/code", example="D-100")
87
+ has_work_schema: Optional[bool] = Field(alias="hasWorkSchema", default=None, description="Whether department has a work schema", example=True)
88
+ id: Optional[int] = Field(default=None, description="Internal numeric identifier", example=15)
89
+ uid: Optional[UUID] = Field(example="00000000-0000-0000-0000-000000000000", default=None, description="Department UID")
90
+ class Config:
91
+ populate_by_name = True
92
+
93
+
94
+ class GetCompanyDepartmentAccountingsAsyncResponse(BaseModel):
95
+ totalrecords: Optional[int] = Field(alias="totalRecords", default=None, description="Total records in data source", example=120)
96
+ totaldisplayrecords: Optional[int] = Field(alias="totalDisplayRecords", default=None, description="Total records in current page", example=50)
97
+ data: Optional[List[Dict[str, Any]]] = Field(default=None, description="List of accounting entries")
98
+ class Config:
99
+ populate_by_name = True
100
+
101
+
102
+ class GetCompanyDepartmentsListAsyncRequest(BaseModel):
103
+ skip: Optional[int] = Field(default=None, description="Number of records to skip for pagination", example=0)
104
+ take: Optional[int] = Field(default=None, description="Number of records to take for pagination", example=50)
105
+ companydepartmentuids: Optional[List[UUID]] = Field(alias="companyDepartmentUids", default=None, description="Filter by department UIDs", example=["00000000-0000-0000-0000-000000000000"])
106
+ responsiblepersonsuids: Optional[List[UUID]] = Field(alias="responsiblePersonsUids", default=None, description="Filter by responsible person UIDs", example=["00000000-0000-0000-0000-000000000000"])
107
+ departmentsortoptions: Optional[Dict[str, Any]] = Field(alias="departmentSortOptions", default=None, description="Sorting options for departments", example={"field": "name", "direction": "asc"})
108
+ departmentoverrides: Optional[List[bool]] = Field(alias="departmentOverrides", default=None, description="Override flags for department list", example=[True, False])
109
+ class Config:
110
+ populate_by_name = True
111
+
112
+ # BrynQ Pandera DataFrame Model for Departments
113
+ from pandera.typing import Series
114
+ import pandera as pa
115
+ import pandas as pd
116
+ from brynq_sdk_functions import BrynQPanderaDataFrameModel
117
+
118
+ class DepartmentsGet(BrynQPanderaDataFrameModel):
119
+ """Flattened schema for Zenegy Departments Output data"""
120
+ # Basic department fields
121
+ is_delete_allowed: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Is delete allowed", alias="isDeleteAllowed")
122
+ has_override: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Has override", alias="hasOverride")
123
+ name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Department name", alias="name")
124
+ number: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Department number", alias="number")
125
+ has_work_schema: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Has work schema", alias="hasWorkSchema")
126
+ id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Department ID", alias="id")
127
+ uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Department UID", alias="uid")
128
+
129
+ # Responsible persons (as JSON string since it's a list of objects)
130
+ responsible_persons: Optional[Series[object]] = pa.Field(coerce=True, nullable=True, description="Responsible persons list", alias="responsiblePersons")
131
+
132
+ # Finance department dimension (nested object)
133
+ finance_department_dimension: Optional[Series[object]] = pa.Field(coerce=True, nullable=True, description="Finance department dimension", alias="financeDepartmentDimension")
134
+
135
+ # Company work schemas as array (when root-level normalization is used)
136
+ company_work_schemas: Optional[Series[object]] = pa.Field(coerce=True, nullable=True, description="Company work schemas", alias="companyWorkSchemas")
137
+
138
+ # Work schema fields (from expanded companyWorkSchemas)
139
+ work_schema_name: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Work schema name", alias="workSchema__name")
140
+ work_schema_working_hours_per_day: Optional[Series[pd.Float64Dtype]] = pa.Field(coerce=True, nullable=True, description="Working hours per day", alias="workSchema__workingHoursPerDay")
141
+ work_schema_can_be_deleted: Optional[Series[pd.BooleanDtype]] = pa.Field(coerce=True, nullable=True, description="Can be deleted", alias="workSchema__canBeDeleted")
142
+ work_schema_id: Optional[Series[pd.Int64Dtype]] = pa.Field(coerce=True, nullable=True, description="Work schema ID", alias="workSchema__id")
143
+ work_schema_uid: Optional[Series[pd.StringDtype]] = pa.Field(coerce=True, nullable=True, description="Work schema UID", alias="workSchema__uid")
144
+
145
+ class _Annotation:
146
+ primary_key = "uid"
147
+ foreign_keys = {}