8c86c988c1
Uniform stock management for healthcare linen rooms: the coordinator app, the phone counter and the staff app, for your own server. Built from 2d04e45 on 2026-09-15. Licensed under the Functional Source License (FSL-1.1-ALv2).
133 lines
6.4 KiB
TypeScript
133 lines
6.4 KiB
TypeScript
/* Plain-English names for audit ops, and the ops worth a mark in a list of hundreds. Moved here from
|
||
* the old /app/activity page. */
|
||
export const LABELS: Record<string, string> = {
|
||
"issue.create": "Issued garments",
|
||
"issue.return": "Recorded a return",
|
||
"issue.exchange": "Exchanged a size",
|
||
"issue.delete": "Deleted an issue",
|
||
"issue.receipt": "Attached a signed receipt",
|
||
"stocktake.apply": "Committed a stocktake",
|
||
"stock.reorder": "Changed a par level",
|
||
"stock.moves": "Adjusted stock",
|
||
"stock.orderFlagged": "Raised an order from low stock",
|
||
"catalog.add": "Added a garment",
|
||
"catalog.update": "Edited a garment",
|
||
"catalog.delete": "Deleted a garment",
|
||
"catalog.duplicate": "Duplicated a garment",
|
||
"catalog.bulk": "Bulk-changed the catalogue",
|
||
"catalog.variantAdd": "Added a size",
|
||
"catalog.removeSize": "Removed a size",
|
||
"barcode.bind": "Bound a barcode",
|
||
"barcode.unbind": "Unbound a barcode",
|
||
"order.create": "Created an order",
|
||
"order.receive": "Received an order",
|
||
"order.status": "Changed an order’s status",
|
||
"order.update": "Edited an order",
|
||
"order.duplicate": "Duplicated an order",
|
||
"order.lineAdd": "Added an order line",
|
||
"order.lineQty": "Changed an order quantity",
|
||
"order.lineRemove": "Removed an order line",
|
||
"staff.save": "Added or edited a staff record",
|
||
"staff.patch": "Edited a staff record",
|
||
"staff.delete": "Deleted a staff record",
|
||
"dept.save": "Edited a department",
|
||
"dept.delete": "Deleted a department",
|
||
"supplier.add": "Added a supplier",
|
||
"supplier.update": "Edited a supplier",
|
||
"supplier.remove": "Removed a supplier",
|
||
"location.save": "Added or edited a location",
|
||
"location.delete": "Deleted a location",
|
||
"location.place": "Placed stock on a shelf",
|
||
"approval.add": "Recorded a manager's approval",
|
||
"approval.remove": "Removed a manager's approval",
|
||
"alteration.add": "Logged an alteration",
|
||
"alteration.advance": "Advanced an alteration",
|
||
"alteration.remove": "Removed an alteration",
|
||
"handin.add": "Recorded a hand-in",
|
||
"pickup.contacted": "Marked a pickup contacted",
|
||
"pickup.pickedUp": "Marked a pickup collected",
|
||
"pickup.deliver": "Delivered to a ward",
|
||
"request.raise": "Raised a request for somebody",
|
||
"request.pick": "Started picking a request",
|
||
"request.hold": "Held a request at the counter",
|
||
"request.round": "Put a request on the ward round",
|
||
"request.collected": "Handed a request over",
|
||
"request.reply": "Wrote back about a request",
|
||
"request.reassign": "Sent a request to a different approver",
|
||
"request.withdraw": "Withdrew a request",
|
||
"damage.handedIn": "Took a damaged garment back",
|
||
"dispute.resolve": "Closed a record query",
|
||
"notice.set": "Changed the ward notice",
|
||
"kitcheck.open": "Started a kit check",
|
||
"kitcheck.close": "Closed a kit check",
|
||
"waitlist.offer": "Offered a waiting size",
|
||
"staff.selfCode": "Made a staff-app activation code",
|
||
"staff.selfClear": "Cancelled an activation code",
|
||
"staff.selfUnlink": "Removed somebody’s staff-app access",
|
||
"users.add": "Invited a user",
|
||
"users.update": "Changed a user",
|
||
"users.remove": "Removed a user",
|
||
"settings.update": "Changed settings",
|
||
"import.rows": "Imported data",
|
||
"backup.restore": "Restored a backup",
|
||
"data.reset": "Reset facility data",
|
||
"data.wipeActivity": "Wiped activity history",
|
||
"me.password": "Changed their own password",
|
||
"me.profile": "Edited their own profile",
|
||
"me.deleteAccount": "Deleted their own account",
|
||
|
||
/* Signing in and out, and the second factor.
|
||
*
|
||
* The page promises "every change made in this facility", and who reached the account is part of
|
||
* that — a stock adjustment nobody disputes reads differently next to a run of failed sign-ins
|
||
* from an address nobody recognises. Without these lines the trail rendered the raw op names. */
|
||
"auth:signin": "Signed in",
|
||
"auth:signin.failed": "A failed sign-in",
|
||
"auth:signin.refused": "Sign-in refused (deactivated)",
|
||
"auth:signout": "Signed out",
|
||
"auth:signup": "Created the facility",
|
||
"auth:password.reset": "Set a new password from a reset link",
|
||
"2fa:setup": "Started two-factor setup",
|
||
"2fa:enable": "Turned two-factor on",
|
||
"2fa:disable": "Turned two-factor OFF",
|
||
"2fa:regenerate": "Made new recovery codes",
|
||
|
||
/* The staff app. Every one of these is somebody on a ward changing something the linen room has
|
||
* to live with, so they belong in the same trail rather than a second one nobody opens. */
|
||
"staff:signin": "Signed in to the staff app",
|
||
"staff:signin.failed": "A failed staff-app sign-in",
|
||
"staff:signin.refused": "Staff-app sign-in refused (deactivated)",
|
||
"staff:signout": "Signed out of the staff app",
|
||
"staff:activate": "Claimed their own record",
|
||
"staff:request.create": "Raised a uniform request",
|
||
"staff:request.approve": "Approved a request (in the app)",
|
||
"staff:request.decline": "Declined a request (in the app)",
|
||
"staff:request.approve.email": "Approved a request (email link)",
|
||
"staff:request.decline.email": "Declined a request (email link)",
|
||
"staff:request.message": "Wrote about a request",
|
||
"staff:round.sign": "Signed for a ward delivery",
|
||
"staff:round.claim": "Confirmed a ward bag was collected",
|
||
"staff:damage.report": "Reported damage",
|
||
"staff:dispute.raise": "Said their record is wrong",
|
||
"staff:waitlist.join": "Joined a waiting list",
|
||
"staff:waitlist.leave": "Left a waiting list",
|
||
"staff:waitlist.accept": "Took up a waitlist offer",
|
||
"staff:kit.answer": "Answered a kit check",
|
||
"staff:account.password": "Changed their own staff-app password",
|
||
};
|
||
|
||
/** Operations worth noticing in a list of hundreds. */
|
||
export const NOTABLE = new Set([
|
||
"catalog.delete", "catalog.removeSize", "staff.delete", "dept.delete", "location.delete", "supplier.remove",
|
||
"users.add", "users.remove", "users.update", "settings.update", "backup.restore",
|
||
"data.reset", "data.wipeActivity", "me.deleteAccount", "catalog.bulk",
|
||
// Turning the second factor off weakens every account in the facility, and a refused sign-in is
|
||
// somebody with a password trying to get in after their access was taken away. Both are worth
|
||
// catching an eye in a list of hundreds.
|
||
"2fa:disable", "auth:signin.refused", "staff:signin.refused",
|
||
// The two ends of staff-app access: selfCode mints a credential that opens somebody's record,
|
||
// selfUnlink takes their account away. Both are the linen room reaching into a person's access
|
||
// rather than into stock, which is exactly what an admin is looking for when they open this.
|
||
"staff.selfCode", "staff.selfUnlink",
|
||
]);
|