📋 Asset Valuer Pro Valuation Process Workflow
📋 Overview
This document outlines the technical implementation of the valuation process workflow in Asset Valuer Pro, mapping the business process described in the legacy documentation to the actual codebase components.
📋 Business Context
According to the legacy documentation, the Asset Valuer Pro valuation process consists of several key steps:
- Set up a File (Client and Job)
- Create Valuation Framework (asset hierarchy and assumptions)
- Create and register Assets (usually by importing)
- Collect Key Data (using mobile app or direct entry)
- Import/Export Data (CSV files and images)
- Run Calculations (refresh valuation data)
- Finalize Valuation and Produce Reports
- Undertake Post-Valuation Processes (archiving)
🏗️ Technical Process Flow
📋 Step 1: Client and Job Setup
Business Process
- Create a 'client' and allocate a 'license type'
- Create 'Users' and assign 'Roles'
- Create a valuation 'Job' and specify effective date
Technical Implementation
ClientController.cs- Handles client creation and managementUserController.cs- Manages user accounts and permissionsRoleController.cs- Configures user roles and access rightsJobController.cs- Creates and manages valuation jobs
Key API Endpoints
- POST
/api/client- Create new client - POST
/api/job- Create new valuation job - GET
/api/client/{id}/jobs- Get all jobs for a client
Frontend Components
ClientEdit.tsx- Client creation formJobEdit.tsx- Job creation and configuration form
📋 Step 2: Valuation Framework
Business Process
- Create asset hierarchy (Asset Class, Type, Sub-Type)
- Define components hierarchy (Component Type, Sub-Type)
- Specify valuation assumptions at different levels
Technical Implementation
AssetHierarchyController.cs- Manages asset hierarchyComponentHierarchyController.cs- Manages component hierarchyAssumptionsController.cs- Manages valuation assumptionsValuationProfileController.cs- Manages valuation profiles
Key Database Entities
HierarchyNode- Represents nodes in asset/component hierarchyValuationProfile- Defines how assets are valuedValuationProfileRule- Maps profiles to asset typesAssetAssumptions- Stores valuation assumptions
Frontend Components
UpdateHierarchy.tsx- UI for hierarchy managementHierarchyNavigation.tsx- Navigation for hierarchy treeValuationProfileEdit.tsx- Valuation profile editor
📋 Step 3: Asset Registration
Business Process
- Import asset register from client data
- Register assets manually if needed
- Link assets to hierarchy and assumptions
Technical Implementation
ImportController.cs- Handles bulk asset importAssetController.cs- Manages individual assetsAssetHierarchyController.cs- Links assets to hierarchy
Key API Endpoints
- POST
/api/import/assets- Import assets from CSV/Excel - POST
/api/asset- Create single asset - GET
/api/asset- Retrieve assets with filtering
Key Processing Logic
ImportAssetRegisterSpreadsheetCommand.cs- Processes asset importsAssetFileValidator.cs- Validates import data format
📋 Step 4: Data Collection
Business Process
- Collect field data using mobile app
- Update asset information in the system
- Add photographs and documents
Technical Implementation
- iOS mobile application for field data collection
ContentController.cs- Manages photos, notes, and documentsDocumentController.cs- Handles document uploads
Data Exchange Format
- CSV files for export/import to mobile app
- ZIP files for images and documents
ImportController.cshandles the data synchronization
📋 Step 5: Run Calculations
Business Process
- Refresh calculations to apply assumptions
- Update asset valuations based on collected data
- Generate valuation results
Technical Implementation
AssetController.cs-/api/asset/recalculateendpointValuationService.cs- Core calculation logic- Domain entities for different valuation methods:
DirectCostValuationMethod.csApportionmentValuationMethod.csIncomeApproachValuationMethod.csMarketApproachValuationMethod.cs
Key Calculation Methods
// Simplified calculation flow
public decimal CalculateValue() {
switch(ValuationType) {
case "Direct Cost":
return CalculateDirectCostValue();
case "Apportionment":
return CalculateApportionmentValue();
case "Income":
return CalculateIncomeValue();
case "Market":
return CalculateMarketValue();
default:
return 0;
}
}
📋 Step 6: Report Generation
Business Process
- Run validations to ensure data quality
- Produce financial reporting valuation reports
- Generate insurance valuation reports
- Create asset management reports
Technical Implementation
ReportsController.cs- Handles report generation requestsGetGeneralValuationReportsQuery.cs- Financial reportingGetInsuranceValuationReportsQuery.cs- Insurance valuationGetRenewalCostReportQuery.cs- Asset managementReportCalculationService.cs- Core reporting calculations
Key Report Types
- Financial Reporting: General Valuation, Movements Reconciliation
- Insurance: Full Replacement, Indemnity
- Asset Management: EasySAM, Renewals, Distribution by Score
📋 Step 7: Job Archiving
Business Process
- Change job status to 'archived'
- Record final figures for future reference
- Prepare for next valuation cycle
Technical Implementation
JobController.cs-/api/job/{id}/archiveendpoint- Status transitions: "Open" -> "Draft" -> "Finalised" -> "Archived"
- Archive process copies current values to previous values for next cycle
Archive Processing
// Simplified archiving logic
public async Task<Unit> ArchiveJob(int jobId) {
var job = await _context.Jobs.FindAsync(jobId);
job.Status = JobStatus.Archived;
var assets = await _context.Assets
.Where(a => a.JobId == jobId)
.ToListAsync();
foreach (var asset in assets) {
asset.PreviousGross = asset.Gross;
asset.PreviousCurrentValue = asset.CurrentValue;
asset.PreviousDepreciationExpense = asset.DepreciationExpense;
}
await _context.SaveChangesAsync();
return Unit.Value;
}
📊 Integration Points
The valuation workflow integrates with several system components:
Mobile Data Collection
Field data capture through iOS app integrates with:
ContentController.cs- For uploading photosImportController.cs- For syncing asset data
External Systems
- Client asset management systems can export data for import
- Financial systems can consume valuation reports
Document Generation
- Reports from
ReportsController.csare used for:- Financial statement preparation
- Insurance renewals
- Asset management planning
📝 Workflow Considerations
⚠️ Version Note:
The legacy documentation describes a File Maker Pro app for mobile data collection, while the repository contains a React Native iOS app. Similarly, the documentation mentions Excel-based data exchange while the code implements API-based exchanges. This suggests the version 3 transition mentioned in legacy documentation is underway or completed.
Version Differences
- Version 2: File Maker Pro used for mobile data collection
- Version 3: Custom iOS app for data collection
- Version 2: Excel export/import for data exchange
- Version 3: API-based data exchange
Performance Considerations
- Large asset registers can have performance impacts on calculation
- Calculation refresh is resource-intensive for large datasets
- Report generation for extensive asset portfolios may require optimization
Business Process Variations
Different valuation approaches follow slightly different workflows:
- Direct Cost: Component-level valuation
- Apportionment: Asset-level valuation with apportionment
- Market: Based on comparable property sales
- Income: Based on income-generating potential
📋 Technical Decision Points
When to Use Each Valuation Method
- Direct Cost: Used for specialized assets where component costs can be clearly identified
- Apportionment: Used for infrastructure and assets where component-level detail is impractical
- Market: Used for land and buildings with an active market
- Income: Used for income-generating properties
Validation Requirements
Before calculations can be run, the system requires:
- Complete asset hierarchy
- Appropriate valuation profiles
- Required asset attributes (dimensions, condition scores)
- Component details (for Direct Cost method)
Calculation Logic
The calculation sequence follows this order:
- Apply assumption values from hierarchy
- Calculate replacement costs
- Apply condition-based adjustments (from valuation profiles)
- Calculate depreciation (based on useful life, RUL, and depreciation method)
- Calculate insurance values (if applicable)
📝 Business Value
The valuation workflow delivers significant business value by:
- Standardization: Ensuring consistent valuation methodology across different asset types
- Compliance: Meeting IFRS/IPSAS financial reporting requirements
- Efficiency: Automating complex valuation calculations
- Accuracy: Reducing human error in valuation processes
- Auditability: Providing clear documentation of valuation inputs and methods
- Decision Support: Generating reports to inform asset management decisions
📋 Common Challenges and Solutions
| Challenge | Technical Solution |
|---|---|
| Data Quality Issues | Validation in AssetFileValidator.cs and UI validation |
| Calculation Performance | Optimized database queries and selective recalculation |
| Complex Hierarchy Setup | Hierarchy templates and import/export functionality |
| Version Control | Job status tracking and archiving process |
| Mobile Connectivity | Offline capability in mobile app with sync on connection |
| Report Generation Time | Background processing for large reports |
📋 Related Documentation
- Mobile Data Collection - Details on field data collection
- Report Business-Technical Map - Mapping of reports to business needs
- Asset model documentation: Asset.md
- Component model documentation: Component.md
- Job model documentation: Job.md