đ StrategyController Documentation
đ QUICK DOCUMENTATIONâ
- File Path: /API/Controllers/StrategyController.cs
- Primary Purpose: Manages EasySAM strategic asset management strategies, including baseline and alternate strategies, enabling lifecycle optimization and scenario planning.
- Key Endpoints:
- đ GET /GetBaselineStrategies - Retrieves baseline asset management strategies
- đ GET /GetAlternateStrategies - Retrieves alternate asset management strategies
- âī¸ POST /CreateBaseline - Creates a new baseline strategy
- đ POST /CopyStrategy - Creates a copy of an existing strategy
- âī¸ POST /Export - Exports strategy data to a file
- âī¸ POST /Import - Imports strategy data from a file
- Related Models: BaselineStrategySummary, AlternateStrategySummary, DropDownDto
- Used By:
- EasySAM strategic asset management module
- Lifecycle planning and optimization tools
- Capital works program development
- Scenario planning interfaces
đī¸ DETAILED DOCUMENTATIONâ
đī¸ Overviewâ
The StrategyController manages asset management strategies within the EasySAM (Easy Strategic Asset Management) module of Asset Valuer Pro. EasySAM allows users to create and compare different asset management strategies, including baseline scenarios (typically representing current practice) and alternate scenarios that explore different intervention approaches, funding levels, or maintenance regimes. This controller provides functionality for creating, retrieving, copying, exporting, and importing these strategies.
đ§ Controller Dependenciesâ
- Namespace: AVP.API.Controllers
- Services Used:
- Mediator (CQRS pattern implementation)
- Other Dependencies: None specified
đ Endpointsâ
đ Get Baseline Strategiesâ
- HTTP Method: GET
- URL Pattern: /GetBaselineStrategies
- Authentication: đ Required (inherited from ApiController)
- Description: Retrieves a list of baseline strategies (current practice scenarios)
Request Parametersâ
None
Response Formatâ
[
{
"id": 123,
"name": "Current Practice - Buildings",
"description": "Baseline scenario representing current maintenance practices for buildings",
"assetClassId": 1,
"assetClassName": "Buildings",
"createdDate": "2025-01-15T00:00:00Z",
"createdBy": "John Smith",
"status": "Active",
"baseYear": 2025,
"forecastYears": 10
},
{
"id": 124,
"name": "Current Practice - Infrastructure",
"description": "Baseline scenario for infrastructure assets",
"assetClassId": 2,
"assetClassName": "Infrastructure",
"createdDate": "2025-01-20T00:00:00Z",
"createdBy": "Sarah Johnson",
"status": "Active",
"baseYear": 2025,
"forecastYears": 15
}
]
đ Get Alternate Strategiesâ
- HTTP Method: GET
- URL Pattern: /GetAlternateStrategies
- Authentication: đ Required
- Description: Retrieves a list of alternate strategies (improved or modified scenarios)
Request Parametersâ
None
Response Formatâ
[
{
"id": 201,
"name": "Increased Maintenance - Buildings",
"description": "Scenario with increased preventive maintenance funding",
"baselineStrategyId": 123,
"assetClassId": 1,
"assetClassName": "Buildings",
"createdDate": "2025-01-16T00:00:00Z",
"createdBy": "John Smith",
"status": "Active",
"baseYear": 2025,
"forecastYears": 10,
"comparisonMetrics": {
"netPresentValue": 15000000,
"averageCondition": 3.8,
"totalCost": 25000000
}
},
{
"id": 202,
"name": "Deferred Renewals - Buildings",
"description": "Scenario with deferred capital renewal",
"baselineStrategyId": 123,
"assetClassId": 1,
"assetClassName": "Buildings",
"createdDate": "2025-01-17T00:00:00Z",
"createdBy": "John Smith",
"status": "Active",
"baseYear": 2025,
"forecastYears": 10,
"comparisonMetrics": {
"netPresentValue": 12000000,
"averageCondition": 3.2,
"totalCost": 18000000
}
}
]
âī¸ Get Strategies By Asset Classâ
- HTTP Method: POST
- URL Pattern: /GetStrategiesByAssetClass
- Authentication: đ Required
- Description: Retrieves a list of strategies for a specific asset class as dropdown options
Request Parametersâ
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | GetStrategiesByAssetClassQuery | Yes | Contains AssetClassId to filter strategies |
Response Formatâ
[
{
"id": 123,
"name": "Current Practice - Buildings"
},
{
"id": 201,
"name": "Increased Maintenance - Buildings"
},
{
"id": 202,
"name": "Deferred Renewals - Buildings"
}
]
đ Get Strategyâ
- HTTP Method: GET
- URL Pattern: /GetStrategy
- Authentication: đ Required
- Description: Retrieves a specific strategy by ID
Request Parametersâ
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | GetStrategyQuery | Yes | Contains StrategyId to retrieve |
Response Formatâ
{
"id": 201,
"name": "Increased Maintenance - Buildings",
"description": "Scenario with increased preventive maintenance funding",
"baselineStrategyId": 123,
"assetClassId": 1,
"assetClassName": "Buildings",
"createdDate": "2025-01-16T00:00:00Z",
"createdBy": "John Smith",
"status": "Active",
"baseYear": 2025,
"forecastYears": 10,
"comparisonMetrics": {
"netPresentValue": 15000000,
"averageCondition": 3.8,
"totalCost": 25000000
},
"interventions": [
{
"id": 301,
"name": "Preventive Maintenance",
"description": "Regular maintenance activities",
"cost": 500000,
"frequency": "Annual",
"conditionImpact": 0.2
},
{
"id": 302,
"name": "Rehabilitation",
"description": "Major rehabilitation work",
"cost": 2000000,
"frequency": "10 Years",
"conditionImpact": 1.5
}
]
}
âī¸ Create Baseline Strategyâ
- HTTP Method: POST
- URL Pattern: /CreateBaseline
- Authentication: đ Required
- Description: Creates a new baseline strategy
Request Parametersâ
| Parameter | Type | Required | Description |
|---|---|---|---|
| command | CreateBaselineStrategyCommand | Yes | Contains baseline strategy data to create |
Response Formatâ
{
"message": "Baseline strategy created successfully",
"baselineStrategies": [
{
"id": 123,
"name": "Current Practice - Buildings",
"description": "Baseline scenario representing current maintenance practices for buildings",
"assetClassId": 1,
"assetClassName": "Buildings",
"createdDate": "2025-01-15T00:00:00Z",
"createdBy": "John Smith",
"status": "Active",
"baseYear": 2025,
"forecastYears": 10
},
{
"id": 125,
"name": "Current Practice - Plant & Equipment",
"description": "New baseline strategy for plant and equipment",
"assetClassId": 3,
"assetClassName": "Plant & Equipment",
"createdDate": "2025-04-17T00:00:00Z",
"createdBy": "Robert Brown",
"status": "Active",
"baseYear": 2025,
"forecastYears": 10
}
]
}
đ Copy Strategyâ
- HTTP Method: POST
- URL Pattern: /CopyStrategy
- Authentication: đ Required
- Description: Creates a copy of an existing strategy
Request Parametersâ
| Parameter | Type | Required | Description |
|---|---|---|---|
| command | CopyStrategyCommand | Yes | Contains StrategyId to copy and new name/description |
Response Formatâ
{
"strategy": {
"id": 203,
"name": "Increased Maintenance - Buildings (Copy)",
"description": "Copy of scenario with increased preventive maintenance funding",
"baselineStrategyId": 123,
"assetClassId": 1,
"assetClassName": "Buildings",
"createdDate": "2025-04-17T00:00:00Z",
"createdBy": "Robert Brown",
"status": "Active",
"baseYear": 2025,
"forecastYears": 10,
"comparisonMetrics": {
"netPresentValue": 15000000,
"averageCondition": 3.8,
"totalCost": 25000000
}
}
}
đī¸ Delete Strategyâ
- HTTP Method: POST
- URL Pattern: /DeleteStrategy
- Authentication: đ Required
- Description: Deletes a strategy by ID
Request Parametersâ
| Parameter | Type | Required | Description |
|---|---|---|---|
| command | DeleteStrategyCommand | Yes | Contains StrategyId to delete |
Response Formatâ
true
(Returns success status)
âī¸ Export Strategyâ
- HTTP Method: POST
- URL Pattern: /Export
- Authentication: đ Required
- Description: Exports strategy data to a downloadable file
Request Parametersâ
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | ExportStrategyQuery | Yes | Contains StrategyId and export options |
Response Formatâ
File download (binary content)
âī¸ Import Strategyâ
- HTTP Method: POST
- URL Pattern: /Import
- Authentication: đ Required
- Description: Imports strategy data from an uploaded file
Request Parametersâ
| Parameter | Type | Required | Description |
|---|---|---|---|
| command | ImportStrategyCommand | Yes | Contains file and import options |
Response Formatâ
{
"message": "Strategy imported successfully"
}
đ Strategy Typesâ
âšī¸ Note: The EasySAM module supports two main types of strategies:
-
Baseline Strategies
- Represent current practice or "do nothing" scenarios
- Serve as reference points for comparing alternatives
- Typically one baseline per asset class
- Project asset performance with existing practices
-
Alternate Strategies
- Explore different intervention approaches
- Link back to a baseline for comparison
- Multiple alternates can be created from the same baseline
- Support cost-benefit analysis of different approaches
đ§Ž Optimization Modelâ
The strategic asset management strategies use an optimization model that considers:
-
Intervention Types
- Maintenance actions (preventive, corrective)
- Rehabilitation treatments
- Replacement options
- Each with defined costs and condition impacts
-
Performance Metrics
- Net Present Value (NPV) of lifecycle costs
- Average condition score projection
- Total cost over planning horizon
- Risk exposure and service levels
-
Constraints
- Budget limitations
- Minimum condition thresholds
- Resource availability
- Timing restrictions
đ Business Contextâ
The EasySAM module provides critical asset management capabilities:
-
Strategic Planning
- Long-term capital works planning
- Budget optimization across asset portfolio
- Scenario testing for different funding levels
- Evidence-based decision support
-
Financial Forecasting
- Projection of future capital and maintenance costs
- Budget forecasting and prioritization
- Funding needs assessment
- Financial sustainability analysis
-
Risk Management
- Identification of critical renewal timings
- Consequences of deferred maintenance
- Service level impacts of different strategies
- Optimization of intervention timing