""" Options: Date: 2026-06-13 13:09:35 Version: 8.80 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://riskstoreng-dev.nephila.com/api #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: GetAnalysisRequest.* #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 AnalysisType(str, Enum): NOT_SET = 'NotSet' STANDARD = 'Standard' RUN_OFF = 'RunOff' class SimulationLossPerspective(str, Enum): NOT_SET = 'NotSet' AGG = 'Agg' OCC = 'Occ' class ReinsurancePremiumLossType(str, Enum): NOT_SET = 'NotSet' NET = 'Net' GROSS = 'Gross' class ResultOutputLevel(str, Enum): NOT_SET = 'NotSet' PORTFOLIO_METRICS = 'PortfolioMetrics' CURVE = 'Curve' YLT = 'YLT' TAIL_INTENSITY = 'TailIntensity' DEAL_YLT = 'DealYlt' DEAL_ELT = 'DealElt' DEAL_ELT_WITH_INDUSTRY_LOSS = 'DealEltWithIndustryLoss' PORTFOLIO_ELT = 'PortfolioElt' PORTFOLIO_ELT_WITH_INDUSTRY_LOSS = 'PortfolioEltWithIndustryLoss' EVENT_SET_GENERATION = 'EventSetGeneration' PORTFOLIO_RAPS = 'PortfolioRaps' DEAL_RAPS = 'DealRaps' PORTFOLIO_SEPY_INDUSTRY_LOSS = 'PortfolioSepyIndustryLoss' DEAL_SEPY_INDUSTRY_LOSS = 'DealSepyIndustryLoss' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisPortfolioEventSetResult(IObjectWithId, IHasAnalysisId): id: int = 0 analysis_id: int = 0 analysis_portfolio_event_set_configuration_id: int = 0 analysis_result_id: int = 0 portfolio_name: Optional[str] = None row_identifier: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisResult(IObjectWithId): id: int = 0 analysis_id: int = 0 analysis_configuration_id: int = 0 container: Optional[str] = None blob_name: Optional[str] = None result_table_name: Optional[str] = None analysis_type: Optional[AnalysisType] = None simulation_loss_perspective: Optional[SimulationLossPerspective] = None reinsurance_premium_loss_type: Optional[ReinsurancePremiumLossType] = None output_level: Optional[ResultOutputLevel] = None meta_risk_id: int = 0 analysis_portfolio_event_set_results: Optional[List[AnalysisPortfolioEventSetResult]] = None row_identifier: Optional[str] = None class ProcessingStatus(IntEnum): NEW = 0 PROCESSING = 1 FAILED = 10 SUCCESSFUL = 20 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisPortfolioEventSetConfiguration(IObjectWithId, IHasAnalysisId): id: int = 0 analysis_id: int = 0 analysis_configuration_id: int = 0 portfolio_name: Optional[str] = None model_id: Optional[str] = None row_identifier: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisConfiguration(IObjectWithId, IHasAnalysisId): id: int = 0 analysis_id: int = 0 window_start_date: Optional[datetime.datetime] = None window_end_date: Optional[datetime.datetime] = None standard_enabled: bool = False run_off_enabled: bool = False aggregate_enabled: bool = False occurrence_enabled: bool = False nett_enabled: bool = False gross_enabled: bool = False tail_intensity_percentage_start: Optional[Decimal] = None tail_intensity_percentage_end: Optional[Decimal] = None meta_risk_id: int = 0 output_level: Optional[ResultOutputLevel] = None processing_status: Optional[ProcessingStatus] = None event_loss_floor_start_range: Optional[Decimal] = None event_loss_floor_end_range: Optional[Decimal] = None analysis_portfolio_event_set_configurations: Optional[List[AnalysisPortfolioEventSetConfiguration]] = None row_identifier: Optional[str] = None class TransactionType(str, Enum): NOT_SET = 'NotSet' S = 'S' B = 'B' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisPortfolioAllocation(IObjectWithId): id: int = 0 analysis_deal_id: int = 0 # @Validate(Validator="NotEmpty", Message="PortfolioName is mandatory") portfolio_name: Optional[str] = None allocation_percentage: float = 0.0 row_identifier: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisDeal(IObjectWithId, IHasAnalysisId): id: int = 0 analysis_id: int = 0 source_deal_id: Optional[str] = None deal_ref: Optional[str] = None source_deal_system: Optional[str] = None event_set_id: int = 0 rol: float = 0.0 limit: float = 0.0 inception_date: datetime.datetime = datetime.datetime(1, 1, 1) expiry_date: datetime.datetime = datetime.datetime(1, 1, 1) transaction_type: Optional[TransactionType] = None allocations: Optional[List[AnalysisPortfolioAllocation]] = None perspective_id_override: Optional[int] = None event_set_id_override: Optional[int] = None model_as_of_date_override: Optional[datetime.datetime] = None source_model_system_override: Optional[str] = None source_model_id_override: Optional[str] = None source_event_set_id_override: Optional[str] = None event_source_system_override: Optional[str] = None row_identifier: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisEventIdFilter(IObjectWithId, IHasAnalysisId): id: int = 0 analysis_id: int = 0 event_source_id: int = 0 event_id: int = 0 row_identifier: Optional[str] = None class MessageType(str, Enum): NOT_SET = 'NotSet' PERSISTENCE = 'Persistence' ARCHIVAL = 'Archival' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class MessageTracking: id: Optional[str] = None analysis_id: Optional[int] = None processing_status: Optional[ProcessingStatus] = None message_type: Optional[MessageType] = None created_date_utc: datetime.datetime = datetime.datetime(1, 1, 1) updated_date_utc: datetime.datetime = datetime.datetime(1, 1, 1) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Analysis(IObjectWithId): id: int = 0 name: Optional[str] = None model_as_of_date: Optional[datetime.datetime] = None perspective_id: int = 0 configurations: Optional[List[AnalysisConfiguration]] = None deals: Optional[List[AnalysisDeal]] = None event_id_filters: Optional[List[AnalysisEventIdFilter]] = None created_by: Optional[str] = None created_date_utc: datetime.datetime = datetime.datetime(1, 1, 1) completed_date_utc: Optional[datetime.datetime] = None legacy_analysis_id: Optional[int] = None result_persistence_tracking: Optional[List[MessageTracking]] = None processing_status: Optional[ProcessingStatus] = None save_results: bool = False event_source_system: Optional[str] = None updated_date_utc: datetime.datetime = datetime.datetime(1, 1, 1) is_expired: bool = False row_identifier: Optional[str] = None error_message: Optional[str] = None # @ApiMember(DataType="boolean", Description="Take the minimum simulation count when we have different simulations between event sets") ignore_simulation_count_mismatch: bool = False """ Take the minimum simulation count when we have different simulations between event sets """ # @Ignore() final_status: Optional[ProcessingStatus] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AnalysisPortfolioMetric(IHasAnalysisResultId): analysis_type: Optional[AnalysisType] = None simulation_loss_perspective: Optional[SimulationLossPerspective] = None reinsurance_premium_loss_type: Optional[ReinsurancePremiumLossType] = None metric_description: Optional[str] = None portfolio_name: Optional[str] = None metric: float = 0.0 meta_risk_id: int = 0 simulation: Optional[int] = None analysis_result_id: int = 0 class IObjectWithId: id: int = 0 row_identifier: Optional[str] = None class IHasAnalysisResultId: analysis_result_id: int = 0 class IHasAnalysisId: analysis_id: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class RollupResponse: analysis: Optional[Analysis] = None portfolio_metrics: Optional[List[AnalysisPortfolioMetric]] = None results: Optional[List[AnalysisResult]] = None response_status: Optional[ResponseStatus] = None unresolved_deal_ids: Optional[List[str]] = None unlinked_deal_ids: Optional[List[ValueTuple[str, str]]] = None message: Optional[str] = None # @Route("/riskstore/analysis/results", "GET") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetAnalysisRequest(IReturn[RollupResponse], IGet): # @ApiMember(DataType="integer", Description="The analysis id", Format="int64") id: Optional[int] = None """ The analysis id """ # @ApiMember(DataType="integer", Description="The legacy analysis id", Format="int64") legacy_id: Optional[int] = None """ The legacy analysis id """ # @ApiMember(DataType="boolean", Description="True to not load all deal allocations, analysis runs etc...") only_core_data: Optional[bool] = None """ True to not load all deal allocations, analysis runs etc... """