erDiagram User { String id PK String email String fullName Timestamp createdDate } Business { UUID id PK String userId FK String businessName Timestamp createdAt } Vendor { UUID id PK String userId FK String companyName Timestamp createdAt } Staff { UUID id PK String userId FK UUID hubId FK UUID ownerId FK String fullName Timestamp createdAt } Shift { UUID id PK UUID orderId FK UUID ownerId FK ShiftStatus status Timestamp createdAt } Order { UUID id PK UUID ownerId FK UUID hubId FK OrderStatus status Timestamp createdAt } Position { UUID id PK UUID orderId FK UUID roleId FK UUID ownerId FK Timestamp createdAt } Task { UUID id PK UUID ownerId FK TaskStatus status Timestamp createdAt } Team { UUID id PK String ownerId FK String teamName Timestamp createdAt } TeamMember { UUID id PK UUID teamId FK UUID hubId FK String memberName Timestamp createdAt } Hub { UUID id PK UUID ownerId FK String name Timestamp createdAt } Account { UUID id PK UUID ownerId FK "polymorphic ownerId" String bank Timestamp createdAt } Document { UUID id PK UUID staffId FK DocumentStatus status Timestamp createdAt } Certificate { UUID id PK UUID staffId FK CertificateStatus status Timestamp createdAt } Contact { UUID id PK UUID staffId FK String name Timestamp createdAt } BenefitsData { UUID id PK UUID staffId FK String title Timestamp createdAt } Course { UUID id PK String title Timestamp createdAt } TaxForm { UUID id PK UUID staffId FK TaxFormStatus status Timestamp createdAt } TimeSheet { UUID id PK UUID staffId FK UUID shiftId FK TimeSheetStatus status Timestamp createdAt } Invoice { UUID id PK UUID ownerId FK InvoiceStatus status Timestamp createdAt } Assignment { UUID id PK UUID staffId FK UUID ownerId FK AssignmentStatus status Timestamp createdAt } Conversation { UUID id PK String subject Timestamp createdAt } Message { UUID id PK UUID conversationId FK String senderId Timestamp createdAt } Role { UUID id PK UUID ownerId FK String name Timestamp createdAt } RecentPayment { UUID id PK UUID payedUserId FK UUID ownerId FK RecentPaymentStatus status Timestamp createdAt } RequiredDoc { UUID id PK UUID ownerId FK ReqDocumentStatus status Timestamp createdAt } VendorRate { UUID id PK UUID vendorId FK String roleName Timestamp createdAt } Schedule { UUID id PK UUID positionId FK Timestamp createdAt } TaskComment { UUID id PK UUID taskId FK String authorName Timestamp createdAt } TeamHub { UUID id PK UUID teamId FK String hubName Timestamp createdAt } Application { UUID id PK UUID shiftId FK UUID staffId FK ApplicationStatus status Timestamp createdAt } StaffShift { UUID id PK UUID staffId FK UUID shiftId FK Timestamp createdAt } MemberTask { UUID id PK UUID teamMemberId FK UUID taskId FK Timestamp createdAt } StaffCourse { UUID id PK UUID staffId FK UUID courseId FK Timestamp createdAt } User ||--|{ Staff : "has profile" User ||--|{ Vendor : "can be" User ||--|{ Business : "can be" User ||--o{ ActivityLog : "generates" Business ||--o{ "Order" : "creates" Business ||--o{ Invoice : "receives" Business ||--o{ Task : "owns" Business ||--o{ Hub : "owns" Business ||--o{ Role : "defines" Business ||--o{ Shift : "posts" Business ||--o{ Staff : "employs" Business ||--o{ Account : "owns" Vendor ||--o{ VendorRate : "defines" Vendor ||--o{ Task : "owns" Vendor ||--o{ Hub : "owns" Vendor ||--o{ Role : "defines" Vendor ||--o{ Shift : "posts" Vendor ||--o{ Staff : "employs" Vendor ||--o{ Account : "owns" Staff ||--o{ Document : "has" Staff ||--o{ Certificate : "holds" Staff ||--o{ Contact : "has emergency" Staff ||--o{ BenefitsData : "accrues" Staff ||--o{ TaxForm : "submits" Staff ||--o{ TimeSheet : "fills" Staff ||--o{ Assignment : "receives" Staff ||--o{ Account : "owns" Staff ||--o{ RecentPayment : "is paid to" Staff ||--o{ RequiredDoc : "owns" Staff ||--o{ Application : "submits" Hub ||--o{ Staff : "is based at" Shift ||--o{ TimeSheet : "generates" Shift ||--o{ Application : "receives" "Order" ||--o{ Shift : "contains" "Order" ||--o{ Position : "requires" Task ||--o{ TaskComment : "has" Team ||--o{ TeamMember : "has" Team ||--o{ TeamHub : "operates in" Conversation ||--o{ Message : "contains" Position ||--o{ Schedule : "has" Role ||--o{ Position : "is for" %% Join Tables Staff ||--|{ StaffShift : "works" Shift ||--|{ StaffShift : "is worked by" Staff ||--|{ StaffCourse : "enrolls in" Course ||--|{ StaffCourse : "is taken by" TeamMember ||--|{ MemberTask : "assigned to" Task ||--|{ MemberTask : "is assigned to"