From f204ed7586a85bf3b032fa0c92222afc8c3f6960 Mon Sep 17 00:00:00 2001 From: gabino Date: Mon, 1 Sep 2025 12:01:03 -0600 Subject: [PATCH 01/23] Add new enums for AccountUseTypes, MonthlyMovementsTypes, and MonthlySpendingTypes --- cuenca_validations/types/__init__.py | 6 ++++++ cuenca_validations/types/enums.py | 23 +++++++++++++++++++++++ cuenca_validations/types/general.py | 2 +- cuenca_validations/version.py | 2 +- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/cuenca_validations/types/__init__.py b/cuenca_validations/types/__init__.py index eaba0dbd..4790db33 100644 --- a/cuenca_validations/types/__init__.py +++ b/cuenca_validations/types/__init__.py @@ -1,4 +1,5 @@ __all__ = [ + 'AccountUseTypes', 'AccountQuery', 'Address', 'ApiKeyQuery', @@ -52,6 +53,8 @@ 'KYCValidationSource', 'Language', 'LimitedWalletRequest', + 'MonthlyMovementsTypes', + 'MonthlySpendingTypes', 'PartnerRequest', 'PartnerUpdateRequest', 'PhoneNumber', @@ -113,6 +116,7 @@ from .card import StrictPaymentCardNumber from .enums import ( + AccountUseTypes, AuthorizerTransaction, BankAccountStatus, CardErrorType, @@ -136,6 +140,8 @@ KYCFileType, KYCValidationSource, Language, + MonthlyMovementsTypes, + MonthlySpendingTypes, PlatformType, PosCapability, Profession, diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index 05c22662..e0eb1b39 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -704,3 +704,26 @@ class Profession(str, Enum): sistemas = 'Sistemas y Comunicaciones' independiente = 'Trabajador(a/e) Independiente' oficios = 'Oficios Varios' + + +class AccountUseTypes(str, Enum): + personal_expenses = 'Gastos personales o familiares' + business_expenses = 'Gastos relacionados con tu actividad económica' + payment_of_goods_or_services = 'Pago de bienes o servicios' + send_or_receive_transfers = 'Enviar o recibir transferencias' + + +class MonthlyMovementsTypes(str, Enum): + between_1_and_20 = 'Entre 1 y 20 movimientos' + between_20_and_40 = 'Entre 20 y 40 movimientos' + between_40_and_60 = 'Entre 40 y 60 movimientos' + more_than_60 = 'Más de 60 movimientos' + + +class MonthlySpendingTypes(str, Enum): + less_than_1k = 'Menos de $1,000' + between_1k_and_10k = 'Entre $1,000 y $10,000' + between_10k_and_20k = 'Entre $10,000 y $20,000' + between_20k_and_50k = 'Entre $20,000 y $50,000' + between_50k_and_100k = 'Entre $50,000 y $100,000' + more_than_100k = 'Más de $100,000' diff --git a/cuenca_validations/types/general.py b/cuenca_validations/types/general.py index aff7af58..89f16ffc 100644 --- a/cuenca_validations/types/general.py +++ b/cuenca_validations/types/general.py @@ -76,7 +76,7 @@ def digits( State.HG: 'Hidalgo', State.JC: 'Jalisco', State.MC: 'México', - State.MN: 'Michoacan', + State.MN: 'Michoacán', State.MS: 'Morelos', State.NT: 'Nayarit', State.NL: 'Nuevo León', diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index a1d9bb65..440a42df 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.15' +__version__ = '2.1.16.dev1' From c729024ca1db9330ca05e4ba13dfccc0c390ffba Mon Sep 17 00:00:00 2001 From: gabino Date: Mon, 1 Sep 2025 12:11:02 -0600 Subject: [PATCH 02/23] Bump version to 2.1.16.dev2 in version.py --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 440a42df..36c184e4 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev1' +__version__ = '2.1.16.dev2' From 76374d38bc7f8fa56f89f821c45c510fffd1f1c3 Mon Sep 17 00:00:00 2001 From: gabino Date: Mon, 1 Sep 2025 12:12:06 -0600 Subject: [PATCH 03/23] Bump version to 2.1.16.dev3 in version.py --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 36c184e4..c134a4ca 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev2' +__version__ = '2.1.16.dev3' From cace7b2f0dfdc0013b54277dd09607a84bd1cab2 Mon Sep 17 00:00:00 2001 From: gabino Date: Mon, 1 Sep 2025 12:36:04 -0600 Subject: [PATCH 04/23] Add account use type and monthly movement/spending types to UserUpdateRequest model --- cuenca_validations/types/requests.py | 6 ++++++ cuenca_validations/version.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index 048eed2b..e59c3b62 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -17,6 +17,7 @@ from pydantic_extra_types.coordinate import Coordinate from ..types.enums import ( + AccountUseTypes, AuthorizerTransaction, CardDesign, CardFundingType, @@ -32,6 +33,8 @@ IssuerNetwork, KYCFileType, KYCValidationSource, + MonthlyMovementsTypes, + MonthlySpendingTypes, PlatformType, PosCapability, Profession, @@ -495,6 +498,9 @@ class UserUpdateRequest(BaseModel): pronouns: Optional[str] = None status: Optional[UserStatus] = None required_level: Optional[int] = None + account_use_type: Optional[AccountUseTypes] = None + monthly_movements_type: Optional[MonthlyMovementsTypes] = None + monthly_spending_type: Optional[MonthlySpendingTypes] = None @field_validator('beneficiaries') @classmethod diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index c134a4ca..c992677a 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev3' +__version__ = '2.1.16.dev4' From b94640d95032c28c0506a4b6200abf782c4ced75 Mon Sep 17 00:00:00 2001 From: gabino Date: Mon, 1 Sep 2025 13:02:45 -0600 Subject: [PATCH 05/23] Add optional fiscal_address field to UserUpdateRequest model --- cuenca_validations/types/requests.py | 1 + cuenca_validations/version.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index e59c3b62..a43d0158 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -495,6 +495,7 @@ class UserUpdateRequest(BaseModel): proof_of_life: Optional[KYCFile] = None curp_document_uri: Optional[SerializableHttpUrl] = None fiscal_regime_code: Optional[SATRegimeCode] = None + fiscal_address: Optional[AddressRequest] = None pronouns: Optional[str] = None status: Optional[UserStatus] = None required_level: Optional[int] = None diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index c992677a..1a354b8a 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev4' +__version__ = '2.1.16.dev5' From 4959cd5767e4c969278608f9f9a183a7e8818ea9 Mon Sep 17 00:00:00 2001 From: gabino Date: Mon, 1 Sep 2025 15:10:01 -0600 Subject: [PATCH 06/23] Add optional fields account_use_type, monthly_movements_type, and monthly_spending_type to UserRequest model --- cuenca_validations/types/requests.py | 8 +++++--- cuenca_validations/version.py | 2 +- tests/test_types.py | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index a43d0158..20720947 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -450,7 +450,6 @@ class UserRequest(BaseModel): 'Mexican government ID (18 characters). ' 'Must be pre-validated.' ) ) - profession: Profession = Field(description='User profession or occupation') address: AddressRequest = Field( description='User residential address information' @@ -463,13 +462,16 @@ class UserRequest(BaseModel): ..., description='ID of previously validated email verification', ) + account_use_type: Optional[AccountUseTypes] = None + monthly_movements_type: Optional[MonthlyMovementsTypes] = None + monthly_spending_type: Optional[MonthlySpendingTypes] = None model_config = ConfigDict( json_schema_extra={ 'example': { 'curp': 'GOCG650418HVZNML08', - 'phone_number': '+525511223344', - 'email_address': 'user@example.com', + 'phone_verification_id': 'VEKp662Yrf6lMztl0-9qzk7Q', + 'email_verification_id': 'VEwjDEcCMWZIk3JJ3p7P6T_A', 'profession': 'engineer', 'address': AddressRequest.model_json_schema().get('example'), } diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 1a354b8a..a5ca85c5 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev5' +__version__ = '2.1.16.dev6' diff --git a/tests/test_types.py b/tests/test_types.py index 5f1690ca..1a89c694 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -316,7 +316,7 @@ def test_user_request(): phone_verification_id='VE12345678', email_verification_id='VE0987654321', ) - assert UserRequest(**request).model_dump() == request + assert UserRequest(**request).model_dump(exclude_none=True) == request @freeze_time('2022-01-01') From 8f045d2ad9de6f43c69a053b4e9afcad84c09180 Mon Sep 17 00:00:00 2001 From: gabino Date: Mon, 1 Sep 2025 17:56:44 -0600 Subject: [PATCH 07/23] Bump version to 2.1.16 in version.py --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index a5ca85c5..1db5030e 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev6' +__version__ = '2.1.16' From de95029efafd7a023ffcf11ae4cae7365c6b07b7 Mon Sep 17 00:00:00 2001 From: gabino Date: Tue, 2 Sep 2025 09:28:35 -0600 Subject: [PATCH 08/23] Add new functions for profession and account use type names --- cuenca_validations/types/__init__.py | 8 +++ cuenca_validations/types/enums.py | 54 +++++++++---------- cuenca_validations/types/general.py | 77 +++++++++++++++++++++++++++- cuenca_validations/version.py | 2 +- tests/test_types.py | 34 +++++++++++- 5 files changed, 144 insertions(+), 31 deletions(-) diff --git a/cuenca_validations/types/__init__.py b/cuenca_validations/types/__init__.py index 4790db33..09901a14 100644 --- a/cuenca_validations/types/__init__.py +++ b/cuenca_validations/types/__init__.py @@ -110,6 +110,10 @@ 'WebhookEvent', 'digits', 'get_state_name', + 'get_profession_name', + 'get_account_use_type_name', + 'get_monthly_movements_type_name', + 'get_monthly_spending_type_name', 'uuid_field', 'LogConfig', ] @@ -169,6 +173,10 @@ SantizedDict, StrictPositiveInt, digits, + get_account_use_type_name, + get_monthly_movements_type_name, + get_monthly_spending_type_name, + get_profession_name, get_state_name, ) from .helpers import uuid_field diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index e0eb1b39..f6ed73cb 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -691,39 +691,39 @@ class SATRegimeCode(str, Enum): class Profession(str, Enum): - artisticas = 'Actividades Artísticas' - agropecuario = 'Agricultura, Ganadería o Pesca' - comercio = 'Comercio' - estudiante = 'Estudiante' - empleado = 'Empleado(a/e)' - emprendimiento = 'Emprendimiento' - hogar = 'Hogar' - profesor = 'Profesor(a/e)' - profesionista = 'Profesionista' - servidor_publico = 'Servidor(a/e) Público' - sistemas = 'Sistemas y Comunicaciones' - independiente = 'Trabajador(a/e) Independiente' - oficios = 'Oficios Varios' + artisticas = 'artisticas' + agropecuario = 'agropecuario' + comercio = 'comercio' + estudiante = 'estudiante' + empleado = 'empleado' + emprendimiento = 'emprendimiento' + hogar = 'hogar' + profesor = 'profesor' + profesionista = 'profesionista' + servidor_publico = 'servidor_publico' + sistemas = 'sistemas' + independiente = 'independiente' + oficios = 'oficios' class AccountUseTypes(str, Enum): - personal_expenses = 'Gastos personales o familiares' - business_expenses = 'Gastos relacionados con tu actividad económica' - payment_of_goods_or_services = 'Pago de bienes o servicios' - send_or_receive_transfers = 'Enviar o recibir transferencias' + personal_expenses = 'personal_expenses' + business_expenses = 'business_expenses' + payment_of_goods_or_services = 'payment_of_goods_or_services' + send_or_receive_transfers = 'send_or_receive_transfers' class MonthlyMovementsTypes(str, Enum): - between_1_and_20 = 'Entre 1 y 20 movimientos' - between_20_and_40 = 'Entre 20 y 40 movimientos' - between_40_and_60 = 'Entre 40 y 60 movimientos' - more_than_60 = 'Más de 60 movimientos' + between_1_and_20 = 'between_1_and_20' + between_20_and_40 = 'between_20_and_40' + between_40_and_60 = 'between_40_and_60' + more_than_60 = 'more_than_60' class MonthlySpendingTypes(str, Enum): - less_than_1k = 'Menos de $1,000' - between_1k_and_10k = 'Entre $1,000 y $10,000' - between_10k_and_20k = 'Entre $10,000 y $20,000' - between_20k_and_50k = 'Entre $20,000 y $50,000' - between_50k_and_100k = 'Entre $50,000 y $100,000' - more_than_100k = 'Más de $100,000' + less_than_1k = 'less_than_1k' + between_1k_and_10k = 'between_1k_and_10k' + between_10k_and_20k = 'between_10k_and_20k' + between_20k_and_50k = 'between_20k_and_50k' + between_50k_and_100k = 'between_50k_and_100k' + more_than_100k = 'more_than_100k' diff --git a/cuenca_validations/types/general.py b/cuenca_validations/types/general.py index 89f16ffc..1220dc3f 100644 --- a/cuenca_validations/types/general.py +++ b/cuenca_validations/types/general.py @@ -12,7 +12,13 @@ ) from ..validators import sanitize_dict, sanitize_item -from .enums import State +from .enums import ( + AccountUseTypes, + MonthlyMovementsTypes, + MonthlySpendingTypes, + Profession, + State, +) # We use custom serializers for IP addresses and URLs because # Pydantic's IPvAnyAddress, AnyUrl, HttpUrl types are not JSON serializable. @@ -96,10 +102,77 @@ def digits( } -def get_state_name(state: State): +def get_state_name(state: State) -> str: return names_state[state] +names_professions = { + Profession.artisticas: 'Actividades Artísticas', + Profession.agropecuario: 'Agricultura, Ganadería o Pesca', + Profession.comercio: 'Comercio', + Profession.estudiante: 'Estudiante', + Profession.empleado: 'Empleado(a/e)', + Profession.emprendimiento: 'Emprendimiento', + Profession.hogar: 'Hogar', + Profession.profesor: 'Profesor(a/e)', + Profession.profesionista: 'Profesionista', + Profession.servidor_publico: 'Servidor(a/e) Público', + Profession.sistemas: 'Sistemas y Comunicaciones', + Profession.independiente: 'Trabajador(a/e) Independiente', + Profession.oficios: 'Oficios Varios', +} + + +def get_profession_name(profession: Profession) -> str: + return names_professions[profession] + + +names_account_use_types = { + AccountUseTypes.personal_expenses: 'Gastos personales o familiares', + AccountUseTypes.business_expenses: ( + 'Gastos relacionados con tu actividad económica' + ), + AccountUseTypes.payment_of_goods_or_services: 'Pago de bienes o servicios', + AccountUseTypes.send_or_receive_transfers: ( + 'Enviar o recibir transferencias' + ), +} + + +def get_account_use_type_name(account_use_type: AccountUseTypes) -> str: + return names_account_use_types[account_use_type] + + +names_monthly_movements_types = { + MonthlyMovementsTypes.between_1_and_20: 'Entre 1 y 20 movimientos', + MonthlyMovementsTypes.between_20_and_40: 'Entre 20 y 40 movimientos', + MonthlyMovementsTypes.between_40_and_60: 'Entre 40 y 60 movimientos', + MonthlyMovementsTypes.more_than_60: 'Más de 60 movimientos', +} + + +def get_monthly_movements_type_name( + monthly_movements_type: MonthlyMovementsTypes, +) -> str: + return names_monthly_movements_types[monthly_movements_type] + + +names_monthly_spending_types = { + MonthlySpendingTypes.less_than_1k: 'Menos de $1,000', + MonthlySpendingTypes.between_1k_and_10k: 'Entre $1,000 y $10,000', + MonthlySpendingTypes.between_10k_and_20k: 'Entre $10,000 y $20,000', + MonthlySpendingTypes.between_20k_and_50k: 'Entre $20,000 y $50,000', + MonthlySpendingTypes.between_50k_and_100k: 'Entre $50,000 y $100,000', + MonthlySpendingTypes.more_than_100k: 'Más de $100,000', +} + + +def get_monthly_spending_type_name( + monthly_spending_type: MonthlySpendingTypes, +) -> str: + return names_monthly_spending_types[monthly_spending_type] + + @dataclass class LogConfig: masked: bool = False diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 1db5030e..6f873bfb 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16' +__version__ = '2.1.16.dev7' diff --git a/tests/test_types.py b/tests/test_types.py index 1a89c694..f4513c26 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -17,10 +17,17 @@ SessionRequest, TransactionStatus, digits, + get_account_use_type_name, + get_monthly_movements_type_name, + get_monthly_spending_type_name, + get_profession_name, get_state_name, ) from cuenca_validations.types.enums import ( + AccountUseTypes, EcommerceIndicator, + MonthlyMovementsTypes, + MonthlySpendingTypes, Profession, SessionType, State, @@ -544,10 +551,35 @@ def test_limited_wallet_request(): assert LimitedWalletRequest(allowed_curp=curp, allowed_rfc=rfc) -def test_get_state_name(): +def test_get_state_name() -> None: assert get_state_name(State.VZ) == 'Veracruz' +def test_get_profession_name() -> None: + assert get_profession_name(Profession.empleado) == 'Empleado(a/e)' + + +def test_get_account_use_type_name() -> None: + assert ( + get_account_use_type_name(AccountUseTypes.personal_expenses) + == 'Gastos personales o familiares' + ) + + +def test_get_monthly_spending_type_name() -> None: + assert ( + get_monthly_spending_type_name(MonthlySpendingTypes.less_than_1k) + == 'Menos de $1,000' + ) + + +def test_get_monthly_movements_type_name() -> None: + assert ( + get_monthly_movements_type_name(MonthlyMovementsTypes.between_1_and_20) + == 'Entre 1 y 20 movimientos' + ) + + def test_bank_account_validation_clabe_request(): assert BankAccountValidationRequest(account_number='646180157098510917') From 50e1eccc9e4cf491b0a917c0838012f5c51dcaf9 Mon Sep 17 00:00:00 2001 From: gabino Date: Tue, 2 Sep 2025 12:32:06 -0600 Subject: [PATCH 09/23] Add IncomeType enum and related functions for income type name retrieval --- cuenca_validations/types/__init__.py | 4 ++++ cuenca_validations/types/enums.py | 7 +++++++ cuenca_validations/types/general.py | 13 +++++++++++++ cuenca_validations/types/requests.py | 3 +++ tests/test_types.py | 6 ++++++ 5 files changed, 33 insertions(+) diff --git a/cuenca_validations/types/__init__.py b/cuenca_validations/types/__init__.py index 09901a14..d883f1c0 100644 --- a/cuenca_validations/types/__init__.py +++ b/cuenca_validations/types/__init__.py @@ -44,6 +44,7 @@ 'FileRequest', 'FileUploadRequest', 'Gender', + 'IncomeType', 'IssuerNetwork', 'IdentityQuery', 'JSONEncoder', @@ -111,6 +112,7 @@ 'digits', 'get_state_name', 'get_profession_name', + 'get_income_type_name', 'get_account_use_type_name', 'get_monthly_movements_type_name', 'get_monthly_spending_type_name', @@ -140,6 +142,7 @@ FileExtension, FileFormat, Gender, + IncomeType, IssuerNetwork, KYCFileType, KYCValidationSource, @@ -174,6 +177,7 @@ StrictPositiveInt, digits, get_account_use_type_name, + get_income_type_name, get_monthly_movements_type_name, get_monthly_spending_type_name, get_profession_name, diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index f6ed73cb..b2dbc86a 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -727,3 +727,10 @@ class MonthlySpendingTypes(str, Enum): between_20k_and_50k = 'between_20k_and_50k' between_50k_and_100k = 'between_50k_and_100k' more_than_100k = 'more_than_100k' + + +class IncomeType(str, Enum): + salary = 'salary' + freelance = 'freelance' + support_from_third_party = 'support_from_third_party' + variable = 'variable' diff --git a/cuenca_validations/types/general.py b/cuenca_validations/types/general.py index 1220dc3f..1250b758 100644 --- a/cuenca_validations/types/general.py +++ b/cuenca_validations/types/general.py @@ -14,6 +14,7 @@ from ..validators import sanitize_dict, sanitize_item from .enums import ( AccountUseTypes, + IncomeType, MonthlyMovementsTypes, MonthlySpendingTypes, Profession, @@ -173,6 +174,18 @@ def get_monthly_spending_type_name( return names_monthly_spending_types[monthly_spending_type] +names_income_types = { + IncomeType.salary: 'Sueldo o salario fijo', + IncomeType.freelance: 'Independiente', + IncomeType.support_from_third_party: 'Apoyo de terceros o familiares', + IncomeType.variable: 'Variable', +} + + +def get_income_type_name(income_type: IncomeType) -> str: + return names_income_types[income_type] + + @dataclass class LogConfig: masked: bool = False diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index 20720947..2da24f22 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -30,6 +30,7 @@ EcommerceIndicator, FileExtension, Gender, + IncomeType, IssuerNetwork, KYCFileType, KYCValidationSource, @@ -465,6 +466,7 @@ class UserRequest(BaseModel): account_use_type: Optional[AccountUseTypes] = None monthly_movements_type: Optional[MonthlyMovementsTypes] = None monthly_spending_type: Optional[MonthlySpendingTypes] = None + income_type: Optional[IncomeType] = None model_config = ConfigDict( json_schema_extra={ @@ -504,6 +506,7 @@ class UserUpdateRequest(BaseModel): account_use_type: Optional[AccountUseTypes] = None monthly_movements_type: Optional[MonthlyMovementsTypes] = None monthly_spending_type: Optional[MonthlySpendingTypes] = None + income_type: Optional[IncomeType] = None @field_validator('beneficiaries') @classmethod diff --git a/tests/test_types.py b/tests/test_types.py index f4513c26..46d2d903 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -18,6 +18,7 @@ TransactionStatus, digits, get_account_use_type_name, + get_income_type_name, get_monthly_movements_type_name, get_monthly_spending_type_name, get_profession_name, @@ -26,6 +27,7 @@ from cuenca_validations.types.enums import ( AccountUseTypes, EcommerceIndicator, + IncomeType, MonthlyMovementsTypes, MonthlySpendingTypes, Profession, @@ -559,6 +561,10 @@ def test_get_profession_name() -> None: assert get_profession_name(Profession.empleado) == 'Empleado(a/e)' +def test_get_income_type_name() -> None: + assert get_income_type_name(IncomeType.salary) == 'Sueldo o salario fijo' + + def test_get_account_use_type_name() -> None: assert ( get_account_use_type_name(AccountUseTypes.personal_expenses) From 8eb7dd3861f09f0be9477cc214ef2ceb68620ea6 Mon Sep 17 00:00:00 2001 From: gabino Date: Tue, 2 Sep 2025 12:43:36 -0600 Subject: [PATCH 10/23] Bump version to 2.1.16.dev8 in version.py --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 6f873bfb..2a00f522 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev7' +__version__ = '2.1.16.dev8' From c38a7564306d241a5d54ea447914068f71c6cba1 Mon Sep 17 00:00:00 2001 From: gabino Date: Tue, 2 Sep 2025 12:56:59 -0600 Subject: [PATCH 11/23] Update version to 2.1.16.dev9 --- cuenca_validations/types/__init__.py | 12 ++++----- cuenca_validations/types/enums.py | 6 ++--- cuenca_validations/types/general.py | 40 ++++++++++++++-------------- cuenca_validations/types/requests.py | 18 ++++++------- cuenca_validations/version.py | 2 +- tests/test_types.py | 12 ++++----- 6 files changed, 45 insertions(+), 45 deletions(-) diff --git a/cuenca_validations/types/__init__.py b/cuenca_validations/types/__init__.py index d883f1c0..44bedae8 100644 --- a/cuenca_validations/types/__init__.py +++ b/cuenca_validations/types/__init__.py @@ -1,5 +1,5 @@ __all__ = [ - 'AccountUseTypes', + 'AccountUseType', 'AccountQuery', 'Address', 'ApiKeyQuery', @@ -54,8 +54,8 @@ 'KYCValidationSource', 'Language', 'LimitedWalletRequest', - 'MonthlyMovementsTypes', - 'MonthlySpendingTypes', + 'MonthlyMovementsType', + 'MonthlySpendingType', 'PartnerRequest', 'PartnerUpdateRequest', 'PhoneNumber', @@ -122,7 +122,7 @@ from .card import StrictPaymentCardNumber from .enums import ( - AccountUseTypes, + AccountUseType, AuthorizerTransaction, BankAccountStatus, CardErrorType, @@ -147,8 +147,8 @@ KYCFileType, KYCValidationSource, Language, - MonthlyMovementsTypes, - MonthlySpendingTypes, + MonthlyMovementsType, + MonthlySpendingType, PlatformType, PosCapability, Profession, diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index b2dbc86a..42d8c47f 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -706,21 +706,21 @@ class Profession(str, Enum): oficios = 'oficios' -class AccountUseTypes(str, Enum): +class AccountUseType(str, Enum): personal_expenses = 'personal_expenses' business_expenses = 'business_expenses' payment_of_goods_or_services = 'payment_of_goods_or_services' send_or_receive_transfers = 'send_or_receive_transfers' -class MonthlyMovementsTypes(str, Enum): +class MonthlyMovementsType(str, Enum): between_1_and_20 = 'between_1_and_20' between_20_and_40 = 'between_20_and_40' between_40_and_60 = 'between_40_and_60' more_than_60 = 'more_than_60' -class MonthlySpendingTypes(str, Enum): +class MonthlySpendingType(str, Enum): less_than_1k = 'less_than_1k' between_1k_and_10k = 'between_1k_and_10k' between_10k_and_20k = 'between_10k_and_20k' diff --git a/cuenca_validations/types/general.py b/cuenca_validations/types/general.py index 1250b758..20e4f8cf 100644 --- a/cuenca_validations/types/general.py +++ b/cuenca_validations/types/general.py @@ -13,10 +13,10 @@ from ..validators import sanitize_dict, sanitize_item from .enums import ( - AccountUseTypes, + AccountUseType, IncomeType, - MonthlyMovementsTypes, - MonthlySpendingTypes, + MonthlyMovementsType, + MonthlySpendingType, Profession, State, ) @@ -129,47 +129,47 @@ def get_profession_name(profession: Profession) -> str: names_account_use_types = { - AccountUseTypes.personal_expenses: 'Gastos personales o familiares', - AccountUseTypes.business_expenses: ( + AccountUseType.personal_expenses: 'Gastos personales o familiares', + AccountUseType.business_expenses: ( 'Gastos relacionados con tu actividad económica' ), - AccountUseTypes.payment_of_goods_or_services: 'Pago de bienes o servicios', - AccountUseTypes.send_or_receive_transfers: ( + AccountUseType.payment_of_goods_or_services: 'Pago de bienes o servicios', + AccountUseType.send_or_receive_transfers: ( 'Enviar o recibir transferencias' ), } -def get_account_use_type_name(account_use_type: AccountUseTypes) -> str: +def get_account_use_type_name(account_use_type: AccountUseType) -> str: return names_account_use_types[account_use_type] names_monthly_movements_types = { - MonthlyMovementsTypes.between_1_and_20: 'Entre 1 y 20 movimientos', - MonthlyMovementsTypes.between_20_and_40: 'Entre 20 y 40 movimientos', - MonthlyMovementsTypes.between_40_and_60: 'Entre 40 y 60 movimientos', - MonthlyMovementsTypes.more_than_60: 'Más de 60 movimientos', + MonthlyMovementsType.between_1_and_20: 'Entre 1 y 20 movimientos', + MonthlyMovementsType.between_20_and_40: 'Entre 20 y 40 movimientos', + MonthlyMovementsType.between_40_and_60: 'Entre 40 y 60 movimientos', + MonthlyMovementsType.more_than_60: 'Más de 60 movimientos', } def get_monthly_movements_type_name( - monthly_movements_type: MonthlyMovementsTypes, + monthly_movements_type: MonthlyMovementsType, ) -> str: return names_monthly_movements_types[monthly_movements_type] names_monthly_spending_types = { - MonthlySpendingTypes.less_than_1k: 'Menos de $1,000', - MonthlySpendingTypes.between_1k_and_10k: 'Entre $1,000 y $10,000', - MonthlySpendingTypes.between_10k_and_20k: 'Entre $10,000 y $20,000', - MonthlySpendingTypes.between_20k_and_50k: 'Entre $20,000 y $50,000', - MonthlySpendingTypes.between_50k_and_100k: 'Entre $50,000 y $100,000', - MonthlySpendingTypes.more_than_100k: 'Más de $100,000', + MonthlySpendingType.less_than_1k: 'Menos de $1,000', + MonthlySpendingType.between_1k_and_10k: 'Entre $1,000 y $10,000', + MonthlySpendingType.between_10k_and_20k: 'Entre $10,000 y $20,000', + MonthlySpendingType.between_20k_and_50k: 'Entre $20,000 y $50,000', + MonthlySpendingType.between_50k_and_100k: 'Entre $50,000 y $100,000', + MonthlySpendingType.more_than_100k: 'Más de $100,000', } def get_monthly_spending_type_name( - monthly_spending_type: MonthlySpendingTypes, + monthly_spending_type: MonthlySpendingType, ) -> str: return names_monthly_spending_types[monthly_spending_type] diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index 2da24f22..c2b5efad 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -17,7 +17,7 @@ from pydantic_extra_types.coordinate import Coordinate from ..types.enums import ( - AccountUseTypes, + AccountUseType, AuthorizerTransaction, CardDesign, CardFundingType, @@ -34,8 +34,8 @@ IssuerNetwork, KYCFileType, KYCValidationSource, - MonthlyMovementsTypes, - MonthlySpendingTypes, + MonthlyMovementsType, + MonthlySpendingType, PlatformType, PosCapability, Profession, @@ -463,9 +463,9 @@ class UserRequest(BaseModel): ..., description='ID of previously validated email verification', ) - account_use_type: Optional[AccountUseTypes] = None - monthly_movements_type: Optional[MonthlyMovementsTypes] = None - monthly_spending_type: Optional[MonthlySpendingTypes] = None + account_use_type: Optional[AccountUseType] = None + monthly_movements_type: Optional[MonthlyMovementsType] = None + monthly_spending_type: Optional[MonthlySpendingType] = None income_type: Optional[IncomeType] = None model_config = ConfigDict( @@ -503,9 +503,9 @@ class UserUpdateRequest(BaseModel): pronouns: Optional[str] = None status: Optional[UserStatus] = None required_level: Optional[int] = None - account_use_type: Optional[AccountUseTypes] = None - monthly_movements_type: Optional[MonthlyMovementsTypes] = None - monthly_spending_type: Optional[MonthlySpendingTypes] = None + account_use_type: Optional[AccountUseType] = None + monthly_movements_type: Optional[MonthlyMovementsType] = None + monthly_spending_type: Optional[MonthlySpendingType] = None income_type: Optional[IncomeType] = None @field_validator('beneficiaries') diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 2a00f522..bfadd25a 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev8' +__version__ = '2.1.16.dev9' diff --git a/tests/test_types.py b/tests/test_types.py index 46d2d903..d45ce5dc 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -25,11 +25,11 @@ get_state_name, ) from cuenca_validations.types.enums import ( - AccountUseTypes, + AccountUseType, EcommerceIndicator, IncomeType, - MonthlyMovementsTypes, - MonthlySpendingTypes, + MonthlyMovementsType, + MonthlySpendingType, Profession, SessionType, State, @@ -567,21 +567,21 @@ def test_get_income_type_name() -> None: def test_get_account_use_type_name() -> None: assert ( - get_account_use_type_name(AccountUseTypes.personal_expenses) + get_account_use_type_name(AccountUseType.personal_expenses) == 'Gastos personales o familiares' ) def test_get_monthly_spending_type_name() -> None: assert ( - get_monthly_spending_type_name(MonthlySpendingTypes.less_than_1k) + get_monthly_spending_type_name(MonthlySpendingType.less_than_1k) == 'Menos de $1,000' ) def test_get_monthly_movements_type_name() -> None: assert ( - get_monthly_movements_type_name(MonthlyMovementsTypes.between_1_and_20) + get_monthly_movements_type_name(MonthlyMovementsType.between_1_and_20) == 'Entre 1 y 20 movimientos' ) From 29fee9a5a5bbb2373080a75e27d124590582dece Mon Sep 17 00:00:00 2001 From: gabino Date: Wed, 3 Sep 2025 12:33:05 -0600 Subject: [PATCH 12/23] Add 'otros' profession to Profession enum --- cuenca_validations/types/enums.py | 1 + cuenca_validations/types/general.py | 1 + 2 files changed, 2 insertions(+) diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index 42d8c47f..f7c860a0 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -704,6 +704,7 @@ class Profession(str, Enum): sistemas = 'sistemas' independiente = 'independiente' oficios = 'oficios' + otros = 'otros' class AccountUseType(str, Enum): diff --git a/cuenca_validations/types/general.py b/cuenca_validations/types/general.py index 20e4f8cf..35343009 100644 --- a/cuenca_validations/types/general.py +++ b/cuenca_validations/types/general.py @@ -121,6 +121,7 @@ def get_state_name(state: State) -> str: Profession.sistemas: 'Sistemas y Comunicaciones', Profession.independiente: 'Trabajador(a/e) Independiente', Profession.oficios: 'Oficios Varios', + Profession.otros: 'Otros', } From 228aec226540ab46193269b359ddfc7235820a8a Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Thu, 4 Sep 2025 13:42:47 -0600 Subject: [PATCH 13/23] feat: add metamap session type and metadata to session request --- cuenca_validations/types/enums.py | 1 + cuenca_validations/types/requests.py | 12 ++++++++ tests/test_requests.py | 41 +++++++++++++++++++++++++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index f7c860a0..81c3b929 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -588,6 +588,7 @@ class SessionType(str, Enum): account_entries = 'session.account_entries' download_file = 'session.download_file' upload_file = 'session.upload_file' + metamap_verification = 'session.metamap_verification' class WebhookObject(str, Enum): diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index c2b5efad..e255b3ab 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -533,6 +533,17 @@ class SessionRequest(BaseRequest): type: SessionType success_url: Optional[SerializableAnyUrl] = None failure_url: Optional[SerializableAnyUrl] = None + metadata: Optional[dict] = None + + @model_validator(mode='before') + @classmethod + def validate_metadata(cls, values: dict) -> dict: + if values[ + 'type' + ] == SessionType.metamap_verification and not values.get('metadata'): + raise ValueError('Metadata expected for this session') + return values + model_config = ConfigDict( json_schema_extra={ 'example': { @@ -540,6 +551,7 @@ class SessionRequest(BaseRequest): 'type': 'session.registration', 'success_url': 'http://example_success.com', 'failure_url': 'http://example_failure.com', + 'metadata': {'verification_id': 'some_verification_id'}, } } ) diff --git a/tests/test_requests.py b/tests/test_requests.py index 95446313..c7453f98 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -1,7 +1,11 @@ import pytest from pydantic import ValidationError -from cuenca_validations.types.requests import UserTOSAgreementRequest +from cuenca_validations.types.enums import SessionType +from cuenca_validations.types.requests import ( + SessionRequest, + UserTOSAgreementRequest, +) from cuenca_validations.typing import DictStrAny @@ -29,3 +33,38 @@ def test_file_cuenca_url_invalid() -> None: ) with pytest.raises(ValidationError): UserTOSAgreementRequest(**request_data) + + +def test_session_request_without_metadata(): + request_data = { + 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', + 'type': 'session.curp_validation', + } + request = SessionRequest(**request_data) + assert request.type == SessionType.curp_validation + assert request.user_id == 'USWqY5cvkISJOxHyEKjAKf8w' + + +def test_session_request_with_metadata(): + request_data = { + 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', + 'type': 'session.metamap_verification', + 'metadata': {'verification_id': 'some_verification'}, + } + request = SessionRequest(**request_data) + assert request.type == SessionType.metamap_verification + assert request.user_id == 'USWqY5cvkISJOxHyEKjAKf8w' + assert request.metadata + assert request.metadata['verification_id'] == 'some_verification' + + +def test_metamap_session_request_without_metadata(): + request_data = { + 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', + 'type': 'session.metamap_verification', + } + + with pytest.raises(ValidationError) as exception: + SessionRequest(**request_data) + + assert 'Metadata expected for this session' in str(exception) From bd7326d8cf9b5bceaae6575016dde8bbc5b7d429 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Thu, 4 Sep 2025 13:43:32 -0600 Subject: [PATCH 14/23] feat: version for testing --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index bfadd25a..fede547d 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev9' +__version__ = '2.1.16.dev10' From 5391705b625d8c650999750065d8e9e553f4540d Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Thu, 4 Sep 2025 13:44:05 -0600 Subject: [PATCH 15/23] feat: version for testing --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index fede547d..0096f085 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev10' +__version__ = '2.1.16.dev100' From b176ded3b1ea3f3ab1370b08640f39ade4090528 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Fri, 5 Sep 2025 17:08:27 -0600 Subject: [PATCH 16/23] fix: change metadata to resource_id --- cuenca_validations/types/requests.py | 10 ++++++---- tests/test_requests.py | 10 +++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index e255b3ab..6b23743e 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -533,15 +533,17 @@ class SessionRequest(BaseRequest): type: SessionType success_url: Optional[SerializableAnyUrl] = None failure_url: Optional[SerializableAnyUrl] = None - metadata: Optional[dict] = None + resource_id: Optional[str] = None @model_validator(mode='before') @classmethod def validate_metadata(cls, values: dict) -> dict: if values[ 'type' - ] == SessionType.metamap_verification and not values.get('metadata'): - raise ValueError('Metadata expected for this session') + ] == SessionType.metamap_verification and not values.get( + 'resource_id' + ): + raise ValueError('Resource id expected for this session') return values model_config = ConfigDict( @@ -551,7 +553,7 @@ def validate_metadata(cls, values: dict) -> dict: 'type': 'session.registration', 'success_url': 'http://example_success.com', 'failure_url': 'http://example_failure.com', - 'metadata': {'verification_id': 'some_verification_id'}, + 'resource_id': 'some_resource_id', } } ) diff --git a/tests/test_requests.py b/tests/test_requests.py index c7453f98..ec24efd0 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -45,17 +45,17 @@ def test_session_request_without_metadata(): assert request.user_id == 'USWqY5cvkISJOxHyEKjAKf8w' -def test_session_request_with_metadata(): +def test_session_request_with_resource_id(): request_data = { 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', 'type': 'session.metamap_verification', - 'metadata': {'verification_id': 'some_verification'}, + 'resource_id': 'some_verification_id', } request = SessionRequest(**request_data) assert request.type == SessionType.metamap_verification assert request.user_id == 'USWqY5cvkISJOxHyEKjAKf8w' - assert request.metadata - assert request.metadata['verification_id'] == 'some_verification' + assert request.resource_id + assert request.resource_id == 'some_verification_id' def test_metamap_session_request_without_metadata(): @@ -67,4 +67,4 @@ def test_metamap_session_request_without_metadata(): with pytest.raises(ValidationError) as exception: SessionRequest(**request_data) - assert 'Metadata expected for this session' in str(exception) + assert 'Resource id expected for this session' in str(exception) From 96575db69b01e6e68b110ac3bd5aa9c9e24f5c57 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Fri, 5 Sep 2025 17:08:53 -0600 Subject: [PATCH 17/23] feat: update version --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 0096f085..b2f84da6 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.16.dev100' +__version__ = '2.1.17.dev1' From e29a73ff50b4bacf1ea5a3d31e19c24c7b3b95aa Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Fri, 5 Sep 2025 17:54:13 -0600 Subject: [PATCH 18/23] fix: fix format and lint --- tests/test_types.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_types.py b/tests/test_types.py index d7185d1c..5d2f66e5 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -149,8 +149,7 @@ def test_invalid_class(): raises a `TypeError`. """ - class ClassWithoutToDict: - ... # noqa: E701 + class ClassWithoutToDict: ... # noqa: E701 invalid_class = ClassWithoutToDict() with pytest.raises(TypeError): From b59b6f3b2a848cc89fb0922f968b28db866fcd87 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Fri, 5 Sep 2025 17:59:00 -0600 Subject: [PATCH 19/23] feat: dev2 --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index b2f84da6..48f77321 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.17.dev1' +__version__ = '2.1.17.dev2' From 97db569626c77ae9606a9b6c8656868246a9afe3 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Fri, 5 Sep 2025 18:05:44 -0600 Subject: [PATCH 20/23] feat: new version --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 48f77321..9fe0aac3 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.17.dev2' +__version__ = '2.1.17.dev3' From 82e95f6b9eec75e5665792bb45e72a8d27cbeda6 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Tue, 9 Sep 2025 13:23:34 -0600 Subject: [PATCH 21/23] feat: version for review --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 9fe0aac3..96f86229 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.17.dev3' +__version__ = '2.1.17' From ec22bbf65c717ab2f7fb9e2cae31fd0e0bf446e5 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Wed, 10 Sep 2025 12:06:45 -0600 Subject: [PATCH 22/23] fix: fixes from revision, deploy of new test version --- cuenca_validations/types/enums.py | 2 +- cuenca_validations/types/requests.py | 7 ++----- cuenca_validations/version.py | 2 +- tests/test_requests.py | 6 +++--- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/cuenca_validations/types/enums.py b/cuenca_validations/types/enums.py index 22b80e10..d29f096b 100644 --- a/cuenca_validations/types/enums.py +++ b/cuenca_validations/types/enums.py @@ -588,7 +588,7 @@ class SessionType(str, Enum): account_entries = 'session.account_entries' download_file = 'session.download_file' upload_file = 'session.upload_file' - metamap_verification = 'session.metamap_verification' + onboarding_verification = 'session.onboarding_verification' class WebhookObject(str, Enum): diff --git a/cuenca_validations/types/requests.py b/cuenca_validations/types/requests.py index e0d1ed0d..f67b9024 100644 --- a/cuenca_validations/types/requests.py +++ b/cuenca_validations/types/requests.py @@ -552,11 +552,8 @@ class SessionRequest(BaseRequest): @model_validator(mode='before') @classmethod def validate_metadata(cls, values: dict) -> dict: - if values[ - 'type' - ] == SessionType.metamap_verification and not values.get( - 'resource_id' - ): + type, resource_id = values['type'], values.get('resource_id') + if type == SessionType.onboarding_verification and not resource_id: raise ValueError('Resource id expected for this session') return values diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 96f86229..92160148 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.17' +__version__ = '2.1.17.dev4' diff --git a/tests/test_requests.py b/tests/test_requests.py index ec24efd0..447198d4 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -48,11 +48,11 @@ def test_session_request_without_metadata(): def test_session_request_with_resource_id(): request_data = { 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', - 'type': 'session.metamap_verification', + 'type': 'session.onboarding_verification', 'resource_id': 'some_verification_id', } request = SessionRequest(**request_data) - assert request.type == SessionType.metamap_verification + assert request.type == SessionType.onboarding_verification assert request.user_id == 'USWqY5cvkISJOxHyEKjAKf8w' assert request.resource_id assert request.resource_id == 'some_verification_id' @@ -61,7 +61,7 @@ def test_session_request_with_resource_id(): def test_metamap_session_request_without_metadata(): request_data = { 'user_id': 'USWqY5cvkISJOxHyEKjAKf8w', - 'type': 'session.metamap_verification', + 'type': 'session.onboarding_verification', } with pytest.raises(ValidationError) as exception: From dacdac93032a12f1d6d31770df15cc98485b0e81 Mon Sep 17 00:00:00 2001 From: Eduardo Garcia Date: Wed, 10 Sep 2025 12:24:40 -0600 Subject: [PATCH 23/23] feat: update version --- cuenca_validations/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuenca_validations/version.py b/cuenca_validations/version.py index 92160148..96f86229 100644 --- a/cuenca_validations/version.py +++ b/cuenca_validations/version.py @@ -1 +1 @@ -__version__ = '2.1.17.dev4' +__version__ = '2.1.17'