brynq-sdk-nmbrs 2.3.1__py3-none-any.whl → 2.3.2.dev0__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.
- brynq_sdk_nmbrs/__init__.py +104 -84
- brynq_sdk_nmbrs/address.py +82 -2
- brynq_sdk_nmbrs/children.py +96 -61
- brynq_sdk_nmbrs/companies.py +45 -1
- brynq_sdk_nmbrs/costcenter.py +53 -8
- brynq_sdk_nmbrs/costunit.py +16 -4
- brynq_sdk_nmbrs/debtors.py +76 -2
- brynq_sdk_nmbrs/department.py +149 -28
- brynq_sdk_nmbrs/document.py +50 -0
- brynq_sdk_nmbrs/employee_wage_tax_settings.py +113 -0
- brynq_sdk_nmbrs/employees.py +119 -24
- brynq_sdk_nmbrs/employment.py +12 -4
- brynq_sdk_nmbrs/function.py +128 -2
- brynq_sdk_nmbrs/leave.py +105 -8
- brynq_sdk_nmbrs/salaries.py +78 -3
- brynq_sdk_nmbrs/schedules.py +77 -3
- brynq_sdk_nmbrs/schemas/address.py +30 -5
- brynq_sdk_nmbrs/schemas/bank.py +0 -2
- brynq_sdk_nmbrs/schemas/children.py +67 -0
- brynq_sdk_nmbrs/schemas/company.py +16 -0
- brynq_sdk_nmbrs/schemas/contracts.py +25 -11
- brynq_sdk_nmbrs/schemas/costcenter.py +57 -18
- brynq_sdk_nmbrs/schemas/costunit.py +0 -2
- brynq_sdk_nmbrs/schemas/days.py +0 -2
- brynq_sdk_nmbrs/schemas/debtor.py +23 -1
- brynq_sdk_nmbrs/schemas/department.py +41 -7
- brynq_sdk_nmbrs/schemas/document.py +13 -0
- brynq_sdk_nmbrs/schemas/employees.py +44 -38
- brynq_sdk_nmbrs/schemas/employment.py +10 -10
- brynq_sdk_nmbrs/schemas/function.py +34 -7
- brynq_sdk_nmbrs/schemas/hours.py +0 -4
- brynq_sdk_nmbrs/schemas/leave.py +12 -1
- brynq_sdk_nmbrs/schemas/manager.py +0 -3
- brynq_sdk_nmbrs/schemas/salary.py +37 -12
- brynq_sdk_nmbrs/schemas/schedules.py +49 -1
- brynq_sdk_nmbrs/schemas/social_insurance.py +39 -6
- brynq_sdk_nmbrs/schemas/wage_tax.py +68 -8
- brynq_sdk_nmbrs/schemas/wage_tax_settings.py +76 -0
- brynq_sdk_nmbrs/schemas/wagecomponents.py +0 -4
- brynq_sdk_nmbrs/social_insurance.py +81 -3
- brynq_sdk_nmbrs/wage_tax.py +105 -4
- {brynq_sdk_nmbrs-2.3.1.dist-info → brynq_sdk_nmbrs-2.3.2.dev0.dist-info}/METADATA +1 -1
- brynq_sdk_nmbrs-2.3.2.dev0.dist-info/RECORD +55 -0
- {brynq_sdk_nmbrs-2.3.1.dist-info → brynq_sdk_nmbrs-2.3.2.dev0.dist-info}/WHEEL +1 -1
- brynq_sdk_nmbrs-2.3.1.dist-info/RECORD +0 -50
- {brynq_sdk_nmbrs-2.3.1.dist-info → brynq_sdk_nmbrs-2.3.2.dev0.dist-info}/top_level.txt +0 -0
|
@@ -1,16 +1,76 @@
|
|
|
1
1
|
import math
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from typing import Annotated, Optional, Union
|
|
4
|
+
|
|
2
5
|
import pandas as pd
|
|
3
6
|
import pandera as pa
|
|
4
|
-
from pandera import Bool
|
|
5
|
-
from pandera.typing import Series, String, Float, DateTime
|
|
6
7
|
import pandera.extensions as extensions
|
|
7
|
-
from
|
|
8
|
-
from typing import
|
|
8
|
+
from pandera import Bool
|
|
9
|
+
from pandera.typing import DateTime, Float, Series, String
|
|
9
10
|
from pydantic import BaseModel, Field, StringConstraints
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
from brynq_sdk_functions import BrynQPanderaDataFrameModel
|
|
11
13
|
|
|
12
14
|
|
|
15
|
+
# ---------------------------
|
|
16
|
+
# REST API Get Schema (Wage Tax Settings History)
|
|
17
|
+
# ---------------------------
|
|
13
18
|
class WageTaxSettingsGet(BrynQPanderaDataFrameModel):
|
|
19
|
+
"""Schema for REST API: GET /companies/{companyId}/employees/wagetaxsettings"""
|
|
20
|
+
employee_id: Series[String] = pa.Field(coerce=True, description="Employee ID", alias="employeeId")
|
|
21
|
+
wage_tax_setting_id: Series[String] = pa.Field(coerce=True, description="Wage Tax Setting ID", alias="wageTaxSettingId")
|
|
22
|
+
start_date: Series[DateTime] = pa.Field(coerce=True, description="Start Date", alias="startDate")
|
|
23
|
+
created_at: Series[DateTime] = pa.Field(coerce=True, description="Created At", alias="createdAt")
|
|
24
|
+
payroll_tax_reduction: Series[Bool] = pa.Field(coerce=True, nullable=True, description="Payroll Tax Reduction", alias="payrollTaxReduction")
|
|
25
|
+
type_of_income: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Type of Income", alias="typeOfIncome")
|
|
26
|
+
color_table: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Color Table", alias="colorTable")
|
|
27
|
+
period_table: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Period Table", alias="periodTable")
|
|
28
|
+
special_table: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Special Table", alias="specialTable")
|
|
29
|
+
payroll_tax: Series[Bool] = pa.Field(coerce=True, nullable=True, description="Payroll Tax", alias="payrollTax")
|
|
30
|
+
benefit_scheme: Series[Bool] = pa.Field(coerce=True, nullable=True, description="Benefit Scheme", alias="benefitScheme")
|
|
31
|
+
auto_small_jobs: Series[Bool] = pa.Field(coerce=True, nullable=True, description="Auto Small Jobs Regulation", alias="autoSmallJobs")
|
|
32
|
+
yearly_salary: Series[pd.Float64Dtype] = pa.Field(coerce=True, nullable=True, description="Yearly Salary", alias="yearlySalary")
|
|
33
|
+
deviation_special_rate: Series[pd.Float64Dtype] = pa.Field(coerce=True, nullable=True, description="Deviation Special Rate Payroll Tax Deduction", alias="deviationSpecialRatePayrollTaxDeduction")
|
|
34
|
+
code_tax_reduction: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Code Tax Reduction", alias="codeTaxReduction")
|
|
35
|
+
holiday_vouchers: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Holiday Vouchers", alias="holidayVouchers")
|
|
36
|
+
code_30_percent_rule: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Code Calculate 30 Percent Rule", alias="codeCalculate30PercentRule")
|
|
37
|
+
|
|
38
|
+
class _Annotation:
|
|
39
|
+
primary_key = "wage_tax_setting_id"
|
|
40
|
+
foreign_keys = {
|
|
41
|
+
"employee_id": {
|
|
42
|
+
"parent_schema": "EmployeeSchema",
|
|
43
|
+
"parent_column": "employee_id",
|
|
44
|
+
"cardinality": "N:1"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class WageTaxSettingsCreate(BaseModel):
|
|
50
|
+
"""Schema for REST API: POST /employees/{employeeId}/wagetaxsetting"""
|
|
51
|
+
start_date: datetime = Field(..., example="2024-01-01T00:00:00Z", description="Start Date", alias="startDate")
|
|
52
|
+
payroll_tax_reduction: Optional[bool] = Field(None, example=True, description="Payroll Tax Reduction", alias="payrollTaxReduction")
|
|
53
|
+
type_of_income: Optional[int] = Field(None, example=15, description="Type of Income", alias="typeOfIncome")
|
|
54
|
+
color_table: Optional[int] = Field(None, example=1, description="Color Table", alias="colorTable")
|
|
55
|
+
period_table: Optional[int] = Field(None, example=2, description="Period Table", alias="periodTable")
|
|
56
|
+
special_table: Optional[int] = Field(None, example=0, description="Special Table", alias="specialTable")
|
|
57
|
+
payroll_tax: Optional[bool] = Field(None, example=True, description="Payroll Tax", alias="payrollTax")
|
|
58
|
+
benefit_scheme: Optional[bool] = Field(None, example=True, description="Benefit Scheme", alias="benefitScheme")
|
|
59
|
+
auto_small_jobs: Optional[bool] = Field(None, example=False, description="Auto Small Jobs Regulation", alias="autoSmallJobs")
|
|
60
|
+
yearly_salary: Optional[float] = Field(None, example=45000.00, description="Yearly Salary", alias="yearlySalary")
|
|
61
|
+
deviation_special_rate: Optional[float] = Field(None, example=0.0, description="Deviation Special Rate Payroll Tax Deduction", alias="deviationSpecialRatePayrollTaxDeduction")
|
|
62
|
+
code_tax_reduction: Optional[int] = Field(None, example=0, description="Code Tax Reduction", alias="codeTaxReduction")
|
|
63
|
+
holiday_vouchers: Optional[int] = Field(None, example=0, description="Holiday Vouchers", alias="holidayVouchers")
|
|
64
|
+
code_30_percent_rule: Optional[int] = Field(None, example=0, description="Code Calculate 30 Percent Rule", alias="codeCalculate30PercentRule")
|
|
65
|
+
|
|
66
|
+
class Config:
|
|
67
|
+
populate_by_name = True
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# ---------------------------
|
|
71
|
+
# SOAP API Get Schema (Company Wage Tax List)
|
|
72
|
+
# ---------------------------
|
|
73
|
+
class CompanyWageTaxGet(BrynQPanderaDataFrameModel):
|
|
14
74
|
wagetax_id: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Loonaangifte ID", alias="LoonaangifteID")
|
|
15
75
|
serial_number: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Serial Number", alias="SerialNumber")
|
|
16
76
|
payment_reference: Series[String] = pa.Field(coerce=True, description="Payment Reference", alias="PaymentReference")
|
|
@@ -19,8 +79,8 @@ class WageTaxSettingsGet(BrynQPanderaDataFrameModel):
|
|
|
19
79
|
year: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Year", alias="Year")
|
|
20
80
|
status: Series[String] = pa.Field(coerce=True, description="Status", alias="Status")
|
|
21
81
|
sent_at: Series[DateTime] = pa.Field(coerce=True, description="Sent At", alias="SentAt")
|
|
22
|
-
period_start: Series[
|
|
23
|
-
period_end: Series[
|
|
82
|
+
period_start: Series[String] = pa.Field(coerce=True, description="Tijdvak Start", alias="TijdvakStart")
|
|
83
|
+
period_end: Series[String] = pa.Field(coerce=True, description="Tijdvak End", alias="TijdvakEnd")
|
|
24
84
|
correction_period_start: Series[DateTime] = pa.Field(nullable=True, coerce=True, description="Correction Tijdvak Start", alias="CorrectionTijdvakStart")
|
|
25
85
|
correction_period_end: Series[DateTime] = pa.Field(nullable=True, coerce=True, description="Correction Tijdvak End", alias="CorrectionTijdvakEnd")
|
|
26
86
|
|
|
@@ -53,7 +113,7 @@ class WageTaxGet(BrynQPanderaDataFrameModel):
|
|
|
53
113
|
wage_tax_id: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Wage Tax ID", alias="Id")
|
|
54
114
|
employee_id: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Employee ID", alias="EmployeeId")
|
|
55
115
|
yearly_salary: Series[pd.Float64Dtype] = pa.Field(coerce=True, description="Yearly Salary", alias="JaarloonBT")
|
|
56
|
-
deviation_special_rate_payroll_tax_deduction: Series[
|
|
116
|
+
deviation_special_rate_payroll_tax_deduction: Series[str] = pa.Field(coerce=True, description="Afw Bijz Tarief LH", alias="AfwBijzTariefLH")
|
|
57
117
|
auto_small_jobs: Series[Bool] = pa.Field(coerce=True, description="Auto Kleine Banen Regeling", alias="AutoKleineBanenRegeling")
|
|
58
118
|
payroll_tax_deduction: Series[Bool] = pa.Field(coerce=True, description="Loonheffingkorting", alias="Loonheffingkorting")
|
|
59
119
|
benefit_scheme: Series[Bool] = pa.Field(coerce=True, description="Voordeelreg", alias="Voordeelreg")
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
import pandera as pa
|
|
5
|
+
from pandera import Bool
|
|
6
|
+
from pandera.typing import DateTime, Float, Series, String
|
|
7
|
+
from pydantic import BaseModel, Field, model_serializer
|
|
8
|
+
|
|
9
|
+
from brynq_sdk_functions import BrynQPanderaDataFrameModel
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# ---------------------------
|
|
13
|
+
# Get Schemas
|
|
14
|
+
# ---------------------------
|
|
15
|
+
class EmployeeWageTaxSettingsGet(BrynQPanderaDataFrameModel):
|
|
16
|
+
employee_id: Series[String] = pa.Field(coerce=True, description="Employee unique identifier", alias="employeeId")
|
|
17
|
+
wage_tax_settings_id: Series[String] = pa.Field(coerce=True, description="Wage Tax Settings ID", alias="wageTaxSettingsId")
|
|
18
|
+
wage_tax: Series[Bool] = pa.Field(coerce=True, nullable=True, description="Wage Tax", alias="wageTax")
|
|
19
|
+
wage_tax_rebate: Series[Bool] = pa.Field(coerce=True, nullable=True, description="Loonheffingskorting", alias="wageTaxRebate")
|
|
20
|
+
single_elderly_discount: Series[Bool] = pa.Field(coerce=True, nullable=True, description="Single Elderly Discount", alias="singleElderlyDiscount")
|
|
21
|
+
color_table: Series[String] = pa.Field(coerce=True, nullable=True, description="List of available color table values for wage tax settings", alias="colorTable")
|
|
22
|
+
period_table: Series[String] = pa.Field(coerce=True, nullable=True, description="List of available period table values for wage tax settings", alias="periodTable")
|
|
23
|
+
income_type: Series[String] = pa.Field(coerce=True, nullable=True, description="Income Type", alias="incomeType")
|
|
24
|
+
special_annual_salary_rate: Series[Float] = pa.Field(coerce=True, nullable=True, description="Loonheffing BT", alias="specialAnnualSalaryRate")
|
|
25
|
+
special_table: Series[String] = pa.Field(coerce=True, nullable=True, description="Special Table", alias="specialTable")
|
|
26
|
+
different_special_rate: Series[String] = pa.Field(coerce=True, nullable=True, description="Afwijkend Bijzonder tarief %", alias="differentSpecialRate")
|
|
27
|
+
calc_30_percent_ruling: Series[String] = pa.Field(coerce=True, nullable=True, description="List of available 30 Percent Ruling Calculation types", alias="Calc30PercentRuling.Cal30PercentRuling")
|
|
28
|
+
calc_30_percent_ruling_end_period: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="30 Percent Ruling End Period", alias="Calc30PercentRuling.endPeriod")
|
|
29
|
+
calc_30_percent_ruling_end_year: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="30 Percent Ruling End Year", alias="Calc30PercentRuling.endYear")
|
|
30
|
+
period_year: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Period Year", alias="period.year")
|
|
31
|
+
period_period: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True, description="Period Period", alias="period.period")
|
|
32
|
+
created_at: Series[DateTime] = pa.Field(coerce=True, nullable=True, description="Created At", alias="createdAt")
|
|
33
|
+
|
|
34
|
+
class _Annotation:
|
|
35
|
+
primary_key = "wage_tax_settings_id"
|
|
36
|
+
foreign_keys = {
|
|
37
|
+
"employee_id": {
|
|
38
|
+
"parent_schema": "EmployeeSchema",
|
|
39
|
+
"parent_column": "employee_id",
|
|
40
|
+
"cardinality": "N:1"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# ---------------------------
|
|
45
|
+
# Upload Schemas
|
|
46
|
+
# ---------------------------
|
|
47
|
+
class Period(BaseModel):
|
|
48
|
+
period_year: int = Field(..., ge=1900, le=2100, example=2021, description="Year", alias="year")
|
|
49
|
+
period_period: int = Field(..., ge=1, le=53, example=4, description="Period", alias="period")
|
|
50
|
+
|
|
51
|
+
class Calc30PercentRuling(BaseModel):
|
|
52
|
+
cal_30_percent_ruling: Optional[str] = Field(None, example="None", description="List of available 30 Percent Ruling Calculation types", alias="Cal30PercentRuling")
|
|
53
|
+
end_period: Optional[int] = Field(None, example=8, description="30 Percent Ruling End Period", alias="endPeriod")
|
|
54
|
+
end_year: Optional[int] = Field(None, example=2025, description="30 Percent Ruling End Year", alias="endYear")
|
|
55
|
+
|
|
56
|
+
class EmployeeWageTaxSettingsCreate(BaseModel):
|
|
57
|
+
wage_tax: bool = Field(..., example=True, description="Wage Tax", alias="wageTax")
|
|
58
|
+
wage_tax_rebate: bool = Field(..., example=True, description="Loonheffingskorting", alias="wageTaxRebate")
|
|
59
|
+
single_elderly_discount: bool = Field(..., example=True, description="Single Elderly Discount", alias="singleElderlyDiscount")
|
|
60
|
+
color_table: str = Field(..., example="White", description="List of available color table values for wage tax settings", alias="colorTable")
|
|
61
|
+
period_table: str = Field(..., example="Month", description="List of available period table values for wage tax settings", alias="periodTable")
|
|
62
|
+
income_type: str = Field(..., description="Income Type", alias="incomeType")
|
|
63
|
+
special_annual_salary_rate: Optional[float] = Field(None, ge=0, example=32000.0, description="Loonheffing BT", alias="specialAnnualSalaryRate")
|
|
64
|
+
special_table: str = Field(..., description="Special Table", alias="specialTable")
|
|
65
|
+
different_special_rate: Optional[float] = Field(None, example=0.0, description="Afwijkend Bijzonder tarief %", alias="differentSpecialRate")
|
|
66
|
+
calc_30_percent_ruling: Optional[Calc30PercentRuling] = Field(None, description="Calc 30 percent ruling", alias="Calc30PercentRuling")
|
|
67
|
+
period: Period = Field(..., description="Period", alias="period")
|
|
68
|
+
|
|
69
|
+
@model_serializer(mode='wrap')
|
|
70
|
+
def serialize_model(self, serializer, info):
|
|
71
|
+
data = serializer(self)
|
|
72
|
+
# Exclude Calc30PercentRuling if it exists but all its nested fields are None
|
|
73
|
+
if 'Calc30PercentRuling' in data and data['Calc30PercentRuling'] is not None:
|
|
74
|
+
if isinstance(data['Calc30PercentRuling'], dict) and all(v is None for v in data['Calc30PercentRuling'].values()):
|
|
75
|
+
data.pop('Calc30PercentRuling')
|
|
76
|
+
return data
|
|
@@ -65,7 +65,6 @@ class PeriodPost(BaseModel):
|
|
|
65
65
|
period: int = Field(..., ge=1, le=53, example=4, description="Period", alias="period")
|
|
66
66
|
|
|
67
67
|
class FixedWageComponentCreate(BaseModel):
|
|
68
|
-
employee_id: str = Field(..., description="Employee identifier", alias="employeeId")
|
|
69
68
|
code: int = Field(..., ge=1, example=1100, description="Wage Component Code", alias="code")
|
|
70
69
|
value: float = Field(..., ge=0, example=500, description="Wage Component Value", alias="value")
|
|
71
70
|
end_year: Optional[int] = Field(None, ge=1900, le=2100, example=2023, description="End Year", alias="endYear")
|
|
@@ -77,7 +76,6 @@ class FixedWageComponentCreate(BaseModel):
|
|
|
77
76
|
unprotected_mode: Optional[bool] = Field(None, example=True, description="Unprotected Mode", alias="unprotectedMode")
|
|
78
77
|
|
|
79
78
|
class FixedWageComponentUpdate(BaseModel):
|
|
80
|
-
employee_id: str = Field(..., description="Employee identifier", alias="employeeId")
|
|
81
79
|
fixed_wage_component_id: str = Field(..., example="643c6b90-57c6-4199-9e4e-ded553572d78", description="Fixed Wage Component ID", alias="fixedWageComponentId")
|
|
82
80
|
code: Optional[int] = Field(None, ge=1, example=1100, description="Wage Component Code", alias="code")
|
|
83
81
|
value: Optional[float] = Field(None, ge=0, example=500, description="Wage Component Value", alias="value")
|
|
@@ -90,7 +88,6 @@ class FixedWageComponentUpdate(BaseModel):
|
|
|
90
88
|
unprotected_mode: Optional[bool] = Field(None, example=True, description="Unprotected Mode", alias="unprotectedMode")
|
|
91
89
|
|
|
92
90
|
class VariableWageComponentCreate(BaseModel):
|
|
93
|
-
employee_id: str = Field(..., description="Employee identifier", alias="employeeId")
|
|
94
91
|
code: int = Field(..., ge=1, example=3045, description="Wage Component Code", alias="code")
|
|
95
92
|
value: float = Field(..., ge=0, example=200, description="Wage Component Value", alias="value")
|
|
96
93
|
comment: Optional[str] = Field(None, example="comment", description="Comment", alias="comment")
|
|
@@ -100,7 +97,6 @@ class VariableWageComponentCreate(BaseModel):
|
|
|
100
97
|
unprotected_mode: Optional[bool] = Field(None, example=True, description="Unprotected Mode", alias="unprotectedMode")
|
|
101
98
|
|
|
102
99
|
class VariableWageComponentUpdate(BaseModel):
|
|
103
|
-
employee_id: str = Field(..., description="Employee identifier", alias="employeeId")
|
|
104
100
|
variable_wage_component_id: str = Field(..., example="7fc59095-daed-4746-a7f8-a454e38e3683", description="Variable Wage Component ID", alias="variableWageComponentId")
|
|
105
101
|
code: Optional[int] = Field(None, ge=1, example=3045, description="Wage Component Code", alias="code")
|
|
106
102
|
value: Optional[float] = Field(None, ge=0, example=2200, description="Wage Component Value", alias="value")
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
from typing import Any, Dict,
|
|
1
|
+
from typing import Any, Dict, Union, Tuple
|
|
2
2
|
import pandas as pd
|
|
3
3
|
|
|
4
|
-
from .schemas.social_insurance import SocialInsuranceUpdate
|
|
4
|
+
from .schemas.social_insurance import SocialInsuranceUpdate, SocialInsuranceGet
|
|
5
5
|
from zeep.exceptions import Fault
|
|
6
6
|
from zeep.helpers import serialize_object
|
|
7
|
-
# import logging
|
|
8
7
|
from brynq_sdk_functions import Functions
|
|
9
8
|
|
|
10
9
|
|
|
@@ -13,6 +12,85 @@ class SocialInsurance:
|
|
|
13
12
|
self.nmbrs = nmbrs
|
|
14
13
|
self.soap_client_employees = nmbrs.soap_client_employees
|
|
15
14
|
|
|
15
|
+
def get(self, employee_id: Union[int, str]) -> Tuple[pd.DataFrame, pd.DataFrame]:
|
|
16
|
+
"""
|
|
17
|
+
Get current social insurance settings for an employee.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
employee_id: The ID of the employee
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
Tuple of (valid_data, invalid_data) DataFrames
|
|
24
|
+
"""
|
|
25
|
+
if self.nmbrs.mock_mode:
|
|
26
|
+
return pd.DataFrame(), pd.DataFrame()
|
|
27
|
+
|
|
28
|
+
try:
|
|
29
|
+
response = self.nmbrs.soap_client_employees.service.SVW_GetCurrent(
|
|
30
|
+
EmployeeId=int(employee_id),
|
|
31
|
+
_soapheaders={'AuthHeaderWithDomain': self.nmbrs.soap_auth_header_employees}
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
if response:
|
|
35
|
+
serialized_response = serialize_object(response)
|
|
36
|
+
if not isinstance(serialized_response, list):
|
|
37
|
+
serialized_response = [serialized_response]
|
|
38
|
+
df = pd.DataFrame(serialized_response)
|
|
39
|
+
df['employee_id'] = str(employee_id)
|
|
40
|
+
|
|
41
|
+
valid_data, invalid_data = Functions.validate_data(df=df, schema=SocialInsuranceGet, debug=True)
|
|
42
|
+
return valid_data, invalid_data
|
|
43
|
+
else:
|
|
44
|
+
return pd.DataFrame(), pd.DataFrame()
|
|
45
|
+
|
|
46
|
+
except Fault as e:
|
|
47
|
+
raise Exception(f"SOAP request failed: {str(e)}")
|
|
48
|
+
except Exception as e:
|
|
49
|
+
raise Exception(f"Failed to get Social Insurance: {str(e)}")
|
|
50
|
+
|
|
51
|
+
def get_all_by_company(self, company_id: Union[int, str]) -> Tuple[pd.DataFrame, pd.DataFrame]:
|
|
52
|
+
"""
|
|
53
|
+
Get all social insurance settings for all employees in a company.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
company_id: The ID of the company
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
Tuple of (valid_data, invalid_data) DataFrames
|
|
60
|
+
"""
|
|
61
|
+
if self.nmbrs.mock_mode:
|
|
62
|
+
return pd.DataFrame(), pd.DataFrame()
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
response = self.nmbrs.soap_client_employees.service.SVW_GetAll_AllEmployeesByCompany(
|
|
66
|
+
CompanyID=int(company_id),
|
|
67
|
+
_soapheaders={'AuthHeaderWithDomain': self.nmbrs.soap_auth_header_employees}
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
if response:
|
|
71
|
+
all_data = []
|
|
72
|
+
for emp in response:
|
|
73
|
+
emp_id = emp.EmployeeId
|
|
74
|
+
if emp.EmployeeSVWSettings and emp.EmployeeSVWSettings.EmployeeSVWSettings:
|
|
75
|
+
for svw in emp.EmployeeSVWSettings.EmployeeSVWSettings:
|
|
76
|
+
svw_data = serialize_object(svw)
|
|
77
|
+
svw_data['employee_id'] = str(emp_id)
|
|
78
|
+
all_data.append(svw_data)
|
|
79
|
+
|
|
80
|
+
if all_data:
|
|
81
|
+
df = pd.DataFrame(all_data)
|
|
82
|
+
valid_data, invalid_data = Functions.validate_data(df=df, schema=SocialInsuranceGet, debug=True)
|
|
83
|
+
return valid_data, invalid_data
|
|
84
|
+
else:
|
|
85
|
+
return pd.DataFrame(), pd.DataFrame()
|
|
86
|
+
else:
|
|
87
|
+
return pd.DataFrame(), pd.DataFrame()
|
|
88
|
+
|
|
89
|
+
except Fault as e:
|
|
90
|
+
raise Exception(f"SOAP request failed: {str(e)}")
|
|
91
|
+
except Exception as e:
|
|
92
|
+
raise Exception(f"Failed to get Social Insurance for company: {str(e)}")
|
|
93
|
+
|
|
16
94
|
def update(self, data: Dict[str, Any]) -> pd.DataFrame:
|
|
17
95
|
try:
|
|
18
96
|
social_insurance_model = SocialInsuranceUpdate(**data)
|
brynq_sdk_nmbrs/wage_tax.py
CHANGED
|
@@ -1,14 +1,115 @@
|
|
|
1
1
|
from typing import Any, Dict, List, Union, Tuple
|
|
2
2
|
import pandas as pd
|
|
3
|
-
|
|
3
|
+
import requests
|
|
4
|
+
from .schemas.wage_tax import (
|
|
5
|
+
WageTaxGet, WageTaxUpdate, CompanyWageTaxGet,
|
|
6
|
+
WageTaxSettingsGet, WageTaxSettingsCreate
|
|
7
|
+
)
|
|
4
8
|
from zeep.exceptions import Fault
|
|
5
9
|
from zeep.ns import WSDL, SOAP_ENV_11
|
|
6
10
|
from zeep.xsd import ComplexType, Element, String
|
|
7
11
|
from zeep.helpers import serialize_object
|
|
8
|
-
# import logging
|
|
9
12
|
from brynq_sdk_functions import Functions
|
|
10
13
|
|
|
11
14
|
|
|
15
|
+
class WageTaxSettings:
|
|
16
|
+
"""Wage Tax Settings History - uses REST API."""
|
|
17
|
+
|
|
18
|
+
def __init__(self, nmbrs):
|
|
19
|
+
self.nmbrs = nmbrs
|
|
20
|
+
|
|
21
|
+
def get(self,
|
|
22
|
+
created_from: str = None,
|
|
23
|
+
employee_id: str = None) -> Tuple[pd.DataFrame, pd.DataFrame]:
|
|
24
|
+
"""
|
|
25
|
+
Get wage tax settings history for all employees across all companies.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
created_from: Optional filter to get settings created from a specific date (ISO format)
|
|
29
|
+
employee_id: Optional filter to get settings for a specific employee
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Tuple of (valid_settings, invalid_settings) DataFrames
|
|
33
|
+
"""
|
|
34
|
+
wage_tax_settings = pd.DataFrame()
|
|
35
|
+
for company in self.nmbrs.company_ids:
|
|
36
|
+
wage_tax_settings = pd.concat([wage_tax_settings, self._get(company, created_from, employee_id)])
|
|
37
|
+
|
|
38
|
+
valid_settings, invalid_settings = Functions.validate_data(
|
|
39
|
+
df=wage_tax_settings,
|
|
40
|
+
schema=WageTaxSettingsGet,
|
|
41
|
+
debug=True
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
return valid_settings, invalid_settings
|
|
45
|
+
|
|
46
|
+
def _get(self,
|
|
47
|
+
company_id: str,
|
|
48
|
+
created_from: str = None,
|
|
49
|
+
employee_id: str = None) -> pd.DataFrame:
|
|
50
|
+
"""
|
|
51
|
+
Get wage tax settings history for a specific company.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
company_id: The ID of the company
|
|
55
|
+
created_from: Optional filter to get settings created from a specific date
|
|
56
|
+
employee_id: Optional filter to get settings for a specific employee
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
DataFrame containing wage tax settings history
|
|
60
|
+
"""
|
|
61
|
+
params = {}
|
|
62
|
+
if created_from:
|
|
63
|
+
params['createdFrom'] = created_from
|
|
64
|
+
if employee_id:
|
|
65
|
+
params['employeeId'] = employee_id
|
|
66
|
+
|
|
67
|
+
request = requests.Request(
|
|
68
|
+
method='GET',
|
|
69
|
+
url=f"{self.nmbrs.base_url}companies/{company_id}/employees/wagetaxsettings",
|
|
70
|
+
params=params
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
data = self.nmbrs.get_paginated_result(request)
|
|
74
|
+
df = pd.json_normalize(
|
|
75
|
+
data,
|
|
76
|
+
record_path='wageTaxSettings',
|
|
77
|
+
meta=['employeeId']
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return df
|
|
81
|
+
|
|
82
|
+
def create(self, employee_id: str, data: Dict[str, Any]):
|
|
83
|
+
"""
|
|
84
|
+
Create a new wage tax setting for an employee using Pydantic validation.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
employee_id: The ID of the employee
|
|
88
|
+
data: Dictionary containing wage tax settings data with fields matching
|
|
89
|
+
the EmployeeWageTaxSettingsCreate schema (using camelCase field names)
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
Response from the API
|
|
93
|
+
"""
|
|
94
|
+
# Validate with Pydantic model
|
|
95
|
+
nested_data = self.nmbrs.flat_dict_to_nested_dict(data, WageTaxSettingsCreate)
|
|
96
|
+
wage_tax_model = WageTaxSettingsCreate(**nested_data)
|
|
97
|
+
|
|
98
|
+
if self.nmbrs.mock_mode:
|
|
99
|
+
return wage_tax_model
|
|
100
|
+
|
|
101
|
+
# Convert validated model to dict for API payload
|
|
102
|
+
payload = wage_tax_model.model_dump(exclude_none=True, by_alias=True)
|
|
103
|
+
|
|
104
|
+
# Send request
|
|
105
|
+
resp = self.nmbrs.session.post(
|
|
106
|
+
url=f"{self.nmbrs.base_url}employees/{employee_id}/wagetaxsetting",
|
|
107
|
+
json=payload,
|
|
108
|
+
timeout=self.nmbrs.timeout
|
|
109
|
+
)
|
|
110
|
+
return resp
|
|
111
|
+
|
|
112
|
+
|
|
12
113
|
class WageTax:
|
|
13
114
|
def __init__(self, nmbrs):
|
|
14
115
|
self.nmbrs = nmbrs
|
|
@@ -33,7 +134,7 @@ class WageTax:
|
|
|
33
134
|
wagetax_settings_temp['companyId'] = company['number']
|
|
34
135
|
wagetax_settings = pd.concat([wagetax_settings, wagetax_settings_temp])
|
|
35
136
|
|
|
36
|
-
valid_wagetax_settings, invalid_wagetax_settings = Functions.validate_data(df=wagetax_settings, schema=
|
|
137
|
+
valid_wagetax_settings, invalid_wagetax_settings = Functions.validate_data(df=wagetax_settings, schema=CompanyWageTaxGet, debug=True)
|
|
37
138
|
|
|
38
139
|
# No validation schema for now, but could be added later
|
|
39
140
|
return valid_wagetax_settings, invalid_wagetax_settings
|
|
@@ -94,7 +195,7 @@ class WageTax:
|
|
|
94
195
|
auth_header = self.nmbrs._get_soap_auth_header_employees()
|
|
95
196
|
|
|
96
197
|
# Make SOAP request with the proper header structure
|
|
97
|
-
response = self.soap_client_employees.service.
|
|
198
|
+
response = self.soap_client_employees.service.WageTax_GetList(
|
|
98
199
|
EmployeeId=employee_id,
|
|
99
200
|
_soapheaders=[auth_header]
|
|
100
201
|
)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
brynq_sdk_nmbrs/__init__.py,sha256=nLoRHD7jH2z521_hyeG0uMPEAvpz-BFQ1nUmgWWwRJI,10889
|
|
2
|
+
brynq_sdk_nmbrs/absence.py,sha256=xNzoDgw0Jj-JYS68lpwNzbrDy3BKsR-Iz-anlJW7YS0,4658
|
|
3
|
+
brynq_sdk_nmbrs/address.py,sha256=x_AmaNPp-rjsHie2i6EfiC5hYoZQbJxiLYB7-REvEyg,5427
|
|
4
|
+
brynq_sdk_nmbrs/bank.py,sha256=2zZ9pCEdPkxvjqyyo0bfZw0JpJpzDBXZVNmO3lHjHGQ,4165
|
|
5
|
+
brynq_sdk_nmbrs/children.py,sha256=jlA8R0fLTwq53TTYZQPar01iZWtZgGiDnZxdIELXKGc,4377
|
|
6
|
+
brynq_sdk_nmbrs/companies.py,sha256=e4I6mjItbuQN-ZeEe1I4HD-4x3lW5brTAc0C6fMEloQ,5243
|
|
7
|
+
brynq_sdk_nmbrs/contract.py,sha256=lccpAbhNjj4x45WOnF7h2LlBG5XCXelnis7WyPvJJrE,4527
|
|
8
|
+
brynq_sdk_nmbrs/costcenter.py,sha256=eT_tHPI5VzC1Do46fYlXbv1Pi4l9izi6b03eXJkjfLg,7923
|
|
9
|
+
brynq_sdk_nmbrs/costunit.py,sha256=AUpik9lz-HaE23Z1_kw0dWdcgaBR9m0UDUK8AIcXj-E,3269
|
|
10
|
+
brynq_sdk_nmbrs/days.py,sha256=T2ZdMCN1iE6WseX40Hn8-iNRCz47kWUuwNVRwQJX7TY,4534
|
|
11
|
+
brynq_sdk_nmbrs/debtors.py,sha256=5YRqi3n6XoI3ccubRt6AnEj80oAGsAJjUlss_dwZxVo,3274
|
|
12
|
+
brynq_sdk_nmbrs/department.py,sha256=uhV-ZlnfcrhhZznXYiWSoySRynE73AW5XuD7CWYEqNM,8324
|
|
13
|
+
brynq_sdk_nmbrs/document.py,sha256=9t1l9oN2k6xZj0OkhBRjvVijGTuQNM_5o5AyYloJvY8,2539
|
|
14
|
+
brynq_sdk_nmbrs/employee_wage_tax_settings.py,sha256=mFFZ8ltivztBOSLG-V_bfJgaxMVLefr6syfBHZQLmfQ,4031
|
|
15
|
+
brynq_sdk_nmbrs/employees.py,sha256=O-agb_l8cb3cFjZ46u4XekrNF2B2TZwyen6EnkOeQqI,10944
|
|
16
|
+
brynq_sdk_nmbrs/employment.py,sha256=L5Oc-5Y3bj2Eqm5u8lDGIgwYSS-leK8fRaVQKePCLhI,3839
|
|
17
|
+
brynq_sdk_nmbrs/function.py,sha256=QuDHrgVy_KNP2rM6L53MXKYJsr5FZlb8vwTcW3AM6P8,7379
|
|
18
|
+
brynq_sdk_nmbrs/hours.py,sha256=3pbl6IA8BBC6wrfTvkJha1LJi4SjrZCBINUANhuDvDQ,8140
|
|
19
|
+
brynq_sdk_nmbrs/leave.py,sha256=XL3xXNUmkjpbvoXjY42m4uLm4rfB4WsvU0WDP2t88N8,8270
|
|
20
|
+
brynq_sdk_nmbrs/manager.py,sha256=wE2UJYPsKUN5jv3HmLpVAERcxcChwoMLfFgja8vxM6U,9441
|
|
21
|
+
brynq_sdk_nmbrs/salaries.py,sha256=zGKPrkvm1672gYR7aVwXUnLP3AbyoUhWn2TGZANLggA,5500
|
|
22
|
+
brynq_sdk_nmbrs/salary_tables.py,sha256=T7_bJE-CtRF08FWyLJnXm5Q3Q5Usozx4iCByqoTPOwo,9390
|
|
23
|
+
brynq_sdk_nmbrs/schedules.py,sha256=vXJ3iZ3BatosL3V_v7UlABrTJVmXXpgSItCrxrCfDXc,5714
|
|
24
|
+
brynq_sdk_nmbrs/social_insurance.py,sha256=4hmuXoeHGl2LUhXwtRL2KMXFu9iyrUgsYHTgUAINMSA,5105
|
|
25
|
+
brynq_sdk_nmbrs/wage_tax.py,sha256=ukNV-BxOHiwPm0ktYdvuul-S6RZuJWHN34RpAdV1rH4,9554
|
|
26
|
+
brynq_sdk_nmbrs/wagecomponents.py,sha256=nkk7HGlcdEx2K3VQ2G2zwLbNMFPNHQK4YwOEnFBtDj0,9539
|
|
27
|
+
brynq_sdk_nmbrs/schemas/__init__.py,sha256=rwMb9AJSBXn_50SOa1rIvwOsCrtpj3vQxjXioxrxuyI,2301
|
|
28
|
+
brynq_sdk_nmbrs/schemas/absence.py,sha256=f2ZDpy0qnyUyCjk2JjTNCazB_12lmP462MkI4eyf3ws,3320
|
|
29
|
+
brynq_sdk_nmbrs/schemas/address.py,sha256=iQvJEseqjBKzITJUpojmTHEhTExeQ7Ps0MrVlwbWIUE,5763
|
|
30
|
+
brynq_sdk_nmbrs/schemas/bank.py,sha256=QWMGevA4TKju8i20kAwEaV3FW7tpG4vjo0XTQvX90pw,4359
|
|
31
|
+
brynq_sdk_nmbrs/schemas/children.py,sha256=Vae7v2XPKwGQh3Oiz8cg-N0nbnTxDGVzMjOA7cKzFCY,3293
|
|
32
|
+
brynq_sdk_nmbrs/schemas/company.py,sha256=utYRXj_ch-RmI-AIShTqPj-LpdftEc8seHzkHZbxgew,1049
|
|
33
|
+
brynq_sdk_nmbrs/schemas/contracts.py,sha256=g5Wcn6QGhc95ZIyySSECiyMKJ_lUoeQgfa8rb-30ms0,4138
|
|
34
|
+
brynq_sdk_nmbrs/schemas/costcenter.py,sha256=YYuHr_9eNxM3pRXLYEBT4CU8KCleyJO9O-2d-_91AME,6961
|
|
35
|
+
brynq_sdk_nmbrs/schemas/costunit.py,sha256=WsICBZz2xliPoRyl1qT61AzcHE0o2ytmQLWCTmTSHww,1682
|
|
36
|
+
brynq_sdk_nmbrs/schemas/days.py,sha256=rLMETxP9yYD7mBX2pZDK9IJs4w16ejuwZ0tBip9bY6Q,6774
|
|
37
|
+
brynq_sdk_nmbrs/schemas/debtor.py,sha256=iCrVgSvwn0qXLGsEDlthmCznO_a2SsDWIV6ipsZmjZw,1608
|
|
38
|
+
brynq_sdk_nmbrs/schemas/department.py,sha256=Rhm-vTq5QdvMZeCrsgTF3hvzo1IC76MT4f2Gi8nK5qk,4475
|
|
39
|
+
brynq_sdk_nmbrs/schemas/document.py,sha256=RXTWQqoURv1G25foLtjcmWxcbFjneiuzlKjLcgGV_2E,598
|
|
40
|
+
brynq_sdk_nmbrs/schemas/employees.py,sha256=23bIe7KJIiVGrNSzDnUZIpNd5JVRxWS1x9V8qqMj7ms,11327
|
|
41
|
+
brynq_sdk_nmbrs/schemas/employment.py,sha256=cAZ5hfn01ipv3gTB3cSVRYKBBoeXSbE2K8L5nu0T2QY,2489
|
|
42
|
+
brynq_sdk_nmbrs/schemas/function.py,sha256=fPtF1yYJ_UMTx0ZTT2I3vBMW430doD3oi0HZ892shh8,3427
|
|
43
|
+
brynq_sdk_nmbrs/schemas/hours.py,sha256=dwH7_Dn0atztYHh35UzEX2i6e1Jr8ltZun_zsAXbbRw,7845
|
|
44
|
+
brynq_sdk_nmbrs/schemas/leave.py,sha256=IGV_n3lIeMQ5m9jV9ew2dz-F0oaN_BQBuiQ8h2tQ3ss,3893
|
|
45
|
+
brynq_sdk_nmbrs/schemas/manager.py,sha256=Wxbpv_ts0q7ywe63GTu0FxP_7s-NHFXvBYDBpjM4GJg,9055
|
|
46
|
+
brynq_sdk_nmbrs/schemas/salary.py,sha256=2dU9Pj1FM_4mGJEZAAsU1-6z6Wkjhc_cyjuN5Gdok_s,6168
|
|
47
|
+
brynq_sdk_nmbrs/schemas/schedules.py,sha256=KE5xDLrLPr63BqOHK20cPocHC73X9H6x0dZZTp48N5A,8851
|
|
48
|
+
brynq_sdk_nmbrs/schemas/social_insurance.py,sha256=Bmxzas6rFZ5j127GtvixsZJWv0PAucVZ_m73p_THryo,5377
|
|
49
|
+
brynq_sdk_nmbrs/schemas/wage_tax.py,sha256=5BKZCwy6pZGyNRiPftN53bkLkUZkAIHcPice6aJsOmo,12122
|
|
50
|
+
brynq_sdk_nmbrs/schemas/wage_tax_settings.py,sha256=LkZqNff4Eo79HdwB-o9fYwpZh-fqBccf_DnHWkWNRRM,5705
|
|
51
|
+
brynq_sdk_nmbrs/schemas/wagecomponents.py,sha256=ysuGH3af0OIoMefBiJIgbe7hMXDRolpdEjNoKBN8nvw,7413
|
|
52
|
+
brynq_sdk_nmbrs-2.3.2.dev0.dist-info/METADATA,sha256=aqRwyUOCzUVNkvBxpMWi9XgB6S7n9tA-LS87-9TQfZ8,534
|
|
53
|
+
brynq_sdk_nmbrs-2.3.2.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
54
|
+
brynq_sdk_nmbrs-2.3.2.dev0.dist-info/top_level.txt,sha256=LrSQFzIV7FP02jBHdBKubiCbIy0C_5YnTz3DSYYoQzg,16
|
|
55
|
+
brynq_sdk_nmbrs-2.3.2.dev0.dist-info/RECORD,,
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
brynq_sdk_nmbrs/__init__.py,sha256=O6SxqypTQcyz-CpgFu23RZWR5SekYirLn8iEydp9bAE,9836
|
|
2
|
-
brynq_sdk_nmbrs/absence.py,sha256=xNzoDgw0Jj-JYS68lpwNzbrDy3BKsR-Iz-anlJW7YS0,4658
|
|
3
|
-
brynq_sdk_nmbrs/address.py,sha256=FTzzs04tyNZNoysQ18lei137JXhvZUjYH8vS3Z5Nnk4,2325
|
|
4
|
-
brynq_sdk_nmbrs/bank.py,sha256=2zZ9pCEdPkxvjqyyo0bfZw0JpJpzDBXZVNmO3lHjHGQ,4165
|
|
5
|
-
brynq_sdk_nmbrs/children.py,sha256=hwgh3RKTs6oK6ztZ-TADXXK4Ekq_svo81D9aytCzkE4,3479
|
|
6
|
-
brynq_sdk_nmbrs/companies.py,sha256=fqG9JERkaatkfzLFO3vC37rHr_W6pZ2DOeWS68b-TGc,3426
|
|
7
|
-
brynq_sdk_nmbrs/contract.py,sha256=lccpAbhNjj4x45WOnF7h2LlBG5XCXelnis7WyPvJJrE,4527
|
|
8
|
-
brynq_sdk_nmbrs/costcenter.py,sha256=gz7e486E9NqFXkqt50CctQ8DERC3pI2SPWsQWpIkHos,6087
|
|
9
|
-
brynq_sdk_nmbrs/costunit.py,sha256=GGLwdCOYGU96Zr-zyG86rggzdsccH0IojfrPn5GanTI,3092
|
|
10
|
-
brynq_sdk_nmbrs/days.py,sha256=T2ZdMCN1iE6WseX40Hn8-iNRCz47kWUuwNVRwQJX7TY,4534
|
|
11
|
-
brynq_sdk_nmbrs/debtors.py,sha256=yig5Fdv9deyeoVwlGu8n5wwKdx7gZBDKtJLitQDAX98,785
|
|
12
|
-
brynq_sdk_nmbrs/department.py,sha256=9Yk80w9lME5cN9FjtQ8_w0RDjqVwny54xDkI2FWmJ8M,4216
|
|
13
|
-
brynq_sdk_nmbrs/document.py,sha256=Eb2mpsQRI1t5u0szUsc8YYI8tC_8ARW7wZUZRFA8RzQ,839
|
|
14
|
-
brynq_sdk_nmbrs/employees.py,sha256=9ypKi7dFh5rqXL9mFJ2ltHci40idsk_sbuZjYfT_b_w,7517
|
|
15
|
-
brynq_sdk_nmbrs/employment.py,sha256=P5EQhSAA6LOfeF2VeaAI8NZFTwSpD81ggJ9kUQp-WpE,3789
|
|
16
|
-
brynq_sdk_nmbrs/function.py,sha256=bsafEcLglr2iT3jehbmGAme6-xI2ieOvaAueeVVT64I,3066
|
|
17
|
-
brynq_sdk_nmbrs/hours.py,sha256=3pbl6IA8BBC6wrfTvkJha1LJi4SjrZCBINUANhuDvDQ,8140
|
|
18
|
-
brynq_sdk_nmbrs/leave.py,sha256=Z17nPlRTVy_pqyInrbJNnF_83c8__Z207nh1aWVycCg,4515
|
|
19
|
-
brynq_sdk_nmbrs/manager.py,sha256=wE2UJYPsKUN5jv3HmLpVAERcxcChwoMLfFgja8vxM6U,9441
|
|
20
|
-
brynq_sdk_nmbrs/salaries.py,sha256=0VZgPwIl4YSeil7IUliPg8XFWloIQX2rBoWurSOLa9g,2910
|
|
21
|
-
brynq_sdk_nmbrs/salary_tables.py,sha256=T7_bJE-CtRF08FWyLJnXm5Q3Q5Usozx4iCByqoTPOwo,9390
|
|
22
|
-
brynq_sdk_nmbrs/schedules.py,sha256=jvi3aRdsgU_lalVWAcnfsfg8-g7J4m8pVW42HP-aExA,2928
|
|
23
|
-
brynq_sdk_nmbrs/social_insurance.py,sha256=7sfgZeGDXGrvcsj8tTj7JaFK2fSOzVdtEjJ0wKRr2BI,1899
|
|
24
|
-
brynq_sdk_nmbrs/wage_tax.py,sha256=NgqzEwzc_n28LtWhOM4EfHUo-vy-QwZA6wiL2n8LcdM,6241
|
|
25
|
-
brynq_sdk_nmbrs/wagecomponents.py,sha256=nkk7HGlcdEx2K3VQ2G2zwLbNMFPNHQK4YwOEnFBtDj0,9539
|
|
26
|
-
brynq_sdk_nmbrs/schemas/__init__.py,sha256=rwMb9AJSBXn_50SOa1rIvwOsCrtpj3vQxjXioxrxuyI,2301
|
|
27
|
-
brynq_sdk_nmbrs/schemas/absence.py,sha256=f2ZDpy0qnyUyCjk2JjTNCazB_12lmP462MkI4eyf3ws,3320
|
|
28
|
-
brynq_sdk_nmbrs/schemas/address.py,sha256=jgckNL5GhI23U0CS6VSs8vdl0pd4Goue57pIB8Mg6RU,4151
|
|
29
|
-
brynq_sdk_nmbrs/schemas/bank.py,sha256=h5OtnD9DfJXfNeAoD9gm1434qXchbS6RPLKNRpxQ2RU,4537
|
|
30
|
-
brynq_sdk_nmbrs/schemas/contracts.py,sha256=wb_NJyzKg7pjtWVelKj1_rfI57cs8jQ2QnMVu-aS_jI,3848
|
|
31
|
-
brynq_sdk_nmbrs/schemas/costcenter.py,sha256=vB-cJCaLn57Gc7oAK2PTJvIpnz7zZkEX5ry0iJ_ZaX8,5328
|
|
32
|
-
brynq_sdk_nmbrs/schemas/costunit.py,sha256=dH1nD9yuT94YamBz8phhuZ7E7AEuU4DmL6dXQYI8lu0,1854
|
|
33
|
-
brynq_sdk_nmbrs/schemas/days.py,sha256=GJC9-ELfWCFVA7Z1vq4UANq8omFnPdeiowhjUu7-7a0,6952
|
|
34
|
-
brynq_sdk_nmbrs/schemas/debtor.py,sha256=07FUL9MNKMfGKUifqeWSgQBTq1pVG5NB0OkaFgB9v88,721
|
|
35
|
-
brynq_sdk_nmbrs/schemas/department.py,sha256=Rq88XAOIMNzojpHhb3awdV1ALlmkI_ZjMbiwXKSz6lY,3106
|
|
36
|
-
brynq_sdk_nmbrs/schemas/employees.py,sha256=QblOZk4BCbXGoDW-kdAAykl-aLXzsBmfjewG_vU0qwg,11077
|
|
37
|
-
brynq_sdk_nmbrs/schemas/employment.py,sha256=4KY0WEdZfJ-4x_loaZhBLoPYwQcA3k3TYuWRZj4PDxI,2678
|
|
38
|
-
brynq_sdk_nmbrs/schemas/function.py,sha256=c0LkdAvyLr1_b9e7h7-2KD4v-YHtCKrm3x54Lc6V_sk,2503
|
|
39
|
-
brynq_sdk_nmbrs/schemas/hours.py,sha256=CJOD3-NL80bh3nqIZ6DwoKQ0MGfe5ba84IXv0HsA_pA,8201
|
|
40
|
-
brynq_sdk_nmbrs/schemas/leave.py,sha256=pofHHdYuPTS4hdFQbYQf2NbbYb4QlD3jI5CPGXSpNq8,3313
|
|
41
|
-
brynq_sdk_nmbrs/schemas/manager.py,sha256=NT8Uh1yfoZQ9ODCZBkVUJ50QwQ5GtHNG6_Rx_EO674U,9310
|
|
42
|
-
brynq_sdk_nmbrs/schemas/salary.py,sha256=pq-4hOB7QIo0BG8_Q_JnDbovPAhXOytfCpSuU_kXrGw,5511
|
|
43
|
-
brynq_sdk_nmbrs/schemas/schedules.py,sha256=ITB4GAVNXyQLh0Ji_kJpdp1ZNGtYRlOTNHRvNiLg8wg,5481
|
|
44
|
-
brynq_sdk_nmbrs/schemas/social_insurance.py,sha256=xJX7Duzcnu4vrKWIAan1iCUhNDtRflOLrIg7YBbtu70,2470
|
|
45
|
-
brynq_sdk_nmbrs/schemas/wage_tax.py,sha256=ohbsc0zIHcZ-oj4vctxFA6XWIs0Wv9Uu4jUy7EP61ZU,7342
|
|
46
|
-
brynq_sdk_nmbrs/schemas/wagecomponents.py,sha256=_t00-b22JEgihDdMMjwVw1mzCEnna55RnEZDYFwDZ1c,7769
|
|
47
|
-
brynq_sdk_nmbrs-2.3.1.dist-info/METADATA,sha256=Q0gZCGo8Lx9WF_6Difmfx_ClIhndS-fEgNELrzp0hUo,529
|
|
48
|
-
brynq_sdk_nmbrs-2.3.1.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
49
|
-
brynq_sdk_nmbrs-2.3.1.dist-info/top_level.txt,sha256=LrSQFzIV7FP02jBHdBKubiCbIy0C_5YnTz3DSYYoQzg,16
|
|
50
|
-
brynq_sdk_nmbrs-2.3.1.dist-info/RECORD,,
|
|
File without changes
|