# coding: utf-8

"""
    Synctera API

    <h2>Let's build something great.</h2><p>Welcome to the official reference documentation for Synctera APIs. Our APIs are the best way to automate your company's banking needs and are designed to be easy to understand and implement.</p><p>We're continuously growing this library and what you see here is just the start, but if you need something specific or have a question, <a class='text-blue-600' href='https://synctera.com/contact' target='_blank' rel='noreferrer'>contact us</a>.</p>   # noqa: E501

    The version of the OpenAPI document: 0.32.0.dev6
    Generated by: https://openapi-generator.tech
"""

from datetime import date, datetime  # noqa: F401
import decimal  # noqa: F401
import functools  # noqa: F401
import io  # noqa: F401
import re  # noqa: F401
import typing  # noqa: F401
import typing_extensions  # noqa: F401
import uuid  # noqa: F401

import frozendict  # noqa: F401

from synctera_client import schemas  # noqa: F401


class EnhancedTransactionData(
    schemas.DictSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.

    Enriched transaction metadata
    """


    class MetaOapg:
        
        class properties:
            category = schemas.StrSchema
            enhanced_description = schemas.StrSchema
            
            
            class enhanced_raw(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    
                    class items(
                        schemas.DictSchema
                    ):
                    
                    
                        class MetaOapg:
                            
                            class properties:
                                amount = schemas.NumberSchema
                                categorized_by = schemas.IntSchema
                                category = schemas.StrSchema
                                category_guid = schemas.StrSchema
                                described_by = schemas.IntSchema
                                description = schemas.StrSchema
                                extended_transaction_type = schemas.StrSchema
                                id = schemas.IntSchema
                                is_bill_pay = schemas.BoolSchema
                                is_direct_deposit = schemas.BoolSchema
                                is_expense = schemas.BoolSchema
                                is_fee = schemas.BoolSchema
                                is_income = schemas.BoolSchema
                                is_international = schemas.BoolSchema
                                is_overdraft_fee = schemas.BoolSchema
                                is_payroll_advance = schemas.BoolSchema
                                is_subscription = schemas.BoolSchema
                                memo = schemas.StrSchema
                                merchant_category_code = schemas.IntSchema
                                merchant_guid = schemas.StrSchema
                                merchant_location_guid = schemas.StrSchema
                                original_description = schemas.StrSchema
                                type = schemas.StrSchema
                                __annotations__ = {
                                    "amount": amount,
                                    "categorized_by": categorized_by,
                                    "category": category,
                                    "category_guid": category_guid,
                                    "described_by": described_by,
                                    "description": description,
                                    "extended_transaction_type": extended_transaction_type,
                                    "id": id,
                                    "is_bill_pay": is_bill_pay,
                                    "is_direct_deposit": is_direct_deposit,
                                    "is_expense": is_expense,
                                    "is_fee": is_fee,
                                    "is_income": is_income,
                                    "is_international": is_international,
                                    "is_overdraft_fee": is_overdraft_fee,
                                    "is_payroll_advance": is_payroll_advance,
                                    "is_subscription": is_subscription,
                                    "memo": memo,
                                    "merchant_category_code": merchant_category_code,
                                    "merchant_guid": merchant_guid,
                                    "merchant_location_guid": merchant_location_guid,
                                    "original_description": original_description,
                                    "type": type,
                                }
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["amount"]) -> MetaOapg.properties.amount: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["categorized_by"]) -> MetaOapg.properties.categorized_by: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["category"]) -> MetaOapg.properties.category: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["category_guid"]) -> MetaOapg.properties.category_guid: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["described_by"]) -> MetaOapg.properties.described_by: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["extended_transaction_type"]) -> MetaOapg.properties.extended_transaction_type: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_bill_pay"]) -> MetaOapg.properties.is_bill_pay: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_direct_deposit"]) -> MetaOapg.properties.is_direct_deposit: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_expense"]) -> MetaOapg.properties.is_expense: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_fee"]) -> MetaOapg.properties.is_fee: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_income"]) -> MetaOapg.properties.is_income: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_international"]) -> MetaOapg.properties.is_international: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_overdraft_fee"]) -> MetaOapg.properties.is_overdraft_fee: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_payroll_advance"]) -> MetaOapg.properties.is_payroll_advance: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["is_subscription"]) -> MetaOapg.properties.is_subscription: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["memo"]) -> MetaOapg.properties.memo: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["merchant_category_code"]) -> MetaOapg.properties.merchant_category_code: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["merchant_guid"]) -> MetaOapg.properties.merchant_guid: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["merchant_location_guid"]) -> MetaOapg.properties.merchant_location_guid: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["original_description"]) -> MetaOapg.properties.original_description: ...
                        
                        @typing.overload
                        def __getitem__(self, name: typing_extensions.Literal["type"]) -> MetaOapg.properties.type: ...
                        
                        @typing.overload
                        def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
                        
                        def __getitem__(self, name: typing.Union[typing_extensions.Literal["amount", "categorized_by", "category", "category_guid", "described_by", "description", "extended_transaction_type", "id", "is_bill_pay", "is_direct_deposit", "is_expense", "is_fee", "is_income", "is_international", "is_overdraft_fee", "is_payroll_advance", "is_subscription", "memo", "merchant_category_code", "merchant_guid", "merchant_location_guid", "original_description", "type", ], str]):
                            # dict_instance[name] accessor
                            return super().__getitem__(name)
                        
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["amount"]) -> typing.Union[MetaOapg.properties.amount, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["categorized_by"]) -> typing.Union[MetaOapg.properties.categorized_by, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["category"]) -> typing.Union[MetaOapg.properties.category, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["category_guid"]) -> typing.Union[MetaOapg.properties.category_guid, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["described_by"]) -> typing.Union[MetaOapg.properties.described_by, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["description"]) -> typing.Union[MetaOapg.properties.description, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["extended_transaction_type"]) -> typing.Union[MetaOapg.properties.extended_transaction_type, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_bill_pay"]) -> typing.Union[MetaOapg.properties.is_bill_pay, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_direct_deposit"]) -> typing.Union[MetaOapg.properties.is_direct_deposit, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_expense"]) -> typing.Union[MetaOapg.properties.is_expense, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_fee"]) -> typing.Union[MetaOapg.properties.is_fee, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_income"]) -> typing.Union[MetaOapg.properties.is_income, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_international"]) -> typing.Union[MetaOapg.properties.is_international, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_overdraft_fee"]) -> typing.Union[MetaOapg.properties.is_overdraft_fee, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_payroll_advance"]) -> typing.Union[MetaOapg.properties.is_payroll_advance, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["is_subscription"]) -> typing.Union[MetaOapg.properties.is_subscription, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["memo"]) -> typing.Union[MetaOapg.properties.memo, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["merchant_category_code"]) -> typing.Union[MetaOapg.properties.merchant_category_code, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["merchant_guid"]) -> typing.Union[MetaOapg.properties.merchant_guid, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["merchant_location_guid"]) -> typing.Union[MetaOapg.properties.merchant_location_guid, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["original_description"]) -> typing.Union[MetaOapg.properties.original_description, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: typing_extensions.Literal["type"]) -> typing.Union[MetaOapg.properties.type, schemas.Unset]: ...
                        
                        @typing.overload
                        def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
                        
                        def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["amount", "categorized_by", "category", "category_guid", "described_by", "description", "extended_transaction_type", "id", "is_bill_pay", "is_direct_deposit", "is_expense", "is_fee", "is_income", "is_international", "is_overdraft_fee", "is_payroll_advance", "is_subscription", "memo", "merchant_category_code", "merchant_guid", "merchant_location_guid", "original_description", "type", ], str]):
                            return super().get_item_oapg(name)
                        
                    
                        def __new__(
                            cls,
                            *_args: typing.Union[dict, frozendict.frozendict, ],
                            amount: typing.Union[MetaOapg.properties.amount, decimal.Decimal, int, float, schemas.Unset] = schemas.unset,
                            categorized_by: typing.Union[MetaOapg.properties.categorized_by, decimal.Decimal, int, schemas.Unset] = schemas.unset,
                            category: typing.Union[MetaOapg.properties.category, str, schemas.Unset] = schemas.unset,
                            category_guid: typing.Union[MetaOapg.properties.category_guid, str, schemas.Unset] = schemas.unset,
                            described_by: typing.Union[MetaOapg.properties.described_by, decimal.Decimal, int, schemas.Unset] = schemas.unset,
                            description: typing.Union[MetaOapg.properties.description, str, schemas.Unset] = schemas.unset,
                            extended_transaction_type: typing.Union[MetaOapg.properties.extended_transaction_type, str, schemas.Unset] = schemas.unset,
                            id: typing.Union[MetaOapg.properties.id, decimal.Decimal, int, schemas.Unset] = schemas.unset,
                            is_bill_pay: typing.Union[MetaOapg.properties.is_bill_pay, bool, schemas.Unset] = schemas.unset,
                            is_direct_deposit: typing.Union[MetaOapg.properties.is_direct_deposit, bool, schemas.Unset] = schemas.unset,
                            is_expense: typing.Union[MetaOapg.properties.is_expense, bool, schemas.Unset] = schemas.unset,
                            is_fee: typing.Union[MetaOapg.properties.is_fee, bool, schemas.Unset] = schemas.unset,
                            is_income: typing.Union[MetaOapg.properties.is_income, bool, schemas.Unset] = schemas.unset,
                            is_international: typing.Union[MetaOapg.properties.is_international, bool, schemas.Unset] = schemas.unset,
                            is_overdraft_fee: typing.Union[MetaOapg.properties.is_overdraft_fee, bool, schemas.Unset] = schemas.unset,
                            is_payroll_advance: typing.Union[MetaOapg.properties.is_payroll_advance, bool, schemas.Unset] = schemas.unset,
                            is_subscription: typing.Union[MetaOapg.properties.is_subscription, bool, schemas.Unset] = schemas.unset,
                            memo: typing.Union[MetaOapg.properties.memo, str, schemas.Unset] = schemas.unset,
                            merchant_category_code: typing.Union[MetaOapg.properties.merchant_category_code, decimal.Decimal, int, schemas.Unset] = schemas.unset,
                            merchant_guid: typing.Union[MetaOapg.properties.merchant_guid, str, schemas.Unset] = schemas.unset,
                            merchant_location_guid: typing.Union[MetaOapg.properties.merchant_location_guid, str, schemas.Unset] = schemas.unset,
                            original_description: typing.Union[MetaOapg.properties.original_description, str, schemas.Unset] = schemas.unset,
                            type: typing.Union[MetaOapg.properties.type, str, schemas.Unset] = schemas.unset,
                            _configuration: typing.Optional[schemas.Configuration] = None,
                            **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
                        ) -> 'items':
                            return super().__new__(
                                cls,
                                *_args,
                                amount=amount,
                                categorized_by=categorized_by,
                                category=category,
                                category_guid=category_guid,
                                described_by=described_by,
                                description=description,
                                extended_transaction_type=extended_transaction_type,
                                id=id,
                                is_bill_pay=is_bill_pay,
                                is_direct_deposit=is_direct_deposit,
                                is_expense=is_expense,
                                is_fee=is_fee,
                                is_income=is_income,
                                is_international=is_international,
                                is_overdraft_fee=is_overdraft_fee,
                                is_payroll_advance=is_payroll_advance,
                                is_subscription=is_subscription,
                                memo=memo,
                                merchant_category_code=merchant_category_code,
                                merchant_guid=merchant_guid,
                                merchant_location_guid=merchant_location_guid,
                                original_description=original_description,
                                type=type,
                                _configuration=_configuration,
                                **kwargs,
                            )
            
                def __new__(
                    cls,
                    _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, dict, frozendict.frozendict, ]], typing.List[typing.Union[MetaOapg.items, dict, frozendict.frozendict, ]]],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'enhanced_raw':
                    return super().__new__(
                        cls,
                        _arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> MetaOapg.items:
                    return super().__getitem__(i)
            __annotations__ = {
                "category": category,
                "enhanced_description": enhanced_description,
                "enhanced_raw": enhanced_raw,
            }
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["category"]) -> MetaOapg.properties.category: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["enhanced_description"]) -> MetaOapg.properties.enhanced_description: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["enhanced_raw"]) -> MetaOapg.properties.enhanced_raw: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["category", "enhanced_description", "enhanced_raw", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["category"]) -> typing.Union[MetaOapg.properties.category, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["enhanced_description"]) -> typing.Union[MetaOapg.properties.enhanced_description, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["enhanced_raw"]) -> typing.Union[MetaOapg.properties.enhanced_raw, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["category", "enhanced_description", "enhanced_raw", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *_args: typing.Union[dict, frozendict.frozendict, ],
        category: typing.Union[MetaOapg.properties.category, str, schemas.Unset] = schemas.unset,
        enhanced_description: typing.Union[MetaOapg.properties.enhanced_description, str, schemas.Unset] = schemas.unset,
        enhanced_raw: typing.Union[MetaOapg.properties.enhanced_raw, list, tuple, schemas.Unset] = schemas.unset,
        _configuration: typing.Optional[schemas.Configuration] = None,
        **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
    ) -> 'EnhancedTransactionData':
        return super().__new__(
            cls,
            *_args,
            category=category,
            enhanced_description=enhanced_description,
            enhanced_raw=enhanced_raw,
            _configuration=_configuration,
            **kwargs,
        )
