Assets Reference Public

Workflows & SOPs

Process & Reference Workflows & SOPs The whole Safekeep module, wired together. This page walks you through seven end-to-end Standard Operating Procedures — from commissioning a…

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-22 Estimated time: 20 min 1 views
Process & Reference

Workflows & SOPs

The whole Safekeep module, wired together. This page walks you through seven end-to-end Standard Operating Procedures — from commissioning a newly purchased laptop, through endorsing it to an employee with a signed receipt, to auditing, repairing, and finally retiring it. Each SOP names the exact screen and button for every step, quotes the confirmations and error messages you will meet, and links to the feature page behind it.

????
How to use this page. Every SOP opens with a purpose box (who does it, and what must be true before you start), a row of the roles involved, then a numbered click-path. Where a screen blocks you with a guard message, that exact text is quoted so there are no surprises. Cross-links jump to the detailed feature page for the screen you are on.
⚠️
Two rules shape every SOP below. First, nothing is automated between status and assignment: changing an asset's Status Label never checks it in or reassigns it, and checking out never changes the status. The single automatic gate in the whole module is that checkout is blocked on a non-deployable status ("This asset's status is not deployable, so it cannot be checked out."). Second, "Confirm receipt" and "Request return" belong to the assignee (or an admin) — they have no permission key; everything else is permission-gated as listed in Permissions & Roles.

The master asset pipeline

Every SOP on this page is a slice of one long custody loop. Read left to right: you plan and procure the asset, register it in the registry, deploy it by endorsing it to a user, operate it (audit on a cadence, maintain as needed), depreciate its book value monthly, and eventually retire it. Every lifecycle action along the way — checkout, receipt, return request, check-in, audit, each new maintenance record — appends one event to the asset's Activity chain-of-custody timeline (plain Edit-form changes log as change-note comments instead).

Plan / Procure
buy it · pick model & category
Register
create / clone / import · tag it
Deploy
check out · confirm receipt
Operate
audit · maintain · return
Depreciate
monthly book-value compute
Retire
Archived · Lost / Stolen

Which SOP covers which stage

SOPPipeline stageCoversFeature pages
1 · Commission & register Register Add entry / Clone → tag & serial discipline → print labels → Ready to Deploy Adding & Editing Assets, Labels
2 · Bulk onboarding (CSV) Register Template / Snipe-IT export → upload → auto-created lookups → summary Import, Export & Labels
3 · Issue to an employee Deploy Check out → assignee confirms receipt (EULA caveat) → in use Checkout & Check-in
4 · Return & redeploy Operate Request return → check in with condition → In Repair or Ready to Deploy Checkout & Check-in
5 · Periodic audit cycle Operate Audit-due report → Record audit → next cadence → reminders Auditing Assets, Asset Reports
6 · Repair & maintenance Operate Log maintenance → warranty work → cost capture → manual status juggling Maintenance
7 · Retire / lost / dispose Retire Check in if assigned → Archived or Lost / Stolen → final note → delete vs archive Status Labels, Asset Detail
????
New to the module? Do the setup steps in Getting Started first (migrate, enable Settings → Manage Modules → Assets (Safekeep), grant permissions), and skim Core Concepts so the Category → Fieldset → Asset and endorsement flows make sense before you follow SOP 1. The stage between Operate and Retire — monthly book-value computation — needs no SOP: the compute_asset_depreciation cron does it unattended on the 1st of each month (see Depreciations and Widgets, Reminders & Settings).

SOP 1 — Commission & register new assets

