"""KYC models.""" from functools import cached_property from uuid import UUID from pydantic import BaseModel, computed_field, Field from src.connectors.ows_payee import get_payee from src.models.payee import PayeeEntityType class PayeeKycApprovedRequestModel(BaseModel): """Payee KYC approved model.""" payoneer_client_reference_id: int | UUID = Field(alias='Payee Id') payoneer_payee_id: int = Field(alias='Payoneer Id') @computed_field # type: ignore[prop-decorator] @cached_property def payee_entity_type(self) -> PayeeEntityType: """Get the payee type.""" if isinstance(self.payoneer_client_reference_id, UUID): return PayeeEntityType.payee return PayeeEntityType.account_payee @computed_field # type: ignore[prop-decorator] @cached_property def payee_entity_id(self) -> int: """Get the Payoneer payee ID.""" # If payee type is payee we need to fetch info based on payoneer client reference ID and return the ID if self.payee_entity_type == PayeeEntityType.payee: return get_payee(str(self.payoneer_client_reference_id)).payee_id # Otherwise payee type is account payee so the payoneer client reference ID is the ID and we can just convert to int and return it return int(self.payoneer_client_reference_id) class PayeeKycDeclinedRequestModel(PayeeKycApprovedRequestModel): """Payee KYC declined model.""" reason: str | None = Field(alias='Reason Description', default=None) class PayeeKycNotificationRequestModel(PayeeKycApprovedRequestModel): """Payee KYC notification model.""" session_id: str | None = Field(alias='Session Id', default=None) file_upload_link: str = Field(alias='File Upload Link') requirement_id: str | None = Field(alias='Requirement Id', default=None) sub_requirement_id: str | None = Field(alias='Sub Requirement Id', default=None) class PayeeKycRequirementReopenRequestModel(PayeeKycApprovedRequestModel): """Payee KYC requirement re-open model.""" session_id: str | None = Field(alias='Session Id', default=None) file_upload_link: str = Field(alias='File Upload Link') requirement_type_id: int | None = Field(alias='Requirement Type Id', default=None) sub_requirement_status_id: int | None = Field( alias='Sub Requirement Status Id', default=None ) possible_sub_requirement_types: str | None = Field( alias='Possible Sub Requirement Types', default=None ) entity_reference_id: str | None = Field(alias='Entity Reference Id', default=None) entity_reference_type_id: int | None = Field( alias='Entity Reference Type Id', default=None )