Menu
Warranty Claim Data Model: Terms, Coverage, Claims

Warranty Claim Data Model: Terms, Coverage, Claims

A field-by-field spec for warranty terms, coverage checks and claims, with three clocks, the start-event trap and a worked one-year recovery example.
Warranty Claim Data Model: Terms, Coverage, Claims

Key takeaways

  • Warranty needs three objects, not a date column: the terms, the coverage check at the moment of failure, and the claim with its own lifecycle.
  • Coverage runs on three clocks: calendar from a start event, usage from a meter, and a fresh clock on a replaced component. The earliest one to end decides.
  • Warranty runs from one named event, and plants usually store a different one. Purchase and commissioning were 85 days apart on the machine below, and picking the wrong one threw away a live claim worth 3,990 EUR.
  • A claim assembled weeks after the repair fails on evidence, not on entitlement. Those fields are written at the moment the part is fitted or they are never written.
  • Recovery is rarely all or nothing. The ten claims below recovered 70.0% by count and 61.6% by value, a gap of 8.4 percentage points from the same rows.

Three objects, not one field on the asset

Most plants hold warranty as a single date on the machine record, usually copied from an invoice. That one field cannot answer the only question that matters on the day something breaks.

The question is: does this failure, on this component, at this meter reading, on this date, oblige this supplier to pay?

Answering it needs three separate records, because each one has a different owner, a different lifespan and a different moment of truth.

ObjectWhat it is
war­ranty_termThe promise, written once when you buy
cov­ered_itemWhat the promise attaches to
claimOne demand, with its own life­cycle

The terms record is static. It is created at purchase and carries no events.

The coverage check is not a record until you run it. It is a function of the terms and the asset's state at one instant, and its answer expires the moment the meter moves.

The claim is an event object with money attached: statuses, deadlines, a counterparty who argues back, and a settlement that is rarely what you asked for.

What breaks when it is one spreadsheet column

A spreadsheet with a purchase date per machine fails in four specific ways, and each one has a name.

What is missingWhat it costs you
Start event not namedClock starts on the wrong day
No usage limitCover looks live when it ended
No com­ponent levelNew parts inherit no cover
No claim objectNo deadline, no partial, no balance

The third row is the expensive one. A gearbox fitted in year two carries its own cover, and a machine-level date field has nowhere to put it.

The fourth row is the quiet one. Without a claim object, nobody can tell an unasked claim from a refused one.

What this page covers that our other pages do not

Our guide to warranty leakage and maintenance cost recovery makes the business case, and it is not repeated here. This page answers a narrower question: which fields must exist, and at which moment, for a claim to be payable.

The records a claim draws on are specified elsewhere: the equipment failure record, the meter reading, the labour time booking and the purchase order and goods receipt. Read those for the field definitions, this page for how a claim consumes them.

The warranty term record, field by field

One row per set of terms. Not one per machine, because a single machine can carry three sets at once.

FieldType, man­datoryWhy it exists
term_idtext, yesOwn key, one per promise
object_typeenum, yesAsset, com­ponent or part
object_idlink, yesThe row it attaches to
sup­plier_idlink, yesWho owes the remedy
con­tract_reftext, yesOrder or terms version cited
term_typeenum, yesNew, repair, part, extended
statusenum, yesDraft, active, expired, void

object_type is the field that lets a plant stop arguing about where warranty lives. Set it to component and the gearbox gets its own row, without touching the machine.

Point object_id at a real row in the asset hierarchy, never at typed text. A term attached to the string "Line 3 capper" is a term nobody can query.

The cover scope fields

Entitlement is not one boolean. Four cost categories are settled independently, and the terms have to say which ones are in.

FieldType, man­datoryWhy it exists
cov­ers_partsbool, yesAlmost always true
cov­ers_labourbool, yesOften false, the usual refusal
cov­ers_freightbool, yesWho pays to ship the part
cov­ers_lossbool, yesLost output, nearly always out
labour_rate_capmoney, noCaps the hourly rate you may bill
exclu­sions_reftext, noPoints at the exclusion clause
notify_within_daysint, yesThe deadline that kills claims
trans­ferablebool, noSurvives a sale of the asset

notify_within_days earns its place on its own. It is the commonest reason a genuinely covered failure is refused, and it is almost never stored where a technician can see it.

