AlbaApi

<back to all web services

AlbaClientCountryConfigReq

The following routes are available for this service:
GET/clientcountryconfig/{Country}/{Client}
GET/clientcountryconfig
POST/clientcountryconfig
import 'package:servicestack/servicestack.dart';
import 'dart:typed_data';

class Entity implements IEntity, IConvertible
{
    String? id;

    Entity({this.id});
    Entity.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        id = json['id'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'id': id
    };

    getTypeName() => "Entity";
    TypeContext? context = _ctx;
}

abstract class DatedEntity extends Entity implements IDatedEntity
{
    DateTime? asAt;

    DatedEntity({this.asAt});
    DatedEntity.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        asAt = JsonConverters.fromJson(json['asAt'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'asAt': JsonConverters.toJson(asAt,'DateTime',context!)
    });

    getTypeName() => "DatedEntity";
    TypeContext? context = _ctx;
}

enum DataSource
{
    Db,
    Cache,
    Parameter,
    NA,
}

class DataSourceResult implements IConvertible
{
    DataSource? d;
    int? t;

    DataSourceResult({this.d,this.t});
    DataSourceResult.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        d = JsonConverters.fromJson(json['d'],'DataSource',context!);
        t = json['t'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'd': JsonConverters.toJson(d,'DataSource',context!),
        't': t
    };

    getTypeName() => "DataSourceResult";
    TypeContext? context = _ctx;
}

enum Gender
{
    Female,
    Male,
    Other,
}

class LifeTableName implements IConvertible
{
    String? name;
    Gender? gender;

    LifeTableName({this.name,this.gender});
    LifeTableName.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        name = json['name'];
        gender = JsonConverters.fromJson(json['gender'],'Gender',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'name': name,
        'gender': JsonConverters.toJson(gender,'Gender',context!)
    };

    getTypeName() => "LifeTableName";
    TypeContext? context = _ctx;
}

enum AnnuityPriceType
{
    Calc,
    Table,
}

class AnnuityConfig implements IConvertible
{
    List<LifeTableName>? tableNames;
    List<LifeTableName>? imprFactorTableNames;
    double? reversion;
    double? guarantee;
    double? timing;
    bool? allowDiscountPreRet;
    double? scaleQx;
    double? scaleImpr;
    int? ageRating;
    int? spouseAgeRating;
    double? expense;
    double? percBalanceSpent;
    double? amountSpent;
    double? incomePurchased;
    int? deferralPeriod;
    String? indexationName;
    String? drStochastic;
    String? impliedInflationStochasticSeries;
    double? targetTpx;
    AnnuityPriceType? priceType;
    double? price;

    AnnuityConfig({this.tableNames,this.imprFactorTableNames,this.reversion,this.guarantee,this.timing,this.allowDiscountPreRet,this.scaleQx,this.scaleImpr,this.ageRating,this.spouseAgeRating,this.expense,this.percBalanceSpent,this.amountSpent,this.incomePurchased,this.deferralPeriod,this.indexationName,this.drStochastic,this.impliedInflationStochasticSeries,this.targetTpx,this.priceType,this.price});
    AnnuityConfig.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        tableNames = JsonConverters.fromJson(json['tableNames'],'List<LifeTableName>',context!);
        imprFactorTableNames = JsonConverters.fromJson(json['imprFactorTableNames'],'List<LifeTableName>',context!);
        reversion = JsonConverters.toDouble(json['reversion']);
        guarantee = JsonConverters.toDouble(json['guarantee']);
        timing = JsonConverters.toDouble(json['timing']);
        allowDiscountPreRet = json['allowDiscountPreRet'];
        scaleQx = JsonConverters.toDouble(json['scaleQx']);
        scaleImpr = JsonConverters.toDouble(json['scaleImpr']);
        ageRating = json['ageRating'];
        spouseAgeRating = json['spouseAgeRating'];
        expense = JsonConverters.toDouble(json['expense']);
        percBalanceSpent = JsonConverters.toDouble(json['percBalanceSpent']);
        amountSpent = JsonConverters.toDouble(json['amountSpent']);
        incomePurchased = JsonConverters.toDouble(json['incomePurchased']);
        deferralPeriod = json['deferralPeriod'];
        indexationName = json['indexationName'];
        drStochastic = json['drStochastic'];
        impliedInflationStochasticSeries = json['impliedInflationStochasticSeries'];
        targetTpx = JsonConverters.toDouble(json['targetTpx']);
        priceType = JsonConverters.fromJson(json['priceType'],'AnnuityPriceType',context!);
        price = JsonConverters.toDouble(json['price']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'tableNames': JsonConverters.toJson(tableNames,'List<LifeTableName>',context!),
        'imprFactorTableNames': JsonConverters.toJson(imprFactorTableNames,'List<LifeTableName>',context!),
        'reversion': reversion,
        'guarantee': guarantee,
        'timing': timing,
        'allowDiscountPreRet': allowDiscountPreRet,
        'scaleQx': scaleQx,
        'scaleImpr': scaleImpr,
        'ageRating': ageRating,
        'spouseAgeRating': spouseAgeRating,
        'expense': expense,
        'percBalanceSpent': percBalanceSpent,
        'amountSpent': amountSpent,
        'incomePurchased': incomePurchased,
        'deferralPeriod': deferralPeriod,
        'indexationName': indexationName,
        'drStochastic': drStochastic,
        'impliedInflationStochasticSeries': impliedInflationStochasticSeries,
        'targetTpx': targetTpx,
        'priceType': JsonConverters.toJson(priceType,'AnnuityPriceType',context!),
        'price': price
    };

