Trendsic Platform Service

<back to all web services

FactFinderRequest

Requires Authentication
Requires any of the roles:Agent, Administrator, Agent, Administrator
The following routes are available for this service:
POST,PUT,OPTIONS/v1/FactFinder
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)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class FactFinderRequest:
    fact_finder_sheet: Optional[FactFinderSheetExtended] = None
    data_entry: bool = False

Python FactFinderRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /v1/FactFinder HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	FactFinderSheet: 
	{
		Contact: 
		{
			ContactId: 0,
			ContactType: 0,
			FirstName: String,
			LastName: String,
			Name: String,
			Role: String,
			Title: String,
			EmailWork: String,
			EmailPersonal: String,
			District: String,
			DistrictID: 0,
			School: String,
			SchoolID: 0,
			State: String,
			StateName: String,
			StateID: 0,
			CountyID: 0,
			County: String,
			Phone: String,
			Department: String,
			Flow: String,
			LastContact: 0001-01-01,
			DoNotContact: False,
			Active: False,
			AgentId: 0,
			PhoneAlt: String,
			PeraContactId: 0,
			RoomNumber: String,
			SourceTypeId: 0,
			SourceTypeDesc: String,
			SourceNote: String,
			ContactStatusId: 0,
			ContactStatusDesc: String,
			SSN: String,
			DateOfBirth: 0001-01-01,
			Deleted: False,
			IsShared: False,
			address_line1: String,
			address_city: String,
			address_state: String,
			address_zip: String,
			DeletedBy: String,
			DeletedDateTimeUtc: 0001-01-01,
			HasNBC: False,
			HasFactFinderSheet: False,
			MiddleInitial: String,
			Tags: String,
			DateCreated: 0001-01-01,
			PhoneLabel: String,
			AltPhoneLabel: String,
			Carriers: String,
			ContactImage: String,
			CompanyAffiliation: String,
			AdditionalInformation: String,
			HasGiftCard: False,
			ContactCategory: 0,
			WritingAgentId: 0,
			WritingAgentName: String,
			MaritalStatus: String,
			TotalDebtAmount: 0,
			NumberOfDebtAccounts: 0,
			FactFinderCodeId: 0,
			BusinessName: String,
			DBA: String,
			ContactGUID: 00000000000000000000000000000000,
			ProjectEndDate: 0001-01-01,
			Rate: 0,
			JobID: 0,
			JobName: String,
			JobCount: 0,
			Locked: False,
			LockedByAgentId: 0,
			LockedTimestamp: 0001-01-01,
			Initials: String,
			ContactCategoryName: String,
			SMSOptIn: False
		},
		FactFinderSheet: 
		{
			FactFinderSheetId: 0,
			ContactId: 0,
			EmploymentYears: String,
			PastOccupations: String,
			ClientGrossMthlyIncome: 0,
			ClientNetMthlyIncome: 0,
			HouseholdGrossMthlyIncome: 0,
			HouseholdNetMthlyIncome: 0,
			EstimatedExpenses: 0,
			DiscretionaryIncome: 0,
			DesiredRetirementIncome: 0,
			RetirementGoals: String,
			EmergencyFundMthlyContrib: 0,
			EmergencyFundBalance: 0,
			EmergencyFundComplete: False,
			WorkStatus: String,
			UnusedSickDays: 0,
			UnusedSickHours: 0,
			ContractBaseServPerYrDays: 0,
			ContractBaseServPerYrHours: 0,
			DaysPerWeek: 0,
			HoursPerWeek: 0,
			MonthsPerYear: 0,
			NumPreTaxChecksPerYr: 0,
			YearsWithOtherDistricts: 0,
			PrimaryLifeInsurance: False,
			PLICarrier: String,
			PLIFaceAmount: 0,
			PLIIssueDate: 0001-01-01,
			PLIPremium: 0,
			PLIType: String,
			PLITypeOf: String,
			PLICashValue: 0,
			SpouseLifeInsurance: False,
			SLICarrier: String,
			SLIFaceAmount: 0,
			SLIIssueDate: 0001-01-01,
			SLIPremium: 0,
			SLIType: String,
			SLITypeOf: String,
			SLICashValue: 0,
			PrimaryLTCInsurance: False,
			PLTCPremium: 0,
			PrimaryDisabilityInsurance: False,
			PDIPremium: 0,
			SpouseLTCInsurance: False,
			SLTCPremium: 0,
			SpouseDisabilityInsurance: False,
			SDIPremium: 0,
			HasRetirementSavings: False,
			HasPriorEmploymentRetirementSavings: False,
			HasDistributionPlan: False
		},
		Spouse: 
		{
			ContactSpouseId: 0,
			ContactId: 0,
			Name: String,
			DOB: 0001-01-01,
			Cell: String,
			Employer: String,
			Years: 0,
			Position: String,
			Email: String,
			PastOccupations: String
		},
		Children: 
		[
			{
				ContactChildId: 0,
				ContactId: 0,
				Name: String,
				DOB: 0001-01-01,
				Fund: String,
				Contribution: 0,
				Balance: 0
			}
		],
		IncomeSources: 
		[
			{
				ContactRetirementIncomeId: 0,
				ContactId: 0,
				AccountOwner: String,
				AccountType: String,
				Carrier: String,
				TotalValue: 0,
				SurrValue: 0,
				DateOfIssue: 0001-01-01,
				Fees: 0,
				PolicyNum: String,
				Contrib: 0,
				EmpNotes: String,
				TaxCode: String,
				SurrCharge: 0,
				ThirdPrtyPprwrkOK: False,
				AddlFormsReqd: False,
				OriginalFormsReqd: False,
				SignatureGuarReqd: False,
				FaxAccepted: False,
				FaxNumber: String,
				MailingAddr: String,
				MailingCity: String,
				MailingState: String,
				MailingZip: String,
				HasOutstandingLoans: False
			}
		],
		AdditionalNotes: String,
		Expenses: 
		[
			{
				ContactExpenseId: 0,
				ContactId: 0,
				ExpenseType: String,
				Description: String,
				Balance: 0,
				InterestRate: 0,
				MinimumPayment: 0,
				MonthlyPayment: 0
			}
		],
		Referrals: 
		[
			{
				ContactClientReferralId: 0,
				ContactId: 0,
				Name: String,
				Campus: String,
				Room: String,
				Phone: String
			}
		],
		LTAInfo: 
		[
			{
				ContactLTAInfoId: 0,
				ContactId: 0,
				PlanType: String,
				Company: String,
				Contribution: 0,
				Balance: 0
			}
		],
		Pensions: 
		[
			{
				ContactPensionId: 0,
				ContactId: 0,
				PensionSystem: String,
				PensionStartDate: 0001-01-01,
				ServiceCredit: 0,
				ServiceCreditAsOfDate: 0001-01-01,
				DesiredRetirementDate: 0001-01-01,
				DesiredRetirementAge: 0,
				SpousalBenefitDesired: False,
				FormulaPercent: 0,
				FormulaAt: 0,
				DefinedBenefitBalance: 0,
				DefinedBenefitSpouseBalance: 0
			}
		]
	},
	DataEntry: False
}