""" Options: Date: 2025-07-17 23:47:33 Version: 6.40 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://hcbtas-q-albamfs-api.azurewebsites.net #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: ProjectionReq.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum class Gender(str, Enum): FEMALE = 'Female' MALE = 'Male' OTHER = 'Other' # @Route("/members", "PUT") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Member(Member, IReturn["Member"]): id: Optional[str] = None email: Optional[str] = None employee_guid_string: Optional[str] = None ignore_gender: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Member(Entity, IProjectable): user_id: Optional[str] = None system_id: Optional[str] = None scheme_code: Optional[str] = None session_id: Optional[str] = None client_id: Optional[str] = None client_code: Optional[str] = None is_default: bool = False group_id: Optional[str] = None group_name_upper: Optional[str] = None app_name: Optional[str] = None app_name_upper: Optional[str] = None key: Optional[str] = None key_upper: Optional[str] = None country: Optional[str] = None locale: Optional[str] = None ccy: Optional[str] = None cdy: Optional[str] = None status: Optional[str] = None status_code: Optional[str] = None category: Optional[str] = None scheme: Optional[str] = None primary_salary: Optional[str] = None email: Optional[str] = None employer: Optional[Employer] = None roles: Optional[Roles] = None as_at: datetime.datetime = datetime.datetime(1, 1, 1) calc_date: datetime.datetime = datetime.datetime(1, 1, 1) next_e_o_f_y: datetime.datetime = datetime.datetime(1, 1, 1) period_to_next_e_o_f_y: float = 0.0 year: int = 0 has_partner: bool = False include_partner: bool = False include_partner_in_calc: bool = False home_owner: bool = False target_age: int = 0 target_time: int = 0 target_income_r: float = 0.0 target_income_r_freq: float = 0.0 target_income_r_annual: float = 0.0 target_p: float = 0.0 include_s_s: bool = False first_name: Optional[str] = None last_name: Optional[str] = None gender: Optional[Gender] = None dob: datetime.datetime = datetime.datetime(1, 1, 1) salary: float = 0.0 people: Optional[List[Person]] = None assets: Optional[List[Asset]] = None include_annuities: bool = False annuities: Optional[List[Annuity]] = None spending: Optional[Spending] = None investment_properties: Optional[List[InvestmentProperty]] = None income_vectors: Optional[Dict[str, List[float]]] = None config: Optional[AssumptionsConfig] = None indexation: Optional[List[RateSpec]] = None annuity_disc: Optional[List[RateSpec]] = None indexation_rates: Optional[Dict[str, List[float]]] = None annuity_disc_rates: Optional[Dict[str, List[float]]] = None balance: float = 0.0 plan_some_value: Optional[str] = None flag1: bool = False flag2: bool = False is_friendly: bool = False financing_option: Optional[str] = None total_years: int = 0 total_loop_years: int = 0 age: float = 0.0 age_r: float = 0.0 int_age: int = 0 index_type: Optional[str] = None index_type_pre: Optional[str] = None index_type_post: Optional[str] = None deflation_type: Optional[str] = None custom: Optional[Dict[str, str]] = None country_calc_config: Optional[CountryCalculatorConfiguration] = None summary: Optional[MemberSummary] = None last_modified: datetime.datetime = datetime.datetime(1, 1, 1) is_returning_user: bool = False client_country_config_cache_key: Optional[str] = None personal_assets: float = 0.0 results_summary: Optional[Summary] = None total_contribution: Optional[TotalContribution] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Member(IId, ITimestamp): id: int = 0 employee_guid: Optional[str] = None employee_id: Optional[str] = None client_id: Optional[int] = None configuration_id: Optional[int] = None last_name: Optional[str] = None first_name: Optional[str] = None company_name: Optional[str] = None employee_group: Optional[str] = None title: Optional[str] = None birthdate: datetime.datetime = datetime.datetime(1, 1, 1) email_address: Optional[str] = None marital_status: Optional[MaritalStatuses] = None partner_birth_date: Optional[datetime.datetime] = None gender: Optional[IsoGenders] = None military_month_count: Optional[int] = None annual_salary: Optional[Decimal] = None monthly_salary: Optional[Decimal] = None salary_frequency: Optional[int] = None de_federal_state: Optional[GermanFederalStates] = None de_tax_class: Optional[GermanTaxClasses] = None de_church_tax: Optional[bool] = None de_priv_nursing_insurance: Optional[Decimal] = None pension_financing_option: Optional[str] = None has_priv_health_insurance: Optional[bool] = None priv_health_insurance: Optional[Decimal] = None children_count: Optional[int] = None child1_birth_date: Optional[datetime.datetime] = None child2_birth_date: Optional[datetime.datetime] = None child3_birth_date: Optional[datetime.datetime] = None child4_birth_date: Optional[datetime.datetime] = None child5_birth_date: Optional[datetime.datetime] = None child6_birth_date: Optional[datetime.datetime] = None child7_birth_date: Optional[datetime.datetime] = None child8_birth_date: Optional[datetime.datetime] = None child9_birth_date: Optional[datetime.datetime] = None child10_birth_date: Optional[datetime.datetime] = None auth_id: Optional[str] = None auth_registration_date: Optional[datetime.datetime] = None activation_code: Optional[str] = None activation_expiring_date: Optional[datetime.datetime] = None plan_info_date: Optional[datetime.datetime] = None plan_info_bag: Optional[str] = None inactive: bool = False date_created: datetime.datetime = datetime.datetime(1, 1, 1) remove_request_date: Optional[datetime.datetime] = None timestamp: Optional[bytes] = None client: Optional[Client] = None contribution_data_date: Optional[datetime.datetime] = None beneficiary_first_name: Optional[str] = None beneficiary_last_name: Optional[str] = None beneficiary_title: Optional[str] = None beneficiary_date_of_birth: Optional[datetime.datetime] = None address_line1: Optional[str] = None address_line2: Optional[str] = None address_line3: Optional[str] = None phone_number: Optional[str] = None mobile_number: Optional[str] = None date_commenced_service: Optional[datetime.datetime] = None calculator_data_date: Optional[datetime.datetime] = None calculator_data_bag: Optional[str] = None period_start: Optional[datetime.datetime] = None period_end: Optional[datetime.datetime] = None member_id: Optional[int] = None info_bag: Optional[str] = None projection_info_bag: Optional[str] = None company_plan_info: Optional[str] = None info_provider_reference: Optional[str] = None date_of_hire: Optional[datetime.datetime] = None ssin: Optional[str] = None is_proxy: Optional[bool] = None is_allowed_to_vote: Optional[bool] = None user_id: Optional[str] = None participant_status: Optional[str] = None investment_strategy: Optional[str] = None is_allowed_to_update_plan: Optional[bool] = None pensionable_salary: Optional[Decimal] = None date_of_birth_spouse: Optional[datetime.datetime] = None date_of_birth_youngest_child: Optional[datetime.datetime] = None date_hired_of_plan: Optional[datetime.datetime] = None contract_type: Optional[str] = None investment_risk_profile: Optional[str] = None documents: Optional[List[Document]] = None powens_connection_syncs: Optional[List[PowensConnectionSync]] = None members: Optional[List[Member]] = None group_members: Optional[List[GroupMember]] = None parent: Optional[Member] = None pension_fund_manager: Optional[str] = None proxy_accesses: Optional[List[ProxyAccess]] = None beneficiaries: Optional[List[Beneficiary]] = None current_balances: Optional[List[CurrentBalance]] = None detailed_balances: Optional[List[DetailedBalance]] = None voting_poll_answers: Optional[List[VotingPollAnswer]] = None investment_allocations: Optional[List[InvestmentAllocation]] = None member_contributions: Optional[List[MemberContribution]] = None participant_status_form_answers: Optional[List[ParticipantStatusFormAnswer]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Member: member_id: int = 0 employee_id: Optional[str] = None employee_guid: Optional[str] = None email: Optional[str] = None title: Optional[str] = None first_name: Optional[str] = None company_name: Optional[str] = None employee_group: Optional[str] = None last_name: Optional[str] = None date_of_birth: datetime.datetime = datetime.datetime(1, 1, 1) gender: Optional[IsoGenders] = None marital_status: Optional[MaritalStatuses] = None number_of_children: int = 0 children_count: Optional[int] = None monthly_salary: Optional[Decimal] = None annual_salary: Optional[Decimal] = None dk_pension_terms: Optional[DkPensionTerms] = None dk_private_email_address: Optional[str] = None dk_employer_name: Optional[str] = None dk_contact_consent: bool = False dk_personal_mandate: bool = False de_federal_state: Optional[GermanFederalStates] = None de_tax_class: Optional[GermanTaxClasses] = None de_church_tax: Optional[bool] = None has_priv_health_insurance: Optional[bool] = None priv_health_insurance: Optional[Decimal] = None de_priv_nursing_insurance: Optional[Decimal] = None contribution_data_date: Optional[datetime.datetime] = None beneficiary_first_name: Optional[str] = None beneficiary_last_name: Optional[str] = None beneficiary_title: Optional[str] = None beneficiary_date_of_birth: Optional[datetime.datetime] = None address_line1: Optional[str] = None address_line2: Optional[str] = None address_line3: Optional[str] = None phone_number: Optional[str] = None mobile_number: Optional[str] = None date_commenced_service: Optional[datetime.datetime] = None partner_birth_date: Optional[datetime.datetime] = None military_month_count: Optional[int] = None child1_birth_date: Optional[datetime.datetime] = None child2_birth_date: Optional[datetime.datetime] = None child3_birth_date: Optional[datetime.datetime] = None child4_birth_date: Optional[datetime.datetime] = None child5_birth_date: Optional[datetime.datetime] = None child6_birth_date: Optional[datetime.datetime] = None child7_birth_date: Optional[datetime.datetime] = None child8_birth_date: Optional[datetime.datetime] = None child9_birth_date: Optional[datetime.datetime] = None child10_birth_date: Optional[datetime.datetime] = None info_bag: Optional[str] = None projection_info_bag: Optional[str] = None client_id: Optional[int] = None company_plan_info: Optional[str] = None pension_fund_manager: Optional[str] = None date_of_hire: Optional[datetime.datetime] = None powens_connections: Optional[List[PowensConnection]] = None is_private_client: bool = False is_proxy: bool = False beneficiaries: Optional[List[Beneficiary]] = None current_balances: Optional[List[CurrentBalance]] = None detailed_balances: Optional[List[DetailedBalance]] = None beneficiaries_latest_submitted_date: Optional[datetime.datetime] = None user_id: Optional[str] = None participant_status: Optional[str] = None investment_strategy: Optional[str] = None is_allowed_to_update_plan: Optional[bool] = None pensionable_salary: Optional[Decimal] = None date_of_birth_spouse: Optional[datetime.datetime] = None date_of_birth_youngest_child: Optional[datetime.datetime] = None date_hired_of_plan: Optional[datetime.datetime] = None contract_type: Optional[str] = None is_allowed_to_vote: Optional[bool] = None voting_poll_answer: Optional[VotingPollAnswer] = None class DataSource(str, Enum): DB = 'Db' CACHE = 'Cache' PARAMETER = 'Parameter' NA = 'NA' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DataSourceResult: d: Optional[DataSource] = None t: int = 0 class SolveTarget(str, Enum): NA = 'NA' RUN_OUT_AGE = 'RunOutAge' INCOME = 'Income' AGE_R = 'AgeR' CONTRIBUTIONS = 'Contributions' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SolvePathEntry: v: float = 0.0 p: float = 0.0 r: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProjectionPointDto: t: int = 0 global_period: Optional[float] = None year: int = 0 age: float = 0.0 int_age: int = 0 indexation: Optional[float] = None avg_growth_indexation: Optional[float] = None price_inflation: Optional[float] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class MemberPointDto(ProjectionPointDto): period: float = 0.0 both_are_retired: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProjectableDto: as_at: Optional[datetime.datetime] = None age: Optional[float] = None int_age: int = 0 year: int = 0 period_to_next_e_o_f_y: Optional[float] = None index_type: Optional[str] = None class PersonType(str, Enum): PRIMARY = 'Primary' PARTNER = 'Partner' class SalaryType(str, Enum): GROSS = 'Gross' NET = 'Net' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SalaryChangeDto: from_age: int = 0 amount: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SalaryDto: type: Optional[SalaryType] = None ccy: Optional[str] = None amount: float = 0.0 freq: float = 0.0 annual_amount: float = 0.0 index_type: Optional[str] = None salary_changes: Optional[List[SalaryChangeDto]] = None class OtherIncomeType(str, Enum): PENSION = 'Pension' INVESTMENTS = 'Investments' INCOME = 'Income' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class IncomeStreamDto: name: Optional[str] = None index_type: Optional[str] = None type: Optional[OtherIncomeType] = None amount: float = 0.0 from_age: int = 0 to_age: int = 0 is_taxable: bool = False custom: Optional[Dict[str, str]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SocialSecurityDto(ProjectableDto): owner: Optional[PersonType] = None include_s_s: bool = False is_married: bool = False home_owner: bool = False personal_assets: float = 0.0 num_people: int = 0 dob: datetime.datetime = datetime.datetime(1, 1, 1) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CareerBreakDto: from_age: int = 0 to_age: int = 0 working_rate: Optional[float] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CareerBreaksDto: will_take: bool = False breaks: Optional[List[CareerBreakDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PersonDto(ProjectableDto): type: Optional[PersonType] = None index: int = 0 first_name: Optional[str] = None last_name: Optional[str] = None gender: Optional[Gender] = None is_age_input: bool = False dob: datetime.datetime = datetime.datetime(1, 1, 1) age_at_last30_june: int = 0 private_health_insurance: bool = False service_date: datetime.datetime = datetime.datetime(1, 1, 1) service: float = 0.0 int_service: int = 0 age_r: int = 0 age_r_months: int = 0 email: Optional[str] = None salaries: Optional[Dict[str, SalaryDto]] = None salary_change_series: Optional[List[float]] = None has_other_income: bool = False other_income: Optional[List[IncomeStreamDto]] = None social_security: Optional[SocialSecurityDto] = None taxable_deductions: float = 0.0 non_taxable_deductions: float = 0.0 career_changes: Optional[CareerBreaksDto] = None custom: Optional[Dict[str, str]] = None salary_key: Optional[str] = None annual_projectible_salary: float = 0.0 projection_breakdown_code: Optional[str] = None salary: float = 0.0 salary_freq: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PersonPointDto(ProjectionPointDto): is_retired: bool = False service: float = 0.0 cont_period: float = 0.0 annual_projectible_salary: float = 0.0 salary_p_v: float = 0.0 salary: float = 0.0 salary_m_o_y: float = 0.0 pre_tax_deductions: float = 0.0 other_taxable_income: float = 0.0 total_other_taxable_income: float = 0.0 taxable_income: float = 0.0 taxable_income_with_conts: float = 0.0 taxable_income_no_conts: float = 0.0 total_income_tax: float = 0.0 income_tax_with_conts: float = 0.0 income_tax_no_conts: float = 0.0 after_tax_earnings: float = 0.0 after_tax_earnings_with_conts: float = 0.0 after_tax_earnings_no_conts: float = 0.0 post_tax_deductions: float = 0.0 total_after_tax_drawdown: float = 0.0 other_tax_free_income: float = 0.0 after_tax_deductions: float = 0.0 after_tax_deductions_with_conts: float = 0.0 after_tax_deductions_no_conts: float = 0.0 drawdowns: float = 0.0 total_after_tax: float = 0.0 total_after_tax_with_conts: float = 0.0 total_after_tax_no_conts: float = 0.0 net_income: float = 0.0 tax_ratio: float = 0.0 pv_factor_b_o_y: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class IncomeStreamPointDto(ProjectionPointDto): income_p_v: float = 0.0 income: float = 0.0 taxable_amount: float = 0.0 non_taxable_amount: float = 0.0 taxable_amount_p_v: float = 0.0 non_taxable_amount_p_v: float = 0.0 net_income: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class IncomeStreamProjectionDto: item: Optional[IncomeStreamDto] = None count: int = 0 projection: Optional[List[IncomeStreamPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SocialSecurityPointDto(ProjectionPointDto): personal_assets: float = 0.0 assessable_assets: float = 0.0 full_pension_p_p: float = 0.0 asset_threshold: float = 0.0 min_pension: float = 0.0 asset_means_test: float = 0.0 deemed_income_threshold: float = 0.0 deemed_return: float = 0.0 actual_income: float = 0.0 total_income: float = 0.0 income_threshold: float = 0.0 income_test: float = 0.0 total_social_security: float = 0.0 income: float = 0.0 full_pension_indexation: float = 0.0 min_pension_indexation: float = 0.0 asset_threshold_indexation: float = 0.0 income_threshold_indexation: float = 0.0 deemed_income_threshold_indexation: float = 0.0 personal_assets_indexation: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SocialSecurityProjectionDto: item: Optional[SocialSecurityDto] = None projection: Optional[List[SocialSecurityPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class PersonProjectionDto: item: Optional[PersonDto] = None count: int = 0 projection: Optional[List[PersonPointDto]] = None other_income_projections: Optional[List[IncomeStreamProjectionDto]] = None social_security_projection: Optional[SocialSecurityProjectionDto] = None dob: datetime.datetime = datetime.datetime(1, 1, 1) class AssetType(str, Enum): FIN_ASSET = 'FinAsset' AU_SUPER = 'AUSuper' AUABP = 'AUABP' class MinSpendRule(str, Enum): NO_MINIMUM = 'NoMinimum' FULL_VALUE = 'FullValue' AU_ABP_MIN = 'AuAbpMin' class MaxSpendRule(str, Enum): NO_MAXIMUM = 'NoMaximum' AU_SUPER = 'AuSuper' class SocialSecurityTreatment(str, Enum): EXEMPT = 'Exempt' DEEMED = 'Deemed' ACTUAL = 'Actual' class ContributionType(str, Enum): FIXED = 'Fixed' TIME = 'Time' LOOKUP = 'Lookup' MATCH = 'Match' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContributionDto(ProjectableDto): code: Optional[str] = None index: int = 0 name: Optional[str] = None ccy: Optional[str] = None cont_table: Optional[str] = None lookup_key: Optional[str] = None is_employee_cont: bool = False employer_flag: bool = False type: Optional[ContributionType] = None source_rate: Optional[str] = None is_taxable: bool = False amount: float = 0.0 core_amount: float = 0.0 freq: float = 0.0 rate: float = 0.0 core_rate: float = 0.0 from_age: int = 0 to_age: Optional[int] = None salary: float = 0.0 annual_amount: float = 0.0 annual_core_amount: float = 0.0 is_always_one_off: bool = False is_one_off: bool = False custom: Optional[Dict[str, str]] = None member_rate_lookup: Optional[Dict[int, float]] = None is_from_salary: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FeeDto(ProjectableDto): name: Optional[str] = None ccy: Optional[str] = None amount: float = 0.0 freq: float = 0.0 annual_amount: float = 0.0 rate: float = 0.0 is_taxable: bool = False from_age: int = 0 to_age: int = 0 custom: Optional[Dict[str, str]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FeeCapArrangementDto(ProjectableDto): name: Optional[str] = None amount: float = 0.0 indexation_rate_series: int = 0 rate: float = 0.0 fees_included: Optional[List[int]] = None from_time: int = 0 to_time: int = 0 custom: Optional[Dict[str, str]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProductAllocationMappingDto: current: Optional[Dict[str, float]] = None future: Optional[Dict[str, float]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProductAllocationDto: name: Optional[str] = None from_age: int = 0 opt_alloc: Optional[ProductAllocationMappingDto] = None total_alloc: float = 0.0 class RatesSource(str, Enum): DB = 'DB' MEMBER = 'Member' MEMBER_RATES = 'MemberRates' CLIENT_RATES = 'ClientRates' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AssetDto(ProjectableDto): type: Optional[AssetType] = None owner: Optional[PersonType] = None code: Optional[str] = None name: Optional[str] = None ccy: Optional[str] = None value: float = 0.0 change: float = 0.0 transfer_to: int = 0 transfer_age: int = 0 will_spend: bool = False min_rule: Optional[MinSpendRule] = None max_rule: Optional[MaxSpendRule] = None ss_treatment: Optional[SocialSecurityTreatment] = None spend_on_annuity: bool = False cont_tax_rate: float = 0.0 total_conts: float = 0.0 total_conts_freq: float = 0.0 total_lump_sum_conts: float = 0.0 rebalance: bool = False ret_lump_sum: bool = False contributions: Optional[List[ContributionDto]] = None fees: Optional[List[FeeDto]] = None fee_cap_arrangements: Optional[List[FeeCapArrangementDto]] = None alloc: Optional[List[ProductAllocationDto]] = None rates_source: Optional[RatesSource] = None custom: Optional[Dict[str, str]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AssetPointDto(ProjectionPointDto): period: float = 0.0 asset_switch_flag: bool = False cont_return: float = 0.0 bal_cash_flow_return: float = 0.0 bal_b_o_y: float = 0.0 bal_b_o_y_p_v: float = 0.0 bal_b_o_y_post_transfers: float = 0.0 bal_b_o_y_post_transfers_p_v: float = 0.0 bal_b_o_y_post_transfers_simple: float = 0.0 bal_b_o_y_post_transfers_w_o_l_s: float = 0.0 transfers_out: float = 0.0 transfers_out_with_l_s: float = 0.0 lump_sum_at_ret: float = 0.0 drawdown_eligibility: float = 0.0 min_drawdown: float = 0.0 intermediate_min_drawdown: float = 0.0 drawdown_returns: float = 0.0 cont_return_pow: float = 0.0 bal_cash_flow_return_pow: float = 0.0 bal_pre_drawdown: float = 0.0 proportion_of_asset: float = 0.0 additional_drawdown: float = 0.0 total_intermediate_drawdown: float = 0.0 total_drawdowns: float = 0.0 total_drawdowns_p_v: float = 0.0 total_taxable_fees: float = 0.0 total_non_taxable_fees: float = 0.0 returns_for_fees: float = 0.0 balance_for_fees: float = 0.0 tax_deductions: float = 0.0 returns: float = 0.0 bal_e_o_y: float = 0.0 asset_bal_purchase: float = 0.0 bal_b_o_y_post_annuity_purchase: float = 0.0 bal_b_o_y_post_annuity_purchase_person: float = 0.0 ss_bal_b_o_y_post_annuity_purchase: float = 0.0 total_cashflow_b_o_y: float = 0.0 total_cashflow_m_o_y: float = 0.0 total_contributions_m_o_y: float = 0.0 remaining_drawdown_required: float = 0.0 total_drawdown_required: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FeePointDto(ProjectionPointDto): years_since_from_age: float = 0.0 period: float = 0.0 amount: float = 0.0 rate_amount: float = 0.0 total_tax_deductible: float = 0.0 total_non_tax_deductible: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FeeProjectionDto: item: Optional[FeeDto] = None projection: Optional[List[FeePointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FeeCapPointDto(ProjectionPointDto): period: float = 0.0 total_fee_cap: float = 0.0 tax_deductible_fees: float = 0.0 non_tax_deductible_fees: float = 0.0 offset_tax_deductible: float = 0.0 offset_non_tax_deductible: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FeeCapProjectionDto: item: Optional[FeeCapArrangementDto] = None count: int = 0 projection: Optional[List[FeeCapPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TotalContributionDto(ProjectableDto): pass @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TotalContributionPointDto(ProjectionPointDto): cont_indexation: float = 0.0 total_member_non_taxable_salary_cont: float = 0.0 total_member_non_taxable_non_salary_cont: float = 0.0 threshold: float = 0.0 co_cont_amt: float = 0.0 cont_caps_total_employer: float = 0.0 transfer_balance_cap: float = 0.0 cont_caps_total_member_taxable: float = 0.0 cont_caps_total_member_non_taxable_salary: float = 0.0 cont_caps_total_member_non_taxable_non_salary: float = 0.0 capped_cont_total_employer: float = 0.0 capped_cont_total_member_taxable: float = 0.0 capped_cont_total_member_non_taxable_salary_cont: float = 0.0 capped_cont_total_member_non_taxable_non_salary_cont: float = 0.0 au_low_income_super_tax_offset: float = 0.0 cont_tax: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContributionPointDto(ProjectionPointDto): period: float = 0.0 salary: float = 0.0 rate_lookup_value: Optional[str] = None linked_cont_rate: float = 0.0 rate: float = 0.0 amount: float = 0.0 rate_amount: float = 0.0 cont_amount: float = 0.0 total_member_taxable: float = 0.0 total_member_non_taxable: float = 0.0 total_member_non_taxable_salary: float = 0.0 total_member_non_taxable_non_salary: float = 0.0 total_employer: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContributionProjectionDto: item: Optional[ContributionDto] = None projection: Optional[List[ContributionPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class TotalContributionProjectionDto: item: Optional[TotalContributionDto] = None projection: Optional[List[TotalContributionPointDto]] = None contribution_projections: Optional[List[ContributionProjectionDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AssetProjectionDto: item: Optional[AssetDto] = None projection: Optional[List[AssetPointDto]] = None dob: datetime.datetime = datetime.datetime(1, 1, 1) asset_index: int = 0 fee_projections: Optional[List[FeeProjectionDto]] = None fee_cap_projections: Optional[List[FeeCapProjectionDto]] = None total_contribution_projection: Optional[TotalContributionProjectionDto] = None class AnnuityPriceType(str, Enum): CALC = 'Calc' TABLE = 'Table' class AnnuityType(str, Enum): DEFERRED = 'Deferred' IMMEDIATE = 'Immediate' THE_OTHER_TYPE = 'TheOtherType' class AnnuityPurchaseType(str, Enum): PERC = 'Perc' INCOME = 'Income' AMOUNT = 'Amount' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnnuityDto(ProjectableDto): price_type: Optional[AnnuityPriceType] = None price: Optional[float] = None owner: Optional[PersonType] = None gender: Optional[Gender] = None owner_age: int = 0 spouse_age: Optional[int] = None type: Optional[AnnuityType] = None purchase_type: Optional[AnnuityPurchaseType] = None purchase_amount: float = 0.0 perc_balance_spent: Optional[float] = None amount_spent: Optional[float] = None income_purchased: Optional[float] = None purchase_age: int = 0 deferral_period: Optional[int] = None indexation_name: Optional[str] = None dr_stochastic: Optional[str] = None implied_inflation_stochastic_series: Optional[str] = None reversion: Optional[float] = None guarantee: Optional[float] = None timing: Optional[float] = None scale_qx: Optional[float] = None scale_impr: Optional[float] = None age_rating: Optional[int] = None spouse_age_rating: Optional[int] = None custom: Optional[Dict[str, str]] = None table_name: Optional[str] = None impr_factor_table_name: Optional[str] = None spouse_age_at_purchase: int = 0 expense: Optional[float] = None cache_key: Optional[str] = None target_tpx: Optional[float] = None payment_term: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnnuitiesPointDto(ProjectionPointDto): purchase_year: int = 0 discount_rate: float = 0.0 stoch_annuity_rate_index: int = 0 inflation: float = 0.0 purchase: bool = False pension_payment_period: bool = False asset_bal_purchase_total: float = 0.0 annuity_indexation: float = 0.0 purchase_price: float = 0.0 purchase_amount: float = 0.0 purchase_amount_p_v: float = 0.0 annuity_income: float = 0.0 annuity_income_period: float = 0.0 annuity_income_p_v: float = 0.0 annuity_assessable_asset: float = 0.0 annuity_assessable_income: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnnuitiesProjectionDto: item: Optional[AnnuityDto] = None count: int = 0 projection: Optional[List[AnnuitiesPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SpendingGoalDto(ProjectableDto): name: Optional[str] = None amount: float = 0.0 freq: float = 0.0 effective_freq: Optional[float] = None exclude_from_projection: bool = False from_age: int = 0 to_age: int = 0 selected_personalised: Optional[str] = None tag: Optional[str] = None custom: Optional[Dict[str, str]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SpendingGoalPointDto(ProjectionPointDto): freq: float = 0.0 years_since_from_age: float = 0.0 period: float = 0.0 amount: float = 0.0 amount_p_v: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SpendingGoalProjectionDto: item: Optional[SpendingGoalDto] = None count: int = 0 projection: Optional[List[SpendingGoalPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class InvestmentPropertyDto(ProjectableDto): owner: Optional[PersonType] = None value: float = 0.0 rent_yield: float = 0.0 expense: float = 0.0 downsize: float = 0.0 downsize_age: float = 0.0 downsize_to_asset: int = 0 rates: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class InvestmentPropertyPointDto(ProjectionPointDto): capital_growth_rate: float = 0.0 value_before_downsize: float = 0.0 downsize: float = 0.0 value_after_downsize: float = 0.0 rent: float = 0.0 expenses: float = 0.0 value_before_downsize_p_v: float = 0.0 income: float = 0.0 net_rent: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class InvestmentPropertyProjectionDto: item: Optional[InvestmentPropertyDto] = None projection: Optional[List[InvestmentPropertyPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SummaryDto(ProjectableDto): pass @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SummaryPointDto(ProjectionPointDto): period: float = 0.0 deflator_b_o_y: Optional[float] = None deflator_m_o_y: Optional[float] = None income_needs: float = 0.0 income_you: float = 0.0 income_partner: float = 0.0 social_security: float = 0.0 income_assets: float = 0.0 total_income: float = 0.0 gap: float = 0.0 balance_assets: float = 0.0 balance_property: float = 0.0 income_annuities: float = 0.0 income_property: float = 0.0 lump_sum_spend: float = 0.0 ret_period: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SummaryProjectionDto: item: Optional[SummaryDto] = None count: int = 0 projection: Optional[List[SummaryPointDto]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class MemberProjectionDto: count: int = 0 projection: Optional[List[MemberPointDto]] = None people: Optional[List[PersonProjectionDto]] = None assets: Optional[List[AssetProjectionDto]] = None annuities: Optional[List[AnnuitiesProjectionDto]] = None spending: Optional[List[SpendingGoalProjectionDto]] = None investment_properties: Optional[List[InvestmentPropertyProjectionDto]] = None summary: Optional[SummaryProjectionDto] = None income_r: float = 0.0 income_r_breakdown: Optional[Dict[str, float]] = None bal_r: float = 0.0 bal_r_f_v: float = 0.0 balance_run_out_age: int = 0 income_gap_flag: bool = False residual_balance: bool = False lump_sum_ret: float = 0.0 income_vectors: Optional[Dict[str, List[float]]] = None projections: Optional[Dict[str, List[ProjectionBreakdownDto]]] = None inheritance: float = 0.0 inheritance_goal: float = 0.0 balance_run_out_time: int = 0 time_both_retired: int = 0 years_in_retirement: int = 0 annuity_purchase_amount: float = 0.0 cost_to_you: float = 0.0 tax_relief: float = 0.0 employer_match: float = 0.0 extra_amount: float = 0.0 you_pay: float = 0.0 total_invested: float = 0.0 solve_path: Optional[List[SolvePathEntry]] = None solver_count: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SimulationResultDto: id: int = 0 target_income: float = 0.0 target_age: int = 0 net_income: float = 0.0 contributions_out_of_pocket: float = 0.0 income_r: float = 0.0 income_r_breakdown: Optional[Dict[str, float]] = None run_out_age: int = 0 first_balance_zero_age: int = 0 age_r: float = 0.0 bal_r: float = 0.0 inheritance_goal: float = 0.0 inheritance: float = 0.0 residual_bal: float = 0.0 year1_pension: float = 0.0 projection: Optional[MemberProjectionDto] = None class CallType(str, Enum): SYNC = 'Sync' ASYNC = 'Async' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StochasticProjectionDiagnostics: data_sources: Optional[Dict[str, DataSourceResult]] = None run_time: datetime.datetime = datetime.datetime(1, 1, 1) run_duration: int = 0 projection_svc_duration: int = 0 remote_projection_svc_duration: int = 0 web_api_duration: int = 0 remote_stoch_proj_call_type: Optional[CallType] = None client_stoch_proj_call_type: Optional[CallType] = None sim_count: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StochasticProjectionDto: member: Optional[Member] = None user_id: Optional[str] = None key: Optional[str] = None inv_option: Optional[str] = None inv_option_r: Optional[str] = None stochastic_data_key: Optional[str] = None assume_steady_income: bool = False solve_target: Optional[SolveTarget] = None target_age: int = 0 target_income: float = 0.0 target_p: float = 0.0 net_income: float = 0.0 bal: float = 0.0 contributions_out_of_pocket: float = 0.0 p_target: float = 0.0 count_target: float = 0.0 income_r: float = 0.0 avg_income_r_breakdown: Optional[Dict[str, float]] = None avg_lump_sum_spend: float = 0.0 avg_taxable_lump_sum: float = 0.0 avg_lump_sum_tax: float = 0.0 avg_lump_sum_net: float = 0.0 age_r: int = 0 run_out_age: int = 0 savings: float = 0.0 bal_r: float = 0.0 residual_bal: float = 0.0 bal_r_f_v: float = 0.0 solver_count: int = 0 solved: bool = False solve_path: Optional[List[SolvePathEntry]] = None income_r_breakdown: Optional[Dict[str, float]] = None first_balance_zero_age: int = 0 simulation_results: Optional[List[SimulationResultDto]] = None bal_rs: Optional[List[float]] = None projections: Optional[Dict[str, List[ProjectionBreakdownDto]]] = None diagnostics: Optional[StochasticProjectionDiagnostics] = None avg_annuity_purchase_amount: float = 0.0 years_in_retirement: float = 0.0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AlbaDiagnostics: setup_duration: int = 0 stoch_duration: int = 0 det_duration: int = 0 member_save_duration: int = 0 web_api_duration: int = 0 pre_projection_pipe_duration: int = 0 post_projection_pipe_duration: int = 0 pre_projection_steps_duration: Optional[Dict[str, int]] = None post_projection_steps_duration: Optional[Dict[str, int]] = None class ContributionType(str, Enum): EMPLOYER = 'Employer' EMPLOYEE = 'Employee' EMPLOYER_MATCHING = 'EmployerMatching' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SiteContext: echo_uri: Optional[str] = None branding: Optional[Branding] = None modules: Optional[List[str]] = None conditional_access: Optional[ConditionalAccess] = None color_scheme: Optional[ColorScheme] = None carriers: Optional[List[ConfigurationVersionCarrier]] = None country: Optional[str] = None default_language: Optional[str] = None available_languages: Optional[List[str]] = None currency: Optional[str] = None employer: Optional[Entity] = None carrier: Optional[CarrierEntity] = None consultant: Optional[Entity] = None member: Optional[Member] = None counselling_options: Optional[CounsellingOptions] = None dk_calculator_configuration: Optional[DkCalculatorConfiguration] = None dk_pensions_info_sso_ticket: Optional[SecurityToken] = None dk_pensions_info: Optional[DkPensionsInfo] = None de_calculator_configuration: Optional[DeCalculatorConfiguration] = None disability_insurance_plan: Optional[DisabilityInsurancePlan] = None critical_illness_insurance_plan: Optional[CriticalIllnessInsurancePlan] = None death_insurance_plan: Optional[DeathInsurancePlan] = None health_insurance_plan: Optional[HealthInsurancePlan] = None accident_insurance_plan: Optional[AccidentInsurancePlan] = None dental_insurance_plan: Optional[DentalInsurancePlan] = None senior_citizen_concept: Optional[SeniorCitizenConcept] = None retirement_plan: Optional[RetirementPlan] = None de_retirement_plans: Optional[DeRetirementPlans] = None preventive_treatment: Optional[PreventiveTreatment] = None is_pension_scheme: bool = False path_finder: Optional[PathFinder] = None financial_well_being: Optional[FinancialWellbeing] = None use_informal_language: Optional[bool] = None uses_s_s_o: Optional[bool] = None authentication_method: Optional[AuthenticationMethod] = None cpr_number_needed: bool = False activation_code_required: bool = False employer_email_domain: Optional[str] = None version: Optional[str] = None tax_pseudocode_u_r_l: Optional[str] = None calculator_configuration: Optional[CalculatorData] = None configuration_ids: Optional[ConfigurationIds] = None document_list: Optional[List[Document]] = None new_document_day_span: Optional[int] = None sas_token_duration_in_seconds: Optional[float] = None data_retention_period_in_years: Optional[int] = None periods: Optional[List[Period]] = None group_config: Optional[ConfigurationVersionGroupConfig] = None member_document_config: Optional[ConfigurationVersionMemberDocumentConfig] = None pension_sight_client: Optional[PensionSightClient] = None user_result_configuration: Optional[List[UserResultConfiguration]] = None user_search_configuration: Optional[List[UserSearchConfiguration]] = None user_result_configuration_admin_proxy: Optional[List[UserResultConfigurationAdminProxy]] = None user_search_configuration_admin_proxy: Optional[List[UserSearchConfigurationAdminProxy]] = None fr_company_plans: Optional[FrCompanyPlans] = None es_retirement_plans: Optional[EsRetirementPlans] = None fr_calculator_configuration: Optional[FrCalculatorConfiguration] = None fr_fund_setups: Optional[List[FrFundSetup]] = None fr_plan_setups: Optional[List[FrPlanSetup]] = None fr_previous_plans_setups: Optional[List[FrPreviousPlansSetup]] = None fr_individual_plan_funds: Optional[List[str]] = None be_retirement_plans: Optional[List[BeRetirementPlans]] = None be_contributions: Optional[BeContributions] = None private_client_products: Optional[List[PrivateClientProduct]] = None contact_us: Optional[ConfigurationVersionEmailSetting] = None email_settings: Optional[List[ConfigurationVersionEmailSetting]] = None form_type_fields_configuration: Optional[List[FormTypeFieldsConfiguration]] = None form_type_lookup_configuration: Optional[List[FormTypeLookupConfiguration]] = None recommendation: Optional[ConfigurationVersionRecommendation] = None recommendation_product: Optional[ConfigurationVersionRecommendationProduct] = None pt_fund_values: Optional[List[FundValue]] = None pt_funds_setups: Optional[List[PtFund]] = None pt_contribution_data: Optional[PtContribution] = None pt_investment_allocations: Optional[List[PtInvestmentAllocation]] = None pt_investment_setup: Optional[PtInvestmentSetup] = None pt_fund_lifecycle_list: Optional[PtFundLifecycleList] = None pt_participant_status_setup: Optional[PtParticipantStatusSetup] = None pt_matching_contribution_list: Optional[List[PtMatchingContribution]] = None voting_poll_setup: Optional[ConfigurationVersionVotingPollSetup] = None voting_poll_config: Optional[List[ConfigurationVersionVotingPollConfig]] = None pt_calculator_configuration: Optional[PtCalculatorConfiguration] = None booking_info: Optional[DkBookingInfo] = None dk_public_contact_us_setup: Optional[ConfigurationVersionPublicContactUsSetup] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AlbaProjection: stochastic: Optional[StochasticProjectionDto] = None deterministic: Optional[MemberProjectionDto] = None member: Optional[Member] = None diagnostics: Optional[AlbaDiagnostics] = None parameter_bag: Optional[Dict[str, Object]] = None # @Route("/projection") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ProjectionReq(IReturn[AlbaProjection]): context: Optional[SiteContext] = None member: Optional[Member] = None