    getTypeName() => "AnnuityConfig";
    TypeContext? context = _ctx;
}

enum ContributionType
{
    Fixed,
    Time,
    Lookup,
    Match,
}

class ContributionConstraint implements IConvertible
{
    int? fromAge;
    int? toAge;
    double? min;
    double? max;
    double? step;

    ContributionConstraint({this.fromAge,this.toAge,this.min,this.max,this.step});
    ContributionConstraint.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        fromAge = json['fromAge'];
        toAge = json['toAge'];
        min = JsonConverters.toDouble(json['min']);
        max = JsonConverters.toDouble(json['max']);
        step = JsonConverters.toDouble(json['step']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'fromAge': fromAge,
        'toAge': toAge,
        'min': min,
        'max': max,
        'step': step
    };

    getTypeName() => "ContributionConstraint";
    TypeContext? context = _ctx;
}

enum AmountType
{
    Any,
    Amount,
    Rate,
}

class ContributionSpec implements IConvertible
{
    String? code;
    String? name;
    ContributionType? type;
    bool? isEmployeeCont;
    String? table;
    String? ccy;
    int? fromAge;
    int? toAge;
    String? indexationType;
    String? salaryType;
    bool? isTaxable;
    String? relatedRate;
    int? order;
    bool? editable;
    List<ContributionConstraint>? constraints;
    AmountType? amountType;
    bool? isOneOff;

    ContributionSpec({this.code,this.name,this.type,this.isEmployeeCont,this.table,this.ccy,this.fromAge,this.toAge,this.indexationType,this.salaryType,this.isTaxable,this.relatedRate,this.order,this.editable,this.constraints,this.amountType,this.isOneOff});
    ContributionSpec.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        code = json['code'];
        name = json['name'];
        type = JsonConverters.fromJson(json['type'],'ContributionType',context!);
        isEmployeeCont = json['isEmployeeCont'];
        table = json['table'];
        ccy = json['ccy'];
        fromAge = json['fromAge'];
        toAge = json['toAge'];
        indexationType = json['indexationType'];
        salaryType = json['salaryType'];
        isTaxable = json['isTaxable'];
        relatedRate = json['relatedRate'];
        order = json['order'];
        editable = json['editable'];
        constraints = JsonConverters.fromJson(json['constraints'],'List<ContributionConstraint>',context!);
        amountType = JsonConverters.fromJson(json['amountType'],'AmountType',context!);
        isOneOff = json['isOneOff'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'code': code,
        'name': name,
        'type': JsonConverters.toJson(type,'ContributionType',context!),
        'isEmployeeCont': isEmployeeCont,
        'table': table,
        'ccy': ccy,
        'fromAge': fromAge,
        'toAge': toAge,
        'indexationType': indexationType,
        'salaryType': salaryType,
        'isTaxable': isTaxable,
        'relatedRate': relatedRate,
        'order': order,
        'editable': editable,
        'constraints': JsonConverters.toJson(constraints,'List<ContributionConstraint>',context!),
        'amountType': JsonConverters.toJson(amountType,'AmountType',context!),
        'isOneOff': isOneOff
    };