Typical values run from 7 to 30 days from the failure, not from the repair.

covers_labour decides whether a claim is worth raising at all. On a four hour repair with a 200 EUR part, labour is most of the money.

The covered item link

A term points at an object. The covered item link says which physical thing, with which identity, the promise actually follows.

FieldType, man­datoryWhy it exists
cover_idtext, yesOwn key
term_idlink, yesTerms being applied
item_reflink, yesAsset, com­ponent or stock item
serial_notext, cond.Identity of the exact unit
lot_notext, cond.Batch, when no serial exists
fit­ted_ondate, cond.Starts a replace­ment clock
fit­ted_under_wolink, cond.Proof of when and by whom
removed_ondate, noEnds cover on that unit

Either serial_no or lot_no must be present, enforced at write time. A covered item with neither is a claim you lose at the first question.

This is where most plants stop, and where most claims die. Recording the serial at fitting takes fifteen seconds, and reconstructing it six months later is impossible.

Parts that come back to stock and get fitted again need the same treatment, which our rotable spare data model covers in full.

Coverage is a function of three clocks

A warranty rarely runs on one clock. It runs on two or three at once, and the earliest to end governs.

ClockEnds when
Cal­endarstart_date plus dura­tion_months
UsageMeter passes start value plus limit
Repairfit­ted_on plus the part's own months

The calendar clock needs two fields: start_date and duration_months.

The usage clock needs four: meter_id, start_meter_value, usage_limit and usage_uom. Without the start value, warranty breaks on any second-hand or relocated asset whose meter did not read zero on day one.

Read it from the same meter the rest of the plant uses, with the same rules on resets and rollovers, specified in our meter reading data model. A check with its own private counter will disagree with the maintenance plan.

The rule when two clocks apply at once

Store the rule, do not assume it. One field, limit_rule, with two values: first means cover ends when either clock ends, and last means it runs until both have.

Almost every industrial term is first, and almost every plant behaves as if it were last. That single mismatch is worth more than any other on this page.

Take gearbox GBX‑12, commissioned on 1 February 2025 at a meter reading of 0 hours. The terms are 24 months or 6,000 operating hours, whichever ends first.

ClockState at failure
Cal­endarEnds 1 Feb 2027, 145 days left
UsageEnded at 6,000 h on 12 Aug 2026
Meter at failure6,480 h, 480 h past the limit

The gearbox failed on 9 September 2026, with 145 days of calendar cover still to run. It was not covered.

The usage clock had ended 28 days earlier, at 6,000 hours on 12 August 2026. It ran 480 hours in those 28 days, an average of 17.1 hours a day.

The repair clock, and why it is separate

A part fitted during a repair usually carries its own term, running from the day it was fitted.

A mechanical seal fitted on 14 March 2026 under a repair carries 12 months from fitting. The pump's own 24 month cover ended on 30 November 2026.

The seal failed on 22 January 2027. The pump's cover had expired 53 days earlier, and the seal's own clock still had 51 days to run.

That claim exists only if fitted_on and fitted_under_wo were written when the seal went in. Nothing recorded after the fact will reconstruct them.

The start event is the field plants get wrong

Four dates surround a new machine, routinely months apart. Terms name exactly one, and it is rarely the one the plant stored.

DateWhere it comes from
Pur­chaseOrder date on the pur­chase order
Deliv­eryGoods receipt at your gate
Com­mis­sioningSigned handover or accept­ance
First pro­ductionFirst good output on the line

Store two fields, not one: start_event naming which of the four applies, and start_date holding the resolved value. The date alone loses the audit trail the first time someone disputes it.

Purchase and delivery come from the order and the goods receipt, specified in our MRO purchasing data model. Commissioning and first production come from your own acceptance record, and are the two most often missing.

Worked case: capper CAP‑07, four dates, one lost claim

A rotary capper was bought in 2025 with 24 months of cover from commissioning. Here are its four dates.

EventDate
Pur­chase order raised2 March 2025
Goods receipt14 April 2025
Com­mis­sioning signed26 May 2025
First pro­duction3 June 2025

Purchase to commissioning is 85 days. Delivery to commissioning is 42 days, which is an ordinary install and acceptance period for a machine of this size.

The plant's asset register held the purchase order date, 2 March 2025, because that is what the finance export carried. Its warranty expiry therefore read 2 March 2027.

