Assets Reference Public

Maintenance

Daily Operations Maintenance Record every repair, upgrade, calibration, and support engagement against an asset — what was done, by which vendor, when it started and finished, and…

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-22 Estimated time: 10 min 1 views
Daily Operations

Maintenance

Record every repair, upgrade, calibration, and support engagement against an asset — what was done, by which vendor, when it started and finished, and what it cost. The Safekeep → Maintenance screen (ams/maintenances) is the module's service logbook and feeds both the asset's Activity timeline and the Maintenance log report.

ℹ️
Maintenance records are a log, not a workflow. There is no scheduled / in-progress / completed status field and no assignment of a technician — progress is implied purely by the dates: a record with a Start date but no Completion date is still open; filling in the Completion date marks it done.

Where it lives & who can use it

Maintenance sits in the Safekeep sidebar group (wrench icon), between Custom Fields and Asset Reports. Opening it requires the Assets module to be enabled and the base asset permission ("Assets: Entries") — but seeing the list and changing it are gated separately:

ActionPermission keyRoles-editor label
View the Maintenance list (and the Maintenance log report)assetAssets: Entries
Add, edit, or delete a maintenance recordasset_maintenanceAssets: Maintenance

Without asset_maintenance, the "Add Maintenance" button and the per-row edit/delete icons are hidden — the screen becomes read-only. See Permissions & Roles for the full RBAC table.

⚠️
Recently tightened. Create/update/delete used to be allowed with just the coarse asset view permit; the module now requires the dedicated asset_maintenance permission for all write actions. If a teammate suddenly lost the "Add Maintenance" button after an upgrade, grant them Assets: Maintenance in the Roles editor.

The Maintenance list

The page is a single panel titled "Maintenance" with one button in the title bar — "Add Maintenance" (shown only with the asset_maintenance permission). The table sorts by Start date, newest first, has a refresh button, and offers an Excel export of all eight data columns. There are no filter controls on this screen — no date range, asset, or type filter.

ColumnWhat it shows
AssetThe linked asset's title. Plain text here — not a link to the asset page.
TitleYour name for the job, e.g. "Replace SSD", "Annual aircon service".
Maintenance TypeThe stored type shown Title-Cased (e.g. "Hardware Support"); blank if none was picked.
VendorThe supplier's name (from the shared Vendors master).
Start dateFormatted date, or "-" if empty.
Completion dateFormatted date, or "-" if empty. Empty = the job is still open.
CostPlain number with decimals (no currency symbol), or "-" if empty. Enter it in your books' currency, e.g. ₱ for Philippine ledgers.
Warranty work"Yes" / "No" — whether the work was covered by warranty (i.e. at no cost to you).
Options (☰)Edit pencil ("Edit") and delete × ("Delete", with a confirmation prompt). Both appear only with asset_maintenance.

Deleting a record is a soft delete — on success you get "The record has been deleted." (failure: "Record cannot be deleted!"). Saving shows "The record has been saved." and updates the row in place without a page reload.


The Add / Edit Maintenance modal