    getTypeName() => "ContributionSpec";
    TypeContext? context = _ctx;
}

class AssetConfig implements IConvertible
{
    String? code;
    String? name;
    bool? rebalance;
    bool? canEditInvestmentChoice;
    bool? willSpend;
    List<String>? investments;
    List<ContributionSpec>? contributions;
    bool? isOneOff;

    AssetConfig({this.code,this.name,this.rebalance,this.canEditInvestmentChoice,this.willSpend,this.investments,this.contributions,this.isOneOff});
    AssetConfig.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        code = json['code'];
        name = json['name'];
        rebalance = json['rebalance'];
        canEditInvestmentChoice = json['canEditInvestmentChoice'];
        willSpend = json['willSpend'];
        investments = JsonConverters.fromJson(json['investments'],'List<String>',context!);
        contributions = JsonConverters.fromJson(json['contributions'],'List<ContributionSpec>',context!);
        isOneOff = json['isOneOff'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'code': code,
        'name': name,
        'rebalance': rebalance,
        'canEditInvestmentChoice': canEditInvestmentChoice,
        'willSpend': willSpend,
        'investments': JsonConverters.toJson(investments,'List<String>',context!),
        'contributions': JsonConverters.toJson(contributions,'List<ContributionSpec>',context!),
        'isOneOff': isOneOff
    };

    getTypeName() => "AssetConfig";
    TypeContext? context = _ctx;
}

class ContributionRateSpec implements IConvertible
{
    int? fromAge;
    int? toAge;
    int? fromService;
    int? toService;
    double? sourceRate;
    DateTime? dateFrom;
    DateTime? dateTo;
    double? upperLimit;
    double? rate;
    double? coreRate;
    String? lookupKey;

    ContributionRateSpec({this.fromAge,this.toAge,this.fromService,this.toService,this.sourceRate,this.dateFrom,this.dateTo,this.upperLimit,this.rate,this.coreRate,this.lookupKey});
    ContributionRateSpec.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        fromAge = json['fromAge'];
        toAge = json['toAge'];
        fromService = json['fromService'];
        toService = json['toService'];
        sourceRate = JsonConverters.toDouble(json['sourceRate']);
        dateFrom = JsonConverters.fromJson(json['dateFrom'],'DateTime',context!);
        dateTo = JsonConverters.fromJson(json['dateTo'],'DateTime',context!);
        upperLimit = JsonConverters.toDouble(json['upperLimit']);
        rate = JsonConverters.toDouble(json['rate']);
        coreRate = JsonConverters.toDouble(json['coreRate']);
        lookupKey = json['lookupKey'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'fromAge': fromAge,
        'toAge': toAge,
        'fromService': fromService,
        'toService': toService,
        'sourceRate': sourceRate,
        'dateFrom': JsonConverters.toJson(dateFrom,'DateTime',context!),
        'dateTo': JsonConverters.toJson(dateTo,'DateTime',context!),
        'upperLimit': upperLimit,
        'rate': rate,
        'coreRate': coreRate,
        'lookupKey': lookupKey
    };

    getTypeName() => "ContributionRateSpec";
    TypeContext? context = _ctx;
}

class ContributionTableSpec implements IConvertible
{
    String? code;
    ContributionType? type;
    Map<String,double?>? rates;
    List<ContributionRateSpec>? rateSpecs;
    String? keyTemplate;

    ContributionTableSpec({this.code,this.type,this.rates,this.rateSpecs,this.keyTemplate});
    ContributionTableSpec.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        code = json['code'];
        type = JsonConverters.fromJson(json['type'],'ContributionType',context!);
        rates = JsonConverters.fromJson(json['rates'],'Map<String,double?>',context!);
        rateSpecs = JsonConverters.fromJson(json['rateSpecs'],'List<ContributionRateSpec>',context!);
        keyTemplate = json['keyTemplate'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'code': code,
        'type': JsonConverters.toJson(type,'ContributionType',context!),
        'rates': JsonConverters.toJson(rates,'Map<String,double?>',context!),
        'rateSpecs': JsonConverters.toJson(rateSpecs,'List<ContributionRateSpec>',context!),
        'keyTemplate': keyTemplate
    };

