cuenca-validations 2.1.16.dev6__py3-none-any.whl → 2.1.16.dev8__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.
- cuenca_validations/types/__init__.py +12 -0
- cuenca_validations/types/enums.py +34 -27
- cuenca_validations/types/general.py +88 -2
- cuenca_validations/types/requests.py +3 -0
- cuenca_validations/version.py +1 -1
- {cuenca_validations-2.1.16.dev6.dist-info → cuenca_validations-2.1.16.dev8.dist-info}/METADATA +1 -1
- {cuenca_validations-2.1.16.dev6.dist-info → cuenca_validations-2.1.16.dev8.dist-info}/RECORD +11 -11
- tests/test_types.py +39 -1
- {cuenca_validations-2.1.16.dev6.dist-info → cuenca_validations-2.1.16.dev8.dist-info}/WHEEL +0 -0
- {cuenca_validations-2.1.16.dev6.dist-info → cuenca_validations-2.1.16.dev8.dist-info}/licenses/LICENSE +0 -0
- {cuenca_validations-2.1.16.dev6.dist-info → cuenca_validations-2.1.16.dev8.dist-info}/top_level.txt +0 -0
|
@@ -44,6 +44,7 @@ __all__ = [
|
|
|
44
44
|
'FileRequest',
|
|
45
45
|
'FileUploadRequest',
|
|
46
46
|
'Gender',
|
|
47
|
+
'IncomeType',
|
|
47
48
|
'IssuerNetwork',
|
|
48
49
|
'IdentityQuery',
|
|
49
50
|
'JSONEncoder',
|
|
@@ -110,6 +111,11 @@ __all__ = [
|
|
|
110
111
|
'WebhookEvent',
|
|
111
112
|
'digits',
|
|
112
113
|
'get_state_name',
|
|
114
|
+
'get_profession_name',
|
|
115
|
+
'get_income_type_name',
|
|
116
|
+
'get_account_use_type_name',
|
|
117
|
+
'get_monthly_movements_type_name',
|
|
118
|
+
'get_monthly_spending_type_name',
|
|
113
119
|
'uuid_field',
|
|
114
120
|
'LogConfig',
|
|
115
121
|
]
|
|
@@ -136,6 +142,7 @@ from .enums import (
|
|
|
136
142
|
FileExtension,
|
|
137
143
|
FileFormat,
|
|
138
144
|
Gender,
|
|
145
|
+
IncomeType,
|
|
139
146
|
IssuerNetwork,
|
|
140
147
|
KYCFileType,
|
|
141
148
|
KYCValidationSource,
|
|
@@ -169,6 +176,11 @@ from .general import (
|
|
|
169
176
|
SantizedDict,
|
|
170
177
|
StrictPositiveInt,
|
|
171
178
|
digits,
|
|
179
|
+
get_account_use_type_name,
|
|
180
|
+
get_income_type_name,
|
|
181
|
+
get_monthly_movements_type_name,
|
|
182
|
+
get_monthly_spending_type_name,
|
|
183
|
+
get_profession_name,
|
|
172
184
|
get_state_name,
|
|
173
185
|
)
|
|
174
186
|
from .helpers import uuid_field
|
|
@@ -691,39 +691,46 @@ class SATRegimeCode(str, Enum):
|
|
|
691
691
|
|
|
692
692
|
|
|
693
693
|
class Profession(str, Enum):
|
|
694
|
-
artisticas = '
|
|
695
|
-
agropecuario = '
|
|
696
|
-
comercio = '
|
|
697
|
-
estudiante = '
|
|
698
|
-
empleado = '
|
|
699
|
-
emprendimiento = '
|
|
700
|
-
hogar = '
|
|
701
|
-
profesor = '
|
|
702
|
-
profesionista = '
|
|
703
|
-
servidor_publico = '
|
|
704
|
-
sistemas = '
|
|
705
|
-
independiente = '
|
|
706
|
-
oficios = '
|
|
694
|
+
artisticas = 'artisticas'
|
|
695
|
+
agropecuario = 'agropecuario'
|
|
696
|
+
comercio = 'comercio'
|
|
697
|
+
estudiante = 'estudiante'
|
|
698
|
+
empleado = 'empleado'
|
|
699
|
+
emprendimiento = 'emprendimiento'
|
|
700
|
+
hogar = 'hogar'
|
|
701
|
+
profesor = 'profesor'
|
|
702
|
+
profesionista = 'profesionista'
|
|
703
|
+
servidor_publico = 'servidor_publico'
|
|
704
|
+
sistemas = 'sistemas'
|
|
705
|
+
independiente = 'independiente'
|
|
706
|
+
oficios = 'oficios'
|
|
707
707
|
|
|
708
708
|
|
|
709
709
|
class AccountUseTypes(str, Enum):
|
|
710
|
-
personal_expenses = '
|
|
711
|
-
business_expenses = '
|
|
712
|
-
payment_of_goods_or_services = '
|
|
713
|
-
send_or_receive_transfers = '
|
|
710
|
+
personal_expenses = 'personal_expenses'
|
|
711
|
+
business_expenses = 'business_expenses'
|
|
712
|
+
payment_of_goods_or_services = 'payment_of_goods_or_services'
|
|
713
|
+
send_or_receive_transfers = 'send_or_receive_transfers'
|
|
714
714
|
|
|
715
715
|
|
|
716
716
|
class MonthlyMovementsTypes(str, Enum):
|
|
717
|
-
between_1_and_20 = '
|
|
718
|
-
between_20_and_40 = '
|
|
719
|
-
between_40_and_60 = '
|
|
720
|
-
more_than_60 = '
|
|
717
|
+
between_1_and_20 = 'between_1_and_20'
|
|
718
|
+
between_20_and_40 = 'between_20_and_40'
|
|
719
|
+
between_40_and_60 = 'between_40_and_60'
|
|
720
|
+
more_than_60 = 'more_than_60'
|
|
721
721
|
|
|
722
722
|
|
|
723
723
|
class MonthlySpendingTypes(str, Enum):
|
|
724
|
-
less_than_1k = '
|
|
725
|
-
between_1k_and_10k = '
|
|
726
|
-
between_10k_and_20k = '
|
|
727
|
-
between_20k_and_50k = '
|
|
728
|
-
between_50k_and_100k = '
|
|
729
|
-
more_than_100k = '
|
|
724
|
+
less_than_1k = 'less_than_1k'
|
|
725
|
+
between_1k_and_10k = 'between_1k_and_10k'
|
|
726
|
+
between_10k_and_20k = 'between_10k_and_20k'
|
|
727
|
+
between_20k_and_50k = 'between_20k_and_50k'
|
|
728
|
+
between_50k_and_100k = 'between_50k_and_100k'
|
|
729
|
+
more_than_100k = 'more_than_100k'
|
|
730
|
+
|
|
731
|
+
|
|
732
|
+
class IncomeType(str, Enum):
|
|
733
|
+
salary = 'salary'
|
|
734
|
+
freelance = 'freelance'
|
|
735
|
+
support_from_third_party = 'support_from_third_party'
|
|
736
|
+
variable = 'variable'
|
|
@@ -12,7 +12,14 @@ from pydantic import (
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
from ..validators import sanitize_dict, sanitize_item
|
|
15
|
-
from .enums import
|
|
15
|
+
from .enums import (
|
|
16
|
+
AccountUseTypes,
|
|
17
|
+
IncomeType,
|
|
18
|
+
MonthlyMovementsTypes,
|
|
19
|
+
MonthlySpendingTypes,
|
|
20
|
+
Profession,
|
|
21
|
+
State,
|
|
22
|
+
)
|
|
16
23
|
|
|
17
24
|
# We use custom serializers for IP addresses and URLs because
|
|
18
25
|
# Pydantic's IPvAnyAddress, AnyUrl, HttpUrl types are not JSON serializable.
|
|
@@ -96,10 +103,89 @@ names_state = {
|
|
|
96
103
|
}
|
|
97
104
|
|
|
98
105
|
|
|
99
|
-
def get_state_name(state: State):
|
|
106
|
+
def get_state_name(state: State) -> str:
|
|
100
107
|
return names_state[state]
|
|
101
108
|
|
|
102
109
|
|
|
110
|
+
names_professions = {
|
|
111
|
+
Profession.artisticas: 'Actividades Artísticas',
|
|
112
|
+
Profession.agropecuario: 'Agricultura, Ganadería o Pesca',
|
|
113
|
+
Profession.comercio: 'Comercio',
|
|
114
|
+
Profession.estudiante: 'Estudiante',
|
|
115
|
+
Profession.empleado: 'Empleado(a/e)',
|
|
116
|
+
Profession.emprendimiento: 'Emprendimiento',
|
|
117
|
+
Profession.hogar: 'Hogar',
|
|
118
|
+
Profession.profesor: 'Profesor(a/e)',
|
|
119
|
+
Profession.profesionista: 'Profesionista',
|
|
120
|
+
Profession.servidor_publico: 'Servidor(a/e) Público',
|
|
121
|
+
Profession.sistemas: 'Sistemas y Comunicaciones',
|
|
122
|
+
Profession.independiente: 'Trabajador(a/e) Independiente',
|
|
123
|
+
Profession.oficios: 'Oficios Varios',
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def get_profession_name(profession: Profession) -> str:
|
|
128
|
+
return names_professions[profession]
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
names_account_use_types = {
|
|
132
|
+
AccountUseTypes.personal_expenses: 'Gastos personales o familiares',
|
|
133
|
+
AccountUseTypes.business_expenses: (
|
|
134
|
+
'Gastos relacionados con tu actividad económica'
|
|
135
|
+
),
|
|
136
|
+
AccountUseTypes.payment_of_goods_or_services: 'Pago de bienes o servicios',
|
|
137
|
+
AccountUseTypes.send_or_receive_transfers: (
|
|
138
|
+
'Enviar o recibir transferencias'
|
|
139
|
+
),
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def get_account_use_type_name(account_use_type: AccountUseTypes) -> str:
|
|
144
|
+
return names_account_use_types[account_use_type]
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
names_monthly_movements_types = {
|
|
148
|
+
MonthlyMovementsTypes.between_1_and_20: 'Entre 1 y 20 movimientos',
|
|
149
|
+
MonthlyMovementsTypes.between_20_and_40: 'Entre 20 y 40 movimientos',
|
|
150
|
+
MonthlyMovementsTypes.between_40_and_60: 'Entre 40 y 60 movimientos',
|
|
151
|
+
MonthlyMovementsTypes.more_than_60: 'Más de 60 movimientos',
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def get_monthly_movements_type_name(
|
|
156
|
+
monthly_movements_type: MonthlyMovementsTypes,
|
|
157
|
+
) -> str:
|
|
158
|
+
return names_monthly_movements_types[monthly_movements_type]
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
names_monthly_spending_types = {
|
|
162
|
+
MonthlySpendingTypes.less_than_1k: 'Menos de $1,000',
|
|
163
|
+
MonthlySpendingTypes.between_1k_and_10k: 'Entre $1,000 y $10,000',
|
|
164
|
+
MonthlySpendingTypes.between_10k_and_20k: 'Entre $10,000 y $20,000',
|
|
165
|
+
MonthlySpendingTypes.between_20k_and_50k: 'Entre $20,000 y $50,000',
|
|
166
|
+
MonthlySpendingTypes.between_50k_and_100k: 'Entre $50,000 y $100,000',
|
|
167
|
+
MonthlySpendingTypes.more_than_100k: 'Más de $100,000',
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def get_monthly_spending_type_name(
|
|
172
|
+
monthly_spending_type: MonthlySpendingTypes,
|
|
173
|
+
) -> str:
|
|
174
|
+
return names_monthly_spending_types[monthly_spending_type]
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
names_income_types = {
|
|
178
|
+
IncomeType.salary: 'Sueldo o salario fijo',
|
|
179
|
+
IncomeType.freelance: 'Independiente',
|
|
180
|
+
IncomeType.support_from_third_party: 'Apoyo de terceros o familiares',
|
|
181
|
+
IncomeType.variable: 'Variable',
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def get_income_type_name(income_type: IncomeType) -> str:
|
|
186
|
+
return names_income_types[income_type]
|
|
187
|
+
|
|
188
|
+
|
|
103
189
|
@dataclass
|
|
104
190
|
class LogConfig:
|
|
105
191
|
masked: bool = False
|
|
@@ -30,6 +30,7 @@ from ..types.enums import (
|
|
|
30
30
|
EcommerceIndicator,
|
|
31
31
|
FileExtension,
|
|
32
32
|
Gender,
|
|
33
|
+
IncomeType,
|
|
33
34
|
IssuerNetwork,
|
|
34
35
|
KYCFileType,
|
|
35
36
|
KYCValidationSource,
|
|
@@ -465,6 +466,7 @@ class UserRequest(BaseModel):
|
|
|
465
466
|
account_use_type: Optional[AccountUseTypes] = None
|
|
466
467
|
monthly_movements_type: Optional[MonthlyMovementsTypes] = None
|
|
467
468
|
monthly_spending_type: Optional[MonthlySpendingTypes] = None
|
|
469
|
+
income_type: Optional[IncomeType] = None
|
|
468
470
|
|
|
469
471
|
model_config = ConfigDict(
|
|
470
472
|
json_schema_extra={
|
|
@@ -504,6 +506,7 @@ class UserUpdateRequest(BaseModel):
|
|
|
504
506
|
account_use_type: Optional[AccountUseTypes] = None
|
|
505
507
|
monthly_movements_type: Optional[MonthlyMovementsTypes] = None
|
|
506
508
|
monthly_spending_type: Optional[MonthlySpendingTypes] = None
|
|
509
|
+
income_type: Optional[IncomeType] = None
|
|
507
510
|
|
|
508
511
|
@field_validator('beneficiaries')
|
|
509
512
|
@classmethod
|
cuenca_validations/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.1.16.
|
|
1
|
+
__version__ = '2.1.16.dev8'
|
{cuenca_validations-2.1.16.dev6.dist-info → cuenca_validations-2.1.16.dev8.dist-info}/RECORD
RENAMED
|
@@ -4,26 +4,26 @@ cuenca_validations/errors.py,sha256=OtM8EgiKqYdz9Hn66AbBO96orL1or7efkyt0vh0Zxbs,
|
|
|
4
4
|
cuenca_validations/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
cuenca_validations/typing.py,sha256=1QCu81IbVZZpyInjyeAuO-nF36gpT5Gi4o6V9PozuOU,204
|
|
6
6
|
cuenca_validations/validators.py,sha256=mYJDXxJVokl5jZIA4FYn8wkaMUnOxAH54t1Pfg_0kmQ,1190
|
|
7
|
-
cuenca_validations/version.py,sha256
|
|
8
|
-
cuenca_validations/types/__init__.py,sha256=
|
|
7
|
+
cuenca_validations/version.py,sha256=-pPaBBRRtsgVQi24Wpg_RAgMhkKX_Ve3vFKgzTR-UW4,28
|
|
8
|
+
cuenca_validations/types/__init__.py,sha256=qsEfNGjAyoZPmgMqFiuA73d-vfoiIWmgIiT2rPaNKv4,5421
|
|
9
9
|
cuenca_validations/types/card.py,sha256=UGzz8NTFAverUmdUKAK1oGHnOnjSNTpIRUm93vKSSGY,1295
|
|
10
|
-
cuenca_validations/types/enums.py,sha256=
|
|
10
|
+
cuenca_validations/types/enums.py,sha256=9y8Cdiy9DS-IYkXdZyjCLL8S9tjtWUCHobwB2kVpyrE,20348
|
|
11
11
|
cuenca_validations/types/files.py,sha256=2CszbwF9ytXV9suFFwyDjYG4XxY8UhCjRw3HttVXXNw,269
|
|
12
|
-
cuenca_validations/types/general.py,sha256=
|
|
12
|
+
cuenca_validations/types/general.py,sha256=TWNttymuTm-GsPtQ_hH_iYQ3YHYSBLydTbfcEkD0Q5c,5441
|
|
13
13
|
cuenca_validations/types/helpers.py,sha256=XPiYVTLDtmBB5R1heWUy1c35zZMh7nh-BmS6rtwEltg,1379
|
|
14
14
|
cuenca_validations/types/identities.py,sha256=1wkutHzL9Gpd9oAZdyiikNxWKe5iBVAQT3TabR6YG1o,5451
|
|
15
15
|
cuenca_validations/types/morals.py,sha256=davabh5hAnFVQyM7-yCyDaT5ewXnm0cr1BtqDIwzkX8,1833
|
|
16
16
|
cuenca_validations/types/queries.py,sha256=Pp7BAPk20hzImxb5EIiy3oI8S6AeCruU-NbQpOlrWVo,5146
|
|
17
|
-
cuenca_validations/types/requests.py,sha256=
|
|
18
|
-
cuenca_validations-2.1.16.
|
|
17
|
+
cuenca_validations/types/requests.py,sha256=_XfjKpXNgRPCAPsEmqmuIoMrYpL5XLSNyX-CiJkdTlo,21687
|
|
18
|
+
cuenca_validations-2.1.16.dev8.dist-info/licenses/LICENSE,sha256=wR76FmxBbfnQpwELkkE5iMF8sFIafEMgXLTE4N4WPTc,1063
|
|
19
19
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
20
|
tests/test_card.py,sha256=QAfRz7e11gWICPnFJZ2tiYgUsFV3C9TwzJXrDnDNXFw,1202
|
|
21
21
|
tests/test_errors.py,sha256=ixiIgEuBuzfsL5p4uCFdF32XqFRtTPF6EVhGJ0keOrI,930
|
|
22
22
|
tests/test_helpers.py,sha256=ubzpi1UXCryLQdgsT_Zm2IX-XE_4L0dnHnhLwH06xK8,748
|
|
23
23
|
tests/test_requests.py,sha256=HGKybPNlN-Vbf2Ew34csfMR5UzZdVPoX9J8eeD4yCiI,1095
|
|
24
24
|
tests/test_statement.py,sha256=IOE0rRRBgBZSJv_FLaETEyn5NzzXKMNTqgjv99GX-68,1436
|
|
25
|
-
tests/test_types.py,sha256=
|
|
26
|
-
cuenca_validations-2.1.16.
|
|
27
|
-
cuenca_validations-2.1.16.
|
|
28
|
-
cuenca_validations-2.1.16.
|
|
29
|
-
cuenca_validations-2.1.16.
|
|
25
|
+
tests/test_types.py,sha256=bDwgiPwqhMaRIN-FnyvFMv3_9lkRXyJjEcoHmENRgOA,20080
|
|
26
|
+
cuenca_validations-2.1.16.dev8.dist-info/METADATA,sha256=W2sRpCbRSrssQAwPMkx0j8Z1I_yklLMdvUMjsDzL8PY,1600
|
|
27
|
+
cuenca_validations-2.1.16.dev8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
28
|
+
cuenca_validations-2.1.16.dev8.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
|
|
29
|
+
cuenca_validations-2.1.16.dev8.dist-info/RECORD,,
|
tests/test_types.py
CHANGED
|
@@ -17,10 +17,19 @@ from cuenca_validations.types import (
|
|
|
17
17
|
SessionRequest,
|
|
18
18
|
TransactionStatus,
|
|
19
19
|
digits,
|
|
20
|
+
get_account_use_type_name,
|
|
21
|
+
get_income_type_name,
|
|
22
|
+
get_monthly_movements_type_name,
|
|
23
|
+
get_monthly_spending_type_name,
|
|
24
|
+
get_profession_name,
|
|
20
25
|
get_state_name,
|
|
21
26
|
)
|
|
22
27
|
from cuenca_validations.types.enums import (
|
|
28
|
+
AccountUseTypes,
|
|
23
29
|
EcommerceIndicator,
|
|
30
|
+
IncomeType,
|
|
31
|
+
MonthlyMovementsTypes,
|
|
32
|
+
MonthlySpendingTypes,
|
|
24
33
|
Profession,
|
|
25
34
|
SessionType,
|
|
26
35
|
State,
|
|
@@ -544,10 +553,39 @@ def test_limited_wallet_request():
|
|
|
544
553
|
assert LimitedWalletRequest(allowed_curp=curp, allowed_rfc=rfc)
|
|
545
554
|
|
|
546
555
|
|
|
547
|
-
def test_get_state_name():
|
|
556
|
+
def test_get_state_name() -> None:
|
|
548
557
|
assert get_state_name(State.VZ) == 'Veracruz'
|
|
549
558
|
|
|
550
559
|
|
|
560
|
+
def test_get_profession_name() -> None:
|
|
561
|
+
assert get_profession_name(Profession.empleado) == 'Empleado(a/e)'
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
def test_get_income_type_name() -> None:
|
|
565
|
+
assert get_income_type_name(IncomeType.salary) == 'Sueldo o salario fijo'
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
def test_get_account_use_type_name() -> None:
|
|
569
|
+
assert (
|
|
570
|
+
get_account_use_type_name(AccountUseTypes.personal_expenses)
|
|
571
|
+
== 'Gastos personales o familiares'
|
|
572
|
+
)
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
def test_get_monthly_spending_type_name() -> None:
|
|
576
|
+
assert (
|
|
577
|
+
get_monthly_spending_type_name(MonthlySpendingTypes.less_than_1k)
|
|
578
|
+
== 'Menos de $1,000'
|
|
579
|
+
)
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
def test_get_monthly_movements_type_name() -> None:
|
|
583
|
+
assert (
|
|
584
|
+
get_monthly_movements_type_name(MonthlyMovementsTypes.between_1_and_20)
|
|
585
|
+
== 'Entre 1 y 20 movimientos'
|
|
586
|
+
)
|
|
587
|
+
|
|
588
|
+
|
|
551
589
|
def test_bank_account_validation_clabe_request():
|
|
552
590
|
assert BankAccountValidationRequest(account_number='646180157098510917')
|
|
553
591
|
|
|
File without changes
|
|
File without changes
|
{cuenca_validations-2.1.16.dev6.dist-info → cuenca_validations-2.1.16.dev8.dist-info}/top_level.txt
RENAMED
|
File without changes
|