The true expiry, 24 months from the signed commissioning date, was 26 May 2027. The two dates are 85 days apart, exactly the gap between the two start events.

What that cost on one failure

The capper's servo drive failed on 21 April 2027. Against the stored date it sat 50 days past expiry, so no claim was raised.

Against the correct start event, the same failure sat 35 days inside cover.

LineValue
Replace­ment drive3,450 EUR
Labour, 12.0 h at 45 EUR540 EUR
Claim that was not made3,990 EUR

3,450 plus 540 is 3,990 EUR, gone because one date field was populated from the wrong source system. The figures here are illustrative, chosen to be easy to check.

The coverage check

The check is a function, not a status. Run it when the failure is recorded and store its answer on the failure, with the inputs it used.

InputTaken from
Failure dateThe failure record
Meter at failureThe reading at down­time start
Com­ponentcom­ponent_id on the failure
Serial or lotThe cov­ered_item row

The output is one of four values, and the fourth one has to exist.

ResultMeaning
coveredInside every clock that applies
expiredAt least one clock has ended
excludedIn date, but the clause rules it out
undeter­minedAn input was missing

undetermined is the value that makes the whole model honest. Without it a missing meter reading silently becomes "expired", and the loss never appears in any report.

Count the undetermined results every month. They are your only direct measure of how much money the record keeping is throwing away.

What a claim must carry to survive scrutiny

A supplier's assessor is not testing whether you were entitled. They are testing whether you can prove what happened, to which unit, and when.

FieldType, man­datoryWhy it exists
claim_idtext, yesOwn key and the reference cited
claim_statusenum, yesWhere it sits in the life­cycle
term_idlink, yesThe promise being invoked
fail­ure_idlink, yesThe event being claimed for
wo_nolink, yesWhere the costs were booked
serial_or_lottext, yesIdentity of the failed unit
fail­ure_datedate, yesStarts the notifi­cation clock
notified_datedate, yesProves you met the deadline
claimed_amountmoney, yesSum of the claimed lines
cur­rencyenum, yesCross-border claims need it

Two dates, not one. failure_date and notified_date are what a deadline argument turns on, and a single "claim date" loses the argument by default.

failure_id makes the claim defensible rather than assertive. It points at a record written on the day by the person who did the repair, with the failure mode and component named.

Which record each piece of evidence comes from

None of this is typed into the claim. Every field links to a record that already exists, if it was written at the time.

Evi­denceSource record
Failure mode, com­ponentFailure record
Down­time windowFailure record
Hours at failureMeter reading
Parts and quan­titiesIssues booked to the work order
Labour hours and rateTime bookings on the work order
Serial or lotCov­ered item, or goods receipt
Pur­chase and receipt datesOrder and goods receipt
Photos, reportsAttach­ments on the work order

Say it plainly: a claim assembled weeks later from memory is the normal reason claims fail. Not the terms, not the supplier, not the entitlement.

The serial of the failed unit is the worst offender. It is legible in the technician's hand and unreadable in the skip two weeks later.

Labour is the second. An assessor pays booked hours against a work order, never a number estimated afterwards, which is why the labour time booking matters.

The claim line and its cost categories

One line per cost category, because settlement happens per category and a single total cannot carry a partial result.

FieldType, man­datoryWhy it exists
line_idtext, yesOwn key
claim_idlink, yesParent claim
cost_cat­egoryenum, yesDecides which cover rule applies
source_reflink, yesThe booking this line copies
quan­titydec, yesUnits or hours
unit_costmoney, yesRate or price applied
line_amountmoney, yesquan­tity times unit_cost
claimedbool, yesFalse when cover excludes it
set­tled_amountmoney, noFilled at settle­ment, per line

Six categories cover industrial practice: parts, labour, freight, external service, travel and consequential loss. The last one is nearly always excluded and still belongs on the claim.

Put it on the claim with claimed set to false. Your reports then show what the failure cost next to what the terms would ever pay.

source_ref stops a claim drifting. Each line copies a real booking, so a total that no longer matches the work order is visible rather than plausible.

Claim lifecycle and partial recovery

A claim is a negotiation with dates on it. Seven statuses are enough, and each has a field that must be filled before it can be left.