    getTypeName() => "ContributionTableSpec";
    TypeContext? context = _ctx;
}

class InvestmentProductAllocationsSpec implements IConvertible
{
    int? fromAge;
    int? term;
    Map<String,double?>? allocs;
    double? totalAlloc;

    InvestmentProductAllocationsSpec({this.fromAge,this.term,this.allocs,this.totalAlloc});
    InvestmentProductAllocationsSpec.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        fromAge = json['fromAge'];
        term = json['term'];
        allocs = JsonConverters.fromJson(json['allocs'],'Map<String,double?>',context!);
        totalAlloc = JsonConverters.toDouble(json['totalAlloc']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'fromAge': fromAge,
        'term': term,
        'allocs': JsonConverters.toJson(allocs,'Map<String,double?>',context!),
        'totalAlloc': totalAlloc
    };

    getTypeName() => "InvestmentProductAllocationsSpec";
    TypeContext? context = _ctx;
}

class InvestmentProduct implements IConvertible
{
    String? code;
    String? name;
    String? group;
    bool? isAssetClassFund;
    List<InvestmentProductAllocationsSpec>? allocs;
    int? order;
    Map<int,Map<String,double>?>? allocationsDictionary;

    InvestmentProduct({this.code,this.name,this.group,this.isAssetClassFund,this.allocs,this.order,this.allocationsDictionary});
    InvestmentProduct.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        code = json['code'];
        name = json['name'];
        group = json['group'];
        isAssetClassFund = json['isAssetClassFund'];
        allocs = JsonConverters.fromJson(json['allocs'],'List<InvestmentProductAllocationsSpec>',context!);
        order = json['order'];
        allocationsDictionary = JsonConverters.fromJson(json['allocationsDictionary'],'Map<int,Map<String,double>?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'code': code,
        'name': name,
        'group': group,
        'isAssetClassFund': isAssetClassFund,
        'allocs': JsonConverters.toJson(allocs,'List<InvestmentProductAllocationsSpec>',context!),
        'order': order,
        'allocationsDictionary': JsonConverters.toJson(allocationsDictionary,'Map<int,Map<String,double>?>',context!)
    };

    getTypeName() => "InvestmentProduct";
    TypeContext? context = _ctx;
}

class ReturnRates implements IConvertible
{
    List<double>? earningRates;
    List<double>? taxRates;

    ReturnRates({this.earningRates,this.taxRates});
    ReturnRates.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        earningRates = JsonConverters.fromJson(json['earningRates'],'List<double>',context!);
        taxRates = JsonConverters.fromJson(json['taxRates'],'List<double>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'earningRates': JsonConverters.toJson(earningRates,'List<double>',context!),
        'taxRates': JsonConverters.toJson(taxRates,'List<double>',context!)
    };

    getTypeName() => "ReturnRates";
    TypeContext? context = _ctx;
}

class ClientCountryConfig extends DatedEntity implements IConvertible
{
    String? clientCode;
    String? clientName;
    String? countryCode;
    DataSourceResult? source;
    int? ageRMin;
    int? ageRMax;
    String? primarySalary;
    AnnuityConfig? annuityConfig;
    List<AssetConfig>? assets;
    List<ContributionTableSpec>? contTables;
    List<InvestmentProduct>? investments;
    Map<String,List<Content>?>? content;
    Map<String,String?>? environments;
    Map<String,Constraint<double>?>? customNumericConstraints;
    Map<String,ReturnRates?>? assetReturnRates;
    double? investmentPropertyRates;
    Map<String,bool?>? getAssetClassFundDictionary;
    Map<String,bool?>? getTermBasedFundDictionary;
    Map<String,Map<int,Map<String,double>>?>? getAllocationsDictionary;
    Map<String,String?>? assetNameMap;
    Map<String,Map<String,String>?>? assetContNameMap;
    String? cacheKey;

