Erlyc
Erlyc
Toggle sidebar
Log in
Log in
Report this showcase item

Tell us what is wrong — spam, offensive content, stolen work…

Shared artifacts

Small equipment maintenance application for office and workshop teams

S

Stormgulf

published 2 weeks ago · 31 views

5.0 (1)

Small equipment maintenance application for office and workshop teams — Screen map
Project anatomy

Built with deepseek/deepseek-v4-flash-0731

15
Entities
15
DB tables
29
Screens
7
Modules
15
Models
18
Relations
4
Roles
10
Requirements
4
Journeys
0 comments
Log in to like, rate, or join the conversation. Log in
Original prompt

Create a small equipment maintenance application for office and workshop teams where employees can report faults, supervisors can approve and prioritize requests, technicians can manage repairs, and administrators can maintain assets, locations, suppliers, and user access. Support one-to-one links such as an asset and its warranty record, one-to-many links such as a location containing multiple assets and a request containing multiple work updates, many-to-many links between technicians and work orders or suppliers and supported asset types, and hierarchical links between parent and sub-assets. Include role-based dashboards, status workflows, task assignments, comments, photos and document attachments, due-date and escalation notifications, searchable and filterable lists, maintenance history, basic cost and performance reports, CSV import and export, audit history, and a mobile-friendly interface for technicians working on site.

Specification

Create a small equipment maintenance application for office — Specification

Product overview

A small equipment maintenance application for office and workshop teams that enables employees to report faults, supervisors to approve and prioritize requests, technicians to manage repairs, and administrators to maintain assets, locations, suppliers, and user access. The system supports role-based dashboards, status workflows, task assignments, comments, photo and document attachments, due-date and escalation notifications, searchable and filterable lists, maintenance history, basic cost and performance reports, CSV import and export, audit history, and a mobile-friendly interface for technicians working on site.

Problem statement

Office and workshop teams lack a centralized system to track equipment faults, manage repair workflows, and maintain asset history. Without structured roles and status workflows, fault reports get lost, priorities are unclear, and maintenance costs are not tracked. A dedicated application is needed to streamline reporting, approval, assignment, and repair processes while providing visibility through dashboards and reports.

Target users & roles

  • Employee — Office or workshop staff who report equipment faults and can view the status of their requests.
  • Supervisor — Team leads or managers who approve fault reports, set priorities, and assign work orders to technicians.
  • Technician — Maintenance staff who manage repairs, update work orders, attach photos and documents, and work on site via mobile interface.
  • Administrator — IT or facility managers who maintain assets, locations, suppliers, user access, and view reports.

User journeys

Employee reports a fault and tracks repair

  1. Employee logs in and navigates to the 'Report Fault' screen.
  2. Employee selects the asset from a searchable list, enters a description, and optionally attaches a photo.
  3. Employee submits the fault report, which creates a new request with status 'Open'.
  4. Employee receives a confirmation notification with the request ID.
  5. Employee later views the request list, sees status updated to 'In Progress' and assigned technician name.
  6. Employee receives a notification when the request is marked 'Resolved' and can add a comment if needed.

Technician manages work orders and collaborates

  1. Technician logs in and views assigned work orders on the mobile dashboard.
  2. Technician selects a work order, views details, and adds a comment to request clarification.
  3. Technician updates work order status to 'In Progress' and adds a work update with photo attachment.
  4. Technician marks work order as 'Resolved' after repair, and the related request status auto-updates.
  5. Technician receives a new work order assignment from a supervisor via notification.

Functional requirements

FR-1: Fault Reporting

Employees must be able to report equipment faults by selecting an asset, providing a description, and optionally attaching photos or documents. This is the primary entry point for maintenance requests and ensures all faults are captured centrally.

Acceptance criteria:

  • Given an authenticated employee on the Report Fault screen, when they select an asset, enter a description of at least 10 characters, and click Submit, then a new request is created with status 'Open' and a unique request ID is displayed.
  • Given an authenticated employee on the Report Fault screen, when they attach a photo (JPEG, PNG, max 10 MB) and submit, then the photo is stored and linked to the request.

FR-2: Request Approval and Prioritization

Supervisors must be able to view open requests, approve or reject them, and set priority levels (Low, Medium, High, Critical). This ensures that only legitimate faults are worked on and that urgent issues are addressed first.

Acceptance criteria:

  • Given a supervisor viewing the pending requests list, when they select a request and click Approve, then the request status changes to 'Approved' and the priority field becomes editable.
  • Given a supervisor viewing an approved request, when they set priority to 'Critical' and save, then the request priority is updated and the request appears at the top of the technician's work queue.

