use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostManagementConfig {
pub enable_cost_optimization: bool,
pub optimization_strategies: Vec<CostOptimizationStrategy>,
pub pricing_models: HashMap<String, PricingModel>,
pub cost_prediction: CostPredictionConfig,
pub budget_management: BudgetConfig,
pub cost_alerting: CostAlertingConfig,
pub reporting: FinancialReportingConfig,
pub allocation: CostAllocationConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CostOptimizationStrategy {
SpotInstanceOptimization,
ReservedInstanceOptimization,
RightSizing,
SchedulingOptimization,
LoadBalancingOptimization,
ResourcePooling,
AutoShutdown,
PriceComparison,
ContractNegotiation,
CustomStrategy(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PricingModel {
pub model_type: String,
pub base_rate: f64,
pub scaling_factors: HashMap<String, f64>,
pub discount_tiers: Vec<f64>,
pub structure: PricingStructure,
pub contract_terms: ContractTerms,
pub dynamic_pricing: DynamicPricingConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PricingStructure {
pub billing_model: BillingModel,
pub rate_components: Vec<RateComponent>,
pub volume_discounts: Vec<VolumeDiscount>,
pub time_based: TimeBasedPricingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum BillingModel {
PayPerUse,
Subscription,
Reserved,
Spot,
Prepaid,
Hybrid,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateComponent {
pub name: String,
pub rate: f64,
pub unit: String,
pub minimum_charge: Option<f64>,
pub maximum_charge: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VolumeDiscount {
pub min_volume: f64,
pub discount_percent: f64,
pub discount_type: DiscountType,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DiscountType {
Percentage,
FixedAmount,
TieredDiscount,
VolumeDiscount,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct TimeBasedPricingConfig {
pub peak_hours: PeakHoursPricing,
pub off_peak_hours: OffPeakHoursPricing,
pub weekend_pricing: WeekendPricing,
pub holiday_pricing: HolidayPricing,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PeakHoursPricing {
pub start_time: String,
pub end_time: String,
pub rate_multiplier: f64,
pub days_of_week: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OffPeakHoursPricing {
pub rate_multiplier: f64,
pub min_discount: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WeekendPricing {
pub rate_multiplier: f64,
pub weekend_days: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HolidayPricing {
pub rate_multiplier: f64,
pub holiday_calendar: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContractTerms {
pub duration: Duration,
pub commitment_level: CommitmentLevel,
pub early_termination_fees: EarlyTerminationFees,
pub sla: ServiceLevelAgreements,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CommitmentLevel {
NoCommitment,
MonthlyCommitment,
YearlyCommitment,
MultiYearCommitment,
CustomCommitment(Duration),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EarlyTerminationFees {
pub fee_structure: FeeStructure,
pub calculation_method: FeeCalculationMethod,
pub waiver_conditions: Vec<WaiverCondition>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum FeeStructure {
FixedFee(f64),
PercentageOfRemaining(f64),
ProRatedFee,
NoFee,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FeeCalculationMethod {
RemainingMonths,
UnusedCommitment,
TotalContractValue,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WaiverCondition {
ServiceFailure,
ForCause,
MutualAgreement,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServiceLevelAgreements {
pub uptime: f64,
pub performance: HashMap<String, f64>,
pub support: SupportSLA,
pub penalties: SLAPenalties,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SupportSLA {
pub response_times: HashMap<String, Duration>,
pub resolution_times: HashMap<String, Duration>,
pub escalation: EscalationProcedures,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct EscalationProcedures {
pub levels: Vec<EscalationLevel>,
pub automatic: bool,
pub triggers: Vec<EscalationTrigger>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EscalationLevel {
pub level: u8,
pub contacts: Vec<String>,
pub escalation_time: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum EscalationTrigger {
TimeElapsed,
NoResponse,
CustomerRequest,
SeverityIncrease,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct SLAPenalties {
pub structure: PenaltyStructure,
pub credits: CreditStructure,
pub max_penalties: MaxPenalties,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct PenaltyStructure {
pub uptime_penalties: Vec<UptimePenalty>,
pub performance_penalties: Vec<PerformancePenalty>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UptimePenalty {
pub min_uptime: f64,
pub penalty_percent: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformancePenalty {
pub metric: String,
pub threshold: f64,
pub penalty_percent: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CreditStructure {
pub service_credits: Vec<ServiceCredit>,
pub application: CreditApplication,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServiceCredit {
pub condition: String,
pub amount: f64,
pub credit_type: CreditType,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CreditType {
Percentage,
FixedAmount,
FreeUsage,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CreditApplication {
pub method: CreditApplicationMethod,
pub processing_time: Duration,
pub verification_required: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CreditApplicationMethod {
Automatic,
Manual,
OnRequest,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaxPenalties {
pub monthly_max: Option<f64>,
pub annual_max: Option<f64>,
pub per_incident_max: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DynamicPricingConfig {
pub enabled: bool,
pub algorithms: Vec<PricingAlgorithm>,
pub update_frequency: Duration,
pub price_bounds: PriceBounds,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum PricingAlgorithm {
SupplyDemand,
Competition,
CostPlus,
ValueBased,
MarketBased,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PriceBounds {
pub min_price: f64,
pub max_price: f64,
pub change_limits: PriceChangeLimits,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PriceChangeLimits {
pub max_increase_percent: f64,
pub max_decrease_percent: f64,
pub change_frequency: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostPredictionConfig {
pub enable_prediction: bool,
pub prediction_algorithms: Vec<String>,
pub prediction_horizon: u64,
pub models: Vec<CostPredictionModel>,
pub forecasting: ForecastingConfig,
pub accuracy_monitoring: AccuracyMonitoringConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CostPredictionModel {
LinearRegression,
ARIMA,
LSTM,
RandomForest,
EnsembleModel,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ForecastingConfig {
pub horizons: Vec<ForecastHorizon>,
pub confidence_intervals: Vec<f64>,
pub scenario_analysis: ScenarioAnalysisConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ForecastHorizon {
pub name: String,
pub duration: Duration,
pub update_frequency: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct ScenarioAnalysisConfig {
pub enabled: bool,
pub scenarios: Vec<CostScenario>,
pub probability_weights: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostScenario {
pub name: String,
pub description: String,
pub parameters: HashMap<String, f64>,
pub expected_impact: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccuracyMonitoringConfig {
pub enabled: bool,
pub metrics: Vec<AccuracyMetric>,
pub threshold_alerts: Vec<AccuracyAlert>,
pub retraining: ModelRetrainingConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AccuracyMetric {
MAPE, RMSE, MAE, R2, Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccuracyAlert {
pub metric: AccuracyMetric,
pub threshold: f64,
pub action: AlertAction,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AlertAction {
Notify,
RetainModel,
SwitchModel,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelRetrainingConfig {
pub auto_retrain: bool,
pub triggers: Vec<RetrainingTrigger>,
pub frequency: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RetrainingTrigger {
AccuracyDrop,
DataDrift,
ScheduledRetrain,
ManualTrigger,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BudgetConfig {
pub daily_budget: Option<f64>,
pub monthly_budget: Option<f64>,
pub auto_scaling_budget: bool,
pub budget_alerts: Vec<String>,
pub allocation: BudgetAllocation,
pub tracking: BudgetTrackingConfig,
pub enforcement: BudgetEnforcementConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BudgetAllocation {
pub departments: HashMap<String, f64>,
pub projects: HashMap<String, f64>,
pub providers: HashMap<String, f64>,
pub reserve_percentage: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BudgetTrackingConfig {
pub frequency: Duration,
pub variance_analysis: VarianceAnalysisConfig,
pub trend_analysis: TrendAnalysisConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VarianceAnalysisConfig {
pub enabled: bool,
pub thresholds: VarianceThresholds,
pub root_cause_analysis: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VarianceThresholds {
pub warning_threshold: f64,
pub critical_threshold: f64,
pub is_percentage: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrendAnalysisConfig {
pub enabled: bool,
pub analysis_window: Duration,
pub detection_methods: Vec<TrendDetectionMethod>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum TrendDetectionMethod {
MovingAverage,
LinearRegression,
ExponentialSmoothing,
SeasonalDecomposition,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BudgetEnforcementConfig {
pub policy: EnforcementPolicy,
pub actions: Vec<EnforcementAction>,
pub override_permissions: OverridePermissions,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum EnforcementPolicy {
SoftLimit,
HardLimit,
GracePeriod,
Escalation,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum EnforcementAction {
Alert,
Throttle,
Block,
Approve,
RequestApproval,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct OverridePermissions {
pub authorized_users: Vec<String>,
pub approval_workflow: ApprovalWorkflow,
pub override_limits: OverrideLimits,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApprovalWorkflow {
pub required_approvers: usize,
pub levels: Vec<ApprovalLevel>,
pub timeout: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApprovalLevel {
pub name: String,
pub approvers: Vec<String>,
pub budget_limits: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OverrideLimits {
pub max_override_percent: f64,
pub frequency_limits: FrequencyLimits,
pub justification_required: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FrequencyLimits {
pub per_day: usize,
pub per_week: usize,
pub per_month: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostAlertingConfig {
pub enable_alerts: bool,
pub alert_thresholds: Vec<f64>,
pub notification_channels: Vec<String>,
pub rules: Vec<CostAlertRule>,
pub escalation_policies: Vec<AlertEscalationPolicy>,
pub suppression_rules: Vec<AlertSuppressionRule>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostAlertRule {
pub name: String,
pub condition: AlertCondition,
pub severity: AlertSeverity,
pub actions: Vec<AlertAction>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertCondition {
pub metric: CostMetric,
pub operator: ComparisonOperator,
pub threshold: f64,
pub time_window: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum CostMetric {
TotalCost,
HourlyCost,
DailyCost,
MonthlyCost,
CostPerJob,
CostPerQubit,
BudgetUtilization,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComparisonOperator {
GreaterThan,
LessThan,
Equal,
GreaterThanOrEqual,
LessThanOrEqual,
NotEqual,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AlertSeverity {
Low,
Medium,
High,
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertEscalationPolicy {
pub name: String,
pub levels: Vec<EscalationStep>,
pub timeouts: HashMap<String, Duration>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EscalationStep {
pub name: String,
pub contacts: Vec<String>,
pub actions: Vec<EscalationAction>,
pub delay: Duration,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum EscalationAction {
Notify,
AutoRemediate,
ManualIntervention,
EmergencyShutdown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertSuppressionRule {
pub name: String,
pub conditions: Vec<SuppressionCondition>,
pub duration: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SuppressionCondition {
pub field: String,
pub operator: ComparisonOperator,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FinancialReportingConfig {
pub enabled: bool,
pub report_types: Vec<ReportType>,
pub frequency: ReportFrequency,
pub delivery: ReportDeliveryConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportType {
CostSummary,
DetailedUsage,
BudgetVariance,
TrendAnalysis,
CostOptimization,
CustomReport(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportFrequency {
Daily,
Weekly,
Monthly,
Quarterly,
OnDemand,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReportDeliveryConfig {
pub methods: Vec<DeliveryMethod>,
pub recipients: Vec<String>,
pub formats: Vec<ReportFormat>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum DeliveryMethod {
Email,
Dashboard,
API,
FileSystem,
CloudStorage,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReportFormat {
PDF,
CSV,
JSON,
Excel,
HTML,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CostAllocationConfig {
pub methods: Vec<AllocationMethod>,
pub rules: Vec<AllocationRule>,
pub chargeback: ChargebackConfig,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AllocationMethod {
DirectAllocation,
ProportionalAllocation,
ActivityBasedAllocation,
UsageBasedAllocation,
CustomAllocation(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AllocationRule {
pub name: String,
pub source: AllocationSource,
pub target: AllocationTarget,
pub method: AllocationMethod,
pub percentage: Option<f64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AllocationSource {
SharedResources,
Infrastructure,
Support,
Overhead,
Custom(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AllocationTarget {
Department,
Project,
CostCenter,
User,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChargebackConfig {
pub enabled: bool,
pub model: ChargebackModel,
pub billing_cycle: BillingCycle,
pub rate_cards: Vec<RateCard>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ChargebackModel {
FullChargeback,
Showback,
HybridModel,
CustomModel(String),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum BillingCycle {
Monthly,
Quarterly,
Annual,
Custom(Duration),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateCard {
pub service: String,
pub rate: f64,
pub unit: String,
pub effective_date: String,
pub expiration_date: Option<String>,
}
impl Default for CostManagementConfig {
fn default() -> Self {
Self {
enable_cost_optimization: true,
optimization_strategies: vec![
CostOptimizationStrategy::RightSizing,
CostOptimizationStrategy::SchedulingOptimization,
],
pricing_models: HashMap::new(),
cost_prediction: CostPredictionConfig::default(),
budget_management: BudgetConfig::default(),
cost_alerting: CostAlertingConfig::default(),
reporting: FinancialReportingConfig::default(),
allocation: CostAllocationConfig::default(),
}
}
}
impl Default for PricingModel {
fn default() -> Self {
Self {
model_type: "pay_per_use".to_string(),
base_rate: 0.1,
scaling_factors: HashMap::new(),
discount_tiers: vec![],
structure: PricingStructure::default(),
contract_terms: ContractTerms::default(),
dynamic_pricing: DynamicPricingConfig::default(),
}
}
}
impl Default for PricingStructure {
fn default() -> Self {
Self {
billing_model: BillingModel::PayPerUse,
rate_components: vec![],
volume_discounts: vec![],
time_based: TimeBasedPricingConfig::default(),
}
}
}
impl Default for PeakHoursPricing {
fn default() -> Self {
Self {
start_time: "09:00".to_string(),
end_time: "17:00".to_string(),
rate_multiplier: 1.5,
days_of_week: vec![
"Mon".to_string(),
"Tue".to_string(),
"Wed".to_string(),
"Thu".to_string(),
"Fri".to_string(),
],
}
}
}
impl Default for OffPeakHoursPricing {
fn default() -> Self {
Self {
rate_multiplier: 0.8,
min_discount: 0.1,
}
}
}
impl Default for WeekendPricing {
fn default() -> Self {
Self {
rate_multiplier: 0.7,
weekend_days: vec!["Sat".to_string(), "Sun".to_string()],
}
}
}
impl Default for HolidayPricing {
fn default() -> Self {
Self {
rate_multiplier: 0.5,
holiday_calendar: vec![],
}
}
}
impl Default for ContractTerms {
fn default() -> Self {
Self {
duration: Duration::from_secs(86400 * 365), commitment_level: CommitmentLevel::NoCommitment,
early_termination_fees: EarlyTerminationFees::default(),
sla: ServiceLevelAgreements::default(),
}
}
}
impl Default for EarlyTerminationFees {
fn default() -> Self {
Self {
fee_structure: FeeStructure::NoFee,
calculation_method: FeeCalculationMethod::RemainingMonths,
waiver_conditions: vec![],
}
}
}
impl Default for ServiceLevelAgreements {
fn default() -> Self {
Self {
uptime: 0.99,
performance: HashMap::new(),
support: SupportSLA::default(),
penalties: SLAPenalties::default(),
}
}
}
impl Default for CreditApplication {
fn default() -> Self {
Self {
method: CreditApplicationMethod::Manual,
processing_time: Duration::from_secs(86400 * 7), verification_required: true,
}
}
}
impl Default for MaxPenalties {
fn default() -> Self {
Self {
monthly_max: Some(0.1), annual_max: Some(0.05), per_incident_max: None,
}
}
}
impl Default for DynamicPricingConfig {
fn default() -> Self {
Self {
enabled: false,
algorithms: vec![],
update_frequency: Duration::from_secs(3600), price_bounds: PriceBounds::default(),
}
}
}
impl Default for PriceBounds {
fn default() -> Self {
Self {
min_price: 0.01,
max_price: 10.0,
change_limits: PriceChangeLimits::default(),
}
}
}
impl Default for PriceChangeLimits {
fn default() -> Self {
Self {
max_increase_percent: 0.1, max_decrease_percent: 0.1, change_frequency: Duration::from_secs(3600), }
}
}
impl Default for CostPredictionConfig {
fn default() -> Self {
Self {
enable_prediction: true,
prediction_algorithms: vec!["linear_regression".to_string()],
prediction_horizon: 86400 * 30, models: vec![CostPredictionModel::LinearRegression],
forecasting: ForecastingConfig::default(),
accuracy_monitoring: AccuracyMonitoringConfig::default(),
}
}
}
impl Default for ForecastingConfig {
fn default() -> Self {
Self {
horizons: vec![],
confidence_intervals: vec![0.95],
scenario_analysis: ScenarioAnalysisConfig::default(),
}
}
}
impl Default for AccuracyMonitoringConfig {
fn default() -> Self {
Self {
enabled: true,
metrics: vec![AccuracyMetric::MAPE],
threshold_alerts: vec![],
retraining: ModelRetrainingConfig::default(),
}
}
}
impl Default for ModelRetrainingConfig {
fn default() -> Self {
Self {
auto_retrain: true,
triggers: vec![RetrainingTrigger::AccuracyDrop],
frequency: Duration::from_secs(86400 * 7), }
}
}
impl Default for BudgetConfig {
fn default() -> Self {
Self {
daily_budget: None,
monthly_budget: Some(1000.0),
auto_scaling_budget: false,
budget_alerts: vec![],
allocation: BudgetAllocation::default(),
tracking: BudgetTrackingConfig::default(),
enforcement: BudgetEnforcementConfig::default(),
}
}
}
impl Default for BudgetAllocation {
fn default() -> Self {
Self {
departments: HashMap::new(),
projects: HashMap::new(),
providers: HashMap::new(),
reserve_percentage: 0.1, }
}
}
impl Default for BudgetTrackingConfig {
fn default() -> Self {
Self {
frequency: Duration::from_secs(3600), variance_analysis: VarianceAnalysisConfig::default(),
trend_analysis: TrendAnalysisConfig::default(),
}
}
}
impl Default for VarianceAnalysisConfig {
fn default() -> Self {
Self {
enabled: true,
thresholds: VarianceThresholds::default(),
root_cause_analysis: false,
}
}
}
impl Default for VarianceThresholds {
fn default() -> Self {
Self {
warning_threshold: 0.1, critical_threshold: 0.2, is_percentage: true,
}
}
}
impl Default for TrendAnalysisConfig {
fn default() -> Self {
Self {
enabled: true,
analysis_window: Duration::from_secs(86400 * 30), detection_methods: vec![TrendDetectionMethod::MovingAverage],
}
}
}
impl Default for BudgetEnforcementConfig {
fn default() -> Self {
Self {
policy: EnforcementPolicy::SoftLimit,
actions: vec![EnforcementAction::Alert],
override_permissions: OverridePermissions::default(),
}
}
}
impl Default for ApprovalWorkflow {
fn default() -> Self {
Self {
required_approvers: 1,
levels: vec![],
timeout: Duration::from_secs(86400), }
}
}
impl Default for OverrideLimits {
fn default() -> Self {
Self {
max_override_percent: 0.2, frequency_limits: FrequencyLimits::default(),
justification_required: true,
}
}
}
impl Default for FrequencyLimits {
fn default() -> Self {
Self {
per_day: 3,
per_week: 10,
per_month: 20,
}
}
}
impl Default for CostAlertingConfig {
fn default() -> Self {
Self {
enable_alerts: true,
alert_thresholds: vec![0.8, 0.9, 1.0], notification_channels: vec!["email".to_string()],
rules: vec![],
escalation_policies: vec![],
suppression_rules: vec![],
}
}
}
impl Default for FinancialReportingConfig {
fn default() -> Self {
Self {
enabled: true,
report_types: vec![ReportType::CostSummary, ReportType::BudgetVariance],
frequency: ReportFrequency::Monthly,
delivery: ReportDeliveryConfig::default(),
}
}
}
impl Default for ReportDeliveryConfig {
fn default() -> Self {
Self {
methods: vec![DeliveryMethod::Email],
recipients: vec![],
formats: vec![ReportFormat::PDF],
}
}
}
impl Default for CostAllocationConfig {
fn default() -> Self {
Self {
methods: vec![AllocationMethod::UsageBasedAllocation],
rules: vec![],
chargeback: ChargebackConfig::default(),
}
}
}
impl Default for ChargebackConfig {
fn default() -> Self {
Self {
enabled: false,
model: ChargebackModel::Showback,
billing_cycle: BillingCycle::Monthly,
rate_cards: vec![],
}
}
}