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

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