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
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


class Contact implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactId=0,
        /** @var int */
        public int $ContactType=0,
        /** @var string|null */
        public ?string $FirstName=null,
        /** @var string|null */
        public ?string $LastName=null,
        /** @var string|null */
        public ?string $Name=null,
        /** @var string|null */
        public ?string $Role=null,
        /** @var string|null */
        public ?string $Title=null,
        /** @var string|null */
        public ?string $EmailWork=null,
        /** @var string|null */
        public ?string $EmailPersonal=null,
        /** @var string|null */
        public ?string $District=null,
        /** @var int */
        public int $DistrictID=0,
        /** @var string|null */
        public ?string $School=null,
        /** @var int */
        public int $SchoolID=0,
        /** @var string|null */
        public ?string $State=null,
        /** @var string|null */
        public ?string $StateName=null,
        /** @var int */
        public int $StateID=0,
        /** @var int */
        public int $CountyID=0,
        /** @var string|null */
        public ?string $County=null,
        /** @var string|null */
        public ?string $Phone=null,
        /** @var string|null */
        public ?string $Department=null,
        /** @var string|null */
        public ?string $Flow=null,
        /** @var DateTime */
        public DateTime $LastContact=new DateTime(),
        /** @var bool|null */
        public ?bool $DoNotContact=null,
        /** @var bool|null */
        public ?bool $Active=null,
        /** @var int */
        public int $AgentId=0,
        /** @var string|null */
        public ?string $PhoneAlt=null,
        /** @var int */
        public int $PeraContactId=0,
        /** @var string|null */
        public ?string $RoomNumber=null,
        /** @var int */
        public int $SourceTypeId=0,
        /** @var string|null */
        public ?string $SourceTypeDesc=null,
        /** @var string|null */
        public ?string $SourceNote=null,
        /** @var int */
        public int $ContactStatusId=0,
        /** @var string|null */
        public ?string $ContactStatusDesc=null,
        /** @var string|null */
        public ?string $SSN=null,
        /** @var DateTime */
        public DateTime $DateOfBirth=new DateTime(),
        /** @var bool|null */
        public ?bool $Deleted=null,
        /** @var bool|null */
        public ?bool $IsShared=null,
        /** @var string|null */
        public ?string $address_line1=null,
        /** @var string|null */
        public ?string $address_city=null,
        /** @var string|null */
        public ?string $address_state=null,
        /** @var string|null */
        public ?string $address_zip=null,
        /** @var string|null */
        public ?string $DeletedBy=null,
        /** @var DateTime|null */
        public ?DateTime $DeletedDateTimeUtc=null,
        /** @var bool|null */
        public ?bool $HasNBC=null,
        /** @var bool|null */
        public ?bool $HasFactFinderSheet=null,
        /** @var string|null */
        public ?string $MiddleInitial=null,
        /** @var string|null */
        public ?string $Tags=null,
        /** @var DateTime */
        public DateTime $DateCreated=new DateTime(),
        /** @var string|null */
        public ?string $PhoneLabel=null,
        /** @var string|null */
        public ?string $AltPhoneLabel=null,
        /** @var string|null */
        public ?string $Carriers=null,
        /** @var string|null */
        public ?string $ContactImage=null,
        /** @var string|null */
        public ?string $CompanyAffiliation=null,
        /** @var string|null */
        public ?string $AdditionalInformation=null,
        /** @var bool|null */
        public ?bool $HasGiftCard=null,
        /** @var int */
        public int $ContactCategory=0,
        /** @var int */
        public int $WritingAgentId=0,
        /** @var string|null */
        public ?string $WritingAgentName=null,
        /** @var string|null */
        public ?string $MaritalStatus=null,
        /** @var float */
        public float $TotalDebtAmount=0.0,
        /** @var int */
        public int $NumberOfDebtAccounts=0,
        /** @var int */
        public int $FactFinderCodeId=0,
        /** @var string|null */
        public ?string $BusinessName=null,
        /** @var string|null */
        public ?string $DBA=null,
        /** @var string */
        public string $ContactGUID='',
        /** @var DateTime */
        public DateTime $ProjectEndDate=new DateTime(),
        /** @var int */
        public int $Rate=0,
        /** @var int */
        public int $JobID=0,
        /** @var string|null */
        public ?string $JobName=null,
        /** @var int */
        public int $JobCount=0,
        /** @var bool|null */
        public ?bool $Locked=null,
        /** @var int */
        public int $LockedByAgentId=0,
        /** @var DateTime */
        public DateTime $LockedTimestamp=new DateTime(),
        /** @var string|null */
        public ?string $Initials=null,
        /** @var string|null */
        public ?string $ContactCategoryName=null,
        /** @var bool|null */
        public ?bool $SMSOptIn=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['ContactType'])) $this->ContactType = $o['ContactType'];
        if (isset($o['FirstName'])) $this->FirstName = $o['FirstName'];
        if (isset($o['LastName'])) $this->LastName = $o['LastName'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['Role'])) $this->Role = $o['Role'];
        if (isset($o['Title'])) $this->Title = $o['Title'];
        if (isset($o['EmailWork'])) $this->EmailWork = $o['EmailWork'];
        if (isset($o['EmailPersonal'])) $this->EmailPersonal = $o['EmailPersonal'];
        if (isset($o['District'])) $this->District = $o['District'];
        if (isset($o['DistrictID'])) $this->DistrictID = $o['DistrictID'];
        if (isset($o['School'])) $this->School = $o['School'];
        if (isset($o['SchoolID'])) $this->SchoolID = $o['SchoolID'];
        if (isset($o['State'])) $this->State = $o['State'];
        if (isset($o['StateName'])) $this->StateName = $o['StateName'];
        if (isset($o['StateID'])) $this->StateID = $o['StateID'];
        if (isset($o['CountyID'])) $this->CountyID = $o['CountyID'];
        if (isset($o['County'])) $this->County = $o['County'];
        if (isset($o['Phone'])) $this->Phone = $o['Phone'];
        if (isset($o['Department'])) $this->Department = $o['Department'];
        if (isset($o['Flow'])) $this->Flow = $o['Flow'];
        if (isset($o['LastContact'])) $this->LastContact = JsonConverters::from('DateTime', $o['LastContact']);
        if (isset($o['DoNotContact'])) $this->DoNotContact = $o['DoNotContact'];
        if (isset($o['Active'])) $this->Active = $o['Active'];
        if (isset($o['AgentId'])) $this->AgentId = $o['AgentId'];
        if (isset($o['PhoneAlt'])) $this->PhoneAlt = $o['PhoneAlt'];
        if (isset($o['PeraContactId'])) $this->PeraContactId = $o['PeraContactId'];
        if (isset($o['RoomNumber'])) $this->RoomNumber = $o['RoomNumber'];
        if (isset($o['SourceTypeId'])) $this->SourceTypeId = $o['SourceTypeId'];
        if (isset($o['SourceTypeDesc'])) $this->SourceTypeDesc = $o['SourceTypeDesc'];
        if (isset($o['SourceNote'])) $this->SourceNote = $o['SourceNote'];
        if (isset($o['ContactStatusId'])) $this->ContactStatusId = $o['ContactStatusId'];
        if (isset($o['ContactStatusDesc'])) $this->ContactStatusDesc = $o['ContactStatusDesc'];
        if (isset($o['SSN'])) $this->SSN = $o['SSN'];
        if (isset($o['DateOfBirth'])) $this->DateOfBirth = JsonConverters::from('DateTime', $o['DateOfBirth']);
        if (isset($o['Deleted'])) $this->Deleted = $o['Deleted'];
        if (isset($o['IsShared'])) $this->IsShared = $o['IsShared'];
        if (isset($o['address_line1'])) $this->address_line1 = $o['address_line1'];
        if (isset($o['address_city'])) $this->address_city = $o['address_city'];
        if (isset($o['address_state'])) $this->address_state = $o['address_state'];
        if (isset($o['address_zip'])) $this->address_zip = $o['address_zip'];
        if (isset($o['DeletedBy'])) $this->DeletedBy = $o['DeletedBy'];
        if (isset($o['DeletedDateTimeUtc'])) $this->DeletedDateTimeUtc = JsonConverters::from('DateTime', $o['DeletedDateTimeUtc']);
        if (isset($o['HasNBC'])) $this->HasNBC = $o['HasNBC'];
        if (isset($o['HasFactFinderSheet'])) $this->HasFactFinderSheet = $o['HasFactFinderSheet'];
        if (isset($o['MiddleInitial'])) $this->MiddleInitial = $o['MiddleInitial'];
        if (isset($o['Tags'])) $this->Tags = $o['Tags'];
        if (isset($o['DateCreated'])) $this->DateCreated = JsonConverters::from('DateTime', $o['DateCreated']);
        if (isset($o['PhoneLabel'])) $this->PhoneLabel = $o['PhoneLabel'];
        if (isset($o['AltPhoneLabel'])) $this->AltPhoneLabel = $o['AltPhoneLabel'];
        if (isset($o['Carriers'])) $this->Carriers = $o['Carriers'];
        if (isset($o['ContactImage'])) $this->ContactImage = $o['ContactImage'];
        if (isset($o['CompanyAffiliation'])) $this->CompanyAffiliation = $o['CompanyAffiliation'];
        if (isset($o['AdditionalInformation'])) $this->AdditionalInformation = $o['AdditionalInformation'];
        if (isset($o['HasGiftCard'])) $this->HasGiftCard = $o['HasGiftCard'];
        if (isset($o['ContactCategory'])) $this->ContactCategory = $o['ContactCategory'];
        if (isset($o['WritingAgentId'])) $this->WritingAgentId = $o['WritingAgentId'];
        if (isset($o['WritingAgentName'])) $this->WritingAgentName = $o['WritingAgentName'];
        if (isset($o['MaritalStatus'])) $this->MaritalStatus = $o['MaritalStatus'];
        if (isset($o['TotalDebtAmount'])) $this->TotalDebtAmount = $o['TotalDebtAmount'];
        if (isset($o['NumberOfDebtAccounts'])) $this->NumberOfDebtAccounts = $o['NumberOfDebtAccounts'];
        if (isset($o['FactFinderCodeId'])) $this->FactFinderCodeId = $o['FactFinderCodeId'];
        if (isset($o['BusinessName'])) $this->BusinessName = $o['BusinessName'];
        if (isset($o['DBA'])) $this->DBA = $o['DBA'];
        if (isset($o['ContactGUID'])) $this->ContactGUID = $o['ContactGUID'];
        if (isset($o['ProjectEndDate'])) $this->ProjectEndDate = JsonConverters::from('DateTime', $o['ProjectEndDate']);
        if (isset($o['Rate'])) $this->Rate = $o['Rate'];
        if (isset($o['JobID'])) $this->JobID = $o['JobID'];
        if (isset($o['JobName'])) $this->JobName = $o['JobName'];
        if (isset($o['JobCount'])) $this->JobCount = $o['JobCount'];
        if (isset($o['Locked'])) $this->Locked = $o['Locked'];
        if (isset($o['LockedByAgentId'])) $this->LockedByAgentId = $o['LockedByAgentId'];
        if (isset($o['LockedTimestamp'])) $this->LockedTimestamp = JsonConverters::from('DateTime', $o['LockedTimestamp']);
        if (isset($o['Initials'])) $this->Initials = $o['Initials'];
        if (isset($o['ContactCategoryName'])) $this->ContactCategoryName = $o['ContactCategoryName'];
        if (isset($o['SMSOptIn'])) $this->SMSOptIn = $o['SMSOptIn'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->ContactType)) $o['ContactType'] = $this->ContactType;
        if (isset($this->FirstName)) $o['FirstName'] = $this->FirstName;
        if (isset($this->LastName)) $o['LastName'] = $this->LastName;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->Role)) $o['Role'] = $this->Role;
        if (isset($this->Title)) $o['Title'] = $this->Title;
        if (isset($this->EmailWork)) $o['EmailWork'] = $this->EmailWork;
        if (isset($this->EmailPersonal)) $o['EmailPersonal'] = $this->EmailPersonal;
        if (isset($this->District)) $o['District'] = $this->District;
        if (isset($this->DistrictID)) $o['DistrictID'] = $this->DistrictID;
        if (isset($this->School)) $o['School'] = $this->School;
        if (isset($this->SchoolID)) $o['SchoolID'] = $this->SchoolID;
        if (isset($this->State)) $o['State'] = $this->State;
        if (isset($this->StateName)) $o['StateName'] = $this->StateName;
        if (isset($this->StateID)) $o['StateID'] = $this->StateID;
        if (isset($this->CountyID)) $o['CountyID'] = $this->CountyID;
        if (isset($this->County)) $o['County'] = $this->County;
        if (isset($this->Phone)) $o['Phone'] = $this->Phone;
        if (isset($this->Department)) $o['Department'] = $this->Department;
        if (isset($this->Flow)) $o['Flow'] = $this->Flow;
        if (isset($this->LastContact)) $o['LastContact'] = JsonConverters::to('DateTime', $this->LastContact);
        if (isset($this->DoNotContact)) $o['DoNotContact'] = $this->DoNotContact;
        if (isset($this->Active)) $o['Active'] = $this->Active;
        if (isset($this->AgentId)) $o['AgentId'] = $this->AgentId;
        if (isset($this->PhoneAlt)) $o['PhoneAlt'] = $this->PhoneAlt;
        if (isset($this->PeraContactId)) $o['PeraContactId'] = $this->PeraContactId;
        if (isset($this->RoomNumber)) $o['RoomNumber'] = $this->RoomNumber;
        if (isset($this->SourceTypeId)) $o['SourceTypeId'] = $this->SourceTypeId;
        if (isset($this->SourceTypeDesc)) $o['SourceTypeDesc'] = $this->SourceTypeDesc;
        if (isset($this->SourceNote)) $o['SourceNote'] = $this->SourceNote;
        if (isset($this->ContactStatusId)) $o['ContactStatusId'] = $this->ContactStatusId;
        if (isset($this->ContactStatusDesc)) $o['ContactStatusDesc'] = $this->ContactStatusDesc;
        if (isset($this->SSN)) $o['SSN'] = $this->SSN;
        if (isset($this->DateOfBirth)) $o['DateOfBirth'] = JsonConverters::to('DateTime', $this->DateOfBirth);
        if (isset($this->Deleted)) $o['Deleted'] = $this->Deleted;
        if (isset($this->IsShared)) $o['IsShared'] = $this->IsShared;
        if (isset($this->address_line1)) $o['address_line1'] = $this->address_line1;
        if (isset($this->address_city)) $o['address_city'] = $this->address_city;
        if (isset($this->address_state)) $o['address_state'] = $this->address_state;
        if (isset($this->address_zip)) $o['address_zip'] = $this->address_zip;
        if (isset($this->DeletedBy)) $o['DeletedBy'] = $this->DeletedBy;
        if (isset($this->DeletedDateTimeUtc)) $o['DeletedDateTimeUtc'] = JsonConverters::to('DateTime', $this->DeletedDateTimeUtc);
        if (isset($this->HasNBC)) $o['HasNBC'] = $this->HasNBC;
        if (isset($this->HasFactFinderSheet)) $o['HasFactFinderSheet'] = $this->HasFactFinderSheet;
        if (isset($this->MiddleInitial)) $o['MiddleInitial'] = $this->MiddleInitial;
        if (isset($this->Tags)) $o['Tags'] = $this->Tags;
        if (isset($this->DateCreated)) $o['DateCreated'] = JsonConverters::to('DateTime', $this->DateCreated);
        if (isset($this->PhoneLabel)) $o['PhoneLabel'] = $this->PhoneLabel;
        if (isset($this->AltPhoneLabel)) $o['AltPhoneLabel'] = $this->AltPhoneLabel;
        if (isset($this->Carriers)) $o['Carriers'] = $this->Carriers;
        if (isset($this->ContactImage)) $o['ContactImage'] = $this->ContactImage;
        if (isset($this->CompanyAffiliation)) $o['CompanyAffiliation'] = $this->CompanyAffiliation;
        if (isset($this->AdditionalInformation)) $o['AdditionalInformation'] = $this->AdditionalInformation;
        if (isset($this->HasGiftCard)) $o['HasGiftCard'] = $this->HasGiftCard;
        if (isset($this->ContactCategory)) $o['ContactCategory'] = $this->ContactCategory;
        if (isset($this->WritingAgentId)) $o['WritingAgentId'] = $this->WritingAgentId;
        if (isset($this->WritingAgentName)) $o['WritingAgentName'] = $this->WritingAgentName;
        if (isset($this->MaritalStatus)) $o['MaritalStatus'] = $this->MaritalStatus;
        if (isset($this->TotalDebtAmount)) $o['TotalDebtAmount'] = $this->TotalDebtAmount;
        if (isset($this->NumberOfDebtAccounts)) $o['NumberOfDebtAccounts'] = $this->NumberOfDebtAccounts;
        if (isset($this->FactFinderCodeId)) $o['FactFinderCodeId'] = $this->FactFinderCodeId;
        if (isset($this->BusinessName)) $o['BusinessName'] = $this->BusinessName;
        if (isset($this->DBA)) $o['DBA'] = $this->DBA;
        if (isset($this->ContactGUID)) $o['ContactGUID'] = $this->ContactGUID;
        if (isset($this->ProjectEndDate)) $o['ProjectEndDate'] = JsonConverters::to('DateTime', $this->ProjectEndDate);
        if (isset($this->Rate)) $o['Rate'] = $this->Rate;
        if (isset($this->JobID)) $o['JobID'] = $this->JobID;
        if (isset($this->JobName)) $o['JobName'] = $this->JobName;
        if (isset($this->JobCount)) $o['JobCount'] = $this->JobCount;
        if (isset($this->Locked)) $o['Locked'] = $this->Locked;
        if (isset($this->LockedByAgentId)) $o['LockedByAgentId'] = $this->LockedByAgentId;
        if (isset($this->LockedTimestamp)) $o['LockedTimestamp'] = JsonConverters::to('DateTime', $this->LockedTimestamp);
        if (isset($this->Initials)) $o['Initials'] = $this->Initials;
        if (isset($this->ContactCategoryName)) $o['ContactCategoryName'] = $this->ContactCategoryName;
        if (isset($this->SMSOptIn)) $o['SMSOptIn'] = $this->SMSOptIn;
        return empty($o) ? new class(){} : $o;
    }
}