    ClientCountryConfig({this.clientCode,this.clientName,this.countryCode,this.source,this.ageRMin,this.ageRMax,this.primarySalary,this.annuityConfig,this.assets,this.contTables,this.investments,this.content,this.environments,this.customNumericConstraints,this.assetReturnRates,this.investmentPropertyRates,this.getAssetClassFundDictionary,this.getTermBasedFundDictionary,this.getAllocationsDictionary,this.assetNameMap,this.assetContNameMap,this.cacheKey});
    ClientCountryConfig.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        clientCode = json['clientCode'];
        clientName = json['clientName'];
        countryCode = json['countryCode'];
        source = JsonConverters.fromJson(json['source'],'DataSourceResult',context!);
        ageRMin = json['ageRMin'];
        ageRMax = json['ageRMax'];
        primarySalary = json['primarySalary'];
        annuityConfig = JsonConverters.fromJson(json['annuityConfig'],'AnnuityConfig',context!);
        assets = JsonConverters.fromJson(json['assets'],'List<AssetConfig>',context!);
        contTables = JsonConverters.fromJson(json['contTables'],'List<ContributionTableSpec>',context!);
        investments = JsonConverters.fromJson(json['investments'],'List<InvestmentProduct>',context!);
        content = JsonConverters.fromJson(json['content'],'Map<String,List<Content>?>',context!);
        environments = JsonConverters.toStringMap(json['environments']);
        customNumericConstraints = JsonConverters.fromJson(json['customNumericConstraints'],'Map<String,Constraint<double>?>',context!);
        assetReturnRates = JsonConverters.fromJson(json['assetReturnRates'],'Map<String,ReturnRates?>',context!);
        investmentPropertyRates = JsonConverters.toDouble(json['investmentPropertyRates']);
        getAssetClassFundDictionary = JsonConverters.fromJson(json['getAssetClassFundDictionary'],'Map<String,bool?>',context!);
        getTermBasedFundDictionary = JsonConverters.fromJson(json['getTermBasedFundDictionary'],'Map<String,bool?>',context!);
        getAllocationsDictionary = JsonConverters.fromJson(json['getAllocationsDictionary'],'Map<String,Map<int,Map<String,double>>?>',context!);
        assetNameMap = JsonConverters.toStringMap(json['assetNameMap']);
        assetContNameMap = JsonConverters.fromJson(json['assetContNameMap'],'Map<String,Map<String,String>?>',context!);
        cacheKey = json['cacheKey'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'clientCode': clientCode,
        'clientName': clientName,
        'countryCode': countryCode,
        'source': JsonConverters.toJson(source,'DataSourceResult',context!),
        'ageRMin': ageRMin,
        'ageRMax': ageRMax,
        'primarySalary': primarySalary,
        'annuityConfig': JsonConverters.toJson(annuityConfig,'AnnuityConfig',context!),
        'assets': JsonConverters.toJson(assets,'List<AssetConfig>',context!),
        'contTables': JsonConverters.toJson(contTables,'List<ContributionTableSpec>',context!),
        'investments': JsonConverters.toJson(investments,'List<InvestmentProduct>',context!),
        'content': JsonConverters.toJson(content,'Map<String,List<Content>?>',context!),
        'environments': environments,
        'customNumericConstraints': JsonConverters.toJson(customNumericConstraints,'Map<String,Constraint<double>?>',context!),
        'assetReturnRates': JsonConverters.toJson(assetReturnRates,'Map<String,ReturnRates?>',context!),
        'investmentPropertyRates': investmentPropertyRates,
        'getAssetClassFundDictionary': JsonConverters.toJson(getAssetClassFundDictionary,'Map<String,bool?>',context!),
        'getTermBasedFundDictionary': JsonConverters.toJson(getTermBasedFundDictionary,'Map<String,bool?>',context!),
        'getAllocationsDictionary': JsonConverters.toJson(getAllocationsDictionary,'Map<String,Map<int,Map<String,double>>?>',context!),
        'assetNameMap': assetNameMap,
        'assetContNameMap': JsonConverters.toJson(assetContNameMap,'Map<String,Map<String,String>?>',context!),
        'cacheKey': cacheKey
    });

    getTypeName() => "ClientCountryConfig";
    TypeContext? context = _ctx;
}

class AlbaClientCountryConfigReq implements IConvertible
{
    String? countryCode;
    String? clientCode;

    AlbaClientCountryConfigReq({this.countryCode,this.clientCode});
    AlbaClientCountryConfigReq.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        countryCode = json['countryCode'];
        clientCode = json['clientCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'countryCode': countryCode,
        'clientCode': clientCode
    };

