TGM Expert provides comprehensive asset management for hydro and energy facilities, including locations, units, components, and full lifecycle tracking.
Table of Contents¶
Overview¶
Asset Model¶
Company
└── Location/Plant
└── Unit (Turbine, Generator)
└── Component Group
└── Component
└── Sub-Assembly
Key Features¶
- Hierarchical Structure - Organize assets in a logical tree
- Custom Properties - Define custom fields per asset type
- Lifecycle Tracking - Track from acquisition to disposal
- Document Linking - Attach drawings, manuals, and files
- Maintenance History - Link inspections, interventions, failures
Asset Hierarchy¶
Hierarchy Levels¶
| Level | Description | Example |
|---|---|---|
| Company | Organization | Hydro Quebec |
| Location/Plant | Physical site | LG-2 Power Station |
| Unit | Major equipment | Turbine Unit 1 |
| Component Group | Logical grouping | Hydraulic System |
| Component | Individual part | Governor Valve |
| Sub-Assembly | Sub-component | Valve Actuator |
Navigation¶
# Get all locations for a company
GET /api/locations?companyId=1
# Get units at a location
GET /api/units?locationId=10
# Get components in a unit
GET /api/components?unitId=100
Locations/Plants¶
Location Entity¶
{
"id": 1,
"name": "LG-2 Power Station",
"code": "LG2",
"type": "HYDRO_PLANT",
"address": "123 River Road",
"city": "La Grande",
"province": "Quebec",
"country": "Canada",
"latitude": 53.7888,
"longitude": -77.0468,
"timezone": "America/Montreal",
"capacity": 5328,
"capacityUnit": "MW",
"status": "OPERATIONAL",
"commissionedDate": "1979-10-27",
"company": {
"id": 1,
"name": "Hydro Quebec"
}
}
Location Types¶
| Type | Description |
|---|---|
HYDRO_PLANT |
Hydroelectric power plant |
THERMAL_PLANT |
Thermal power plant |
WIND_FARM |
Wind power facility |
SOLAR_FARM |
Solar power facility |
SUBSTATION |
Electrical substation |
OFFICE |
Administrative office |
WAREHOUSE |
Storage facility |
API Endpoints¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/locations |
List locations |
| GET | /api/locations/{id} |
Get location |
| POST | /api/locations |
Create location |
| PUT | /api/locations/{id} |
Update location |
| DELETE | /api/locations/{id} |
Delete location |
Create Location¶
curl -X POST https://api.tgm-expert.com/api/locations \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "New Power Station",
"code": "NPS",
"type": "HYDRO_PLANT",
"companyId": 1,
"latitude": 45.5017,
"longitude": -73.5673,
"status": "CONSTRUCTION"
}'
Units¶
Unit Entity¶
{
"id": 100,
"name": "Turbine Unit 1",
"code": "TU-001",
"serialNumber": "SN-2024-001",
"type": "FRANCIS_TURBINE",
"manufacturer": "GE Hydro",
"model": "Francis F450",
"capacity": 150,
"capacityUnit": "MW",
"status": "OPERATIONAL",
"commissionedDate": "1985-06-15",
"location": {
"id": 1,
"name": "LG-2 Power Station"
},
"specifications": {
"headDesign": 137,
"flowDesign": 290,
"speedRated": 128.6,
"runnerDiameter": 5.8
}
}
Unit Types¶
| Type | Description |
|---|---|
FRANCIS_TURBINE |
Francis turbine |
KAPLAN_TURBINE |
Kaplan turbine |
PELTON_TURBINE |
Pelton turbine |
GENERATOR |
Electric generator |
TRANSFORMER |
Power transformer |
CIRCUIT_BREAKER |
Circuit breaker |
PUMP |
Pump unit |
COMPRESSOR |
Compressor |
Unit Status¶
| Status | Description |
|---|---|
OPERATIONAL |
Running normally |
STANDBY |
Available but not running |
MAINTENANCE |
Under maintenance |
OUTAGE |
Unplanned outage |
DECOMMISSIONED |
No longer in service |
API Endpoints¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/units |
List units |
| GET | /api/units/{id} |
Get unit |
| POST | /api/units |
Create unit |
| PUT | /api/units/{id} |
Update unit |
| DELETE | /api/units/{id} |
Delete unit |
| GET | /api/units/{id}/components |
Get unit components |
| GET | /api/units/{id}/inspections |
Get unit inspections |
Create Unit¶
curl -X POST https://api.tgm-expert.com/api/units \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Turbine Unit 5",
"code": "TU-005",
"type": "FRANCIS_TURBINE",
"locationId": 1,
"manufacturer": "GE Hydro",
"model": "Francis F450",
"capacity": 150,
"status": "INSTALLATION"
}'
Components¶
Component Entity¶
{
"id": 1000,
"name": "Governor Valve",
"code": "GV-001",
"serialNumber": "GV-2020-0001",
"type": "VALVE",
"manufacturer": "Voith",
"model": "GV-500",
"status": "OPERATIONAL",
"installedDate": "2020-03-15",
"warrantyExpires": "2025-03-15",
"unit": {
"id": 100,
"name": "Turbine Unit 1"
},
"componentGroup": {
"id": 10,
"name": "Hydraulic System"
},
"specifications": {
"diameter": 500,
"pressure": 100,
"material": "Stainless Steel"
},
"maintenanceInterval": 365,
"lastMaintenanceDate": "2025-01-15"
}
Component Status¶
| Status | Description |
|---|---|
OPERATIONAL |
Working normally |
DEGRADED |
Reduced performance |
FAILED |
Not functioning |
MAINTENANCE |
Under repair |
SPARE |
In storage |
RETIRED |
No longer in use |
Component Groups¶
Group related components for easier management:
{
"id": 10,
"name": "Hydraulic System",
"description": "Turbine hydraulic control system",
"unitId": 100
}
API Endpoints¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/components |
List components |
| GET | /api/components/{id} |
Get component |
| POST | /api/components |
Create component |
| PUT | /api/components/{id} |
Update component |
| DELETE | /api/components/{id} |
Delete component |
| GET | /api/components/{id}/failures |
Get failure history |
| GET | /api/components/{id}/lifecycle |
Get lifecycle data |
Create Component¶
curl -X POST https://api.tgm-expert.com/api/components \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Pressure Sensor PS-101",
"code": "PS-101",
"type": "SENSOR",
"unitId": 100,
"componentGroupId": 10,
"manufacturer": "Honeywell",
"model": "STD700",
"status": "OPERATIONAL"
}'
Asset Lifecycle¶
Track the complete lifecycle of assets from acquisition to disposal.
Lifecycle Stages¶
| Stage | Description |
|---|---|
PLANNING |
Asset is planned/budgeted |
PROCUREMENT |
Being purchased |
INSTALLATION |
Being installed |
COMMISSIONING |
Testing and validation |
OPERATIONAL |
In active service |
DEGRADED |
Performance declining |
REFURBISHMENT |
Major overhaul |
DECOMMISSIONING |
Being removed |
DISPOSED |
No longer exists |
Lifecycle Entity¶
{
"id": 1,
"component": {
"id": 1000,
"name": "Governor Valve"
},
"currentStage": "OPERATIONAL",
"acquisitionDate": "2020-01-15",
"acquisitionCost": 150000.00,
"installedDate": "2020-03-15",
"commissionedDate": "2020-04-01",
"expectedLifeYears": 25,
"expectedEndOfLife": "2045-04-01",
"currentBookValue": 120000.00,
"depreciationMethod": "STRAIGHT_LINE",
"healthScore": 85,
"reliabilityScore": 92.5,
"mtbf": 8760,
"mttr": 24,
"totalFailures": 2,
"totalDowntimeHours": 48
}
API Endpoints¶
| Method | Endpoint | Description |
|---|---|---|
| POST | /asset-lifecycle/component/{id} |
Create lifecycle |
| GET | /asset-lifecycle/component/{id} |
Get lifecycle |
| PATCH | /asset-lifecycle/{id} |
Update lifecycle |
| POST | /asset-lifecycle/{id}/transition |
Change stage |
| POST | /asset-lifecycle/{id}/assess |
Record health assessment |
| GET | /asset-lifecycle/{id}/events |
Get lifecycle events |
Stage Transition¶
curl -X POST "https://api.tgm-expert.com/asset-lifecycle/1/transition?newStage=DEGRADED" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reason": "Vibration levels increasing, scheduled for refurbishment"
}'
Health Assessment¶
curl -X POST https://api.tgm-expert.com/asset-lifecycle/1/assess \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"healthScore": 75,
"reliabilityScore": 88.5,
"notes": "Minor wear detected on seals"
}'
Lifecycle Dashboard¶
curl -X GET https://api.tgm-expert.com/asset-lifecycle/dashboard \
-H "Authorization: Bearer $TOKEN"
Response:
{
"data": {
"totalAssets": 500,
"byStage": {
"OPERATIONAL": 450,
"DEGRADED": 30,
"MAINTENANCE": 15,
"DECOMMISSIONED": 5
},
"averageHealthScore": 82,
"assetsApproachingEndOfLife": 12,
"assetsRecommendedForReplacement": 5,
"totalAssetValue": 25000000
}
}
Custom Fields¶
Define custom fields for any asset type.
Custom Field Definition¶
curl -X POST https://api.tgm-expert.com/api/custom-field-definitions \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "runner_material",
"displayName": "Runner Material",
"entityType": "Component",
"fieldType": "SELECT",
"options": ["Bronze", "Stainless Steel", "Carbon Steel"],
"isRequired": false,
"isSearchable": true
}'
Field Types¶
| Type | Description |
|---|---|
TEXT |
Single line text |
TEXTAREA |
Multi-line text |
NUMBER |
Numeric value |
DATE |
Date value |
DATETIME |
Date and time |
BOOLEAN |
True/false |
SELECT |
Single selection |
MULTISELECT |
Multiple selection |
FILE |
File attachment |
Using Custom Fields¶
Custom fields are stored in the customFields property:
{
"id": 1000,
"name": "Governor Valve",
"customFields": {
"runner_material": "Stainless Steel",
"last_calibration_date": "2025-01-15",
"criticality_level": "High"
}
}
Filtering and Search¶
Filter Parameters¶
# Filter by status
GET /api/components?status=OPERATIONAL
# Filter by type
GET /api/units?type=FRANCIS_TURBINE
# Filter by location
GET /api/units?locationId=1
# Filter by date range
GET /api/components?installedAfter=2020-01-01&installedBefore=2024-12-31
# Search by name
GET /api/components?search=valve
# Multiple filters
GET /api/components?unitId=100&status=OPERATIONAL&type=VALVE
Sorting¶
# Sort by name ascending
GET /api/units?sort=name&order=ASC
# Sort by created date descending
GET /api/units?sort=createdAt&order=DESC
Pagination¶
GET /api/units?page=1&pageSize=25
Response includes pagination metadata:
{
"data": [...],
"meta": {
"pagination": {
"page": 1,
"pageSize": 25,
"pageCount": 10,
"total": 250
}
}
}