class FactFinderSheet implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $FactFinderSheetId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $EmploymentYears=null,
        /** @var string|null */
        public ?string $PastOccupations=null,
        /** @var float|null */
        public ?float $ClientGrossMthlyIncome=null,
        /** @var float|null */
        public ?float $ClientNetMthlyIncome=null,
        /** @var float|null */
        public ?float $HouseholdGrossMthlyIncome=null,
        /** @var float|null */
        public ?float $HouseholdNetMthlyIncome=null,
        /** @var float|null */
        public ?float $EstimatedExpenses=null,
        /** @var float|null */
        public ?float $DiscretionaryIncome=null,
        /** @var float|null */
        public ?float $DesiredRetirementIncome=null,
        /** @var string|null */
        public ?string $RetirementGoals=null,
        /** @var float|null */
        public ?float $EmergencyFundMthlyContrib=null,
        /** @var float|null */
        public ?float $EmergencyFundBalance=null,
        /** @var bool|null */
        public ?bool $EmergencyFundComplete=null,
        /** @var string|null */
        public ?string $WorkStatus=null,
        /** @var float|null */
        public ?float $UnusedSickDays=null,
        /** @var float|null */
        public ?float $UnusedSickHours=null,
        /** @var float|null */
        public ?float $ContractBaseServPerYrDays=null,
        /** @var float|null */
        public ?float $ContractBaseServPerYrHours=null,
        /** @var float|null */
        public ?float $DaysPerWeek=null,
        /** @var float|null */
        public ?float $HoursPerWeek=null,
        /** @var float|null */
        public ?float $MonthsPerYear=null,
        /** @var int|null */
        public ?int $NumPreTaxChecksPerYr=null,
        /** @var float|null */
        public ?float $YearsWithOtherDistricts=null,
        /** @var bool|null */
        public ?bool $PrimaryLifeInsurance=null,
        /** @var string|null */
        public ?string $PLICarrier=null,
        /** @var float|null */
        public ?float $PLIFaceAmount=null,
        /** @var DateTime|null */
        public ?DateTime $PLIIssueDate=null,
        /** @var float|null */
        public ?float $PLIPremium=null,
        /** @var string|null */
        public ?string $PLIType=null,
        /** @var string|null */
        public ?string $PLITypeOf=null,
        /** @var float|null */
        public ?float $PLICashValue=null,
        /** @var bool|null */
        public ?bool $SpouseLifeInsurance=null,
        /** @var string|null */
        public ?string $SLICarrier=null,
        /** @var float|null */
        public ?float $SLIFaceAmount=null,
        /** @var DateTime|null */
        public ?DateTime $SLIIssueDate=null,
        /** @var float|null */
        public ?float $SLIPremium=null,
        /** @var string|null */
        public ?string $SLIType=null,
        /** @var string|null */
        public ?string $SLITypeOf=null,
        /** @var float|null */
        public ?float $SLICashValue=null,
        /** @var bool|null */
        public ?bool $PrimaryLTCInsurance=null,
        /** @var float|null */
        public ?float $PLTCPremium=null,
        /** @var bool|null */
        public ?bool $PrimaryDisabilityInsurance=null,
        /** @var float|null */
        public ?float $PDIPremium=null,
        /** @var bool|null */
        public ?bool $SpouseLTCInsurance=null,
        /** @var float|null */
        public ?float $SLTCPremium=null,
        /** @var bool|null */
        public ?bool $SpouseDisabilityInsurance=null,
        /** @var float|null */
        public ?float $SDIPremium=null,
        /** @var bool|null */
        public ?bool $HasRetirementSavings=null,
        /** @var bool|null */
        public ?bool $HasPriorEmploymentRetirementSavings=null,
        /** @var bool|null */
        public ?bool $HasDistributionPlan=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['FactFinderSheetId'])) $this->FactFinderSheetId = $o['FactFinderSheetId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['EmploymentYears'])) $this->EmploymentYears = $o['EmploymentYears'];
        if (isset($o['PastOccupations'])) $this->PastOccupations = $o['PastOccupations'];
        if (isset($o['ClientGrossMthlyIncome'])) $this->ClientGrossMthlyIncome = $o['ClientGrossMthlyIncome'];
        if (isset($o['ClientNetMthlyIncome'])) $this->ClientNetMthlyIncome = $o['ClientNetMthlyIncome'];
        if (isset($o['HouseholdGrossMthlyIncome'])) $this->HouseholdGrossMthlyIncome = $o['HouseholdGrossMthlyIncome'];
        if (isset($o['HouseholdNetMthlyIncome'])) $this->HouseholdNetMthlyIncome = $o['HouseholdNetMthlyIncome'];
        if (isset($o['EstimatedExpenses'])) $this->EstimatedExpenses = $o['EstimatedExpenses'];
        if (isset($o['DiscretionaryIncome'])) $this->DiscretionaryIncome = $o['DiscretionaryIncome'];
        if (isset($o['DesiredRetirementIncome'])) $this->DesiredRetirementIncome = $o['DesiredRetirementIncome'];
        if (isset($o['RetirementGoals'])) $this->RetirementGoals = $o['RetirementGoals'];
        if (isset($o['EmergencyFundMthlyContrib'])) $this->EmergencyFundMthlyContrib = $o['EmergencyFundMthlyContrib'];
        if (isset($o['EmergencyFundBalance'])) $this->EmergencyFundBalance = $o['EmergencyFundBalance'];
        if (isset($o['EmergencyFundComplete'])) $this->EmergencyFundComplete = $o['EmergencyFundComplete'];
        if (isset($o['WorkStatus'])) $this->WorkStatus = $o['WorkStatus'];
        if (isset($o['UnusedSickDays'])) $this->UnusedSickDays = $o['UnusedSickDays'];
        if (isset($o['UnusedSickHours'])) $this->UnusedSickHours = $o['UnusedSickHours'];
        if (isset($o['ContractBaseServPerYrDays'])) $this->ContractBaseServPerYrDays = $o['ContractBaseServPerYrDays'];
        if (isset($o['ContractBaseServPerYrHours'])) $this->ContractBaseServPerYrHours = $o['ContractBaseServPerYrHours'];
        if (isset($o['DaysPerWeek'])) $this->DaysPerWeek = $o['DaysPerWeek'];
        if (isset($o['HoursPerWeek'])) $this->HoursPerWeek = $o['HoursPerWeek'];
        if (isset($o['MonthsPerYear'])) $this->MonthsPerYear = $o['MonthsPerYear'];
        if (isset($o['NumPreTaxChecksPerYr'])) $this->NumPreTaxChecksPerYr = $o['NumPreTaxChecksPerYr'];
        if (isset($o['YearsWithOtherDistricts'])) $this->YearsWithOtherDistricts = $o['YearsWithOtherDistricts'];
        if (isset($o['PrimaryLifeInsurance'])) $this->PrimaryLifeInsurance = $o['PrimaryLifeInsurance'];
        if (isset($o['PLICarrier'])) $this->PLICarrier = $o['PLICarrier'];
        if (isset($o['PLIFaceAmount'])) $this->PLIFaceAmount = $o['PLIFaceAmount'];
        if (isset($o['PLIIssueDate'])) $this->PLIIssueDate = JsonConverters::from('DateTime', $o['PLIIssueDate']);
        if (isset($o['PLIPremium'])) $this->PLIPremium = $o['PLIPremium'];
        if (isset($o['PLIType'])) $this->PLIType = $o['PLIType'];
        if (isset($o['PLITypeOf'])) $this->PLITypeOf = $o['PLITypeOf'];
        if (isset($o['PLICashValue'])) $this->PLICashValue = $o['PLICashValue'];
        if (isset($o['SpouseLifeInsurance'])) $this->SpouseLifeInsurance = $o['SpouseLifeInsurance'];
        if (isset($o['SLICarrier'])) $this->SLICarrier = $o['SLICarrier'];
        if (isset($o['SLIFaceAmount'])) $this->SLIFaceAmount = $o['SLIFaceAmount'];
        if (isset($o['SLIIssueDate'])) $this->SLIIssueDate = JsonConverters::from('DateTime', $o['SLIIssueDate']);
        if (isset($o['SLIPremium'])) $this->SLIPremium = $o['SLIPremium'];
        if (isset($o['SLIType'])) $this->SLIType = $o['SLIType'];
        if (isset($o['SLITypeOf'])) $this->SLITypeOf = $o['SLITypeOf'];
        if (isset($o['SLICashValue'])) $this->SLICashValue = $o['SLICashValue'];
        if (isset($o['PrimaryLTCInsurance'])) $this->PrimaryLTCInsurance = $o['PrimaryLTCInsurance'];
        if (isset($o['PLTCPremium'])) $this->PLTCPremium = $o['PLTCPremium'];
        if (isset($o['PrimaryDisabilityInsurance'])) $this->PrimaryDisabilityInsurance = $o['PrimaryDisabilityInsurance'];
        if (isset($o['PDIPremium'])) $this->PDIPremium = $o['PDIPremium'];
        if (isset($o['SpouseLTCInsurance'])) $this->SpouseLTCInsurance = $o['SpouseLTCInsurance'];
        if (isset($o['SLTCPremium'])) $this->SLTCPremium = $o['SLTCPremium'];
        if (isset($o['SpouseDisabilityInsurance'])) $this->SpouseDisabilityInsurance = $o['SpouseDisabilityInsurance'];
        if (isset($o['SDIPremium'])) $this->SDIPremium = $o['SDIPremium'];
        if (isset($o['HasRetirementSavings'])) $this->HasRetirementSavings = $o['HasRetirementSavings'];
        if (isset($o['HasPriorEmploymentRetirementSavings'])) $this->HasPriorEmploymentRetirementSavings = $o['HasPriorEmploymentRetirementSavings'];
        if (isset($o['HasDistributionPlan'])) $this->HasDistributionPlan = $o['HasDistributionPlan'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->FactFinderSheetId)) $o['FactFinderSheetId'] = $this->FactFinderSheetId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->EmploymentYears)) $o['EmploymentYears'] = $this->EmploymentYears;
        if (isset($this->PastOccupations)) $o['PastOccupations'] = $this->PastOccupations;
        if (isset($this->ClientGrossMthlyIncome)) $o['ClientGrossMthlyIncome'] = $this->ClientGrossMthlyIncome;
        if (isset($this->ClientNetMthlyIncome)) $o['ClientNetMthlyIncome'] = $this->ClientNetMthlyIncome;
        if (isset($this->HouseholdGrossMthlyIncome)) $o['HouseholdGrossMthlyIncome'] = $this->HouseholdGrossMthlyIncome;
        if (isset($this->HouseholdNetMthlyIncome)) $o['HouseholdNetMthlyIncome'] = $this->HouseholdNetMthlyIncome;
        if (isset($this->EstimatedExpenses)) $o['EstimatedExpenses'] = $this->EstimatedExpenses;
        if (isset($this->DiscretionaryIncome)) $o['DiscretionaryIncome'] = $this->DiscretionaryIncome;
        if (isset($this->DesiredRetirementIncome)) $o['DesiredRetirementIncome'] = $this->DesiredRetirementIncome;
        if (isset($this->RetirementGoals)) $o['RetirementGoals'] = $this->RetirementGoals;
        if (isset($this->EmergencyFundMthlyContrib)) $o['EmergencyFundMthlyContrib'] = $this->EmergencyFundMthlyContrib;
        if (isset($this->EmergencyFundBalance)) $o['EmergencyFundBalance'] = $this->EmergencyFundBalance;
        if (isset($this->EmergencyFundComplete)) $o['EmergencyFundComplete'] = $this->EmergencyFundComplete;
        if (isset($this->WorkStatus)) $o['WorkStatus'] = $this->WorkStatus;
        if (isset($this->UnusedSickDays)) $o['UnusedSickDays'] = $this->UnusedSickDays;
        if (isset($this->UnusedSickHours)) $o['UnusedSickHours'] = $this->UnusedSickHours;
        if (isset($this->ContractBaseServPerYrDays)) $o['ContractBaseServPerYrDays'] = $this->ContractBaseServPerYrDays;
        if (isset($this->ContractBaseServPerYrHours)) $o['ContractBaseServPerYrHours'] = $this->ContractBaseServPerYrHours;
        if (isset($this->DaysPerWeek)) $o['DaysPerWeek'] = $this->DaysPerWeek;
        if (isset($this->HoursPerWeek)) $o['HoursPerWeek'] = $this->HoursPerWeek;
        if (isset($this->MonthsPerYear)) $o['MonthsPerYear'] = $this->MonthsPerYear;
        if (isset($this->NumPreTaxChecksPerYr)) $o['NumPreTaxChecksPerYr'] = $this->NumPreTaxChecksPerYr;
        if (isset($this->YearsWithOtherDistricts)) $o['YearsWithOtherDistricts'] = $this->YearsWithOtherDistricts;
        if (isset($this->PrimaryLifeInsurance)) $o['PrimaryLifeInsurance'] = $this->PrimaryLifeInsurance;
        if (isset($this->PLICarrier)) $o['PLICarrier'] = $this->PLICarrier;
        if (isset($this->PLIFaceAmount)) $o['PLIFaceAmount'] = $this->PLIFaceAmount;
        if (isset($this->PLIIssueDate)) $o['PLIIssueDate'] = JsonConverters::to('DateTime', $this->PLIIssueDate);
        if (isset($this->PLIPremium)) $o['PLIPremium'] = $this->PLIPremium;
        if (isset($this->PLIType)) $o['PLIType'] = $this->PLIType;
        if (isset($this->PLITypeOf)) $o['PLITypeOf'] = $this->PLITypeOf;
        if (isset($this->PLICashValue)) $o['PLICashValue'] = $this->PLICashValue;
        if (isset($this->SpouseLifeInsurance)) $o['SpouseLifeInsurance'] = $this->SpouseLifeInsurance;
        if (isset($this->SLICarrier)) $o['SLICarrier'] = $this->SLICarrier;
        if (isset($this->SLIFaceAmount)) $o['SLIFaceAmount'] = $this->SLIFaceAmount;
        if (isset($this->SLIIssueDate)) $o['SLIIssueDate'] = JsonConverters::to('DateTime', $this->SLIIssueDate);
        if (isset($this->SLIPremium)) $o['SLIPremium'] = $this->SLIPremium;
        if (isset($this->SLIType)) $o['SLIType'] = $this->SLIType;
        if (isset($this->SLITypeOf)) $o['SLITypeOf'] = $this->SLITypeOf;
        if (isset($this->SLICashValue)) $o['SLICashValue'] = $this->SLICashValue;
        if (isset($this->PrimaryLTCInsurance)) $o['PrimaryLTCInsurance'] = $this->PrimaryLTCInsurance;
        if (isset($this->PLTCPremium)) $o['PLTCPremium'] = $this->PLTCPremium;
        if (isset($this->PrimaryDisabilityInsurance)) $o['PrimaryDisabilityInsurance'] = $this->PrimaryDisabilityInsurance;
        if (isset($this->PDIPremium)) $o['PDIPremium'] = $this->PDIPremium;
        if (isset($this->SpouseLTCInsurance)) $o['SpouseLTCInsurance'] = $this->SpouseLTCInsurance;
        if (isset($this->SLTCPremium)) $o['SLTCPremium'] = $this->SLTCPremium;
        if (isset($this->SpouseDisabilityInsurance)) $o['SpouseDisabilityInsurance'] = $this->SpouseDisabilityInsurance;
        if (isset($this->SDIPremium)) $o['SDIPremium'] = $this->SDIPremium;
        if (isset($this->HasRetirementSavings)) $o['HasRetirementSavings'] = $this->HasRetirementSavings;
        if (isset($this->HasPriorEmploymentRetirementSavings)) $o['HasPriorEmploymentRetirementSavings'] = $this->HasPriorEmploymentRetirementSavings;
        if (isset($this->HasDistributionPlan)) $o['HasDistributionPlan'] = $this->HasDistributionPlan;
        return empty($o) ? new class(){} : $o;
    }
}

