from dataclasses import dataclass
from datetime import datetime, date
from typing import Optional
from q2_sdk.models.demographic import Address
[docs]
class AccountStatus:
ACTIVE = "Active"
CLOSED = "Closed"
[docs]
class RecordType:
DOMESTIC = "Domestic"
INTERNATIONAL = "International"
[docs]
@dataclass
class AddressRec(Address):
address_1: Optional[str]
address_2: Optional[str]
city: Optional[str]
state: Optional[str]
zipcode: Optional[str]
address_type: Optional[str]
country: Optional[str]
country_code: Optional[str]
def __post_init__(self):
super().__init__(
address_1=self.address_1,
address_2=self.address_2,
city=self.city,
state=self.state,
zipcode=self.zipcode,
)
self.address_type = (
RecordType.INTERNATIONAL
if self.address_type == "01"
else RecordType.DOMESTIC
)
[docs]
@dataclass
class Other:
home_phone: str
mobile_phone: Optional[str]
work_phone: Optional[str]
work_phone_extension: Optional[str]
phone_type: str
alternative_email: Optional[str]
email: str
def __post_init__(self):
self.phone_type = (
RecordType.INTERNATIONAL if self.phone_type == "01" else RecordType.DOMESTIC
)
[docs]
@dataclass
class Account:
memo_mode: str
account_type: str
account_number: str
account_close_date: str
def __post_init__(self):
self.account_status = get_account_status(self.account_close_date)
[docs]
@dataclass
class DemographicInfoExt:
full_name: str
first_name: str
last_name: str
middle_name: Optional[str]
mothers_maiden_name: Optional[str]
date_of_birth: str
ssn: str
is_primary: str
primary_cif: str
account_type: str
account_close_date: str
drivers_license: str
core_specific: dict
address_records: AddressRec
other_records: Other
def __post_init__(self):
self.is_primary = True if int(self.is_primary) == 0 else False
self.other_info = self.other_records
[docs]
def get_account_status(account_close_date):
account_status = None
if [int(s) for s, n in enumerate(account_close_date) if n.isdigit()]:
close_date_obj = datetime.strptime(account_close_date, "%m/%d/%Y").date()
if close_date_obj < date.today():
account_status = AccountStatus.CLOSED
if account_status != "Closed":
account_status = AccountStatus.ACTIVE
return account_status