FR-3: Work Order Assignment and Management

Supervisors can assign approved requests to technicians as work orders. Technicians can view their assigned work orders, update status (In Progress, On Hold, Resolved, Closed), add work updates, and attach photos or documents. This enables end-to-end task tracking.

Acceptance criteria:

  • Given a supervisor viewing an approved request, when they select a technician from the list and click Assign, then a work order is created with status 'Assigned' linked to the technician and the request.
  • Given a technician viewing their work orders, when they update status to 'In Progress' and add a work update comment, then the work order status changes and the update is recorded with timestamp.

FR-4: Asset and Location Management

Administrators must be able to create, edit, and deactivate assets and locations. Assets can be linked to a location, have a parent asset (hierarchical), and have a one-to-one warranty record. This maintains the asset inventory and supports hierarchical relationships.

Acceptance criteria:

  • Given an administrator on the Assets screen, when they create a new asset with name, serial number, location, and optional parent asset, then the asset is saved and appears in the asset list.
  • Given an administrator viewing an asset detail, when they link a warranty record with start date, end date, and supplier, then the warranty is stored as a one-to-one record linked to the asset.

FR-5: Notifications and Escalation

The system must send notifications (in-app and email) for due-date reminders and escalation when a work order exceeds its expected completion date. This ensures timely response and accountability.

Acceptance criteria:

  • Given a work order with a due date, when the due date is 24 hours away and the status is not 'Resolved' or 'Closed', then the assigned technician receives an in-app notification and an email reminder.
  • Given a work order that is overdue by 48 hours, when the system checks daily, then the supervisor receives an escalation notification with the work order details.

FR-6: Search, Filter, and CSV Import/Export

Users must be able to search and filter requests, assets, and work orders by various criteria (status, priority, date range, keyword). Administrators can import assets via CSV and export any list to CSV. This supports data management and reporting.

Acceptance criteria:

  • Given a user on the requests list, when they enter a keyword in the search bar and select a status filter, then the list displays only requests matching both criteria.
  • Given an administrator on the Assets screen, when they upload a CSV file with columns name, serial_number, location_name, then the system creates assets and links them to existing locations; if a location name does not exist, the system creates a new location with that name automatically.

FR-7: Basic Cost and Performance Reports

Administrators must be able to view reports showing total maintenance cost per asset, average resolution time, and number of requests by priority. This provides insight into maintenance efficiency and cost tracking.

Acceptance criteria:

  • Given an administrator on the Reports screen, when they select an asset and a date range, then the report displays total actual cost, number of work orders, and average resolution time in days.
  • Given an administrator on the Reports screen, when they generate a performance report, then the report shows a table of requests grouped by priority with counts and average resolution times.

FR-8: Audit History

All state changes, assignments, and updates on requests and work orders must be recorded in an audit log with timestamp, user, and action. This provides traceability and compliance.

Acceptance criteria:

  • Given any status change on a request, when the change is saved, then an audit entry is created with request_id, previous_status, new_status, user_id, and timestamp.
  • Given an administrator viewing the audit log for a request, when they filter by date range, then the log displays only entries within that range.

FR-9: Comments on Requests and Work Orders

Users must be able to add comments to requests and work orders to facilitate communication. Comments are visible to all authorized users and are recorded with timestamp and author.

Acceptance criteria:

  • Given an authenticated user viewing a request detail, when they enter a comment and submit, then the comment is saved and displayed in the comment thread with the user's name and timestamp.
  • Given an authenticated user viewing a work order detail, when they enter a comment and submit, then the comment is saved and displayed in the comment thread with the user's name and timestamp.

FR-10: Many-to-Many Technician Work Order Assignment

Supervisors can assign multiple technicians to a single work order, and a technician can be assigned to multiple work orders. This supports collaborative repairs and flexible scheduling.

Acceptance criteria:

  • Given a supervisor assigning a work order, when they select two technicians from the list and confirm, then both technicians are linked to the work order via the TechnicianWorkOrder junction table.
  • Given a technician viewing their work orders, when they have been assigned to a work order along with another technician, then the work order appears in both technicians' lists.

