classDiagram
direction TB
    class User {
	    id: String
	    email: String
	    fullName: String
	    role: UserBaseRole
    }

    class Staff {
	    id: UUID
	    userId: String
	    fullName: String
	    ownerId: UUID
	    hubId: UUID
	    rollId: UUID
	    status: BackgroundCheckStatus
    }

    class Account{
	    id: UUID
      ownerId:UUID
      type:AccountType
    }

    class Workforce {
	    id: UUID
	    vendorId: UUID
	    staffId: UUID
	    status: WorkforceStatus
    }

    class Application {
	    id: UUID
	    shiftId: UUID
	    staffId: UUID
	    roleId: UUID
	    status: ApplicationStatus
    }

    class Assignment {
	    id: UUID
	    workforceId: UUID
	    shiftId: UUID
	    roleId: UUID
	    status: AssignmentStatus
    }

    class ShiftRole {
	    id: UUID
	    shiftId: UUID
	    roleId: UUID
    }

    class Shift {
	    id: UUID
	    orderId: UUID
	    status: ShiftStatus
    }

    class Order {
	    id: UUID
	    vendorId: UUID
	    businessId: UUID
	    status: OrderStatus
    }

    class Vendor {
	    id: UUID
	    userId: String
	    companyName: String
    }

    class Business {
	    id: UUID
	    userId: String
	    businessName: String
    }

    class Role {
	    id: UUID
	    name: String
	    vendorId: UUID
	    roleCategoryId: UUID
    }

    class StaffDocument {
	    staffId: UUID
	    documentId: UUID
	    status: DocumentStatus
    }

    class Document {
	    id: UUID
	    name: String
	    documentType: DocumentType
    }

    class StaffCourse {
	    staffId: UUID
	    courseId: UUID
    }

    class Course {
	    id: UUID
	    title: String
	    categoryId: UUID
    }

    class Category {
	    id: UUID
	    label: String
    }

    class StaffAvailability {
	    staffId: UUID
	    day: DayOfWeek
	    slot: AvailabilitySlot
    }

    class Certificate {
	    staffId: UUID
	    certificationType: ComplianceType
	    status: CertificateStatus
    }

    class BenefitData {
	    staffId: UUID
	    vendorBenefitPlanId: UUID
	    current: int
    }

    class Contact {
	    staffId: UUID
	    relationship: RelationshipType
	    name: string
    }

    class Invoice {
	    orderId: UUID
    }

    class RecentPayment {
	    staffId: UUID
	    applicationId: UUID
	    status: RecentPaymentStatus
    }

    class TaxForm {
	    staffId: UUID
	    formType: TaxFormType
	    status: TaxFormStatus
    }

    User "1" -- "1" Staff : has
    Staff "1" -- "*" Application : applies to
    Staff "1" -- "*" Workforce : part of
    Staff "1" -- "*" StaffDocument : has
    Staff "1" -- "*" Certificate : has
    Staff "1" -- "*" BenefitData : has
    Staff "1" -- "*" Contact : has
    Staff "1" -- "*" TaxForm : has
    Staff "1" -- "*" Account : has
    Staff "1" -- "*" StaffCourse : takes
    Staff "1" -- "*" StaffAvailability : sets
    Workforce "1" -- "*" Assignment : receives
    Assignment -- ShiftRole
    Vendor "1" -- "*" Order : receives
    Business "1" -- "*" Order : places
    Order "1" -- "1" Invoice : has
    Invoice "1" -- "*" RecentPayment : has
    RecentPayment "1" -- "1" Application : has
    Staff "1" --o "1" Vendor : (ownerId)
    Staff "1" --o "1" Business : (ownerId)
    Application -- ShiftRole
    ShiftRole "*" -- "1" Shift : belongs to
    ShiftRole "*" -- "1" Role : defines
    Shift "*" -- "1" Order : belongs to
    StaffDocument "1" -- "1" Document : references
    StaffCourse "1" -- "1" Course : references
    Course "1" -- "1" Category : belongs to