| Requires any of the roles: | Riskstore.Write, Riskstore.Admin |
| POST | /api/riskstore/rollup/save-rollup-results | Mark an existing analysis as final (save results), it will re-run it if expired | Mark an existing analysis as final (save results), it will re-run it if expired |
|---|
import Foundation
import ServiceStack
public class SaveAnalysisResultsRequest : IPost, Codable
{
/**
* The analysis id to mark as final
*/
// @ApiMember(DataType="integer", Description="The analysis id to mark as final", Format="int64", IsRequired=true)
public var analysisId:Int
required public init(){}
}
public class RollupResponse : Codable
{
public var analysis:Analysis
public var portfolioMetrics:[AnalysisPortfolioMetric]
public var results:[AnalysisResult]
public var responseStatus:ResponseStatus
public var unresolvedDealIds:[String]
public var unlinkedDealIds:[ValueTuple<String,String>]
public var message:String
required public init(){}
}
// @DataContract
public class Analysis : IObjectWithId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var name:String
// @DataMember(Order=3)
public var modelAsOfDate:Date?
// @DataMember(Order=4)
public var perspectiveId:Int
// @DataMember(Order=5)
public var configurations:[AnalysisConfiguration]
// @DataMember(Order=6)
public var deals:[AnalysisDeal]
// @DataMember(Order=7)
public var eventIdFilters:[AnalysisEventIdFilter]
// @DataMember(Order=8)
public var createdBy:String
// @DataMember(Order=9)
public var createdDateUtc:Date
// @DataMember(Order=10)
public var completedDateUtc:Date?
// @DataMember(Order=11)
public var legacyAnalysisId:Int?
// @DataMember(Order=12)
public var resultPersistenceTracking:[MessageTracking]
// @DataMember(Order=13)
public var processingStatus:ProcessingStatus
// @DataMember(Order=14)
public var saveResults:Bool
// @DataMember(Order=15)
public var eventSourceSystem:String
// @DataMember(Order=16)
public var updatedDateUtc:Date
// @DataMember(Order=17)
public var isExpired:Bool
// @DataMember(Order=18)
public var rowIdentifier:String
// @DataMember(Order=19)
public var errorMessage:String
/**
* Take the minimum simulation count when we have different simulations between event sets
*/
// @DataMember(Order=20)
// @ApiMember(DataType="boolean", Description="Take the minimum simulation count when we have different simulations between event sets")
public var ignoreSimulationCountMismatch:Bool
// @DataMember(Order=21)
// @Ignore()
public var finalStatus:ProcessingStatus
required public init(){}
}
// @DataContract
public class AnalysisConfiguration : IObjectWithId, IHasAnalysisId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var analysisId:Int
// @DataMember(Order=3)
public var windowStartDate:Date?
// @DataMember(Order=4)
public var windowEndDate:Date?
// @DataMember(Order=5)
public var standardEnabled:Bool
// @DataMember(Order=6)
public var runOffEnabled:Bool
// @DataMember(Order=7)
public var aggregateEnabled:Bool
// @DataMember(Order=8)
public var occurrenceEnabled:Bool
// @DataMember(Order=9)
public var nettEnabled:Bool
// @DataMember(Order=10)
public var grossEnabled:Bool
// @DataMember(Order=11)
public var tailIntensityPercentageStart:Double?
// @DataMember(Order=12)
public var tailIntensityPercentageEnd:Double?
// @DataMember(Order=13)
public var metaRiskId:Int
// @DataMember(Order=14)
public var outputLevel:ResultOutputLevel
// @DataMember(Order=15)
public var processingStatus:ProcessingStatus
// @DataMember(Order=16)
public var eventLossFloorStartRange:Double?
// @DataMember(Order=17)
public var eventLossFloorEndRange:Double?
// @DataMember(Order=18)
public var analysisPortfolioEventSetConfigurations:[AnalysisPortfolioEventSetConfiguration]
// @DataMember(Order=19)
public var rowIdentifier:String
required public init(){}
}
public enum ResultOutputLevel : String, Codable
{
case NotSet
case PortfolioMetrics
case Curve
case YLT
case TailIntensity
case DealYlt
case DealElt
case DealEltWithIndustryLoss
case PortfolioElt
case PortfolioEltWithIndustryLoss
case EventSetGeneration
case PortfolioRaps
case DealRaps
case PortfolioSepyIndustryLoss
case DealSepyIndustryLoss
}
public enum ProcessingStatus : Int, Codable
{
case New = 0
case Processing = 1
case Failed = 10
case Successful = 20
}
public class AnalysisPortfolioEventSetConfiguration : IObjectWithId, IHasAnalysisId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var analysisId:Int
// @DataMember(Order=3)
public var analysisConfigurationId:Int
// @DataMember(Order=4)
public var portfolioName:String
// @DataMember(Order=5)
public var modelId:String
// @DataMember(Order=6)
public var rowIdentifier:String
required public init(){}
}
// @DataContract
public class AnalysisDeal : IObjectWithId, IHasAnalysisId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var analysisId:Int
// @DataMember(Order=3)
public var sourceDealId:String
// @DataMember(Order=4)
public var dealRef:String
// @DataMember(Order=5)
public var sourceDealSystem:String
// @DataMember(Order=6)
public var eventSetId:Int
// @DataMember(Order=7)
public var rol:Double
// @DataMember(Order=8)
public var limit:Double
// @DataMember(Order=9)
public var inceptionDate:Date
// @DataMember(Order=10)
public var expiryDate:Date
// @DataMember(Order=11)
public var transactionType:TransactionType
// @DataMember(Order=12)
public var allocations:[AnalysisPortfolioAllocation]
// @DataMember(Order=13)
public var perspectiveIdOverride:Int?
// @DataMember(Order=14)
public var eventSetIdOverride:Int?
// @DataMember(Order=15)
public var modelAsOfDateOverride:Date?
// @DataMember(Order=16)
public var sourceModelSystemOverride:String
// @DataMember(Order=17)
public var sourceModelIdOverride:String
// @DataMember(Order=18)
public var sourceEventSetIdOverride:String
// @DataMember(Order=19)
public var eventSourceSystemOverride:String
// @DataMember(Order=20)
public var rowIdentifier:String
required public init(){}
}
public enum TransactionType : String, Codable
{
case NotSet
case S
case B
}
// @DataContract
public class AnalysisPortfolioAllocation : IObjectWithId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var analysisDealId:Int
// @DataMember(Order=3)
// @Validate(Validator="NotEmpty", Message="PortfolioName is mandatory")
public var portfolioName:String
// @DataMember(Order=4)
public var allocationPercentage:Double
// @DataMember(Order=5)
public var rowIdentifier:String
required public init(){}
}
// @DataContract
public class AnalysisEventIdFilter : IObjectWithId, IHasAnalysisId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var analysisId:Int
// @DataMember(Order=3)
public var eventSourceId:Int
// @DataMember(Order=4)
public var eventId:Int
// @DataMember(Order=5)
public var rowIdentifier:String
required public init(){}
}
// @DataContract
public class MessageTracking : Codable
{
// @DataMember(Order=1)
public var id:String
// @DataMember(Order=2)
public var analysisId:Int?
// @DataMember(Order=3)
public var processingStatus:ProcessingStatus
// @DataMember(Order=4)
public var messageType:MessageType
// @DataMember(Order=5)
public var createdDateUtc:Date
// @DataMember(Order=6)
public var updatedDateUtc:Date
required public init(){}
}
public enum MessageType : String, Codable
{
case NotSet
case Persistence
case Archival
}
public class AnalysisPortfolioMetric : IHasAnalysisResultId, Codable
{
public var analysisType:AnalysisType
public var simulationLossPerspective:SimulationLossPerspective
public var reinsurancePremiumLossType:ReinsurancePremiumLossType
public var metricDescription:String
public var portfolioName:String
public var metric:Double
public var metaRiskId:Int
public var simulation:Int?
public var analysisResultId:Int
required public init(){}
}
public enum AnalysisType : String, Codable
{
case NotSet
case Standard
case RunOff
}
public enum SimulationLossPerspective : String, Codable
{
case NotSet
case Agg
case Occ
}
public enum ReinsurancePremiumLossType : String, Codable
{
case NotSet
case Net
case Gross
}
// @DataContract
public class AnalysisResult : IObjectWithId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var analysisId:Int
// @DataMember(Order=3)
public var analysisConfigurationId:Int
// @DataMember(Order=4)
public var container:String
// @DataMember(Order=5)
public var blobName:String
// @DataMember(Order=6)
public var resultTableName:String
// @DataMember(Order=7)
public var analysisType:AnalysisType
// @DataMember(Order=8)
public var simulationLossPerspective:SimulationLossPerspective
// @DataMember(Order=9)
public var reinsurancePremiumLossType:ReinsurancePremiumLossType
// @DataMember(Order=10)
public var outputLevel:ResultOutputLevel
// @DataMember(Order=11)
public var metaRiskId:Int
// @DataMember(Order=12)
public var analysisPortfolioEventSetResults:[AnalysisPortfolioEventSetResult]
// @DataMember(Order=13)
public var rowIdentifier:String
required public init(){}
}
public class AnalysisPortfolioEventSetResult : IObjectWithId, IHasAnalysisId, Codable
{
// @DataMember(Order=1)
public var id:Int
// @DataMember(Order=2)
public var analysisId:Int
// @DataMember(Order=3)
public var analysisPortfolioEventSetConfigurationId:Int
// @DataMember(Order=4)
public var analysisResultId:Int
// @DataMember(Order=5)
public var portfolioName:String
// @DataMember(Order=6)
public var rowIdentifier:String
required public init(){}
}
Swift SaveAnalysisResultsRequest 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 /api/riskstore/rollup/save-rollup-results HTTP/1.1
Host: riskstoreng-dev.nephila.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
analysisId: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
analysis:
{
id: 0,
name: String,
modelAsOfDate: 0001-01-01,
perspectiveId: 0,
configurations:
[
{
id: 0,
analysisId: 0,
windowStartDate: 0001-01-01,
windowEndDate: 0001-01-01,
standardEnabled: False,
runOffEnabled: False,
aggregateEnabled: False,
occurrenceEnabled: False,
nettEnabled: False,
grossEnabled: False,
tailIntensityPercentageStart: 0,
tailIntensityPercentageEnd: 0,
metaRiskId: 0,
outputLevel: NotSet,
processingStatus: New,
eventLossFloorStartRange: 0,
eventLossFloorEndRange: 0,
analysisPortfolioEventSetConfigurations:
[
{
id: 0,
analysisId: 0,
analysisConfigurationId: 0,
portfolioName: String,
modelId: String,
rowIdentifier: 00000000000000000000000000000000
}
],
rowIdentifier: 00000000000000000000000000000000
}
],
deals:
[
{
id: 0,
analysisId: 0,
sourceDealId: String,
dealRef: String,
sourceDealSystem: String,
eventSetId: 0,
rol: 0,
limit: 0,
inceptionDate: 0001-01-01,
expiryDate: 0001-01-01,
transactionType: NotSet,
allocations:
[
{
id: 0,
analysisDealId: 0,
portfolioName: String,
allocationPercentage: 0,
rowIdentifier: 00000000000000000000000000000000
}
],
perspectiveIdOverride: 0,
eventSetIdOverride: 0,
modelAsOfDateOverride: 0001-01-01,
sourceModelSystemOverride: String,
sourceModelIdOverride: String,
sourceEventSetIdOverride: String,
eventSourceSystemOverride: String,
rowIdentifier: 00000000000000000000000000000000
}
],
eventIdFilters:
[
{
id: 0,
analysisId: 0,
eventSourceId: 0,
eventId: 0,
rowIdentifier: 00000000000000000000000000000000
}
],
createdBy: String,
createdDateUtc: 0001-01-01,
completedDateUtc: 0001-01-01,
legacyAnalysisId: 0,
resultPersistenceTracking:
[
{
id: 00000000000000000000000000000000,
analysisId: 0,
processingStatus: New,
messageType: NotSet,
createdDateUtc: 0001-01-01,
updatedDateUtc: 0001-01-01
}
],
processingStatus: New,
saveResults: False,
eventSourceSystem: String,
updatedDateUtc: 0001-01-01,
isExpired: False,
rowIdentifier: 00000000000000000000000000000000,
errorMessage: String,
ignoreSimulationCountMismatch: False,
finalStatus: New
},
portfolioMetrics:
[
{
analysisType: NotSet,
simulationLossPerspective: NotSet,
reinsurancePremiumLossType: NotSet,
metricDescription: String,
portfolioName: String,
metric: 0,
metaRiskId: 0,
simulation: 0,
analysisResultId: 0
}
],
results:
[
{
id: 0,
analysisId: 0,
analysisConfigurationId: 0,
container: String,
blobName: String,
resultTableName: String,
analysisType: NotSet,
simulationLossPerspective: NotSet,
reinsurancePremiumLossType: NotSet,
outputLevel: NotSet,
metaRiskId: 0,
analysisPortfolioEventSetResults:
[
{
id: 0,
analysisId: 0,
analysisPortfolioEventSetConfigurationId: 0,
analysisResultId: 0,
portfolioName: String,
rowIdentifier: 00000000000000000000000000000000
}
],
rowIdentifier: 00000000000000000000000000000000
}
],
responseStatus:
{
errorCode: String,
message: String,
stackTrace: String,
errors:
[
{
errorCode: String,
fieldName: String,
message: String,
meta:
{
String: String
}
}
],
meta:
{
String: String
}
},
unresolvedDealIds:
[
String
],
unlinkedDealIds:
[
"(, )"
],
message: String
}