StatusCannot leave without
draftterm_id and fail­ure_id
notifiednotified_date
sub­mittedAll lines and evi­dence attached
acknowl­edgedSup­plier's own reference
settled_fullset­tled_amount, form, date
settled_partPer-line amounts and a reason
rejectedrejec­tion_reason from a list

Separate settled_full from settled_part. Merging them is how a plant comes to believe it recovers most of what it claims.

rejection_reason must be a coded list, not free text. Out of date, out of hours, excluded cause, insufficient evidence, notified late, wrong part fitted, unauthorised repair.

That list is a management report on its own. Refusals for insufficient evidence and late notification are your own defects, and refusals on cause or date are not.

Settlement carries three fields, not one

FieldWhy it exists
set­tled_amountWhat you actually recovered
settle­ment_formCash, credit note, free part, repair
set­tled_dateWhen it landed, for ageing
good­will_pctShare offered without accepting cover

settlement_form catches a real reporting failure. A supplier credit note never appears as cash, so a recovery report reading bank receipts records a successful claim as zero, and a free replacement part fails the same way.

goodwill_pct keeps the accounting honest the other way. A supplier paying 55% without accepting liability has not agreed your claim, and counting it as a win teaches the wrong lesson.

The balance arithmetic

Every claim has a balance, and it belongs on the maintenance cost centre. The formula is one line: unrecovered balance = claimed_amount minus settled_amount.

Take claim WCL‑2026‑0412, a drive failure inside cover on a parts-only term.

LineClaimedSettled
Parts14,20014,200
Labour4,8000
Freight8000
Total19,80014,200

Claimed 19,800 EUR, settled 14,200 EUR, so the unrecovered balance is 5,600 EUR. Recovery on this claim is 14,200 divided by 19,800, which is 71.7%.

The settlement form was a credit note against a future order, so no money arrived. Status is settled_part, not settled_full, even though the parts line was paid in full.

Rounding rule for this page: money to the whole euro, percentages to one decimal place, half rounded up. Goodwill is applied to the claimed amount and then rounded, so 55% of 2,750 EUR is 1,512.50 and settles at 1,513 EUR.

Worked example: one plant, one year, ten claims

Plant A, calendar year 2026, reconciled at the year end. Every figure below is an assumption chosen to be easy to check, not a measured result from a real site.

1. The funnel

StageCount
Failures on assets with terms on file41
Coverage check returned covered14
Claims raised10
Claims that recovered some­thing7
Claims settled in full3

Four covered failures produced no claim. One fell below the plant's 500 EUR threshold at 480 EUR, and three had no usable evidence, worth 11,320 EUR between them.

That is 11,800 EUR of covered value never asked for, which is 480 plus 11,320. It appears in no recovery rate unless you put it there deliberately.

2. The ten claims

ClaimClaimedSettled
WCL-2026-01048,4008,400
WCL-2026-01183,9002,600
WCL-2026-022512,60012,600
WCL-2026-02315,2000
WCL-2026-03472,7501,513
WCL-2026-041219,80014,200
WCL-2026-05086,1500
WCL-2026-06114,4004,400
WCL-2026-07199,3005,580
WCL-2026-08267,5000
Total80,00049,293

All amounts are in EUR. Claimed totals 80,000 EUR and settled totals 49,293 EUR, so the unrecovered balance across the ten is 30,707 EUR.

Three claims recovered nothing. WCL‑2026‑0231 was refused for insufficient evidence, WCL‑2026‑0508 was outside the usage clock, and WCL‑2026‑0826 was notified late.

The last one is worth the detail. The failure was on 26 August 2026 and the claim was notified on 9 October 2026, 44 days later, against a 30 day deadline.

Fourteen days late on a 7,500 EUR claim, because the deadline sat in a contract folder rather than on the asset. Nothing about the repair was wrong.

3. Two partial settlements in detail

WCL‑2026‑0118 claimed 3,900 EUR: parts 2,600 and labour 1,300. The term covered parts only, so it settled at 2,600 EUR, a recovery of 66.7% with a 1,300 EUR balance.

WCL‑2026‑0347 claimed 2,750 EUR and the supplier offered 55% as goodwill without accepting cover. 55% of 2,750 is 1,512.50, which rounds to 1,513 EUR and leaves a 1,237 EUR balance.