class ContactSpouse implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactSpouseId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $Name=null,
        /** @var DateTime|null */
        public ?DateTime $DOB=null,
        /** @var string|null */
        public ?string $Cell=null,
        /** @var string|null */
        public ?string $Employer=null,
        /** @var float|null */
        public ?float $Years=null,
        /** @var string|null */
        public ?string $Position=null,
        /** @var string|null */
        public ?string $Email=null,
        /** @var string|null */
        public ?string $PastOccupations=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactSpouseId'])) $this->ContactSpouseId = $o['ContactSpouseId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['DOB'])) $this->DOB = JsonConverters::from('DateTime', $o['DOB']);
        if (isset($o['Cell'])) $this->Cell = $o['Cell'];
        if (isset($o['Employer'])) $this->Employer = $o['Employer'];
        if (isset($o['Years'])) $this->Years = $o['Years'];
        if (isset($o['Position'])) $this->Position = $o['Position'];
        if (isset($o['Email'])) $this->Email = $o['Email'];
        if (isset($o['PastOccupations'])) $this->PastOccupations = $o['PastOccupations'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactSpouseId)) $o['ContactSpouseId'] = $this->ContactSpouseId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->DOB)) $o['DOB'] = JsonConverters::to('DateTime', $this->DOB);
        if (isset($this->Cell)) $o['Cell'] = $this->Cell;
        if (isset($this->Employer)) $o['Employer'] = $this->Employer;
        if (isset($this->Years)) $o['Years'] = $this->Years;
        if (isset($this->Position)) $o['Position'] = $this->Position;
        if (isset($this->Email)) $o['Email'] = $this->Email;
        if (isset($this->PastOccupations)) $o['PastOccupations'] = $this->PastOccupations;
        return empty($o) ? new class(){} : $o;
    }
}