????
Purpose. Get a newly purchased asset into the registry — titled, categorized, tagged, labeled, and standing at Ready to Deploy so it can be endorsed. Who. An IT admin or asset custodian with asset_create (plus asset_export to print labels; Clone is admin-only). Preconditions: the module is enabled; the Category you need exists (the seed ships Laptop, Phone, Monitor, Vehicle, Access card and Employee ID); the seven seeded Status Labels are in place.
IT Admin Asset Custodian Finance
  1. Prepare the catalog (once per hardware model)

    If this is a model you will buy repeatedly, register it first: Safekeep → Assets → Models tab → "Add Asset Model" with its Category, Manufacturer, Fieldset, Depreciation profile and EOL months. Picking that Asset Model on the asset form later auto-fills Category and Brand when they are still blank. Details on Asset Models.

  2. Open the add form

    Go to Safekeep → Assets (the Browse tab) and click "Add entry" in the toolbar (needs asset_create). Only two fields are hard-required: "Title" and "Category". Every field is documented on Adding & Editing Assets.

  3. Apply tag & serial discipline

    Fill "Asset Tag" and "Serial no." now, while the box is open in front of you.

    ⚠️
    The add form does not auto-generate a tag — only the CSV importer does (AST- + zero-padded id, e.g. AST-000123). The label PDF falls back to that same pattern when the tag is blank, and Asset Tag is the sole dedupe key for imports — untagged assets cannot be bulk-updated later. Assign a unique tag at registration, every time.
  4. Capture the procurement facts

    Enter "Cost", "Purchase date", "Warranty expiry date", "Warranty (months)", "Order Number" and "Vendor" while the invoice is at hand — Cost and Purchase date are also what qualifies the asset for the depreciation computation. Complete the category's "Additional fields" block; required custom fields reject the save with "%s is required."

    ℹ️
    These purchase fields are visible afterwards in the Edit modal and the XLSX export (Cost, Purchase date, Warranty expiry date and Vendor also appear as asset-list columns) — the asset detail page does not display photo, cost, purchase date, warranty, order number, condition or custom-field values.
  5. Set the status to Ready to Deploy

    Pick "Status" = Ready to Deploy. The form does not set a status for you, and an asset with no status at all skips the deployability guard at checkout — always set one so the status gate can protect you later. Click "Save" — toast: "The record has been saved." The Description you typed is pinned as the asset's first comment.

  6. Clone for identical units (admin only)

    Bought five identical laptops? Save the first, then open its row menu on Browse and click "Clone" (shown to admins only). The same modal opens with a "Duplicate" count field — set it to 4 and Save to create four more rows. Cloned rows are fresh creations with no change log or events. Edit each clone to give it its own Asset Tag and Serial no. — the clone copies the source's values.

  7. Print and affix the labels

    Back on Browse, click "Print asset labels" (needs asset_export), filter by Category and/or Location, and submit. PDFs open in new tabs at 102 labels per page — if nothing opens you will see the alert "Please allow popups for this website". Each label carries a QR code and a Code-128 barcode of the tag. Stick them on before the assets leave the storeroom. Full detail on Import, Export & Labels.


SOP 2 — Bulk onboarding via CSV / Snipe-IT import

