- Removed legacy Alembic migration files and consolidated schema management into a new Pydantic-backed initializer (`scripts/init_db.py`). - Updated `main.py` to ensure the new DB initializer runs on startup, maintaining idempotency. - Adjusted session management in `config/database.py` to prevent DetachedInstanceError. - Introduced new enums in `models/enums.py` for better organization and clarity. - Refactored various models to utilize the new enums, improving code maintainability. - Enhanced middleware to handle JSON validation more robustly, ensuring non-JSON requests do not trigger JSON errors. - Added tests for middleware and enums to ensure expected behavior and consistency. - Updated changelog to reflect significant changes and improvements.
109 lines
3.9 KiB
Python
109 lines
3.9 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from .enums import ResourceType, CostBucket, StochasticVariable
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ResourceDescriptor:
|
|
"""Describes canonical metadata for a resource type."""
|
|
|
|
unit: str
|
|
description: str
|
|
|
|
|
|
RESOURCE_METADATA: dict[ResourceType, ResourceDescriptor] = {
|
|
ResourceType.DIESEL: ResourceDescriptor(unit="L", description="Diesel fuel consumption"),
|
|
ResourceType.ELECTRICITY: ResourceDescriptor(unit="kWh", description="Electrical power usage"),
|
|
ResourceType.WATER: ResourceDescriptor(unit="m3", description="Process and dust suppression water"),
|
|
ResourceType.EXPLOSIVES: ResourceDescriptor(unit="kg", description="Blasting agent consumption"),
|
|
ResourceType.REAGENTS: ResourceDescriptor(unit="kg", description="Processing reagents"),
|
|
ResourceType.LABOR: ResourceDescriptor(unit="hours", description="Direct labor hours"),
|
|
ResourceType.EQUIPMENT_HOURS: ResourceDescriptor(unit="hours", description="Mobile equipment operating hours"),
|
|
ResourceType.TAILINGS_CAPACITY: ResourceDescriptor(unit="m3", description="Tailings storage usage"),
|
|
}
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CostBucketDescriptor:
|
|
"""Describes reporting label and guidance for a cost bucket."""
|
|
|
|
label: str
|
|
description: str
|
|
|
|
|
|
COST_BUCKET_METADATA: dict[CostBucket, CostBucketDescriptor] = {
|
|
CostBucket.CAPITAL_INITIAL: CostBucketDescriptor(
|
|
label="Initial Capital",
|
|
description="Pre-production capital required to construct the mine",
|
|
),
|
|
CostBucket.CAPITAL_SUSTAINING: CostBucketDescriptor(
|
|
label="Sustaining Capital",
|
|
description="Ongoing capital investments to maintain operations",
|
|
),
|
|
CostBucket.OPERATING_FIXED: CostBucketDescriptor(
|
|
label="Fixed Operating",
|
|
description="Fixed operating costs independent of production rate",
|
|
),
|
|
CostBucket.OPERATING_VARIABLE: CostBucketDescriptor(
|
|
label="Variable Operating",
|
|
description="Costs that scale with throughput or production",
|
|
),
|
|
CostBucket.MAINTENANCE: CostBucketDescriptor(
|
|
label="Maintenance",
|
|
description="Maintenance and repair expenditures",
|
|
),
|
|
CostBucket.RECLAMATION: CostBucketDescriptor(
|
|
label="Reclamation",
|
|
description="Mine closure and reclamation liabilities",
|
|
),
|
|
CostBucket.ROYALTIES: CostBucketDescriptor(
|
|
label="Royalties",
|
|
description="Royalty and streaming obligations",
|
|
),
|
|
CostBucket.GENERAL_ADMIN: CostBucketDescriptor(
|
|
label="G&A",
|
|
description="Corporate and site general and administrative costs",
|
|
),
|
|
}
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class StochasticVariableDescriptor:
|
|
"""Metadata describing how a stochastic variable is typically modelled."""
|
|
|
|
unit: str
|
|
description: str
|
|
|
|
|
|
STOCHASTIC_VARIABLE_METADATA: dict[StochasticVariable, StochasticVariableDescriptor] = {
|
|
StochasticVariable.ORE_GRADE: StochasticVariableDescriptor(
|
|
unit="g/t",
|
|
description="Head grade variability across the ore body",
|
|
),
|
|
StochasticVariable.RECOVERY_RATE: StochasticVariableDescriptor(
|
|
unit="%",
|
|
description="Metallurgical recovery uncertainty",
|
|
),
|
|
StochasticVariable.METAL_PRICE: StochasticVariableDescriptor(
|
|
unit="$/unit",
|
|
description="Commodity price fluctuations",
|
|
),
|
|
StochasticVariable.OPERATING_COST: StochasticVariableDescriptor(
|
|
unit="$/t",
|
|
description="Operating cost per tonne volatility",
|
|
),
|
|
StochasticVariable.CAPITAL_COST: StochasticVariableDescriptor(
|
|
unit="$",
|
|
description="Capital cost overrun/underrun potential",
|
|
),
|
|
StochasticVariable.DISCOUNT_RATE: StochasticVariableDescriptor(
|
|
unit="%",
|
|
description="Discount rate sensitivity",
|
|
),
|
|
StochasticVariable.THROUGHPUT: StochasticVariableDescriptor(
|
|
unit="t/d",
|
|
description="Plant throughput variability",
|
|
),
|
|
}
|