Screen / page inventory

  • Dashboard — Role-based overview showing key metrics and pending items for the logged-in user.
    • Elements: Summary cards showing counts of open requests, assigned work orders, overdue items (role-specific)., Recent activity feed showing latest updates on relevant requests/work orders.
  • Request List and Detail — Searchable, filterable list of fault requests with ability to view details, approve, assign, and update.
    • Elements: Filter bar with status, priority, date range, and keyword search., Request detail panel showing description, asset, location, priority, status, assigned technician(s), work updates, attachments, comment thread, and audit log.
  • Asset Management — Administrator screen to manage assets, locations, suppliers, and warranty records.
    • Elements: Asset list with search and filter by location, category, status., Asset detail/edit form with fields for name, serial number, location, parent asset, warranty record, and linked suppliers.
  • Technician Mobile View — Mobile-friendly interface for technicians to view and update their work orders on site.
    • Elements: Work order list sorted by priority and due date, with status badges., Work order detail with update status dropdown, comment field, camera/gallery attachment button, and comment thread.

Data model

User

Field Type Notes
id integer Primary key, auto-increment.
email string Unique, indexed, max 255 chars, used for login.
password_hash string Bcrypt hash, max 255 chars.
role enum('employee','supervisor','technician','administrator') ASSUMED: role set based on typical office maintenance app.
name string Max 100 chars.
phone string Nullable, max 20 chars.
is_active boolean Soft-delete flag, default true.
created_at datetime Auto-set on creation.
updated_at datetime Auto-updated on modification.

Location

Field Type Notes
id integer Primary key, auto-increment.
name string Unique, max 200 chars.
address string Nullable, max 500 chars.
is_active boolean Soft-delete flag, default true.
created_at datetime Auto-set.

Asset

Field Type Notes
id integer Primary key, auto-increment.
name string Max 200 chars.
serial_number string Unique, max 100 chars.
location_id foreign_key->Location Nullable, indexed.
parent_asset_id foreign_key->Asset Nullable, self-referential for hierarchical links.
category string Nullable, max 100 chars, e.g. 'Printer', 'CNC Machine'.
status enum('active','inactive','decommissioned') ASSUMED: default 'active'.
is_active boolean Soft-delete flag, default true.
created_at datetime Auto-set.
updated_at datetime Auto-updated.

Warranty

Field Type Notes
id integer Primary key, auto-increment.
asset_id foreign_key->Asset Unique, one-to-one with Asset.
supplier_id foreign_key->Supplier Nullable.
start_date date Not null.
end_date date Not null, must be after start_date.
terms text Nullable.
created_at datetime Auto-set.

Supplier

Field Type Notes
id integer Primary key, auto-increment.
name string Unique, max 200 chars.
contact_email string Nullable, max 255 chars.
phone string Nullable, max 20 chars.
is_active boolean Soft-delete flag, default true.
created_at datetime Auto-set.

Request

Field Type Notes
id integer Primary key, auto-increment.
reported_by foreign_key->User Not null, employee who reported.
asset_id foreign_key->Asset Not null, indexed.
description text Not null, min 10 chars.
status enum('open','approved','rejected','in_progress','resolved','closed') ASSUMED: workflow statuses.
priority enum('low','medium','high','critical') ASSUMED: default 'medium'.
approved_by foreign_key->User Nullable, supervisor who approved.
due_date datetime Nullable.
estimated_cost decimal(10,2) Nullable, in USD (ASSUMED currency).
actual_cost decimal(10,2) Nullable, in USD.
currency string Default 'USD', max 3 chars.
created_at datetime Auto-set.
updated_at datetime Auto-updated.

WorkOrder

Field Type Notes
id integer Primary key, auto-increment.
request_id foreign_key->Request Not null, indexed.
status enum('assigned','in_progress','on_hold','resolved','closed') ASSUMED: workflow statuses.
due_date datetime Nullable.
created_at datetime Auto-set.
updated_at datetime Auto-updated.

WorkUpdate

Field Type Notes
id integer Primary key, auto-increment.
work_order_id foreign_key->WorkOrder Not null, indexed.
user_id foreign_key->User Not null, who added the update.
comment text Not null.
created_at datetime Auto-set.

Attachment

Field Type Notes
id integer Primary key, auto-increment.
attachable_type string Polymorphic type, valid values: 'Request', 'WorkOrder', 'WorkUpdate'.
attachable_id integer Polymorphic ID, indexed with attachable_type.
file_path string Not null, max 500 chars, path to stored file.
file_type string MIME type, e.g. 'image/jpeg', 'application/pdf'.
uploaded_by foreign_key->User Not null.
created_at datetime Auto-set.

Comment

