""" Options: Date: 2025-07-18 00:03:21 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: AlbaClientCountryConfigReq.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Entity(IEntity): id: Optional[str] = None class IEntity: id: Optional[str] = None class Gender(str, Enum): FEMALE = 'Female' MALE = 'Male' OTHER = 'Other' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Entity: logo_uri: Optional[str] = None name: Optional[str] = None contact_details: Optional[ContactDetails] = 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 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class LifeTableName: name: Optional[str] = None gender: Optional[Gender] = None class AnnuityPriceType(str, Enum): CALC = 'Calc' TABLE = 'Table' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnnuityConfig: table_names: Optional[List[LifeTableName]] = None impr_factor_table_names: Optional[List[LifeTableName]] = None reversion: Optional[float] = None guarantee: Optional[float] = None timing: Optional[float] = None allow_discount_pre_ret: Optional[bool] = None scale_qx: Optional[float] = None scale_impr: Optional[float] = None age_rating: Optional[int] = None spouse_age_rating: Optional[int] = None expense: Optional[float] = None perc_balance_spent: Optional[float] = None amount_spent: Optional[float] = None income_purchased: Optional[float] = None deferral_period: Optional[int] = None indexation_name: Optional[str] = None dr_stochastic: Optional[str] = None implied_inflation_stochastic_series: Optional[str] = None target_tpx: Optional[float] = None price_type: Optional[AnnuityPriceType] = None price: float = 0.0 class ContributionType(str, Enum): FIXED = 'Fixed' TIME = 'Time' LOOKUP = 'Lookup' MATCH = 'Match' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContributionConstraint: from_age: Optional[int] = None to_age: Optional[int] = None min: Optional[float] = None max: Optional[float] = None step: Optional[float] = None class AmountType(str, Enum): ANY = 'Any' AMOUNT = 'Amount' RATE = 'Rate' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContributionSpec: code: Optional[str] = None name: Optional[str] = None type: Optional[ContributionType] = None is_employee_cont: bool = False table: Optional[str] = None ccy: Optional[str] = None from_age: int = 0 to_age: Optional[int] = None indexation_type: Optional[str] = None salary_type: Optional[str] = None is_taxable: bool = False related_rate: Optional[str] = None order: int = 0 editable: bool = False constraints: Optional[List[ContributionConstraint]] = None amount_type: Optional[AmountType] = None is_one_off: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AssetConfig: code: Optional[str] = None name: Optional[str] = None rebalance: bool = False can_edit_investment_choice: bool = False will_spend: bool = False investments: Optional[List[str]] = None contributions: Optional[List[ContributionSpec]] = None is_one_off: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContributionRateSpec: from_age: Optional[int] = None to_age: Optional[int] = None from_service: Optional[int] = None to_service: Optional[int] = None source_rate: Optional[float] = None date_from: Optional[datetime.datetime] = None date_to: Optional[datetime.datetime] = None upper_limit: Optional[float] = None rate: float = 0.0 core_rate: float = 0.0 lookup_key: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ContributionTableSpec: code: Optional[str] = None type: Optional[ContributionType] = None rates: Optional[Dict[str, float]] = None rate_specs: Optional[List[ContributionRateSpec]] = None key_template: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class InvestmentProduct: code: Optional[str] = None name: Optional[str] = None group: Optional[str] = None is_asset_class_fund: bool = False allocs: Optional[List[InvestmentProductAllocationsSpec]] = None order: int = 0 allocations_dictionary: Optional[Dict[int, Dict[str, float]]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ReturnRates: earning_rates: Optional[List[float]] = None tax_rates: Optional[List[float]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DatedEntity(Entity, IDatedEntity): as_at: datetime.datetime = datetime.datetime(1, 1, 1) class IDatedEntity(IEntity): as_at: datetime.datetime = datetime.datetime(1, 1, 1) class ContributionType(str, Enum): EMPLOYER = 'Employer' EMPLOYEE = 'Employee' EMPLOYER_MATCHING = 'EmployerMatching' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class InvestmentProduct: risk_id: Optional[str] = None risk_name: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class ClientCountryConfig(DatedEntity): client_code: Optional[str] = None client_name: Optional[str] = None country_code: Optional[str] = None source: Optional[DataSourceResult] = None age_r_min: int = 0 age_r_max: int = 0 primary_salary: Optional[str] = None annuity_config: Optional[AnnuityConfig] = None assets: Optional[List[AssetConfig]] = None cont_tables: Optional[List[ContributionTableSpec]] = None investments: Optional[List[InvestmentProduct]] = None content: Optional[Dict[str, List[Content]]] = None environments: Optional[Dict[str, str]] = None custom_numeric_constraints: Optional[Dict[str, Constraint[Decimal]]] = None asset_return_rates: Optional[Dict[str, ReturnRates]] = None investment_property_rates: float = 0.0 get_asset_class_fund_dictionary: Optional[Dict[str, bool]] = None get_term_based_fund_dictionary: Optional[Dict[str, bool]] = None get_allocations_dictionary: Optional[Dict[str, Dict[int, Dict[str, float]]]] = None asset_name_map: Optional[Dict[str, str]] = None asset_cont_name_map: Optional[Dict[str, Dict[str, str]]] = None cache_key: Optional[str] = None # @Route("/clientcountryconfig/{Country}/{Client}", "GET") # @Route("/clientcountryconfig", "GET") # @Route("/clientcountryconfig", "POST") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AlbaClientCountryConfigReq(IReturn[ClientCountryConfig]): country_code: Optional[str] = None client_code: Optional[str] = None