class ContactChild implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactChildId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $Name=null,
        /** @var DateTime|null */
        public ?DateTime $DOB=null,
        /** @var string|null */
        public ?string $Fund=null,
        /** @var float|null */
        public ?float $Contribution=null,
        /** @var float|null */
        public ?float $Balance=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactChildId'])) $this->ContactChildId = $o['ContactChildId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['DOB'])) $this->DOB = JsonConverters::from('DateTime', $o['DOB']);
        if (isset($o['Fund'])) $this->Fund = $o['Fund'];
        if (isset($o['Contribution'])) $this->Contribution = $o['Contribution'];
        if (isset($o['Balance'])) $this->Balance = $o['Balance'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactChildId)) $o['ContactChildId'] = $this->ContactChildId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->DOB)) $o['DOB'] = JsonConverters::to('DateTime', $this->DOB);
        if (isset($this->Fund)) $o['Fund'] = $this->Fund;
        if (isset($this->Contribution)) $o['Contribution'] = $this->Contribution;
        if (isset($this->Balance)) $o['Balance'] = $this->Balance;
        return empty($o) ? new class(){} : $o;
    }
}

class ContactRetirementIncome implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactRetirementIncomeId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $AccountOwner=null,
        /** @var string|null */
        public ?string $AccountType=null,
        /** @var string|null */
        public ?string $Carrier=null,
        /** @var float|null */
        public ?float $TotalValue=null,
        /** @var float|null */
        public ?float $SurrValue=null,
        /** @var DateTime|null */
        public ?DateTime $DateOfIssue=null,
        /** @var float|null */
        public ?float $Fees=null,
        /** @var string|null */
        public ?string $PolicyNum=null,
        /** @var float|null */
        public ?float $Contrib=null,
        /** @var string|null */
        public ?string $EmpNotes=null,
        /** @var string|null */
        public ?string $TaxCode=null,
        /** @var float|null */
        public ?float $SurrCharge=null,
        /** @var bool|null */
        public ?bool $ThirdPrtyPprwrkOK=null,
        /** @var bool|null */
        public ?bool $AddlFormsReqd=null,
        /** @var bool|null */
        public ?bool $OriginalFormsReqd=null,
        /** @var bool|null */
        public ?bool $SignatureGuarReqd=null,
        /** @var bool|null */
        public ?bool $FaxAccepted=null,
        /** @var string|null */
        public ?string $FaxNumber=null,
        /** @var string|null */
        public ?string $MailingAddr=null,
        /** @var string|null */
        public ?string $MailingCity=null,
        /** @var string|null */
        public ?string $MailingState=null,
        /** @var string|null */
        public ?string $MailingZip=null,
        /** @var bool|null */
        public ?bool $HasOutstandingLoans=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactRetirementIncomeId'])) $this->ContactRetirementIncomeId = $o['ContactRetirementIncomeId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['AccountOwner'])) $this->AccountOwner = $o['AccountOwner'];
        if (isset($o['AccountType'])) $this->AccountType = $o['AccountType'];
        if (isset($o['Carrier'])) $this->Carrier = $o['Carrier'];
        if (isset($o['TotalValue'])) $this->TotalValue = $o['TotalValue'];
        if (isset($o['SurrValue'])) $this->SurrValue = $o['SurrValue'];
        if (isset($o['DateOfIssue'])) $this->DateOfIssue = JsonConverters::from('DateTime', $o['DateOfIssue']);
        if (isset($o['Fees'])) $this->Fees = $o['Fees'];
        if (isset($o['PolicyNum'])) $this->PolicyNum = $o['PolicyNum'];
        if (isset($o['Contrib'])) $this->Contrib = $o['Contrib'];
        if (isset($o['EmpNotes'])) $this->EmpNotes = $o['EmpNotes'];
        if (isset($o['TaxCode'])) $this->TaxCode = $o['TaxCode'];
        if (isset($o['SurrCharge'])) $this->SurrCharge = $o['SurrCharge'];
        if (isset($o['ThirdPrtyPprwrkOK'])) $this->ThirdPrtyPprwrkOK = $o['ThirdPrtyPprwrkOK'];
        if (isset($o['AddlFormsReqd'])) $this->AddlFormsReqd = $o['AddlFormsReqd'];
        if (isset($o['OriginalFormsReqd'])) $this->OriginalFormsReqd = $o['OriginalFormsReqd'];
        if (isset($o['SignatureGuarReqd'])) $this->SignatureGuarReqd = $o['SignatureGuarReqd'];
        if (isset($o['FaxAccepted'])) $this->FaxAccepted = $o['FaxAccepted'];
        if (isset($o['FaxNumber'])) $this->FaxNumber = $o['FaxNumber'];
        if (isset($o['MailingAddr'])) $this->MailingAddr = $o['MailingAddr'];
        if (isset($o['MailingCity'])) $this->MailingCity = $o['MailingCity'];
        if (isset($o['MailingState'])) $this->MailingState = $o['MailingState'];
        if (isset($o['MailingZip'])) $this->MailingZip = $o['MailingZip'];
        if (isset($o['HasOutstandingLoans'])) $this->HasOutstandingLoans = $o['HasOutstandingLoans'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactRetirementIncomeId)) $o['ContactRetirementIncomeId'] = $this->ContactRetirementIncomeId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->AccountOwner)) $o['AccountOwner'] = $this->AccountOwner;
        if (isset($this->AccountType)) $o['AccountType'] = $this->AccountType;
        if (isset($this->Carrier)) $o['Carrier'] = $this->Carrier;
        if (isset($this->TotalValue)) $o['TotalValue'] = $this->TotalValue;
        if (isset($this->SurrValue)) $o['SurrValue'] = $this->SurrValue;
        if (isset($this->DateOfIssue)) $o['DateOfIssue'] = JsonConverters::to('DateTime', $this->DateOfIssue);
        if (isset($this->Fees)) $o['Fees'] = $this->Fees;
        if (isset($this->PolicyNum)) $o['PolicyNum'] = $this->PolicyNum;
        if (isset($this->Contrib)) $o['Contrib'] = $this->Contrib;
        if (isset($this->EmpNotes)) $o['EmpNotes'] = $this->EmpNotes;
        if (isset($this->TaxCode)) $o['TaxCode'] = $this->TaxCode;
        if (isset($this->SurrCharge)) $o['SurrCharge'] = $this->SurrCharge;
        if (isset($this->ThirdPrtyPprwrkOK)) $o['ThirdPrtyPprwrkOK'] = $this->ThirdPrtyPprwrkOK;
        if (isset($this->AddlFormsReqd)) $o['AddlFormsReqd'] = $this->AddlFormsReqd;
        if (isset($this->OriginalFormsReqd)) $o['OriginalFormsReqd'] = $this->OriginalFormsReqd;
        if (isset($this->SignatureGuarReqd)) $o['SignatureGuarReqd'] = $this->SignatureGuarReqd;
        if (isset($this->FaxAccepted)) $o['FaxAccepted'] = $this->FaxAccepted;
        if (isset($this->FaxNumber)) $o['FaxNumber'] = $this->FaxNumber;
        if (isset($this->MailingAddr)) $o['MailingAddr'] = $this->MailingAddr;
        if (isset($this->MailingCity)) $o['MailingCity'] = $this->MailingCity;
        if (isset($this->MailingState)) $o['MailingState'] = $this->MailingState;
        if (isset($this->MailingZip)) $o['MailingZip'] = $this->MailingZip;
        if (isset($this->HasOutstandingLoans)) $o['HasOutstandingLoans'] = $this->HasOutstandingLoans;
        return empty($o) ? new class(){} : $o;
    }
}