Field Type Notes
id integer Primary key, auto-increment.
commentable_type string Polymorphic type, valid values: 'Request', 'WorkOrder'.
commentable_id integer Polymorphic ID, indexed with commentable_type.
user_id foreign_key->User Not null.
body text Not null.
created_at datetime Auto-set.

AuditLog

Field Type Notes
id integer Primary key, auto-increment.
auditable_type string Polymorphic type, valid values: 'Request', 'WorkOrder', 'Asset', 'User'.
auditable_id integer Polymorphic ID, indexed with auditable_type.
user_id foreign_key->User Nullable, who performed the action.
action string Max 50 chars, e.g. 'status_change', 'assignment', 'update'.
old_value text Nullable, JSON string of previous state.
new_value text Nullable, JSON string of new state.
created_at datetime Auto-set.

Notification

Field Type Notes
id integer Primary key, auto-increment.
user_id foreign_key->User Not null, indexed.
type enum('reminder','escalation','status_update','assignment') ASSUMED: notification types.
message string Max 500 chars.
is_read boolean Default false.
created_at datetime Auto-set.

SupplierAssetType

Field Type Notes
id integer Primary key, auto-increment.
supplier_id foreign_key->Supplier Not null, indexed.
asset_category string Not null, max 100 chars, e.g. 'Printer'.

TechnicianWorkOrder

Field Type Notes
id integer Primary key, auto-increment.
technician_id foreign_key->User Not null, indexed.
work_order_id foreign_key->WorkOrder Not null, indexed.

Business rules

  • A request cannot be assigned to a technician unless its status is 'approved'.
  • A work order's due_date must be on or after the request's created_at date.
  • When a work order status changes to 'resolved', the related request status must automatically update to 'resolved'.
  • An asset's parent_asset_id cannot reference itself (no self-parenting).
  • A warranty end_date must be after start_date.
  • A technician may be assigned to a maximum of 10 active work orders (status not 'resolved' or 'closed') at any time; the system must warn the supervisor if this limit is exceeded.

Permissions

Role Capabilities
Employee create:request; read:own_request; update:own_request_comment; read:asset; read:location
Supervisor read:request; update:request_status; update:request_priority; assign:work_order; read:work_order; read:asset; read:location; read:report
Technician read:assigned_work_order; update:work_order_status; create:work_update; create:attachment; create:comment; read:asset; read:location
Administrator create:asset; read:asset; update:asset; delete:asset; create:location; read:location; update:location; delete:location; create:supplier; read:supplier; update:supplier; delete:supplier; create:user; read:user; update:user; delete:user; import:csv; export:csv; read:report; read:audit_log

Integrations

  • ASSUMED: Email service (SMTP) for sending notifications.
  • ASSUMED: File storage service (local disk or S3-compatible) for attachments.

Non-functional requirements

  • The system must support at least 100 concurrent users with response times under 2 seconds for list pages.
  • All passwords must be hashed using bcrypt with a cost factor of at least 10.
  • The mobile interface must be responsive and usable on screens as small as 320px width.
  • Audit logs must be retained for at least 1 year (ASSUMED retention period).

Edge cases

  • If an employee reports a fault for a decommissioned asset, the system should display a warning but still allow submission with a note that the asset is decommissioned.
  • If a technician attempts to update a work order that is already 'closed', the system should reject the update and display an error message.
  • If a CSV import contains a location name that does not exist, the system should create a new location with that name automatically.
  • If a supervisor tries to assign a request to a technician who is already at maximum capacity (10 active work orders), the system should warn and require confirmation.

Out of scope

  • Integration with external ERP or accounting systems.
  • Multi-language/localization support beyond English.
  • Real-time chat or messaging between users.
  • Barcode or QR code scanning for asset identification.

Assumptions & open items

Assumed:

  • Role set is limited to Employee, Supervisor, Technician, Administrator.
  • Default priority for new requests is 'medium'.
  • Request status workflow: open -> approved/rejected -> in_progress -> resolved -> closed.
  • Work order status workflow: assigned -> in_progress -> on_hold -> resolved -> closed.
  • Currency for cost fields is USD.
  • Email service (SMTP) is available for notifications.
  • File storage is local disk or S3-compatible.
  • Maximum attachment file size is 10 MB.
  • Allowed image types for attachments are JPEG and PNG.
  • Audit logs are retained for at least 1 year.
  • Escalation threshold for overdue work orders is 48 hours.
  • Due-date reminder is sent 24 hours before due date.
  • Maximum active work orders per technician before warning is 10.
  • Asset statuses are 'active', 'inactive', 'decommissioned'.
  • Notification types are 'reminder', 'escalation', 'status_update', 'assignment'.
  • CSV import for assets expects columns: name, serial_number, location_name.
  • The system uses bcrypt with cost factor 10 for password hashing.
  • The system supports at least 100 concurrent users.

