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