class ContactExpense implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactExpenseId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $ExpenseType=null,
        /** @var string|null */
        public ?string $Description=null,
        /** @var float|null */
        public ?float $Balance=null,
        /** @var float|null */
        public ?float $InterestRate=null,
        /** @var float|null */
        public ?float $MinimumPayment=null,
        /** @var float|null */
        public ?float $MonthlyPayment=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactExpenseId'])) $this->ContactExpenseId = $o['ContactExpenseId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['ExpenseType'])) $this->ExpenseType = $o['ExpenseType'];
        if (isset($o['Description'])) $this->Description = $o['Description'];
        if (isset($o['Balance'])) $this->Balance = $o['Balance'];
        if (isset($o['InterestRate'])) $this->InterestRate = $o['InterestRate'];
        if (isset($o['MinimumPayment'])) $this->MinimumPayment = $o['MinimumPayment'];
        if (isset($o['MonthlyPayment'])) $this->MonthlyPayment = $o['MonthlyPayment'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactExpenseId)) $o['ContactExpenseId'] = $this->ContactExpenseId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->ExpenseType)) $o['ExpenseType'] = $this->ExpenseType;
        if (isset($this->Description)) $o['Description'] = $this->Description;
        if (isset($this->Balance)) $o['Balance'] = $this->Balance;
        if (isset($this->InterestRate)) $o['InterestRate'] = $this->InterestRate;
        if (isset($this->MinimumPayment)) $o['MinimumPayment'] = $this->MinimumPayment;
        if (isset($this->MonthlyPayment)) $o['MonthlyPayment'] = $this->MonthlyPayment;
        return empty($o) ? new class(){} : $o;
    }
}