Coverage notes

  • Functional requirements: 10 (with acceptance criteria: 10)
  • Open assumptions: 18 (unresolved/conflicted: 0)
  • Entities in data model: 14
  • Screens: 4, Roles: 4, Journeys: 2
Screen map
Sandbox
Entities diagram
Sandbox
DB schema
Sandbox
Data models
Sandbox
Entities & DB (text)

Entity-relationship model for a small equipment maintenance application for office and workshop teams. It covers fault reporting, approval and prioritization, work order assignment and management, asset and location management, warranty tracking, notifications and escalation, comments, attachments, audit history, and role-based access. The schema includes base User and UserProfile entities, plus domain entities such as Request, WorkOrder, Asset, Location, Supplier, and supporting junction and polymorphic tables.

Entities (15)
User

Authenticated user of the system, representing employees, supervisors, technicians, and administrators. Stores login credentials and basic profile information.

  • email string
    unique

    Unique email address used for login and notifications.

  • password_hash string

    Bcrypt hash of the user's password.

  • role string

    Role of the user: employee, supervisor, technician, or administrator.

  • name string

    Full name of the user.

  • phone string
    nullable

    Optional contact phone number.

  • is_active boolean

    Soft-delete flag; inactive users cannot log in.

UserProfile

Extended profile information for a user, including personal details and preferences.

  • first_name string

    User's first name.

  • last_name string

    User's last name.

  • avatar_url string
    nullable

    URL to the user's avatar image.

  • bio text
    nullable

    Short biography or description.

  • timezone string

    User's timezone for notification scheduling.

Location

Physical location such as an office or workshop where assets are situated.

  • name string
    unique

    Unique name of the location.

  • address string
    nullable

    Physical address of the location.

  • is_active boolean

    Soft-delete flag; inactive locations are hidden.

Asset

Equipment or item that can be maintained. Assets can be hierarchical (parent-child) and linked to a location.

  • name string

    Name of the asset.

  • serial_number string
    unique

    Unique serial number of the asset.

  • category string
    nullable

    Category of the asset, e.g., Printer, CNC Machine.

  • status string

    Current status: active, inactive, or decommissioned.

  • is_active boolean

    Soft-delete flag; inactive assets are hidden.

Warranty

One-to-one warranty record linked to an asset, including supplier and validity period.

  • start_date date

    Start date of the warranty.

  • end_date date

    End date of the warranty; must be after start_date.

  • terms text
    nullable

    Terms and conditions of the warranty.

Supplier

Vendor or supplier that provides assets, parts, or warranty services.

  • name string
    unique

    Unique name of the supplier.

  • contact_email string
    nullable

    Contact email address.

  • phone string
    nullable

    Contact phone number.

  • is_active boolean

    Soft-delete flag; inactive suppliers are hidden.

Request

Fault report submitted by an employee. Tracks the lifecycle from open to closed, including approval, priority, and cost estimates.

  • description text

    Description of the fault, at least 10 characters.

  • status string

    Current status: open, approved, rejected, in_progress, resolved, or closed.

  • priority string

    Priority level: low, medium, high, or critical.

  • due_date datetime
    nullable

    Expected completion date for the request.

  • estimated_cost decimal
    nullable

    Estimated cost of repair in USD.

  • actual_cost decimal
    nullable

    Actual cost incurred after repair.

  • currency string

    Currency code, default USD.

WorkOrder

A repair task created from an approved request and assigned to one or more technicians.

  • status string

    Current status: assigned, in_progress, on_hold, resolved, or closed.

  • due_date datetime
    nullable

    Expected completion date for the work order.

WorkUpdate

A progress update or note added by a technician to a work order.

  • comment text

    Text of the update.

Attachment

File (photo or document) attached to a request, work order, or work update. Polymorphic.

  • attachable_type string

    Type of the parent entity: Request, WorkOrder, or WorkUpdate.

  • attachable_id integer

    ID of the parent entity.

  • file_path string

    Path to the stored file.

  • file_type string

    MIME type of the file.

Comment

User comment on a request or work order. Polymorphic.

  • commentable_type string

    Type of the parent entity: Request or WorkOrder.

  • commentable_id integer

    ID of the parent entity.

  • body text

    Text of the comment.

