TGM Expert provides comprehensive warranty management for energy assets, enabling operators to track warranty contracts, covered assets, and warranty claims through their full lifecycle from submission to payment.
Table of Contents¶
- Overview
- Data Model
- Warranty Types
- Warranty Lifecycle
- Claims Workflow
- API Reference
- Warranty Contracts API
- Warranty Claims API
- Multi-Tenancy
- Examples
Overview¶
Key Features¶
- Contract Management - Track warranty contracts with providers, terms, and coverage
- Asset Coverage - Link warranty contracts to specific assets (units)
- Claims Processing - Full claim lifecycle from draft to payment
- Expiry Tracking - Identify expiring and expired warranties proactively
- Financial Tracking - Track claimed amounts, approved amounts, and payments
- Provider Management - Store provider contact details per contract
Architecture¶
WarrantyContract
├── Company (tenant isolation)
├── WarrantyContractAsset[] (covered assets)
│ └── Unit
└── WarrantyClaim[] (claims against contract)
├── Unit (affected asset)
├── WorkOrder (related maintenance)
├── Failure (root cause)
├── SubmittedBy (User)
└── ReviewedBy (User)
Data Model¶
WarrantyContract Entity¶
| Field | Type | Description |
|---|---|---|
id |
Long | Auto-generated primary key |
contractNumber |
String | Unique contract identifier |
title |
String | Contract title |
description |
String | Detailed contract description |
warrantyType |
WarrantyType | MANUFACTURER, EXTENDED, COMPONENT, SERVICE |
status |
WarrantyStatus | ACTIVE, EXPIRED, CANCELLED, PENDING |
providerName |
String | Warranty provider name |
providerContact |
String | Provider contact person |
providerEmail |
String | Provider email address |
providerPhone |
String | Provider phone number |
startDate |
LocalDateTime | Contract start date |
endDate |
LocalDateTime | Contract end date |
coverageDescription |
String | What the warranty covers |
maxClaimAmount |
BigDecimal | Maximum claimable amount |
deductible |
BigDecimal | Deductible amount per claim |
contractCost |
BigDecimal | Cost of the warranty contract |
totalClaimed |
BigDecimal | Total amount claimed (running total) |
totalPaid |
BigDecimal | Total amount paid by provider |
termsAndConditions |
String | Full T&C text |
exclusions |
String | What is not covered |
notes |
String | Additional notes |
WarrantyContractAsset Entity¶
| Field | Type | Description |
|---|---|---|
id |
Long | Auto-generated primary key |
warrantyContract |
WarrantyContract | Parent contract |
unit |
Unit | Covered asset |
coverageDetails |
String | Asset-specific coverage details |
serialNumber |
String | Asset serial number for the warranty |
WarrantyClaim Entity¶
| Field | Type | Description |
|---|---|---|
id |
Long | Auto-generated primary key |
claimNumber |
String | Unique claim identifier (auto-generated WC-xxx) |
title |
String | Claim title |
description |
String | Claim details |
status |
WarrantyClaimStatus | Claim lifecycle status |
warrantyContract |
WarrantyContract | Associated warranty contract |
unit |
Unit | Affected asset |
workOrder |
WorkOrder | Related work order |
failure |
Failure | Related failure record |
claimedAmount |
BigDecimal | Amount being claimed |
approvedAmount |
BigDecimal | Amount approved by provider |
paidAmount |
BigDecimal | Amount actually paid |
incidentDate |
LocalDateTime | When the incident occurred |
submittedDate |
LocalDateTime | When the claim was submitted |
reviewDate |
LocalDateTime | When the claim was reviewed |
resolutionDate |
LocalDateTime | When the claim was resolved |
submittedBy |
User | User who submitted the claim |
reviewedBy |
User | User who reviewed the claim |
reviewNotes |
String | Notes from the reviewer |
resolutionNotes |
String | Final resolution notes |
rejectionReason |
String | Reason for rejection (if rejected) |
Database Tables¶
-- Migration: V54__warranty_management.sql
-- Tables: warranty_contracts, warranty_contract_assets, warranty_claims
Warranty Types¶
| Type | Value | Description |
|---|---|---|
| Manufacturer | MANUFACTURER |
Original equipment manufacturer warranty |
| Extended | EXTENDED |
Extended warranty beyond manufacturer coverage |
| Component | COMPONENT |
Warranty on a specific component |
| Service | SERVICE |
Service-level warranty agreement |
Warranty Lifecycle¶
Contract Status¶
| Status | Value | Description |
|---|---|---|
| Active | ACTIVE |
Contract is in effect |
| Expired | EXPIRED |
Contract has passed end date |
| Cancelled | CANCELLED |
Contract was cancelled early |
| Pending | PENDING |
Contract not yet active |
Claims Workflow¶
┌───────┐ ┌───────────┐ ┌──────────────┐ ┌──────────┐
│ DRAFT │ ──> │ SUBMITTED │ ──> │ UNDER_REVIEW │ ──> │ APPROVED │ ──> ┌──────┐
└───────┘ └───────────┘ └──────────────┘ └──────────┘ │ PAID │ ──> ┌────────┐
│ └──────┘ │ CLOSED │
│ └────────┘
└──────────────────────────> ┌──────────┐
│ REJECTED │
└──────────┘
Claim Status Transitions¶
| From | To | Action | Endpoint |
|---|---|---|---|
| DRAFT | SUBMITTED | Submit claim | POST /api/warranty-claims/{id}/submit |
| SUBMITTED | APPROVED/REJECTED | Review claim | POST /api/warranty-claims/{id}/review |
| APPROVED | CLOSED | Close claim | POST /api/warranty-claims/{id}/close |
| PAID | CLOSED | Close claim | POST /api/warranty-claims/{id}/close |
API Reference¶
Warranty Contracts API¶
Base URL¶
/api/warranties
Inherited CRUD Endpoints¶
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/warranties |
List all warranty contracts |
GET |
/api/warranties/{id} |
Get contract by ID |
POST |
/api/warranties |
Create new contract |
PUT |
/api/warranties/{id} |
Update contract |
DELETE |
/api/warranties/{id} |
Delete contract |
GET |
/api/warranties/count |
Get total count |
Custom Endpoints¶
Get Expiring Warranties¶
GET /api/warranties/expiring?daysAhead=90&page=1&pageSize=25
Returns warranties that will expire within the specified number of days. Default is 90 days.
Get Expired Warranties¶
GET /api/warranties/expired?page=1&pageSize=25
Returns all warranties that are still marked ACTIVE but have passed their end date.
Get Assets Covered by Warranty¶
GET /api/warranties/{id}/assets
Response:
{
"data": [
{
"id": 1,
"coverageDetails": "Full turbine coverage including runner and guide vanes",
"serialNumber": "TRB-2024-001"
}
]
}
Add Asset to Warranty¶
POST /api/warranties/{id}/assets
Content-Type: application/json
{
"unitId": 42,
"coverageDetails": "Full turbine coverage",
"serialNumber": "TRB-2024-001"
}
Warranty Claims API¶
Base URL¶
/api/warranty-claims
Inherited CRUD Endpoints¶
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/warranty-claims |
List all claims |
GET |
/api/warranty-claims/{id} |
Get claim by ID |
POST |
/api/warranty-claims |
Create new claim |
PUT |
/api/warranty-claims/{id} |
Update claim |
DELETE |
/api/warranty-claims/{id} |
Delete claim |
GET |
/api/warranty-claims/count |
Get total count |
Custom Endpoints¶
Submit Claim¶
POST /api/warranty-claims/{id}/submit
Transitions the claim from DRAFT to SUBMITTED and records the submission date.
Review Claim¶
POST /api/warranty-claims/{id}/review
Content-Type: application/json
{
"reviewNotes": "Claim is valid and within warranty terms.",
"approved": true
}
Set approved: false to reject the claim. The reviewNotes will be stored as the rejection reason for rejected claims.
Close Claim¶
POST /api/warranty-claims/{id}/close
Marks the claim as CLOSED and records the resolution date.
Multi-Tenancy¶
All warranty contracts and claims are scoped to a company through the company_id foreign key. Users can only access warranty data belonging to their company.
Examples¶
Create a Warranty Contract¶
POST /api/warranties
Content-Type: application/json
{
"contractNumber": "WAR-2024-001",
"title": "GE Turbine Extended Warranty - Unit 3",
"description": "5-year extended warranty covering turbine runner, guide vanes, and shaft assembly",
"warrantyType": "EXTENDED",
"providerName": "GE Renewable Energy",
"providerContact": "John Smith",
"providerEmail": "john.smith@ge.com",
"providerPhone": "+1-555-0123",
"startDate": "2024-01-01T00:00:00",
"endDate": "2029-01-01T00:00:00",
"coverageDescription": "Full parts and labor for turbine mechanical components",
"maxClaimAmount": 5000000.00,
"deductible": 25000.00,
"contractCost": 750000.00,
"exclusions": "Damage caused by operator negligence or force majeure events"
}
Create a Warranty Claim¶
POST /api/warranty-claims
Content-Type: application/json
{
"title": "Runner Blade Crack - Unit 3",
"description": "Crack discovered during annual inspection on blade 4",
"warrantyContractId": 1,
"unitId": 42,
"failureId": 88,
"workOrderId": 1234,
"claimedAmount": 350000.00,
"incidentDate": "2024-06-15T10:00:00"
}
Permission Resource Names¶
warranty_contracts - for contract CRUD
warranty_claims - for claim CRUD