class ContactClientReferral implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactClientReferralId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $Name=null,
        /** @var string|null */
        public ?string $Campus=null,
        /** @var string|null */
        public ?string $Room=null,
        /** @var string|null */
        public ?string $Phone=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactClientReferralId'])) $this->ContactClientReferralId = $o['ContactClientReferralId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['Name'])) $this->Name = $o['Name'];
        if (isset($o['Campus'])) $this->Campus = $o['Campus'];
        if (isset($o['Room'])) $this->Room = $o['Room'];
        if (isset($o['Phone'])) $this->Phone = $o['Phone'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactClientReferralId)) $o['ContactClientReferralId'] = $this->ContactClientReferralId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->Name)) $o['Name'] = $this->Name;
        if (isset($this->Campus)) $o['Campus'] = $this->Campus;
        if (isset($this->Room)) $o['Room'] = $this->Room;
        if (isset($this->Phone)) $o['Phone'] = $this->Phone;
        return empty($o) ? new class(){} : $o;
    }
}

class ContactLTAInfo implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactLTAInfoId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $PlanType=null,
        /** @var string|null */
        public ?string $Company=null,
        /** @var float|null */
        public ?float $Contribution=null,
        /** @var float|null */
        public ?float $Balance=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactLTAInfoId'])) $this->ContactLTAInfoId = $o['ContactLTAInfoId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['PlanType'])) $this->PlanType = $o['PlanType'];
        if (isset($o['Company'])) $this->Company = $o['Company'];
        if (isset($o['Contribution'])) $this->Contribution = $o['Contribution'];
        if (isset($o['Balance'])) $this->Balance = $o['Balance'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactLTAInfoId)) $o['ContactLTAInfoId'] = $this->ContactLTAInfoId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->PlanType)) $o['PlanType'] = $this->PlanType;
        if (isset($this->Company)) $o['Company'] = $this->Company;
        if (isset($this->Contribution)) $o['Contribution'] = $this->Contribution;
        if (isset($this->Balance)) $o['Balance'] = $this->Balance;
        return empty($o) ? new class(){} : $o;
    }
}