????
Purpose. Load dozens or thousands of assets in one pass — from a spreadsheet you prepare, or straight from a raw Snipe-IT asset export. Who. A user with asset_import. Preconditions: the file is .csv, .xlsx or .xls; if you intend to re-import updates later, every row has a stable Asset Tag.
IT Admin Asset Custodian
  1. Get the template — or use a Snipe-IT export as-is

    On Safekeep → Assets → Browse, click "Import Assets". In the modal footer, click "Export Excel" to download assets-import-template.xlsx with the canonical headers. If you are migrating from Snipe-IT you can skip the template — the modal's own help says: "Upload a CSV or XLSX. A raw Snipe-IT asset export imports directly — headers are matched case-insensitively. Asset Tag is the dedupe key; tick "Update existing assets" to refresh matching rows (blank cells are ignored)."

  2. Prepare the file

    One row per asset. Headers are matched case-insensitively with generous aliases ("Serial" = "Serial Number", "Cost" = "Purchase Cost", …). Any extra column whose header matches a custom field in the row's category lands in the asset's Additional fields. The full header map is on Import, Export & Labels.

  3. Upload and choose the update mode

    Attach the file (a wrong type is rejected with "Please upload an excel file. (.csv / .xlsx)"). Tick "Update existing assets" if rows with a matching Asset Tag should be refreshed — blank cells never overwrite existing values. Left unticked, matching rows are skipped. Click "Next", then "Upload".

  4. Let the importer build the catalog for you

    Missing lookups are auto-created by exact (case-insensitive) name: Categories, Locations, Manufacturers (into the shared Brands list), Suppliers (shared Vendors), Asset Models, and Status Labels — auto-created status labels arrive as deployable, teal. New rows without a tag get one generated as AST-000123-style.

  5. Understand checkout-on-import

    If the file has Snipe-IT checkout columns ("Checked Out To" / "Username" / "Email" …), the importer resolves the assignee and imports the asset already Assigned.

    ⚠️
    Import checkouts write no "Endorsed" event — the assignment shows in the lifecycle summary but not in the Activity timeline. If the assignee cannot be resolved, the row imports unassigned with the warning assignee_unresolved. Ask imported holders to open their asset and "Confirm receipt" (SOP 3, step 5) so the custody chain gets a signed entry.
  6. Read the summary and spot-check

    The modal reports "Import complete: %d created, %d updated, %d skipped." and the table reloads. Spot-check a few rows — Category breadcrumbs, Status, Issued to — then print labels for the new arrivals (SOP 1, step 7).


SOP 3 — Issue an asset to an employee

????
Purpose. Endorse an asset to a staff member with a due date and get a confirmed — optionally signed — receipt on the custody record. Who. A custodian with asset_checkout performs the checkout; the employee themselves (or an admin) confirms receipt — that step has no permission key. Preconditions: the asset is registered, not currently checked out, and its status label is a Deployable type (Ready to Deploy or Deployed).
Asset Custodian IT Admin Employee

The endorsement lifecycle this SOP starts:

Ready
deployable status · unassigned
Assigned
checked out · awaiting receipt
Acknowledged
receipt confirmed · in use
  1. Open the asset and start the checkout

    On Safekeep → Assets → Browse, click the asset's Title to open its detail page, then Actions → "Check out asset".

    Two guards can stop you: "This asset is already checked out." and "This asset's status is not deployable, so it cannot be checked out." — the latter fires on Pending, In Repair, Broken, Lost / Stolen and Archived. An asset with no status at all is not blocked, which is why SOP 1 insists on setting one.
  2. Fill the checkout modal

    Pick "Endorsed to" (required — active staff users only; there is no checkout-to-location or checkout-to-asset), optionally a "Due / return by" date and a "Note (optional)", then click "Check out". Toast: "Asset checked out." The lifecycle panel now shows the holder with an Assigned chip, and the Activity timeline gains an Endorsed event titled "Checked out to %s".

    ℹ️
    Checkout does not change the Status Label. If your convention is to flip issued units to Deployed, do it manually via Actions → Edit → "Status".
  3. Tell the employee

    No notification is sent at checkout. The employee sees the asset on their "Assets assigned to me" dashboard widget (in the default widget set) with status Assigned — but hand-over works best with a direct heads-up: "your laptop is in the system, please confirm receipt." The automated reminders (crons) only cover return-due, warranty and audit.

  4. Physically hand the asset over

    Give the unit to the employee against the printed label/tag. The custody record still says Assigned — the confirmation is the employee's job, which keeps the receipt honest.

  5. Employee confirms receipt

    The employee opens the asset (widget link or Safekeep → Assets) and clicks Actions → "Confirm receipt". This entry appears only to the current assignee. If the asset's category requires acceptance, the modal shows the "Acceptance agreement" text, a required checkbox "I have read and accept the terms above." and a required "Type your full name to sign" field — skipping them is rejected with "Please tick the box to accept the terms." / "Please type your full name to accept the agreement." Otherwise the modal is a plain confirmation. Click "Confirm receipt".

    ⚠️
    EULA caveat: there is no admin screen to turn the acceptance agreement on — the category's require_acceptance flag and eula_text can only be set directly in the database. Until your administrator does that, "Confirm receipt" is a simple confirmation without terms or signature. See Categories.
  6. In use — the steady state

    Toast: "Receipt confirmed." The chip flips to Acknowledged and the timeline records an Acknowledged event ("Receipt confirmed.", with "Signed: %s" and a frozen copy of the accepted agreement when a signature was required). From here, if a "Due / return by" date was set, the holder gets the daily reminder "An asset assigned to you is due to be returned" starting 3 days before it — see Widgets, Reminders & Settings. Full lifecycle detail: Checkout & Check-in.


