Assets Reference Public

Auditing Assets

Daily Operations Auditing Assets A physical audit is the moment you prove the registry is true — you find the asset, check who actually holds it and what shape it is in, and stamp…

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

Auditing Assets

A physical audit is the moment you prove the registry is true — you find the asset, check who actually holds it and what shape it is in, and stamp the record. Safekeep gives you a one-click Record audit action, an automatic next-audit schedule, an Audit due report, and a weekly reminder so audits never silently lapse.

ℹ️
Where it lives. Auditing happens on the asset detail page (ams/assets/view/…) via the Actions dropdown → "Audit asset". It requires the asset_audit permission ("Assets: Audit" in the Roles screen — see Permissions & Roles). The companion Audit due report is the second tab of Asset Reports at ams/reports/audit_due.

Why audit?

The registry records what should be true: this laptop is endorsed to Maria, it is in the Makati office, its condition is "Good". Between checkouts and check-ins, months can pass with nothing forcing anyone to look at the physical unit. A periodic audit closes that gap — it is the chain-of-custody assurance step that confirms the asset still exists, is still with its recorded holder, and is still in the recorded condition. For finance and compliance teams, a dated audit trail (every audit writes an Audit event into the asset's Activity timeline and the Activity log report) is what turns the asset list into evidence you can hand to an external auditor or use for a BIR-style fixed-asset count.

Auditing in Safekeep is a self-renewing loop: each recorded audit schedules the next one, and the report and reminder surface whatever falls due.

Record audit
stamps Last Audit = today
Next Audit set
today + cadence (default 90 days)
Due window opens
report (30 days) · reminder (7 days)
Sweep
locate, verify, handle exceptions
Audit again
loop restarts

Recording an audit

Open the asset's detail page and choose Actions → "Audit asset" (magnifying-glass icon). The menu item is always available on any asset — checked out or not, whatever its status label — as long as you hold asset_audit. The audit modal has four fields:

FieldInputRequiredNotes
"Asset" Read-only The asset's title, shown so you can confirm you opened the right record.
"Condition" Free text Optional Prefilled with the asset's current condition. If you type anything here, it overwrites the asset's condition field and is prepended to the audit note as "Condition: %s." Leave it blank to keep the stored condition untouched.
"Schedule next audit in (days)" Number Optional Prefilled from the asset_audit_cadence_days setting, falling back to 90 days. You can override it per audit — type 30 for a high-risk asset, 365 for furniture. A blank or zero value falls back to the setting, then to 90.
"Note (optional)" Textarea Optional Free-text findings — location observed, missing accessories, sticker replaced, etc. Becomes the body of the Audit event in the Activity timeline.

Submit with the footer button "Record audit".

ℹ️
No location field in the modal. The audit modal captures the condition, the next-audit schedule, and a note — nothing about location. If the audit reveals the asset has moved, update its "Location" separately via Edit on the asset form (mention the move in the audit note so the timeline tells the story).

What recording an audit does

Last Audit
last_audit_date is set to today (UTC date).
Next Audit
next_audit_date is set to today + the cadence days you entered. This is the date the Audit due report, the "Assets needing attention" widget, and the weekly reminder all watch.
Condition
Updated only if you typed something in the Condition field.
Activity timeline
One Audit event is written: chip Audit, title "Audited on %s" (the formatted date), body = your note — with "Condition: %s." prepended when a condition was entered. The event also appears in the Activity log report with type "Audit".
Confirmation
Toast "Audit recorded.", then the page reloads. The lifecycle summary panel's "Next Audit" column shows the new date immediately.
⚠️
The 90-day default has no settings screen. The cadence default comes from the asset_audit_cadence_days setting, but no UI anywhere writes that setting — unless an administrator inserts it directly in the database, the modal will always suggest 90 days. In practice, treat 90 as the system default and override the number per audit when you need a different cadence. (Same situation as asset_warranty_reminder_days — see Widgets, Reminders & Settings.)
????
Dates are also hand-editable. The Add/Edit asset modal has plain "Last Audit" and "Next Audit" datepickers. Editing them there changes the schedule without writing an Audit event — useful for seeding an initial audit calendar after an import, but a real audit should always go through Record audit so the timeline stays trustworthy.

The Audit due report

Open Asset Reports and pick the "Audit due" tab (ams/reports/audit_due). It lists every asset whose Next Audit date falls on or before today + 30 days — which inherently includes everything already overdue. Anyone with the base asset permission can view it (reports have no per-report permission).

ColumnWhat it shows
"Title"The asset title, linked to its detail page. Assets whose Next Audit is already in the past get a red Overdue badge appended.
"Asset Tag"The tag you'll match against the physical label.
"Category"The asset's category.
"Endorsed to"The current holder's name, or "-" if unassigned — this is who you visit during the sweep.
"Last Audit"When it was last audited.
"Next Audit"When the next audit is due. Default sort is by this column, ascending — most-urgent first.
ℹ️
Fixed window, no filters. The 30-day look-ahead is fixed in the server code — the report has no date-range, category, or user filters, and no Excel quick-export columns. For a filtered working list, use the XLSX export's Category / Location / Status filters instead and work from the spreadsheet.

Assets that never had an audit recorded and have no Next Audit date at all do not appear in the report — the report keys entirely on next_audit_date. Give every tracked asset an initial Next Audit date (via a first audit or the Edit form) to bring it into the cycle.


The weekly audit reminder

The cron job "Remind asset audit due" (slug remind_asset_audit_due) runs every Monday at 08:00 and looks for assets whose Next Audit date is on or before today + 7 days — overdue audits included. For each match it notifies the asset's current holder (the "Issued to" user) through the standard notification pipeline: an in-app web notification plus an email (general notification template, subject to the user's own notification preferences). The notification reads:

????
"An asset assigned to you is due for audit" — clicking it opens the asset's detail page.
  • Unassigned assets are skipped. The job only ever notifies a holder — an asset sitting in storage with no "Issued to" user generates no reminder. Those assets surface only through the Audit due report and the "Assets needing attention" widget (blue Audit due badge), so build your sweep from the report, not from who got nagged.
  • No dedupe. The reminder repeats every Monday until someone records an audit (or edits the Next Audit date forward). Persistent reminders are the feature, not a bug.
  • The holder can't necessarily record the audit themselves — recording requires the asset_audit permission. Unless the holder's role includes it, the reminder's practical effect is that the holder brings the asset to (or expects a visit from) the auditing team.

Like all Safekeep jobs, it is enabled by default and runs per tenant; administrators can inspect or trigger it with php erpat cron:list / cron:run remind_asset_audit_due. Full cron details are on Widgets, Reminders & Settings.


SOP — quarterly audit sweep

????
Purpose: physically verify every asset whose audit falls due this quarter and refresh its chain-of-custody record.
Who: an IT admin or asset custodian with asset_audit (plus asset_checkout, asset_update and asset_maintenance for handling exceptions).
Preconditions: Assets module enabled; assets carry Next Audit dates (a first audit or seeded dates); ideally assets are tagged with printed QR labels (Import, Export & Labels).
  1. Pull the audit-due list

    Open Asset Reports → "Audit due". It is already sorted by Next Audit ascending, so the top rows are the most overdue — anything with the red Overdue badge goes first. Note each row's "Endorsed to" holder and "Asset Tag"; that is your route sheet for the sweep.

  2. Locate the asset

    Visit the listed holder (or the asset's recorded Location for unassigned units). Match the physical unit against the record by Asset Tag — scan the QR label if one is printed, or compare the tag and serial number on the asset's detail page.

  3. Verify holder and condition

    Confirm the person actually holding the asset is the recorded "Endorsed to" user, and inspect the unit's physical condition. Check the detail page's lifecycle panel while you're there — an endorsement stuck at Assigned (never acknowledged) or at Return requested is worth chasing during the same visit (see Checkout & Check-in).

  4. Record the audit

    On the asset's detail page: Actions → "Audit asset". Update "Condition" if it changed, describe findings in the note, accept or adjust "Schedule next audit in (days)", and click "Record audit". Wait for the "Audit recorded." toast — Last Audit and Next Audit are now stamped and the asset drops off the due list.

  5. Handle exceptions

    When reality doesn't match the record, fix the record before moving on:

    Wrong holder or asset abandoned — check the asset in (Actions → "Check in asset") and, if appropriate, check it out to the real holder so the endorsement trail is honest.
    Damaged or faulty — set the status to In Repair or Broken via Edit or during check-in ("Set status to"), then log the repair on the Maintenance screen. Remember a non-deployable status blocks future checkout (see Status Labels).
    Cannot be found — set the status to Lost / Stolen and record the search details in the audit note or a comment so the trail shows when it was last seen.
    Moved — update the asset's "Location" via Edit.

  6. Close the sweep

    Re-open the Audit due report — it should now show only next quarter's early arrivals. Anything still listed is an unresolved exception. The Activity log report gives you the dated list of every "Audit" event recorded during the sweep, ready for your audit working papers.

More end-to-end procedures, including onboarding and offboarding sweeps, live in Workflows & SOPs.


Related pages

Was this guide helpful?

Report a content problem