class ContactPension implements JsonSerializable
{
    public function __construct(
        /** @var int */
        public int $ContactPensionId=0,
        /** @var int */
        public int $ContactId=0,
        /** @var string|null */
        public ?string $PensionSystem=null,
        /** @var DateTime|null */
        public ?DateTime $PensionStartDate=null,
        /** @var float|null */
        public ?float $ServiceCredit=null,
        /** @var DateTime|null */
        public ?DateTime $ServiceCreditAsOfDate=null,
        /** @var DateTime|null */
        public ?DateTime $DesiredRetirementDate=null,
        /** @var int */
        public int $DesiredRetirementAge=0,
        /** @var bool|null */
        public ?bool $SpousalBenefitDesired=null,
        /** @var float|null */
        public ?float $FormulaPercent=null,
        /** @var float|null */
        public ?float $FormulaAt=null,
        /** @var float|null */
        public ?float $DefinedBenefitBalance=null,
        /** @var float|null */
        public ?float $DefinedBenefitSpouseBalance=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['ContactPensionId'])) $this->ContactPensionId = $o['ContactPensionId'];
        if (isset($o['ContactId'])) $this->ContactId = $o['ContactId'];
        if (isset($o['PensionSystem'])) $this->PensionSystem = $o['PensionSystem'];
        if (isset($o['PensionStartDate'])) $this->PensionStartDate = JsonConverters::from('DateTime', $o['PensionStartDate']);
        if (isset($o['ServiceCredit'])) $this->ServiceCredit = $o['ServiceCredit'];
        if (isset($o['ServiceCreditAsOfDate'])) $this->ServiceCreditAsOfDate = JsonConverters::from('DateTime', $o['ServiceCreditAsOfDate']);
        if (isset($o['DesiredRetirementDate'])) $this->DesiredRetirementDate = JsonConverters::from('DateTime', $o['DesiredRetirementDate']);
        if (isset($o['DesiredRetirementAge'])) $this->DesiredRetirementAge = $o['DesiredRetirementAge'];
        if (isset($o['SpousalBenefitDesired'])) $this->SpousalBenefitDesired = $o['SpousalBenefitDesired'];
        if (isset($o['FormulaPercent'])) $this->FormulaPercent = $o['FormulaPercent'];
        if (isset($o['FormulaAt'])) $this->FormulaAt = $o['FormulaAt'];
        if (isset($o['DefinedBenefitBalance'])) $this->DefinedBenefitBalance = $o['DefinedBenefitBalance'];
        if (isset($o['DefinedBenefitSpouseBalance'])) $this->DefinedBenefitSpouseBalance = $o['DefinedBenefitSpouseBalance'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->ContactPensionId)) $o['ContactPensionId'] = $this->ContactPensionId;
        if (isset($this->ContactId)) $o['ContactId'] = $this->ContactId;
        if (isset($this->PensionSystem)) $o['PensionSystem'] = $this->PensionSystem;
        if (isset($this->PensionStartDate)) $o['PensionStartDate'] = JsonConverters::to('DateTime', $this->PensionStartDate);
        if (isset($this->ServiceCredit)) $o['ServiceCredit'] = $this->ServiceCredit;
        if (isset($this->ServiceCreditAsOfDate)) $o['ServiceCreditAsOfDate'] = JsonConverters::to('DateTime', $this->ServiceCreditAsOfDate);
        if (isset($this->DesiredRetirementDate)) $o['DesiredRetirementDate'] = JsonConverters::to('DateTime', $this->DesiredRetirementDate);
        if (isset($this->DesiredRetirementAge)) $o['DesiredRetirementAge'] = $this->DesiredRetirementAge;
        if (isset($this->SpousalBenefitDesired)) $o['SpousalBenefitDesired'] = $this->SpousalBenefitDesired;
        if (isset($this->FormulaPercent)) $o['FormulaPercent'] = $this->FormulaPercent;
        if (isset($this->FormulaAt)) $o['FormulaAt'] = $this->FormulaAt;
        if (isset($this->DefinedBenefitBalance)) $o['DefinedBenefitBalance'] = $this->DefinedBenefitBalance;
        if (isset($this->DefinedBenefitSpouseBalance)) $o['DefinedBenefitSpouseBalance'] = $this->DefinedBenefitSpouseBalance;
        return empty($o) ? new class(){} : $o;
    }
}

