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.
@@ -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 = 'Actividades Artísticas'
695
- agropecuario = 'Agricultura, Ganadería o Pesca'
696
- comercio = 'Comercio'
697
- estudiante = 'Estudiante'
698
- empleado = 'Empleado(a/e)'
699
- emprendimiento = 'Emprendimiento'
700
- hogar = 'Hogar'
701
- profesor = 'Profesor(a/e)'
702
- profesionista = 'Profesionista'
703
- servidor_publico = 'Servidor(a/e) Público'
704
- sistemas = 'Sistemas y Comunicaciones'
705
- independiente = 'Trabajador(a/e) Independiente'
706
- oficios = 'Oficios Varios'
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 = 'Gastos personales o familiares'
711
- business_expenses = 'Gastos relacionados con tu actividad económica'
712
- payment_of_goods_or_services = 'Pago de bienes o servicios'
713
- send_or_receive_transfers = 'Enviar o recibir transferencias'
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 = 'Entre 1 y 20 movimientos'
718
- between_20_and_40 = 'Entre 20 y 40 movimientos'
719
- between_40_and_60 = 'Entre 40 y 60 movimientos'
720
- more_than_60 = 'Más de 60 movimientos'
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 = 'Menos de $1,000'
725
- between_1k_and_10k = 'Entre $1,000 y $10,000'
726
- between_10k_and_20k = 'Entre $10,000 y $20,000'
727
- between_20k_and_50k = 'Entre $20,000 y $50,000'
728
- between_50k_and_100k = 'Entre $50,000 y $100,000'
729
- more_than_100k = 'Más de $100,000'
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 State
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
@@ -1 +1 @@
1
- __version__ = '2.1.16.dev6'
1
+ __version__ = '2.1.16.dev8'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cuenca_validations
3
- Version: 2.1.16.dev6
3
+ Version: 2.1.16.dev8
4
4
  Summary: Cuenca common validations
5
5
  Home-page: https://github.com/cuenca-mx/cuenca-validations
6
6
  Author: Cuenca
@@ -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=RyZVaGq9XAL49PksF_VU1U5C0lU1ICPsbkn__qW4HDU,28
8
- cuenca_validations/types/__init__.py,sha256=baGwT90LP2Ro-YKa7J-mttT6TAAG_Ye5PLUJMoAJl2I,5067
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=N4mE2P2PxTWLrI4nRZTcz-f1hdaYiJwHKfEvHOfJdfU,20373
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=VtXzz24IJ7AQfLyxVAEOesGYC70ZLEU-ANRUpCOii4E,2622
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=WDibEaZS94YLjRDY6oS7Wr7KZba6MwHSWxYENSXUk6I,21581
18
- cuenca_validations-2.1.16.dev6.dist-info/licenses/LICENSE,sha256=wR76FmxBbfnQpwELkkE5iMF8sFIafEMgXLTE4N4WPTc,1063
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=bqAKoJBQjZq5OISB-pBO_Rcg--aG0dHowzhSl2FrlQM,19047
26
- cuenca_validations-2.1.16.dev6.dist-info/METADATA,sha256=efGjC5wFX3xGERmNI3fm7VPrq-DHjvzyZqwViXtS32k,1600
27
- cuenca_validations-2.1.16.dev6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- cuenca_validations-2.1.16.dev6.dist-info/top_level.txt,sha256=4233xdOs2HtuT-GFRjcDcwK0IwdwvWdczOtk0fPB6Gw,25
29
- cuenca_validations-2.1.16.dev6.dist-info/RECORD,,
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