    getTypeName() => "AlbaClientCountryConfigReq";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'hcbtas_q_albamfs_api.azurewebsites.net', types: <String, TypeInfo> {
    'Entity': TypeInfo(TypeOf.Class, create:() => Entity()),
    'DatedEntity': TypeInfo(TypeOf.AbstractClass),
    'DataSource': TypeInfo(TypeOf.Enum, enumValues:DataSource.values),
    'DataSourceResult': TypeInfo(TypeOf.Class, create:() => DataSourceResult()),
    'Gender': TypeInfo(TypeOf.Enum, enumValues:Gender.values),
    'LifeTableName': TypeInfo(TypeOf.Class, create:() => LifeTableName()),
    'AnnuityPriceType': TypeInfo(TypeOf.Enum, enumValues:AnnuityPriceType.values),
    'AnnuityConfig': TypeInfo(TypeOf.Class, create:() => AnnuityConfig()),
    'List<LifeTableName>': TypeInfo(TypeOf.Class, create:() => <LifeTableName>[]),
    'ContributionType': TypeInfo(TypeOf.Enum, enumValues:ContributionType.values),
    'ContributionConstraint': TypeInfo(TypeOf.Class, create:() => ContributionConstraint()),
    'AmountType': TypeInfo(TypeOf.Enum, enumValues:AmountType.values),
    'ContributionSpec': TypeInfo(TypeOf.Class, create:() => ContributionSpec()),
    'List<ContributionConstraint>': TypeInfo(TypeOf.Class, create:() => <ContributionConstraint>[]),
    'AssetConfig': TypeInfo(TypeOf.Class, create:() => AssetConfig()),
    'List<ContributionSpec>': TypeInfo(TypeOf.Class, create:() => <ContributionSpec>[]),
    'ContributionRateSpec': TypeInfo(TypeOf.Class, create:() => ContributionRateSpec()),
    'ContributionTableSpec': TypeInfo(TypeOf.Class, create:() => ContributionTableSpec()),
    'Map<String,double?>': TypeInfo(TypeOf.Class, create:() => Map<String,double?>()),
    'List<ContributionRateSpec>': TypeInfo(TypeOf.Class, create:() => <ContributionRateSpec>[]),
    'InvestmentProductAllocationsSpec': TypeInfo(TypeOf.Class, create:() => InvestmentProductAllocationsSpec()),
    'InvestmentProduct': TypeInfo(TypeOf.Class, create:() => InvestmentProduct()),
    'List<InvestmentProductAllocationsSpec>': TypeInfo(TypeOf.Class, create:() => <InvestmentProductAllocationsSpec>[]),
    'Map<int,Map<String,double>?>': TypeInfo(TypeOf.Class, create:() => Map<int,Map<String,double>?>()),
    'Map<String,double>': TypeInfo(TypeOf.Class, create:() => Map<String,double>()),
    'ReturnRates': TypeInfo(TypeOf.Class, create:() => ReturnRates()),
    'ClientCountryConfig': TypeInfo(TypeOf.Class, create:() => ClientCountryConfig()),
    'List<AssetConfig>': TypeInfo(TypeOf.Class, create:() => <AssetConfig>[]),
    'List<ContributionTableSpec>': TypeInfo(TypeOf.Class, create:() => <ContributionTableSpec>[]),
    'List<InvestmentProduct>': TypeInfo(TypeOf.Class, create:() => <InvestmentProduct>[]),
    'Map<String,List<Content>?>': TypeInfo(TypeOf.Class, create:() => Map<String,List<Content>?>()),
    'List<Content>': TypeInfo(TypeOf.Class, create:() => <Content>[]),
    'Content': TypeInfo(TypeOf.Class, create:() => Content()),
    'Map<String,Constraint<double>?>': TypeInfo(TypeOf.Class, create:() => Map<String,Constraint<double>?>()),
    'Constraint<double>': TypeInfo(TypeOf.Class, create:() => Constraint<double>()),
    'Map<String,ReturnRates?>': TypeInfo(TypeOf.Class, create:() => Map<String,ReturnRates?>()),
    'Map<String,bool?>': TypeInfo(TypeOf.Class, create:() => Map<String,bool?>()),
    'Map<String,Map<int,Map<String,double>>?>': TypeInfo(TypeOf.Class, create:() => Map<String,Map<int,Map<String,double>>?>()),
    'Map<int,Map<String,double>>': TypeInfo(TypeOf.Class, create:() => Map<int,Map<String,double>>()),
    'Map<String,Map<String,String>?>': TypeInfo(TypeOf.Class, create:() => Map<String,Map<String,String>?>()),
    'AlbaClientCountryConfigReq': TypeInfo(TypeOf.Class, create:() => AlbaClientCountryConfigReq()),
});

