Reactive Maintenance Job Log
Log reactive maintenance jobs, measure response and fix times in elapsed hours against a target for each priority, and print a service level report with first-time fix rate and cost by location. Nothing is uploaded.
Version 1.0.0 · Updated Aug 5, 2026
Overview
How to use Reactive Maintenance Job Log
The complete in-tool guidance, reproduced here so you can read it before you download.
What this tool does
CM8-95 is a working log for reactive maintenance — the jobs that arrive unplanned, by phone, email or a walk-up at the helpdesk. You record when each job was reported, when somebody attended and when it was finished. The tool works out the response time and the fix time in hours, compares each job against the target for its own priority, and shows you the service level you are actually achieving, the first-time fix rate, the open work and where the money is going.
Everything runs inside this single file. There is no account, no upload and no network request of any kind, so tenant names, contractor rates and building details never leave the computer you are using.
What to log, and when
One row per job. Log it when it is reported, not when it is finished — a log written up at the end of the month has no reliable report times in it, and every service level figure it produces is a guess.
The three timestamps are what the tool is built around:
- Reported — the date and time the job reached you. Not the date you got round to entering it, and not the date the fault started.
- Attended — the date and time somebody arrived on site and started work. Not the time the call was passed to a contractor, and not the time they promised to come.
- Completed — the date and time the fault was fixed and the asset handed back. Not the date the paperwork was closed.
The tool insists on a time whenever there is a date, because a response measured to the nearest day cannot test a two-hour emergency target. It also refuses attendance before the report, completion before attendance, a completed status with no completion date, and a first-time-fix tick on a job that is not finished — those are the entry errors that quietly flatter a service level report.
Cancelled jobs — duplicates, jobs raised in error, jobs withdrawn — stay in the log for the audit trail but are excluded from every service level percentage, from the first-time fix rate and from the open jobs table. Their costs are still counted, because abortive visits cost real money.
Priority, and why it drives everything
Priority is not a description of how annoyed the caller is. It is the switch that selects which pair of targets the job is measured against, so a job given the wrong priority is measured against the wrong thing. Four levels are provided, and you set both targets for each on the Settings tab:
- Priority — Typical meaning — Default response — Default fix
- Emergency — Danger to people, or the building cannot be used — 2 h — 24 h
- Urgent — Significant loss of use, comfort or security — 8 h — 72 h
- Routine — Inconvenient, but the space still works — 24 h — 168 h (7 days)
- Planned — Can wait for the next scheduled visit — 72 h — 720 h (30 days)
The defaults are a common starting point, not a standard. Replace them with the targets in your own contract or service level agreement. Because the targets differ by priority, they are looked up for every single job and never averaged. There is no such thing as an overall target in this tool, and the summary table prints "mixed" in the target column of the total row rather than inventing one.
Elapsed hours, not working hours
This is the single most important thing to understand about the numbers on this page. Every response and fix time here is elapsed clock time: it runs continuously through nights, weekends and public holidays, exactly as a stopwatch started when the phone rang would.
A job reported at 16:00 on Friday and attended at 09:00 on Monday took 65 elapsed hours, not 1 working hour. Both statements are true; they measure different things. Mixing them — counting some jobs one way and some the other — makes every figure better than reality and makes the whole report worthless.
If your contract is written in working hours, you have two honest options. Either restate the targets as elapsed hours before you enter them here, allowing for the hours the site is closed, or accept that this tool will report a lower service level than a working-hours calculation would and say so on the report. What you must not do is describe an elapsed-hours result as a working-hours one.
The working hours in a day setting is deliberately kept away from all of this. It is used for one thing only: turning recorded labour hours into labour days, so you can see roughly how much engineer time the log represents. It never touches a response time, a fix time or a target.
How response and fix time are worked out
Both clocks start at the moment the job was reported. The fix clock is not measured from attendance, so a job that is attended quickly and then left half done still shows a long fix time.
Response hours = (date attended − date reported) × 24 + (time attended − time reported) ÷ 60 minutes
Fix hours = (date completed − date reported) × 24 + (time completed − time reported) ÷ 60 minutes
Response target met = response hours ≤ response target for that job's priority
Fix target met = fix hours ≤ fix target for that job's priority
A job exactly on target counts as met. A job with a missing or unreadable time produces no measurement at all — it shows "—" rather than a zero, and it is left out of both the numerator and the denominator of the percentages. That is deliberate: a zero would look like a perfect response.
Service level percentages
Response service level % = jobs attended within target ÷ jobs with a measurable response time × 100
Fix service level % = completed jobs fixed within target ÷ completed jobs with a measurable fix time × 100
The two percentages count different populations, and the difference matters when you read them. The response figure covers every job that has been attended, including ones still open. The fix figure covers only jobs marked completed — a job that has run months past its fix target and is still open does not appear in it at all.
That is the standard way of doing it, and it has a well-known blind spot: a poorly performing log can show a high fix service level simply because the worst jobs have never been closed. Always read the fix percentage next to the open jobs table, which is where those jobs are sitting.
In the summary table the overall row is recalculated from the underlying counts, not by averaging the four priority percentages. Averaging percentages across groups of different sizes gives the wrong answer, and it gives a badly wrong answer when most of your jobs are routine and most of your emergencies are not.
First-time fix rate
First-time fix rate % = completed jobs ticked as first-time fix ÷ all completed jobs × 100
Tick the box only when the job was finished on the first attendance with no return visit and no second engineer. A job that was made safe on the first visit and completed on the second is not a first-time fix, however good the first visit was.
It is worth tracking because return visits are expensive and largely avoidable: they usually mean the wrong trade was sent, the fault was not diagnosed on the call, or the van did not carry the part. A rate that improves after you change the van stock list is one of the few maintenance figures that shows a management decision working.
Cost, labour hours and labour days
Total cost of a job = labour cost + parts and materials cost
Labour days = total labour hours ÷ working hours in a day
Enter costs in your own currency, set on the Settings tab. Labour cost should be what the job actually costs you — the contractor's invoice, or in-house hours at your internal rate including on-costs. Enter out-of-hours work at the out-of-hours rate; a night call-out charged at a day rate makes emergency work look cheap and quietly undermines the case for prevention.
The cost by location chart adds labour and parts together for each building or area. It is a recorded cost, not a whole-life cost: it excludes helpdesk and management time, hired-in equipment you did not log, lost productivity in the space, and anything covered by a fixed-price contract that never reaches a job line. Treat it as a way of ranking locations against each other, not as a budget.
Open jobs and breaches
A job is open when its status is logged, assigned, attended or on hold. The open jobs table lists them oldest first and shows what each one is currently being measured against:
- A job that has not been attended is running against its response target.
- A job that has been attended but is not complete is running against its fix target.
The elapsed time is measured from the reported date and time to now, using this computer's clock, so the table changes through the day. A job past its target is flagged as breached with the hours it is over; one still inside its target shows the hours remaining. Jobs on hold awaiting parts keep counting — the clock does not stop because you are waiting for a supplier, and pretending otherwise is how a log ends up with six-month-old jobs nobody has looked at.
What this tool cannot tell you
It cannot tell whether a job was given the right priority, and priority drives every target. It cannot tell whether the time attended is when an engineer actually arrived or when somebody remembered to write it down; where attendance times are entered from memory at the end of the week, the response figures are fiction. It cannot tell whether the fault was fixed properly — only whether somebody said it was.
It also has nothing to say about planned preventive maintenance, statutory inspection and testing, or compliance certificates. A log full of reactive jobs on the same asset is evidence that the planned regime needs attention, but the planned regime itself belongs somewhere else.
Small numbers deserve care. With four emergencies in a quarter, one missed response takes the emergency service level from 100 % to 75 %. Read the counts printed next to every percentage before drawing a conclusion, and prefer a trend over several months to any single figure.
Printing and sharing
Print Report produces a report from whatever the current filter shows: header, headline figures, the four charts, the service level summary, the open jobs list, the full job log and your closing notes. Print to PDF to circulate it.
The scope line under the title states the filter in force. Clear the filters before issuing anything described as a full-period report, and check that the targets in the settings are the ones that applied during that period — changing a target changes every historical job measured against it.
Saving your work
Jobs, settings and the report header are written to this browser's local storage as you type, and the toolbar shows the time of the last save. That storage belongs to one browser on one computer: another browser, a private window, a second machine or a clean-up tool that clears site data will not have it.
Treat Export .json as the real save — one file containing everything, which Import .json restores anywhere. Export CSV gives you the job log for spreadsheet work, including the calculated response and fix hours, and it includes every filtered record, not only those drawn on screen. Reset asks twice, then erases everything this tool has stored. There is no undo.
Accuracy & disclaimer
This tool records what you enter and calculates from it. Every figure on the page depends on three things it cannot check: that the priority is right, that the three timestamps are real, and that the costs are complete.
Targets are yours, not a standard, and the results here are an internal management measure — not a contractual determination of whether a service level agreement was met, and not evidence of compliance with any statutory maintenance, inspection or testing duty. Those duties differ by country and by building type. Establish what applies to you and keep those records separately.