Core Classes Diagram
This diagram shows the main classes and their relationships in the core simulation engine.
classDiagram %% Core Simulation Classes class Simulation { -config: Config -manufacturer: WidgetManufacturer -claim_generator: ClaimGenerator -insurance_program: InsuranceProgram +run() SimulationResults +step(year: int) dict +process_claims(claims: List[ClaimEvent]) +check_solvency() bool } class SimulationResults { +years: ndarray +assets: ndarray +equity: ndarray +roe: ndarray +revenue: ndarray +net_income: ndarray +claim_counts: ndarray +claim_amounts: ndarray +insolvency_year: Optional[int] +to_dataframe() DataFrame +calculate_time_weighted_roe() float +calculate_rolling_roe(window: int) ndarray } class MonteCarloEngine { -config: Config -n_simulations: int -parallel_executor: ParallelExecutor -trajectory_storage: TrajectoryStorage +run_simulations(n: int) List[SimulationResults] +run_parallel(n_workers: int) List[SimulationResults] +aggregate_results(results: List) dict +calculate_convergence() ConvergenceMetrics } %% Business Model Classes class WidgetManufacturer { -config: ManufacturerConfig -assets: float -equity: float -liabilities: float -claim_liabilities: List[ClaimLiability] +calculate_revenue() float +calculate_operating_income() float +process_insurance_claim(amount, deductible, limit) tuple +step(working_capital_pct, growth_rate) dict +apply_dividends(retention_ratio: float) +update_balance_sheet() +is_solvent() bool } class ClaimLiability { +total_amount: float +payment_schedule: List[float] +years_remaining: int +get_annual_payment() float +advance_year() } %% Insurance Classes class InsurancePolicy { +deductible: float +limit: float +premium: float +coverage_type: str +calculate_payout(loss: float) float +calculate_retained_loss(loss: float) float } class InsuranceProgram { -policies: List[InsurancePolicy] -total_premium: float -letter_of_credit_rate: float +add_policy(policy: InsurancePolicy) +calculate_total_premium() float +process_claim(amount: float) ClaimResult +get_coverage_tower() List[dict] +calculate_effective_retention() float } class ClaimResult { +total_loss: float +company_payment: float +insurance_payment: float +by_policy: List[PolicyPayout] } %% Claim Generation class ClaimGenerator { -frequency_dist: Distribution -severity_dist: Distribution -random_state: RandomState +generate_claims(year: int) List[ClaimEvent] +set_seed(seed: int) +calibrate_to_historical(data: LossData) } class ClaimEvent { +year: int +amount: float +cause: str +severity_level: str +timestamp: float } %% Configuration class Config { +simulation: SimulationConfig +manufacturer: ManufacturerConfig +insurance: InsuranceConfig +monte_carlo: MonteCarloConfig +validate() +to_dict() dict +from_dict(data: dict) Config } class ManufacturerConfig { +initial_assets: float +asset_turnover_ratio: float +base_operating_margin: float +tax_rate: float +retention_ratio: float +target_leverage: float } %% Relationships Simulation --> WidgetManufacturer : uses Simulation --> ClaimGenerator : uses Simulation --> InsuranceProgram : uses Simulation --> SimulationResults : produces MonteCarloEngine --> Simulation : runs multiple MonteCarloEngine --> SimulationResults : aggregates WidgetManufacturer --> ClaimLiability : manages WidgetManufacturer --> InsuranceProgram : interacts with InsuranceProgram --> InsurancePolicy : contains InsuranceProgram --> ClaimResult : produces ClaimGenerator --> ClaimEvent : generates Config --> ManufacturerConfig : contains Simulation --> Config : configured by
Class Interactions
sequenceDiagram participant MC as MonteCarloEngine participant S as Simulation participant M as Manufacturer participant CG as ClaimGenerator participant IP as InsuranceProgram participant SR as SimulationResults MC->>S: Initialize simulation S->>M: Create manufacturer S->>CG: Create claim generator S->>IP: Setup insurance program loop Each Year S->>CG: Generate claims CG-->>S: List[ClaimEvent] loop Each Claim S->>IP: Process claim IP->>M: Calculate payout M-->>IP: Company/insurance split IP-->>S: ClaimResult end S->>M: Step forward (growth, operations) M->>M: Update balance sheet M-->>S: Financial metrics S->>S: Check solvency alt Insolvent S-->>MC: Early termination end end S->>SR: Compile results SR-->>MC: SimulationResults MC->>MC: Aggregate all paths
Key Design Patterns
1. Strategy Pattern
Insurance strategies can be swapped dynamically
Different optimization algorithms can be plugged in
2. Builder Pattern
Configuration objects use builder pattern for complex initialization
SimulationResults built incrementally during simulation
3. Observer Pattern
Progress monitoring observes simulation progress
Convergence monitors observe Monte Carlo iterations
4. Factory Pattern
ClaimGenerator acts as factory for ClaimEvents
FigureFactory creates visualization objects
5. Facade Pattern
MonteCarloEngine provides simplified interface to complex parallel execution
InsuranceProgram facades complex multi-policy interactions