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
# 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"
  }
}

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
    }
  }
}