""" Options: Date: 2025-12-06 06:54:19 Version: 8.80 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://api.dev.dynamics.trendsic.com #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: FactFinderRequest.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Contact: contact_id: int = 0 contact_type: int = 0 first_name: Optional[str] = None last_name: Optional[str] = None name: Optional[str] = None role: Optional[str] = None title: Optional[str] = None email_work: Optional[str] = None email_personal: Optional[str] = None district: Optional[str] = None district_i_d: int = 0 school: Optional[str] = None school_i_d: int = 0 state: Optional[str] = None state_name: Optional[str] = None state_i_d: int = 0 county_i_d: int = 0 county: Optional[str] = None phone: Optional[str] = None department: Optional[str] = None flow: Optional[str] = None last_contact: datetime.datetime = datetime.datetime(1, 1, 1) do_not_contact: bool = False active: bool = False agent_id: int = 0 phone_alt: Optional[str] = None pera_contact_id: int = 0 room_number: Optional[str] = None source_type_id: int = 0 source_type_desc: Optional[str] = None source_note: Optional[str] = None contact_status_id: int = 0 contact_status_desc: Optional[str] = None ssn: Optional[str] = None date_of_birth: datetime.datetime = datetime.datetime(1, 1, 1) deleted: bool = False is_shared: bool = False address_line1: Optional[str] = None address_city: Optional[str] = None address_state: Optional[str] = None address_zip: Optional[str] = None deleted_by: Optional[str] = None deleted_date_time_utc: Optional[datetime.datetime] = None has_n_b_c: bool = False has_fact_finder_sheet: bool = False middle_initial: Optional[str] = None tags: Optional[str] = None date_created: datetime.datetime = datetime.datetime(1, 1, 1) phone_label: Optional[str] = None alt_phone_label: Optional[str] = None carriers: Optional[str] = None contact_image: Optional[str] = None company_affiliation: Optional[str] = None additional_information: Optional[str] = None has_gift_card: bool = False contact_category: int = 0 writing_agent_id: int = 0 writing_agent_name: Optional[str] = None marital_status: Optional[str] = None total_debt_amount: Decimal = decimal.Decimal(0) number_of_debt_accounts: int = 0 fact_finder_code_id: int = 0 business_name: Optional[str] = None dba: Optional[str] = None contact_g_u_i_d: Optional[str] = None project_end_date: datetime.datetime = datetime.datetime(1, 1, 1) rate: int = 0 job_i_d: int = 0 job_name: Optional[str] = None job_count: int = 0 locked: bool = False locked_by_agent_id: int = 0 locked_timestamp: datetime.datetime = datetime.datetime(1, 1, 1) initials: Optional[str] = None contact_category_name: Optional[str] = None sms_opt_in: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FactFinderSheet: fact_finder_sheet_id: int = 0 contact_id: int = 0 employment_years: Optional[str] = None past_occupations: Optional[str] = None client_gross_mthly_income: Optional[Decimal] = None client_net_mthly_income: Optional[Decimal] = None household_gross_mthly_income: Optional[Decimal] = None household_net_mthly_income: Optional[Decimal] = None estimated_expenses: Optional[Decimal] = None discretionary_income: Optional[Decimal] = None desired_retirement_income: Optional[Decimal] = None retirement_goals: Optional[str] = None emergency_fund_mthly_contrib: Optional[Decimal] = None emergency_fund_balance: Optional[Decimal] = None emergency_fund_complete: Optional[bool] = None work_status: Optional[str] = None unused_sick_days: Optional[Decimal] = None unused_sick_hours: Optional[Decimal] = None contract_base_serv_per_yr_days: Optional[Decimal] = None contract_base_serv_per_yr_hours: Optional[Decimal] = None days_per_week: Optional[Decimal] = None hours_per_week: Optional[Decimal] = None months_per_year: Optional[Decimal] = None num_pre_tax_checks_per_yr: Optional[int] = None years_with_other_districts: Optional[Decimal] = None primary_life_insurance: Optional[bool] = None pli_carrier: Optional[str] = None pli_face_amount: Optional[Decimal] = None pli_issue_date: Optional[datetime.datetime] = None pli_premium: Optional[Decimal] = None pli_type: Optional[str] = None pli_type_of: Optional[str] = None pli_cash_value: Optional[Decimal] = None spouse_life_insurance: Optional[bool] = None sli_carrier: Optional[str] = None sli_face_amount: Optional[Decimal] = None sli_issue_date: Optional[datetime.datetime] = None sli_premium: Optional[Decimal] = None sli_type: Optional[str] = None sli_type_of: Optional[str] = None sli_cash_value: Optional[Decimal] = None primary_l_t_c_insurance: Optional[bool] = None pltc_premium: Optional[Decimal] = None primary_disability_insurance: Optional[bool] = None pdi_premium: Optional[Decimal] = None spouse_l_t_c_insurance: Optional[bool] = None sltc_premium: Optional[Decimal] = None spouse_disability_insurance: Optional[bool] = None sdi_premium: Optional[Decimal] = None has_retirement_savings: Optional[bool] = None has_prior_employment_retirement_savings: Optional[bool] = None has_distribution_plan: Optional[bool] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContactSpouse: contact_spouse_id: int = 0 contact_id: int = 0 name: Optional[str] = None dob: Optional[datetime.datetime] = None cell: Optional[str] = None employer: Optional[str] = None years: Optional[Decimal] = None position: Optional[str] = None email: Optional[str] = None past_occupations: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContactChild: contact_child_id: int = 0 contact_id: int = 0 name: Optional[str] = None dob: Optional[datetime.datetime] = None fund: Optional[str] = None contribution: Optional[Decimal] = None balance: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContactRetirementIncome: contact_retirement_income_id: int = 0 contact_id: int = 0 account_owner: Optional[str] = None account_type: Optional[str] = None carrier: Optional[str] = None total_value: Optional[Decimal] = None surr_value: Optional[Decimal] = None date_of_issue: Optional[datetime.datetime] = None fees: Optional[Decimal] = None policy_num: Optional[str] = None contrib: Optional[Decimal] = None emp_notes: Optional[str] = None tax_code: Optional[str] = None surr_charge: Optional[Decimal] = None third_prty_pprwrk_o_k: Optional[bool] = None addl_forms_reqd: Optional[bool] = None original_forms_reqd: Optional[bool] = None signature_guar_reqd: Optional[bool] = None fax_accepted: Optional[bool] = None fax_number: Optional[str] = None mailing_addr: Optional[str] = None mailing_city: Optional[str] = None mailing_state: Optional[str] = None mailing_zip: Optional[str] = None has_outstanding_loans: Optional[bool] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContactExpense: contact_expense_id: int = 0 contact_id: int = 0 expense_type: Optional[str] = None description: Optional[str] = None balance: Optional[Decimal] = None interest_rate: Optional[Decimal] = None minimum_payment: Optional[Decimal] = None monthly_payment: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContactClientReferral: contact_client_referral_id: int = 0 contact_id: int = 0 name: Optional[str] = None campus: Optional[str] = None room: Optional[str] = None phone: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContactLTAInfo: contact_l_t_a_info_id: int = 0 contact_id: int = 0 plan_type: Optional[str] = None company: Optional[str] = None contribution: Optional[Decimal] = None balance: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContactPension: contact_pension_id: int = 0 contact_id: int = 0 pension_system: Optional[str] = None pension_start_date: Optional[datetime.datetime] = None service_credit: Optional[Decimal] = None service_credit_as_of_date: Optional[datetime.datetime] = None desired_retirement_date: Optional[datetime.datetime] = None desired_retirement_age: int = 0 spousal_benefit_desired: Optional[bool] = None formula_percent: Optional[Decimal] = None formula_at: Optional[Decimal] = None defined_benefit_balance: Optional[Decimal] = None defined_benefit_spouse_balance: Optional[Decimal] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FactFinderSheetExtended: contact: Optional[Contact] = None fact_finder_sheet: Optional[FactFinderSheet] = None spouse: Optional[ContactSpouse] = None children: List[ContactChild] = field(default_factory=list) income_sources: List[ContactRetirementIncome] = field(default_factory=list) additional_notes: Optional[str] = None expenses: List[ContactExpense] = field(default_factory=list) referrals: List[ContactClientReferral] = field(default_factory=list) lta_info: List[ContactLTAInfo] = field(default_factory=list) pensions: List[ContactPension] = field(default_factory=list) # @Route("/v1/FactFinder", "POST,PUT,OPTIONS") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FactFinderRequest: fact_finder_sheet: Optional[FactFinderSheetExtended] = None data_entry: bool = False