User Accounts
| Name | Username | Department / Section | Role | Status | Actions |
|---|
Department List
| Department Name | Manager | Status | Notes | Actions |
|---|
Department List — Section
Sections belong under a department (e.g. Production 1 → Pharma Tab / PTB). Guests scoped to a section only see that section’s records.
| Department | Section Name | Code | Manager | Status | Actions |
|---|
Admin MFA (Authenticator)
Protect the admin account with a time-based one-time password (Google Authenticator, Authy, 1Password, etc.).
Checking status…
Session Settings
Auto-logout applies to all users after a period of no mouse, keyboard, or touch activity. Only administrators can change this value.
Role-based Access Control
Configured permissions by role| Capability | Admin | User | Purchasing | Guest |
|---|---|---|---|---|
| Sign in | ✓ | ✓ | ✓ | ✓ (if approved) |
| View all departments | ✓ | ✓ | ✓ | Scoped only |
| View equipment → PMS | ✓ | ✓ | ✓ | Scoped |
| Create / edit / delete records | ✓ | ✓ | — | — |
| Calibration pricing (view) | ✓ | ✓ | ✓ | — |
| Calibration pricing (save) | ✓ | — | — | — |
| Admin / users / settings | ✓ | — | — | — |
| Audit log | ✓ | — | — | — |
| Print footer (signatures) | ✓ | ✓ | ✓ | — |
Access events (login, login failed, access denied, role changes) are written to the Audit Log below. Assign roles under Users. Guest self-registration stays pending until approved. RBAC + ABAC: decisions use role plus attributes (department, section). Guest read access is filtered by department/section on the Worker and client. Writes blocked for guest/purchasing; pricing hidden from guests. Guest read access is filtered by department/section on the Worker and client. Writes blocked for guest/purchasing; pricing hidden from guests.
Audit Log
Server-side trail of create / update / delete / import / login / access denied / role changes across all modules. Use Undo on a delete event to restore equipment or calendar records from the saved snapshot. Times shown in Philippines time (UTC+8, Asia/Manila).
Create = new record; Update shows field-level changes (From → To); click Details for the full diff.
Use Backup JSON or Backup CSV before Clear. Requires Worker migration 0007_audit_logs.sql.
| Time | User | IP | Action | Entity | Summary / Changes | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Recurring Maintenance Alerts (Email)
Providers: Mailjet, EngineMailer, Resend, or SendGrid (HTTP API — works from Cloudflare Workers).
EngineMailer: set Worker secret EMAIL_API_KEY = your EngineMailer UserKey (Profile), and optional EMAIL_API_SECRET = secondary APIKey.
From address must be a registered sender in EngineMailer.
No API? Use Manual (Roundcube): generate reminder text, then send from enggcal@lcpi.com.ph.
Department email templates
Dynamic placeholders (replaced when the email is sent):
{{label}} {{count}} {{overdueCount}} {{dueTodayCount}} {{dueSoonCount}}
{{department}} {{departmentClause}} {{departments}}
{{controlNos}} {{equipmentNames}} {{firstControlNo}} {{firstEquipment}}
{{listText}}
{{date}} {{time}} {{datetime}}
{{datePh}} {{timePh}} {{datetimePh}}
{{year}} {{appName}}.
Optional CC = manager emails (comma-separated) for that department.
API key: unknown · Last run: —
Print Header & Logo
Primary logo on the left (e.g. lcpi-logo.png), secondary / Master Copy stamp on the right (e.g. lcpi-master.png). Matches official Calibration Acknowledgement / calendar print headers. Upload files to the site root or paste a URL.
Header layout
Header text sizes
Font sizes for calendar and report print headers (points). Applied when you save.
Data Management
Server data lives in Cloudflare D1. Use these tools carefully in production.
Export downloads a full JSON backup: users, departments, equipment, cleanroom, filter replacement, thermal, compressed, PMS, requal, calibration prices, and settings. Import replaces matching collections (admin only). Audit logs use a separate Backup button.