Dart AlbaClientCountryConfigReq DTOs

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

HTTP + JSV

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

POST /clientcountryconfig HTTP/1.1 
Host: hcbtas-q-albamfs-api.azurewebsites.net 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	countryCode: String,
	clientCode: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	clientCode: String,
	clientName: String,
	countryCode: String,
	source: 
	{
		d: Db,
		t: 0
	},
	ageRMin: 0,
	ageRMax: 0,
	primarySalary: String,
	annuityConfig: 
	{
		tableNames: 
		[
			{
				name: String,
				gender: Female
			}
		],
		imprFactorTableNames: 
		[
			{
				name: String,
				gender: Female
			}
		],
		reversion: 0,
		guarantee: 0,
		timing: 0,
		allowDiscountPreRet: False,
		scaleQx: 0,
		scaleImpr: 0,
		ageRating: 0,
		spouseAgeRating: 0,
		expense: 0,
		percBalanceSpent: 0,
		amountSpent: 0,
		incomePurchased: 0,
		deferralPeriod: 0,
		indexationName: String,
		drStochastic: String,
		impliedInflationStochasticSeries: String,
		targetTpx: 0,
		priceType: Calc,
		price: 0
	},
	assets: 
	[
		{
			code: String,
			name: String,
			rebalance: False,
			canEditInvestmentChoice: False,
			willSpend: False,
			investments: 
			[
				String
			],
			contributions: 
			[
				{
					code: String,
					name: String,
					type: Fixed,
					isEmployeeCont: False,
					table: String,
					ccy: String,
					fromAge: 0,
					toAge: 0,
					indexationType: String,
					salaryType: String,
					isTaxable: False,
					relatedRate: String,
					order: 0,
					editable: False,
					constraints: 
					[
						{
							fromAge: 0,
							toAge: 0,
							min: 0,
							max: 0,
							step: 0
						}
					],
					amountType: Any,
					isOneOff: False
				}
			],
			isOneOff: False
		}
	],
	contTables: 
	[
		{
			code: String,
			type: Fixed,
			rates: 
			{
				String: 0
			},
			rateSpecs: 
			[
				{
					fromAge: 0,
					toAge: 0,
					fromService: 0,
					toService: 0,
					sourceRate: 0,
					dateFrom: 0001-01-01,
					dateTo: 0001-01-01,
					upperLimit: 0,
					rate: 0,
					coreRate: 0,
					lookupKey: String
				}
			],
			keyTemplate: age-service-rate
		}
	],
	investments: 
	[
		{
			code: String,
			name: String,
			group: String,
			isAssetClassFund: False,
			allocs: 
			[
				{
					fromAge: 0,
					term: 0,
					allocs: 
					{
						String: 0
					},
					totalAlloc: 0
				}
			],
			order: 0,
			allocationsDictionary: 
			{
				0: {}
			}
		}
	],
	content: 
	{
		String: 
		[
			{
				section: String,
				itemId: String,
				itemCode: String,
				country: String,
				lang: String,
				app: String,
				companyId: String,
				company: String,
				elements: 
				{
					String: String
				},
				id: String
			}
		]
	},
	environments: 
	{
		String: String
	},
	customNumericConstraints: 
	{
		String: 
		{
			min: 0,
			max: 0,
			step: 0
		}
	},
	assetReturnRates: 
	{
		String: 
		{
			earningRates: 
			[
				0
			],
			taxRates: 
			[
				0
			]
		}
	},
	investmentPropertyRates: 0,
	getAssetClassFundDictionary: 
	{
		String: False
	},
	getTermBasedFundDictionary: 
	{
		String: True
	},
	getAllocationsDictionary: 
	{
		String: 
		{
			0: {}
		}
	},
	assetNameMap: 
	{
		String: String
	},
	assetContNameMap: 
	{
		String: 
		{
			String: String
		}
	},
	cacheKey: ClientCountryConfig-String-String,
	asAt: 0001-01-01,
	id: String
}