WCL‑2026‑0719 is the third partial: 9,300 EUR claimed, 60% goodwill, 5,580 EUR settled. None of the three is a won claim, and all three appear in the count.

4. The recovery rate, computed two ways

Both rates below come from the same ten rows. They differ because one counts claims and the other counts money.

MeasureResult
By count, any recovery7 of 10 = 70.0%
By value, settled over claimed49,293 of 80,000 = 61.6%
By count, full recovery only3 of 10 = 30.0%

By count the plant recovered on 7 of 10 claims, 70.0%. By value it recovered 49,293 of 80,000 EUR, 61.6%.

The gap is 8.4 percentage points, and in counts it is 4 claims: seven recovered something, only three recovered everything asked for.

5. The denominator changes the answer again

Measure against covered value rather than claimed value and the rate moves a third time. Covered value is 80,000 plus the 11,800 never claimed, so 91,800 EUR.

49,293 divided by 91,800 is 53.7%. Same year, same rows, three defensible percentages: 70.0%, 61.6% and 53.7%.

Report the denominator with the rate, every time. The spread between 70.0% and 53.7% is 16.3 points, and it is entirely a definition, not a performance.

Five questions to ask a vendor about warranty data

  1. Can a warranty term attach to a component, not just to a machine? Ask them to put a 12 month term on a gearbox inside a five year asset, in front of you, and then show it on the gearbox.
  2. Which start event does the clock use, and is the event itself stored? A single date field is the wrong answer. You need start_event and start_date as two fields.
  3. Does the coverage check read a meter? Ask which meter, whether it uses the reading at the moment of failure, and what it returns when that reading is missing.
  4. Does a claim have its own statuses and a per-line settlement? Ask them to settle parts and refuse labour on one claim, then show you the unrecovered balance.
  5. Where does the notification deadline live? If it is not visible to the person recording the failure, it is not a control, and late notification will keep costing you whole claims.

Question three separates real products from date fields with a label on them. Most tools answer yes to the first two and fail the third (CMMS data model).

How Fabrico helps

Fabrico is an OEE platform with a full CMMS built in, and it holds most of the evidence a warranty claim is built from.

Your team records the failure on a work order, books the parts consumed against that work order from inventory, and keeps the machine registry, its files and its history in one place, with timestamps and an audit log on every change.

Downtime from PLC connections, IoT sensors and AI cameras sits in the same system as MTTR and MTBF by machine, and the whole set leaves through Excel export, a REST API, webhooks or an ERP connector such as SAP.

What Fabrico does not have: there is no warranty module, no warranty terms record, no coverage check and no claim object with its own lifecycle. The terms and the claim live in your finance, procurement or supplier system.

Treat this page as a specification to test a shortlist against, not as a feature list, and make sure whatever you buy can reach the evidence described above.

Want the evidence side captured properly before you argue with a supplier? Book a 30 minute demo with a Fabrico consultant, no commitment, or contact us with your questions.

Frequently asked questions

What fields does a warranty claim record need?

The header needs claim_id, claim_status, term_id, failure_id, wo_no, serial_or_lot, failure_date, notified_date, claimed_amount and currency. Each line adds cost_category, source_ref, quantity, unit_cost, line_amount, a claimed flag and a settled_amount.

Why store the start event and not just the warranty start date?

Purchase, delivery, commissioning and first production can be months apart, and terms name exactly one of them. In the example above they were 85 days apart, which turned a live 3,990 EUR claim into a repair nobody claimed for.

How do calendar and usage clocks interact?

Store a limit_rule field. Almost every industrial term ends when the first clock ends, so a gearbox with 145 days of calendar cover left was still out of warranty 480 hours past its 6,000 hour limit.

Does a replaced part get its own warranty?

Usually yes, running from the day it was fitted rather than from the parent asset's start date. That claim only exists if fitted_on and the work order reference were recorded when the part went in.

How should warranty recovery rate be reported?

Always with its denominator, because the same year gives different answers. The ten claims above recovered 70.0% by count, 61.6% by claimed value and 53.7% by covered value.

Latest from our blog

Define Your Reliability Roadmap
Validate Your Potential ROI: Book a Live Demo
Define Your Reliability Roadmap
By clicking the Accept button, you are giving your consent to the use of cookies when accessing this website and utilizing our services. To learn more about how cookies are used and managed, please refer to our Privacy Policy and Cookies Declaration