feat: add functional requirements for profitability, Monte Carlo simulation, and Capex/Opex management; enhance user guide with planners
This commit is contained in:
@@ -27,11 +27,10 @@ Represents authenticated platform users with optional elevated privileges.
|
||||
**Relationships:**
|
||||
|
||||
- `role_assignments`: Many-to-many with Role via UserRole
|
||||
- `roles`: Many-to-many with Role (viewonly)
|
||||
|
||||
#### Role
|
||||
|
||||
Role encapsulating a set of permissions.
|
||||
Defines user roles for role-based access control (RBAC).
|
||||
|
||||
**Table:** `roles`
|
||||
|
||||
@@ -143,6 +142,124 @@ Line-item financial assumption attached to a scenario.
|
||||
|
||||
- `scenario`: Many-to-one with Scenario
|
||||
|
||||
### Project and Scenario Models
|
||||
|
||||
#### ProjectCapexSnapshot
|
||||
|
||||
Project-level snapshot capturing aggregated initial capital expenditure metrics.
|
||||
|
||||
**Table:** `project_capex_snapshots`
|
||||
|
||||
| Attribute | Type | Description |
|
||||
| ---------------------- | --------------------------------- | ------------------------------------------------------- |
|
||||
| id | Integer (PK) | Primary key |
|
||||
| project_id | Integer (FK → projects.id) | Associated project |
|
||||
| created_by_id | Integer (FK → users.id, nullable) | User that triggered persistence |
|
||||
| calculation_source | String(64), nullable | Originating workflow identifier (UI, API, etc.) |
|
||||
| calculated_at | DateTime | Timestamp the calculation completed |
|
||||
| currency_code | String(3), nullable | Currency for totals |
|
||||
| total_capex | Numeric(18,2), nullable | Aggregated capex before contingency |
|
||||
| contingency_pct | Numeric(12,6), nullable | Applied contingency percentage |
|
||||
| contingency_amount | Numeric(18,2), nullable | Monetary contingency amount |
|
||||
| total_with_contingency | Numeric(18,2), nullable | Capex total after contingency |
|
||||
| component_count | Integer, nullable | Number of normalized components captured |
|
||||
| payload | JSON, nullable | Serialized component breakdown and calculation metadata |
|
||||
| created_at | DateTime | Record creation timestamp |
|
||||
| updated_at | DateTime | Last update timestamp |
|
||||
|
||||
**Relationships:**
|
||||
|
||||
- `project`: Many-to-one with Project
|
||||
- `created_by`: Many-to-one with User (nullable)
|
||||
|
||||
#### ScenarioCapexSnapshot
|
||||
|
||||
Scenario-level snapshot storing detailed initial capex results.
|
||||
|
||||
**Table:** `scenario_capex_snapshots`
|
||||
|
||||
| Attribute | Type | Description |
|
||||
| ---------------------- | --------------------------------- | ------------------------------------------------------- |
|
||||
| id | Integer (PK) | Primary key |
|
||||
| scenario_id | Integer (FK → scenarios.id) | Associated scenario |
|
||||
| created_by_id | Integer (FK → users.id, nullable) | User that triggered persistence |
|
||||
| calculation_source | String(64), nullable | Originating workflow identifier |
|
||||
| calculated_at | DateTime | Timestamp the calculation completed |
|
||||
| currency_code | String(3), nullable | Currency for totals |
|
||||
| total_capex | Numeric(18,2), nullable | Aggregated capex before contingency |
|
||||
| contingency_pct | Numeric(12,6), nullable | Applied contingency percentage |
|
||||
| contingency_amount | Numeric(18,2), nullable | Monetary contingency amount |
|
||||
| total_with_contingency | Numeric(18,2), nullable | Capex total after contingency |
|
||||
| component_count | Integer, nullable | Number of normalized components captured |
|
||||
| payload | JSON, nullable | Serialized component breakdown and calculation metadata |
|
||||
| created_at | DateTime | Record creation timestamp |
|
||||
| updated_at | DateTime | Last update timestamp |
|
||||
|
||||
**Relationships:**
|
||||
|
||||
- `scenario`: Many-to-one with Scenario
|
||||
- `created_by`: Many-to-one with User (nullable)
|
||||
|
||||
#### ProjectProcessingOpexSnapshot
|
||||
|
||||
Project-level snapshot persisting recurring processing opex metrics.
|
||||
|
||||
**Table:** `project_processing_opex_snapshots`
|
||||
|
||||
| Attribute | Type | Description |
|
||||
| ------------------------ | --------------------------------- | ------------------------------------------------------- |
|
||||
| id | Integer (PK) | Primary key |
|
||||
| project_id | Integer (FK → projects.id) | Associated project |
|
||||
| created_by_id | Integer (FK → users.id, nullable) | User that triggered persistence |
|
||||
| calculation_source | String(64), nullable | Originating workflow identifier |
|
||||
| calculated_at | DateTime | Timestamp the calculation completed |
|
||||
| currency_code | String(3), nullable | Currency for totals |
|
||||
| overall_annual | Numeric(18,2), nullable | Total annual processing opex |
|
||||
| escalated_total | Numeric(18,2), nullable | Escalated cost across the evaluation horizon |
|
||||
| annual_average | Numeric(18,2), nullable | Average annual cost over the horizon |
|
||||
| evaluation_horizon_years | Integer, nullable | Number of years included in the timeline |
|
||||
| escalation_pct | Numeric(12,6), nullable | Escalation percentage applied |
|
||||
| apply_escalation | Boolean | Flag indicating whether escalation was applied |
|
||||
| component_count | Integer, nullable | Number of normalized components captured |
|
||||
| payload | JSON, nullable | Serialized component breakdown and calculation metadata |
|
||||
| created_at | DateTime | Record creation timestamp |
|
||||
| updated_at | DateTime | Last update timestamp |
|
||||
|
||||
**Relationships:**
|
||||
|
||||
- `project`: Many-to-one with Project
|
||||
- `created_by`: Many-to-one with User (nullable)
|
||||
|
||||
#### ScenarioProcessingOpexSnapshot
|
||||
|
||||
Scenario-level snapshot persisting recurring processing opex metrics.
|
||||
|
||||
**Table:** `scenario_processing_opex_snapshots`
|
||||
|
||||
| Attribute | Type | Description |
|
||||
| ------------------------ | --------------------------------- | ------------------------------------------------------- |
|
||||
| id | Integer (PK) | Primary key |
|
||||
| scenario_id | Integer (FK → scenarios.id) | Associated scenario |
|
||||
| created_by_id | Integer (FK → users.id, nullable) | User that triggered persistence |
|
||||
| calculation_source | String(64), nullable | Originating workflow identifier |
|
||||
| calculated_at | DateTime | Timestamp the calculation completed |
|
||||
| currency_code | String(3), nullable | Currency for totals |
|
||||
| overall_annual | Numeric(18,2), nullable | Total annual processing opex |
|
||||
| escalated_total | Numeric(18,2), nullable | Escalated cost across the evaluation horizon |
|
||||
| annual_average | Numeric(18,2), nullable | Average annual cost over the horizon |
|
||||
| evaluation_horizon_years | Integer, nullable | Number of years included in the timeline |
|
||||
| escalation_pct | Numeric(12,6), nullable | Escalation percentage applied |
|
||||
| apply_escalation | Boolean | Flag indicating whether escalation was applied |
|
||||
| component_count | Integer, nullable | Number of normalized components captured |
|
||||
| payload | JSON, nullable | Serialized component breakdown and calculation metadata |
|
||||
| created_at | DateTime | Record creation timestamp |
|
||||
| updated_at | DateTime | Last update timestamp |
|
||||
|
||||
**Relationships:**
|
||||
|
||||
- `scenario`: Many-to-one with Scenario
|
||||
- `created_by`: Many-to-one with User (nullable)
|
||||
|
||||
#### SimulationParameter
|
||||
|
||||
Probability distribution settings for scenario simulations.
|
||||
|
||||
Reference in New Issue
Block a user