SOP 4 — Return & redeploy

????
Purpose. Recover an endorsed asset, record its condition, and route it back to circulation — or into repair. Who. The employee (assignee) may raise a return request; a custodian with asset_checkout performs the check-in. Preconditions: the asset is currently checked out.
Asset Custodian Employee IT Admin
  1. (Optional) Employee requests the return

    On the asset's detail page, the assignee clicks Actions → "Request return", adds a "Note (optional)", and submits. Toast: "Return requested"; the chip becomes Return requested and a Return requested event lands on the timeline. Nothing else changes — the employee keeps the asset until a custodian checks it in. This step is optional: a custodian can check in directly at any time.

  2. Receive the unit and open the check-in modal

    With the asset physically back in hand, a user with asset_checkout opens Actions → "Check in asset". Anyone with the permission may check in — it does not have to be whoever requested or performed the checkout.

  3. Record condition and set the next status

    The modal shows the read-only "Endorsed to", plus "Condition" (free text — overwrites the asset's stored condition if filled), "Set status to" (optional dropdown), and "Note (optional)". Inspect the unit and choose:

    Ready to Deploy
    Good conditionback to the shelf, available for SOP 3
    In Repair
    Needs workcontinue with SOP 6 — this status blocks re-checkout

    Click "Check in".

    ⚠️
    If you leave "Set status to" blank, the old status stays — e.g. an asset you marked Deployed remains "Deployed" while sitting unassigned on a shelf, and since Deployed is a deployable type it can be checked out again as-is. Statuses never move themselves; set one deliberately at every check-in.
  4. Verify the record

    Toast: "Asset checked in." The assignment is fully cleared (holder shows "Not assigned"), the endorsement chip reads Returned, and the timeline records a Returned event titled "Checked in from %s" naming the previous holder.

  5. Redeploy

    A Ready-to-Deploy unit re-enters the pool immediately — issue it to the next employee with SOP 3. A repaired unit comes back via SOP 6 step 6 first.


SOP 5 — Periodic audit cycle (quarterly)

????
Purpose. Physically verify, on a fixed cadence, that each asset exists, where it is, what condition it is in, and who holds it — and schedule the next check. Who. Anyone with asset_audit; typically an auditor or custodian walking the floor. Preconditions: assets carry a Next Audit date. Each recorded audit schedules the next one; for the very first cycle, seed the dates via the asset Edit form's "Last Audit" / "Next Audit" fields or simply audit everything once.
Auditor Asset Custodian IT Admin
  1. Pull the worklist from the Audit due report

    Go to Safekeep → Asset Reports and open the "Audit due" tab. It lists every asset whose Next Audit falls within the next 30 days (a fixed window), sorted soonest-first, with a red Overdue badge on anything already past due. Columns include Asset Tag, Category, and "Endorsed to" so you know whose desk to visit. Detail: Asset Reports. The "Assets needing attention" dashboard widget shows the same due items with a blue "Audit due" badge if you have added it.

  2. Verify the physical asset

    Find the unit, match the label's tag/QR against the record, confirm the holder matches "Endorsed to", and note its condition. Discrepancies branch out: unit missing → SOP 7 (Lost / Stolen); unit damaged → SOP 6 (repair); wrong holder → fix the custody record via check-in and re-checkout (SOP 4 then SOP 3).

  3. Record the audit

    On the asset's detail page, click Actions → "Audit asset". The modal shows "Condition" (prefilled with the current value — update it if changed), "Schedule next audit in (days)" (prefilled 90 — the quarterly default), and "Note (optional)" for findings. Click "Record audit". Toast: "Audit recorded."

    ℹ️
    The 90-day default comes from the setting asset_audit_cadence_days, which has no settings screen — unless your administrator inserts it directly in the database, the prefill is always 90. You can still type any number per audit.
  4. Confirm the schedule rolled forward

    The asset's Last Audit becomes today and Next Audit = today + the days you entered; the timeline records an Audit event titled "Audited on %s", with "Condition: %s." prepended to your note when a condition was entered.

  5. Let the reminders carry the cadence

    The weekly cron (Mondays 08:00) notifies each holder whose asset is due for audit within 7 days: "An asset assigned to you is due for audit". Unassigned assets never trigger a notification — they surface only on the Audit due report and the attention widget, so end each quarter by re-checking the report for stragglers. See Widgets, Reminders & Settings and Auditing Assets.


SOP 6 — Repair & maintenance

????
Purpose. Log repair, upgrade and support work against an asset with the vendor, dates and cost — flagging warranty jobs — and shepherd the asset's status through the shop and back. Who. A user with asset_maintenance (viewing the Maintenance list only needs the base asset permit). Preconditions: the asset exists in the registry; the servicing vendor exists in the shared Vendors list if you want to record it.
IT Admin Asset Custodian Vendor / Service Provider Finance
  1. Take the asset out of circulation — manually

    If the unit is endorsed and physically leaving its holder, check it in first (SOP 4) and use the check-in modal's "Set status to" = In Repair. If it is already in stock, open the asset and set Actions → Edit → "Status" = In Repair. In Repair is seeded as a Pending-type label — not deployable — so it blocks accidental checkout while the unit is away.

    ⚠️
    All status juggling in this SOP is manual. Logging a maintenance record never changes the asset's status or assignment, and completing the work never restores it — you set the status going in (this step) and coming out (step 6) yourself.
  2. Log the maintenance record

    Go to Safekeep → Maintenance and click "Add Maintenance" (needs asset_maintenance). Required: "Asset" and "Title". Classify with "Maintenance Type""Maintenance", "Repair", "Upgrade", "Calibration", "Hardware Support" or "Software Support" — pick the "Vendor", set the "Start date", and describe the job in "Notes". Click "Save""The record has been saved." Full field reference: Maintenance.

  3. Flag warranty work

    If the repair is covered, tick "Warranty work" — the list and the Maintenance log report show it as Yes/No, which is your evidence trail that covered repairs were claimed rather than paid. Check coverage first via the asset's "Warranty expiry date" / "Warranty (months)" in its Edit modal (these are not shown on the detail page). The attention widget and the daily 07:30 cron flag warranties expiring within 30 days — a good prompt to squeeze in covered repairs before coverage lapses.

  4. Capture the cost

    Enter "Cost" as a plain number (the module stores and shows it without a currency symbol — record your standing amounts in pesos consistently). Finance can total spend per vendor and per asset later from Safekeep → Asset Reports → "Maintenance log", which mirrors the Maintenance list read-only.

  5. Close the job with a completion date

    Maintenance has no status field — a record with a Start date and no Completion date is understood as ongoing. When the work is done, edit the record (pencil icon) and set "Completion date".

    ℹ️
    The asset's Activity timeline gets a Maintenance event only when the record is created — later edits (including the completion date) and even deletion do not update or remove that timeline entry. Treat the Maintenance screen, not the timeline, as the source of truth for job state and cost.
  6. Return the asset to service

    Update the asset's condition if it changed (quickest via a recorded audit, SOP 5 step 3, or the Edit form's "Condition" field), set Status back to Ready to Deploy via Actions → Edit, and redeploy with SOP 3. If the unit is beyond repair, set Broken and continue with SOP 7.