AuditLog

Record of state changes, assignments, and updates on requests, work orders, assets, and users. Polymorphic.

  • auditable_type string

    Type of the audited entity: Request, WorkOrder, Asset, or User.

  • auditable_id integer

    ID of the audited entity.

  • action string

    Action performed, e.g., status_change, assignment, update.

  • old_value text
    nullable

    JSON string of the previous state.

  • new_value text
    nullable

    JSON string of the new state.

Notification

In-app notification sent to a user for reminders, escalations, status updates, or assignments.

  • type string

    Type of notification: reminder, escalation, status_update, or assignment.

  • message string

    Notification message text.

  • is_read boolean

    Whether the notification has been read.

SupplierAssetType

Links a supplier to an asset category they support, enabling filtering of suppliers by category.

  • asset_category string

    Asset category, e.g., Printer, CNC Machine.

TechnicianWorkOrder

Junction table linking technicians (users) to work orders, supporting many-to-many assignment.

Relationships (18)
From Type To Description
1
one-to-one
2 A user has one profile.
3
one-to-many
4 A location can have many assets.
4
one-to-many
4 An asset can have a parent asset, creating a hierarchy.
4
one-to-one
5 An asset has one warranty record.
6
one-to-many
5 A supplier can be linked to many warranties.
1
one-to-many
7 A user (employee) reports many requests.
4
one-to-many
7 An asset can have many fault requests.
1
one-to-many
7 A supervisor approves many requests.
7
one-to-many
8 A request can have many work orders (though typically one).
8
one-to-many
9 A work order has many work updates.
1
one-to-many
9 A user (technician) adds many work updates.
1
one-to-many
10 A user uploads many attachments.
1
one-to-many
11 A user writes many comments.
1
one-to-many
12 A user performs many audit log entries.
1
one-to-many
13 A user receives many notifications.
6
one-to-many
14 A supplier can have many asset type links.
1
one-to-many
15 A user (technician) can be assigned to many work orders via the junction.
8
one-to-many
15 A work order can have many technician assignments.
Database tables (15)
users
  • id bigInteger
    unique
  • email string
    unique
  • password_hash string
  • role string
  • name string
  • phone string
    nullable
  • is_active boolean
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
user_profiles
  • id bigInteger
    unique
  • first_name string
  • last_name string
  • avatar_url string
    nullable
  • bio text
    nullable
  • timezone string
  • profile_id bigInteger
    unique
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
locations
  • id bigInteger
    unique
  • name string
    unique
  • address string
    nullable
  • is_active boolean
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
assets
  • id bigInteger
    unique
  • name string
  • serial_number string
    unique
  • category string
    nullable
  • status string
  • is_active boolean
  • location_id bigInteger
    nullable
  • parent_asset_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
warranties
  • id bigInteger
    unique
  • start_date date
  • end_date date
  • terms text
    nullable
  • asset_id bigInteger
    unique
  • supplier_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
suppliers
  • id bigInteger
    unique
  • name string
    unique
  • contact_email string
    nullable
  • phone string
    nullable
  • is_active boolean
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
requests
  • id bigInteger
    unique
  • description text
  • status string
  • priority string
  • due_date datetime
    nullable
  • estimated_cost decimal
    nullable
  • actual_cost decimal
    nullable
  • currency string
  • reported_by_id bigInteger
    nullable
  • asset_id bigInteger
    nullable
  • approved_by_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
work_orders
  • id bigInteger
    unique
  • status string
  • due_date datetime
    nullable
  • request_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
work_updates
  • id bigInteger
    unique
  • comment text
  • work_order_id bigInteger
    nullable
  • user_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
attachments
  • id bigInteger
    unique
  • attachable_type string
  • attachable_id integer
  • file_path string
  • file_type string
  • uploaded_by_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
comments
  • id bigInteger
    unique
  • commentable_type string
  • commentable_id integer
  • body text
  • user_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
audit_logs
  • id bigInteger
    unique
  • auditable_type string
  • auditable_id integer
  • action string
  • old_value text
    nullable
  • new_value text
    nullable
  • user_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
notifications
  • id bigInteger
    unique
  • type string
  • message string
  • is_read boolean
  • user_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
supplier_asset_types
  • id bigInteger
    unique
  • asset_category string
  • supplier_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable
technician_work_orders
  • id bigInteger
    unique
  • technician_id bigInteger
    nullable
  • work_order_id bigInteger
    nullable
  • created_at timestamp
    nullable
  • updated_at timestamp
    nullable