"Add Maintenance" (or the row's edit pencil) opens a standard modal form with a single "Save" footer button. Fields, top to bottom:

FieldInputRequiredNotes
Asset Select2 dropdown of all assets by title (first option "-") Required Client-side message: "This field is required."; also enforced server-side. Any asset can be picked — the list is not limited by status or assignment.
Title Text Required What the job is, in a few words.
Maintenance Type Select2 Optional One of the six types below, or "-" for none.
Vendor Select2 of vendors (first option "-") Optional Drawn from the shared Vendors master (also reachable at ams/vendors); the outside shop or service provider doing the work.
Start date Date picker Optional When the work began (or the asset was handed over). Also used as the date of the Activity event — see below.
Completion date Date picker Optional Fill in when the work is done — this is the only "completed" marker there is.
Cost Text Optional Stored to 2 decimals. There is no numeric validation on the input — whatever you type is passed straight to the database, so enter a plain number (no currency symbol or thousands separators).
URL Text Optional E.g. a link to the vendor's ticket or invoice. Quirk: it is saved but currently displayed nowhere — not in the list, not in the reports. Keep the reference in Notes too if you need to see it later.
Warranty work Checkbox Optional Defaults unchecked. Tick when the repair is covered by the manufacturer's/vendor's warranty; it drives the list's Yes/No column.
Notes Textarea Optional Not shown in the list, but it becomes the body of the Activity timeline event on the asset — a good place for diagnosis and resolution details.

The six maintenance types

The Maintenance Type dropdown offers exactly these options:

Maintenance Repair Upgrade Calibration Hardware Support Software Support
Maintenance
Routine upkeepPreventive/scheduled care — cleaning, servicing, health checks.
Repair
Fixing a faultSomething broke and was fixed — screen swap, board replacement.
Upgrade
ImprovementRAM/SSD upgrades, part replacements that improve the asset.
Calibration
Precision tuningInstruments, scales, printers — anything needing periodic calibration.
Hardware Support
Vendor hardware engagementPaid/contracted hardware support incidents.
Software Support
Vendor software engagementOS/firmware/application support incidents.

The type is free of side effects — it is a reporting label only. The app ships just the six labels and shows the type as plain text; the badge colors and one-line descriptions above are this guide's suggested convention for choosing between them.


What a maintenance record writes to the asset's Activity

When you create a maintenance record, the module also writes a Maintenance event into the asset's chain-of-custody log (asset_events):

Event type
"Maintenance" (as shown in the Activity timeline and the Activity log report)
Event title
The maintenance record's Title
Event body
The maintenance record's Notes
Event date
The Start date (or the moment of creation, if no start date was set)
⚠️
The timeline event is written once, on create only. Editing a maintenance record later (new title, notes, dates) does not update the timeline entry, and deleting the maintenance record does not remove it — the original Activity event stays as first written. If accuracy in the timeline matters, get the record right before you first save it.

Where maintenance history is visible (and where it isn't)

????
This screen

The Maintenance list is the full editable history across all assets — the only place to edit or delete records.

Asset Reports → "Maintenance log": the same eight columns, read-only, with Excel export — built for finance and audit reviews.

????
NOT the asset detail page

An asset's detail page shows no per-asset maintenance list — only the single "Maintenance" event per record in its Activity timeline.

ℹ️
Looking up one asset's service history? Open the Maintenance screen (or the Maintenance log report) and use the DataTable's search box with the asset's title — there is no per-asset maintenance tab in the current build.

The Maintenance log report, in brief

Under Safekeep → Asset Reports, the first tab is "Maintenance log" (ams/reports/maintenance_log — it is also where the Asset Reports menu item lands). It answers: "What maintenance/repair work has been done, on what, by which vendor, and what did it cost?" Columns are identical to this screen minus the options column — Asset, Title, Maintenance Type, Vendor, Start date, Completion date, Cost, Warranty work — sorted by Start date descending, with Excel export and no filters. Anyone with the base asset permission can view it. Full details on Asset Reports.


Tip: park the asset "In Repair" while it's being serviced

Maintenance records don't touch the asset's status — but you can (and should) pair them with the seeded In Repair status label. "In Repair" has deploy type Undeployable, and the module blocks checkout of any asset whose status is not Deployable:

"This asset's status is not deployable, so it cannot be checked out."

So while a device sits at the repair shop, setting it to In Repair guarantees nobody endorses it to a user by mistake. When it comes back, set it back to Ready to Deploy (or Deployed if it goes straight back to its holder).

⚠️
Both steps are manual. Creating a maintenance record never changes the asset's status, and changing the status never checks the asset in, reassigns it, or closes a maintenance record — there is no status-driven automation in the module. The only status gate is the checkout block quoted above. Change the status yourself via the asset's Edit modal or the check-in modal's "Set status to" dropdown. See Status Labels and Checkout & Check-in.

SOP: a full repair cycle

????
Purpose: take a faulty endorsed device out of service, get it repaired, log the work and cost, and return it to duty with a complete paper trail.
Who: IT admin / asset custodian with asset, asset_maintenance, asset_update, and asset_checkout permissions.
Preconditions: the asset exists in the registry; if an outside shop does the work, the vendor exists in the Vendors master (ams/vendors).
  1. Recover the device from its holder (if endorsed)

    On the asset's detail page, use "Check in asset" to end the current endorsement. In the check-in modal, use "Set status to" and pick In Repair in the same step. (If the asset is unassigned, just edit it and set the status to In Repair.)

  2. Open a maintenance record

    Go to Safekeep → Maintenance and click "Add Maintenance". Pick the asset, give the job a clear Title, choose a Maintenance Type (usually Repair), select the Vendor, and set the Start date. Put the fault description in Notes — it becomes the Activity event's body. Leave Completion date empty. Save.

  3. While the work is in progress

    The open record (no completion date) is your "in service" marker, and the In Repair status keeps the asset out of checkout. Anyone with the asset permission can see the job on this screen or the Maintenance log report.

  4. Close out the job

    When the device comes back, edit the record: set the Completion date, enter the final Cost (a plain number), and tick "Warranty work" if the vendor covered it. Remember the Activity timeline keeps the original event — the authoritative closed record is the row on this screen.

  5. Return the asset to service

    Edit the asset and set its status back to Ready to Deploy. If it goes back to the same user, run "Check out asset" again (checkout requires a Deployable status) and have the holder "Confirm receipt" — see Checkout & Check-in.

  6. Verify the trail

    The asset's Activity timeline now shows Check-in → Maintenance → Checkout events, and the Maintenance log report carries the cost line for finance.


Known quirks on this screen

QuirkPractical impact
The URL field is saved but never displayed.Don't rely on it — duplicate important links into Notes.
Edits and deletes don't sync the asset's Activity timeline.The "Maintenance" event reflects the record as first created, forever.
No status/lifecycle field on maintenance records.An empty Completion date is the only "still open" indicator.
Cost has no numeric input validation.Enter plain numbers only — the value is saved as typed into a 2-decimal numeric column, so symbols or separators may not be stored as intended.
No filters on the list or the report.Use the table's search box; export to Excel for heavier analysis.
Asset names in the list are plain text, not links.Open the asset from the Asset Registry when you need its detail page.

Related pages

Was this guide helpful?

Report a content problem