| Requires any of the roles: | Agent, Administrator, Agent, Administrator |
| 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
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=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
}