POST | /clientcountryconfig/validate |
---|
namespace CalcEngineApi.ServiceModel
open System
open System.Collections
open System.Collections.Generic
open System.Runtime.Serialization
open ServiceStack
open ServiceStack.DataAnnotations
[<AllowNullLiteral>]
type Entity() =
member val Id:String = null with get,set
[<AllowNullLiteral>]
type DatedEntity() =
inherit Entity()
member val AsAt:DateTime = new DateTime() with get,set
type DataSource =
| Db = 0
| Cache = 1
| Parameter = 2
| NA = 3
[<AllowNullLiteral>]
type DataSourceResult() =
member val D:DataSource = new DataSource() with get,set
member val T:Int64 = new Int64() with get,set
type Gender =
| Female = 0
| Male = 1
| Other = 2
[<AllowNullLiteral>]
type LifeTableName() =
member val Name:String = null with get,set
member val Gender:Gender = new Gender() with get,set
type AnnuityPriceType =
| Calc = 0
| Table = 1
[<AllowNullLiteral>]
type AnnuityConfig() =
member val TableNames:ResizeArray<LifeTableName> = new ResizeArray<LifeTableName>() with get,set
member val ImprFactorTableNames:ResizeArray<LifeTableName> = new ResizeArray<LifeTableName>() with get,set
member val Reversion:Nullable<Double> = new Nullable<Double>() with get,set
member val Guarantee:Nullable<Double> = new Nullable<Double>() with get,set
member val Timing:Nullable<Double> = new Nullable<Double>() with get,set
member val AllowDiscountPreRet:Nullable<Boolean> = new Nullable<Boolean>() with get,set
member val ScaleQx:Nullable<Double> = new Nullable<Double>() with get,set
member val ScaleImpr:Nullable<Double> = new Nullable<Double>() with get,set
member val AgeRating:Nullable<Int32> = new Nullable<Int32>() with get,set
member val SpouseAgeRating:Nullable<Int32> = new Nullable<Int32>() with get,set
member val Expense:Nullable<Double> = new Nullable<Double>() with get,set
member val PercBalanceSpent:Nullable<Double> = new Nullable<Double>() with get,set
member val AmountSpent:Nullable<Double> = new Nullable<Double>() with get,set
member val IncomePurchased:Nullable<Double> = new Nullable<Double>() with get,set
member val DeferralPeriod:Nullable<Int32> = new Nullable<Int32>() with get,set
member val IndexationName:String = null with get,set
member val DRStochastic:String = null with get,set
member val ImpliedInflationStochasticSeries:String = null with get,set
member val TargetTpx:Nullable<Double> = new Nullable<Double>() with get,set
member val PriceType:AnnuityPriceType = new AnnuityPriceType() with get,set
member val Price:Double = new Double() with get,set
type ContributionType =
| Fixed = 0
| Time = 1
| Lookup = 2
| Match = 3
[<AllowNullLiteral>]
type ContributionConstraint() =
member val FromAge:Nullable<Int32> = new Nullable<Int32>() with get,set
member val ToAge:Nullable<Int32> = new Nullable<Int32>() with get,set
member val Min:Nullable<Double> = new Nullable<Double>() with get,set
member val Max:Nullable<Double> = new Nullable<Double>() with get,set
member val Step:Nullable<Double> = new Nullable<Double>() with get,set
type AmountType =
| Any = 0
| Amount = 1
| Rate = 2
[<AllowNullLiteral>]
type ContributionSpec() =
member val Code:String = null with get,set
member val Name:String = null with get,set
member val Type:ContributionType = new ContributionType() with get,set
member val IsEmployeeCont:Boolean = new Boolean() with get,set
member val Table:String = null with get,set
member val Ccy:String = null with get,set
member val FromAge:Int32 = new Int32() with get,set
member val ToAge:Nullable<Int32> = new Nullable<Int32>() with get,set
member val IndexationType:String = null with get,set
member val SalaryType:String = null with get,set
member val IsTaxable:Boolean = new Boolean() with get,set
member val RelatedRate:String = null with get,set
member val Order:Int32 = new Int32() with get,set
member val Editable:Boolean = new Boolean() with get,set
member val Constraints:ResizeArray<ContributionConstraint> = new ResizeArray<ContributionConstraint>() with get,set
member val AmountType:AmountType = new AmountType() with get,set
member val IsOneOff:Boolean = new Boolean() with get,set
[<AllowNullLiteral>]
type AssetConfig() =
member val Code:String = null with get,set
member val Name:String = null with get,set
member val Rebalance:Boolean = new Boolean() with get,set
member val CanEditInvestmentChoice:Boolean = new Boolean() with get,set
member val WillSpend:Boolean = new Boolean() with get,set
member val Investments:ResizeArray<String> = new ResizeArray<String>() with get,set
member val Contributions:ResizeArray<ContributionSpec> = new ResizeArray<ContributionSpec>() with get,set
member val IsOneOff:Boolean = new Boolean() with get,set
[<AllowNullLiteral>]
type ContributionRateSpec() =
member val FromAge:Nullable<Int32> = new Nullable<Int32>() with get,set
member val ToAge:Nullable<Int32> = new Nullable<Int32>() with get,set
member val FromService:Nullable<Int32> = new Nullable<Int32>() with get,set
member val ToService:Nullable<Int32> = new Nullable<Int32>() with get,set
member val SourceRate:Nullable<Double> = new Nullable<Double>() with get,set
member val DateFrom:Nullable<DateTime> = new Nullable<DateTime>() with get,set
member val DateTo:Nullable<DateTime> = new Nullable<DateTime>() with get,set
member val UpperLimit:Nullable<Double> = new Nullable<Double>() with get,set
member val Rate:Double = new Double() with get,set
member val CoreRate:Double = new Double() with get,set
member val LookupKey:String = null with get,set
[<AllowNullLiteral>]
type ContributionTableSpec() =
member val Code:String = null with get,set
member val Type:ContributionType = new ContributionType() with get,set
member val Rates:Dictionary<String, Double> = new Dictionary<String, Double>() with get,set
member val RateSpecs:ResizeArray<ContributionRateSpec> = new ResizeArray<ContributionRateSpec>() with get,set
member val KeyTemplate:String = null with get,set
[<AllowNullLiteral>]
type InvestmentProductAllocationsSpec() =
member val FromAge:Int32 = new Int32() with get,set
member val Term:Nullable<Int32> = new Nullable<Int32>() with get,set
member val Allocs:Dictionary<String, Double> = new Dictionary<String, Double>() with get,set
member val TotalAlloc:Double = new Double() with get,set
[<AllowNullLiteral>]
type InvestmentProduct() =
member val Code:String = null with get,set
member val Name:String = null with get,set
member val Group:String = null with get,set
member val IsAssetClassFund:Boolean = new Boolean() with get,set
member val Allocs:ResizeArray<InvestmentProductAllocationsSpec> = new ResizeArray<InvestmentProductAllocationsSpec>() with get,set
member val Order:Int32 = new Int32() with get,set
member val AllocationsDictionary:Dictionary<Int32, Dictionary<String,Double>> = new Dictionary<Int32, Dictionary<String,Double>>() with get,set
[<AllowNullLiteral>]
type ReturnRates() =
member val EarningRates:ResizeArray<Double> = new ResizeArray<Double>() with get,set
member val TaxRates:ResizeArray<Double> = new ResizeArray<Double>() with get,set
[<AllowNullLiteral>]
type ClientCountryConfig() =
inherit DatedEntity()
member val ClientCode:String = null with get,set
member val ClientName:String = null with get,set
member val CountryCode:String = null with get,set
member val Source:DataSourceResult = null with get,set
member val AgeRMin:Int32 = new Int32() with get,set
member val AgeRMax:Int32 = new Int32() with get,set
member val PrimarySalary:String = null with get,set
member val AnnuityConfig:AnnuityConfig = null with get,set
member val Assets:ResizeArray<AssetConfig> = new ResizeArray<AssetConfig>() with get,set
member val ContTables:ResizeArray<ContributionTableSpec> = new ResizeArray<ContributionTableSpec>() with get,set
member val Investments:ResizeArray<InvestmentProduct> = new ResizeArray<InvestmentProduct>() with get,set
member val Content:Dictionary<String, List<Content>> = new Dictionary<String, List<Content>>() with get,set
member val Environments:Dictionary<String, String> = new Dictionary<String, String>() with get,set
member val CustomNumericConstraints:Dictionary<String, Constraint<Decimal>> = new Dictionary<String, Constraint<Decimal>>() with get,set
member val AssetReturnRates:Dictionary<String, ReturnRates> = new Dictionary<String, ReturnRates>() with get,set
member val InvestmentPropertyRates:Double = new Double() with get,set
member val GetAssetClassFundDictionary:Dictionary<String, Boolean> = new Dictionary<String, Boolean>() with get,set
member val GetTermBasedFundDictionary:Dictionary<String, Boolean> = new Dictionary<String, Boolean>() with get,set
member val GetAllocationsDictionary:Dictionary<String, Dictionary<Int32,Dictionary<String,Double>>> = new Dictionary<String, Dictionary<Int32,Dictionary<String,Double>>>() with get,set
member val AssetNameMap:Dictionary<String, String> = new Dictionary<String, String>() with get,set
member val AssetContNameMap:Dictionary<String, Dictionary<String,String>> = new Dictionary<String, Dictionary<String,String>>() with get,set
member val CacheKey:String = null with get,set
[<AllowNullLiteral>]
type ClientCountryConfigValidateReq() =
member val Config:ClientCountryConfig = null with get,set
F# ClientCountryConfigValidateReq DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /clientcountryconfig/validate HTTP/1.1
Host: hcbtas-q-albamfs-api.azurewebsites.net
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
config:
{
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
}
}
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 }