"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""

from __future__ import annotations
from ascend_sdk import utils
from ascend_sdk.types import BaseModel
from ascend_sdk.utils import validate_open_enum
from enum import Enum
from pydantic.functional_validators import PlainValidator
from typing_extensions import Annotated, TypedDict


class IDDocumentUploadRequestCreateDocumentType(
    str, Enum, metaclass=utils.OpenEnumMeta
):
    r"""Describes the contents of a document and how it is used; Required for all identity documents"""

    ID_DOCUMENT_TYPE_UNSPECIFIED = "ID_DOCUMENT_TYPE_UNSPECIFIED"
    BIRTH_CERTIFICATE = "BIRTH_CERTIFICATE"
    CUSTOMER_IDENTIFICATION_PROCESS = "CUSTOMER_IDENTIFICATION_PROCESS"
    DEATH_CERTIFICATE = "DEATH_CERTIFICATE"
    DRIVING_LICENSE = "DRIVING_LICENSE"
    EMPLOYER_CONSENT_FORM_407_LETTER = "EMPLOYER_CONSENT_FORM_407_LETTER"
    MARRIAGE_CERTIFICATE = "MARRIAGE_CERTIFICATE"
    PASSPORT = "PASSPORT"
    PROOF_OF_TAX_ID = "PROOF_OF_TAX_ID"
    SOCIAL_SECURITY_DOCUMENT = "SOCIAL_SECURITY_DOCUMENT"
    THIRD_PARTY_CIP_RESULTS = "THIRD_PARTY_CIP_RESULTS"
    STATE_ID_CARD = "STATE_ID_CARD"
    NATIONAL_ID_CARD = "NATIONAL_ID_CARD"
    PERMANENT_RESIDENT_VISA = "PERMANENT_RESIDENT_VISA"
    IRIS_ITIN_LETTER = "IRIS_ITIN_LETTER"
    UTILITY_BILL = "UTILITY_BILL"
    MILITARY_ID_CARD = "MILITARY_ID_CARD"
    MORTGAGE_STATEMENT = "MORTGAGE_STATEMENT"
    LEASE_AGREEMENT = "LEASE_AGREEMENT"
    EXECUTOR_CERTIFICATION = "EXECUTOR_CERTIFICATION"
    TRUSTEE_CERTIFICATION = "TRUSTEE_CERTIFICATION"
    SELFIE = "SELFIE"
    ARTICLES_OF_ORGANISATION = "ARTICLES_OF_ORGANISATION"
    CERT_OF_SOLE_OFFICER = "CERT_OF_SOLE_OFFICER"
    CERTIFICATION_CORRESPONDENT_ACCOUNTS = "CERTIFICATION_CORRESPONDENT_ACCOUNTS"
    CERTIFICATION_FOREIGN_BANKS = "CERTIFICATION_FOREIGN_BANKS"
    CHARTER_ARTICLES_OF_INCORPORATION = "CHARTER_ARTICLES_OF_INCORPORATION"
    DIVORCE_DECREE = "DIVORCE_DECREE"
    PROOF_OF_RESIDENCE = "PROOF_OF_RESIDENCE"
    BO_REPORTING_EXEMPTION_PROOF = "BO_REPORTING_EXEMPTION_PROOF"


class IDDocumentUploadRequestCreateTypedDict(TypedDict):
    r"""Identity document to be uploaded;"""

    correspondent_id: str
    r"""Identifies the correspondent relevant to the document; Required for all identity documents"""
    document_type: IDDocumentUploadRequestCreateDocumentType
    r"""Describes the contents of a document and how it is used; Required for all identity documents"""
    legal_natural_person_id: str
    r"""Identifies the legal natural person relevant to the document"""


class IDDocumentUploadRequestCreate(BaseModel):
    r"""Identity document to be uploaded;"""

    correspondent_id: str
    r"""Identifies the correspondent relevant to the document; Required for all identity documents"""

    document_type: Annotated[
        IDDocumentUploadRequestCreateDocumentType,
        PlainValidator(validate_open_enum(False)),
    ]
    r"""Describes the contents of a document and how it is used; Required for all identity documents"""

    legal_natural_person_id: str
    r"""Identifies the legal natural person relevant to the document"""