SOP 7 — Retire, lost / stolen & disposal

????
Purpose. Take an asset permanently out of circulation — end-of-life retirement, loss or theft — while keeping its chain of custody intact for auditors. Who. A custodian or admin with asset_checkout and asset_update (plus asset_audit for the closing audit in step 3); asset_delete only if you genuinely delete a record. Preconditions: the decision (retire / write off / report stolen) has been made; if the asset is endorsed, you know its last holder.
IT Admin Asset Custodian Finance Auditor
  1. If the asset is assigned, check it in — status included

    Setting a status never clears an assignment, so an endorsed asset must be checked in explicitly. Open Actions → "Check in asset" and do the whole retirement in one modal: record the final "Condition" ("water-damaged, board corroded"), use "Set status to" = Archived (retiring) or Lost / Stolen, and put the circumstances in "Note (optional)" — for a loss, name the last holder in the note, because check-in clears the assignment fields (the timeline's "Checked in from %s" event preserves who had it).

  2. If the asset is unassigned, set the terminal status directly

    Open Actions → Edit and set "Status" to Archived (planned retirement / disposal) or Lost / Stolen. Both are non-deployable types, so any future checkout attempt is stopped with "This asset's status is not deployable, so it cannot be checked out."

  3. Record the closing entry

    Give auditors one dated, human-readable closure on the record. The cleanest way is a final audit: Actions → "Audit asset", condition + note ("Retired 2026-07-03, disposed via accredited e-waste recycler, ref. DR-1042"), "Record audit". Alternatively post a comment (needs asset_comment) — comments can be deleted but never edited, so write it final. For stolen assets, keep the police-report or incident number in the note.

  4. Settle the finance side

    Pull the asset's last computed book value from Safekeep → Asset Reports → "Depreciation schedule" ("Current value" / "Computed at" columns) for your write-off entry. The module records custody, not accounting — the disposal journal itself lives in your books/BIR lapsing schedule outside Safekeep. Note that archived assets keep appearing in this report while they still have a cost, purchase date and depreciation profile. See Depreciations.

  5. Archive vs delete — choose deliberately

    Prefer Archived; reserve Delete for mistakes. An Archived asset stays searchable with its full Activity timeline, comments and audit trail, and still appears in exports — exactly what an auditor asks for years later. Delete (row menu → "Delete", needs asset_delete) is a soft delete — "The record has been deleted." — that removes the asset from every list, report and export with no in-use check and no undelete screen. Delete duplicate or erroneous records; archive real assets that reached end of life.
  6. The unit comes back? Reverse it

    A "lost" asset that turns up is one edit away from service: Actions → Edit → "Status" = Ready to Deploy, record an audit noting the recovery, and it is deployable again via SOP 3.


Quick reference — guards you will meet

WhereExact messageWhat it means
Checkout"This asset is already checked out."Check it in first (SOP 4) before endorsing to someone else.
Checkout"This asset's status is not deployable, so it cannot be checked out."The status label's type is Pending, Undeployable or Archived. Change the status if deployment is really intended.
Acknowledge / Return / Check-in"This asset is not currently assigned."The lifecycle action needs an active endorsement.
Acknowledge (EULA)"Please tick the box to accept the terms." / "Please type your full name to accept the agreement."Acceptance and signature are mandatory when the category requires acceptance.
Asset form"%s is required." / "%s must be a number."A category custom field failed validation.
Import"Please upload an excel file. (.csv / .xlsx)"Only .csv / .xlsx / .xls files are accepted.
Label printing"Please allow popups for this website"The label PDFs open in new tabs; unblock popups and retry.

For every term and status vocabulary used above — endorsement statuses, deploy types, the seven seeded labels — see Glossary & Legends. For the full permission matrix behind each SOP's "Who", see Permissions & Roles. When a step misbehaves, FAQ & Troubleshooting lists the common causes.

Was this guide helpful?

Report a content problem