class FactFinderSheetExtended implements JsonSerializable
{
    public function __construct(
        /** @var Contact|null */
        public ?Contact $Contact=null,
        /** @var FactFinderSheet|null */
        public ?FactFinderSheet $FactFinderSheet=null,
        /** @var ContactSpouse|null */
        public ?ContactSpouse $Spouse=null,
        /** @var array<ContactChild>|null */
        public ?array $Children=null,
        /** @var array<ContactRetirementIncome>|null */
        public ?array $IncomeSources=null,
        /** @var string|null */
        public ?string $AdditionalNotes=null,
        /** @var array<ContactExpense>|null */
        public ?array $Expenses=null,
        /** @var array<ContactClientReferral>|null */
        public ?array $Referrals=null,
        /** @var array<ContactLTAInfo>|null */
        public ?array $LTAInfo=null,
        /** @var array<ContactPension>|null */
        public ?array $Pensions=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['Contact'])) $this->Contact = JsonConverters::from('Contact', $o['Contact']);
        if (isset($o['FactFinderSheet'])) $this->FactFinderSheet = JsonConverters::from('FactFinderSheet', $o['FactFinderSheet']);
        if (isset($o['Spouse'])) $this->Spouse = JsonConverters::from('ContactSpouse', $o['Spouse']);
        if (isset($o['Children'])) $this->Children = JsonConverters::fromArray('ContactChild', $o['Children']);
        if (isset($o['IncomeSources'])) $this->IncomeSources = JsonConverters::fromArray('ContactRetirementIncome', $o['IncomeSources']);
        if (isset($o['AdditionalNotes'])) $this->AdditionalNotes = $o['AdditionalNotes'];
        if (isset($o['Expenses'])) $this->Expenses = JsonConverters::fromArray('ContactExpense', $o['Expenses']);
        if (isset($o['Referrals'])) $this->Referrals = JsonConverters::fromArray('ContactClientReferral', $o['Referrals']);
        if (isset($o['LTAInfo'])) $this->LTAInfo = JsonConverters::fromArray('ContactLTAInfo', $o['LTAInfo']);
        if (isset($o['Pensions'])) $this->Pensions = JsonConverters::fromArray('ContactPension', $o['Pensions']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->Contact)) $o['Contact'] = JsonConverters::to('Contact', $this->Contact);
        if (isset($this->FactFinderSheet)) $o['FactFinderSheet'] = JsonConverters::to('FactFinderSheet', $this->FactFinderSheet);
        if (isset($this->Spouse)) $o['Spouse'] = JsonConverters::to('ContactSpouse', $this->Spouse);
        if (isset($this->Children)) $o['Children'] = JsonConverters::toArray('ContactChild', $this->Children);
        if (isset($this->IncomeSources)) $o['IncomeSources'] = JsonConverters::toArray('ContactRetirementIncome', $this->IncomeSources);
        if (isset($this->AdditionalNotes)) $o['AdditionalNotes'] = $this->AdditionalNotes;
        if (isset($this->Expenses)) $o['Expenses'] = JsonConverters::toArray('ContactExpense', $this->Expenses);
        if (isset($this->Referrals)) $o['Referrals'] = JsonConverters::toArray('ContactClientReferral', $this->Referrals);
        if (isset($this->LTAInfo)) $o['LTAInfo'] = JsonConverters::toArray('ContactLTAInfo', $this->LTAInfo);
        if (isset($this->Pensions)) $o['Pensions'] = JsonConverters::toArray('ContactPension', $this->Pensions);
        return empty($o) ? new class(){} : $o;
    }
}

class FactFinderRequest implements JsonSerializable
{
    public function __construct(
        /** @var FactFinderSheetExtended|null */
        public ?FactFinderSheetExtended $FactFinderSheet=null,
        /** @var bool|null */
        public ?bool $DataEntry=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['FactFinderSheet'])) $this->FactFinderSheet = JsonConverters::from('FactFinderSheetExtended', $o['FactFinderSheet']);
        if (isset($o['DataEntry'])) $this->DataEntry = $o['DataEntry'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->FactFinderSheet)) $o['FactFinderSheet'] = JsonConverters::to('FactFinderSheetExtended', $this->FactFinderSheet);
        if (isset($this->DataEntry)) $o['DataEntry'] = $this->DataEntry;
        return empty($o) ? new class(){} : $o;
    }
}

PHP FactFinderRequest DTOs

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

HTTP + XML

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: application/xml
Content-Type: application/xml
Content-Length: length

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