| | 2 | |
| | 3 | = Entities |
| | 4 | |
| | 5 | = 1. Company (Tenant) |
| | 6 | Represents the company/tenant in the system. |
| | 7 | |
| | 8 | Attributes: |
| | 9 | - company_id: Numeric, primary key. |
| | 10 | - name: Text, required. |
| | 11 | - address: Text, optional. |
| | 12 | - vat: Text, optional. |
| | 13 | - email: Text, required. |
| | 14 | - created_at: Date, required. |
| | 15 | - updated_at: Date, required. |
| | 16 | |
| | 17 | = 2. User |
| | 18 | Represents system users with specific roles. |
| | 19 | |
| | 20 | Attributes: |
| | 21 | - user_id: Numeric, primary key. |
| | 22 | - name: Text, required. |
| | 23 | - email: Text, unique, required. |
| | 24 | - password: Text, required. |
| | 25 | - role: Enum (Admin, HR, Finance Manager), required. |
| | 26 | - company_id: Foreign key to Company. |
| | 27 | - created_at: Date, required. |
| | 28 | - updated_at: Date, required. |
| | 29 | |
| | 30 | = 3. Employee |
| | 31 | Represents employees managed by the company. |
| | 32 | |
| | 33 | Attributes: |
| | 34 | - employee_id: Numeric, primary key. |
| | 35 | - name: Text, required. |
| | 36 | - email: Text, unique, required. |
| | 37 | - status: Enum (Active, Inactive, Terminated), required. |
| | 38 | - iban: Text, optional. |
| | 39 | - cv: Text, optional (file path or URL). |
| | 40 | - photo: Text, optional (file path or URL). |
| | 41 | - notes: Text, optional. |
| | 42 | - project: Text, optional. |
| | 43 | - company_id: Foreign key to Company. |
| | 44 | - created_at: Date, required. |
| | 45 | - updated_at: Date, required. |
| | 46 | |
| | 47 | = 4. Candidate |
| | 48 | Represents candidates applying for roles in the company. |
| | 49 | |
| | 50 | Attributes: |
| | 51 | - candidate_id: Numeric, primary key. |
| | 52 | - name: Text, required. |
| | 53 | - email: Text, unique, required. |
| | 54 | - status: Enum (Applied, Interview, Offered, Rejected), required. |
| | 55 | - cv: Text, optional (file path or URL). |
| | 56 | - interview_stage: Text, optional. |
| | 57 | - notes: Text, optional. |
| | 58 | - company_id: Foreign key to Company. |
| | 59 | - created_at: Date, required. |
| | 60 | - updated_at: Date, required. |
| | 61 | |
| | 62 | = 5. Client |
| | 63 | Represents the clients of the company. |
| | 64 | |
| | 65 | Attributes: |
| | 66 | - client_id: Numeric, primary key. |
| | 67 | - name: Text, required. |
| | 68 | - representative: Text, required. |
| | 69 | - email: Text, unique, required. |
| | 70 | - phone: Text, optional. |
| | 71 | - address: Text, optional. |
| | 72 | - vat: Text, optional. |
| | 73 | - logo: Text, optional (file path or URL). |
| | 74 | - company_id: Foreign key to Company. |
| | 75 | - created_at: Date, required. |
| | 76 | - updated_at: Date, required. |
| | 77 | |
| | 78 | = 6. Invoice |
| | 79 | Represents financial transactions between the company and its clients. |
| | 80 | |
| | 81 | Attributes: |
| | 82 | - invoice_id: Numeric, primary key. |
| | 83 | - from: Text, required (company details). |
| | 84 | - to: Text, required (client details). |
| | 85 | - issue_date: Date, required. |
| | 86 | - due_date: Date, required. |
| | 87 | - notes: Text, optional. |
| | 88 | - status: Enum (Draft, Pending, Paid, Overdue), required. |
| | 89 | - company_id: Foreign key to Company. |
| | 90 | - client_id: Foreign key to Client. |
| | 91 | - created_at: Date, required. |
| | 92 | - updated_at: Date, required. |
| | 93 | |
| | 94 | = 7. LineItem |
| | 95 | Represents individual items in an invoice. |
| | 96 | |
| | 97 | Attributes: |
| | 98 | - line_item_id: Numeric, primary key. |
| | 99 | - description: Text, required. |
| | 100 | - quantity: Integer, required. |
| | 101 | - unit_price: Decimal, required. |
| | 102 | - currency: Text, required. |
| | 103 | - total: Decimal, required. |
| | 104 | - invoice_id: Foreign key to Invoice. |
| | 105 | |
| | 106 | = 8. EmailTemplate |
| | 107 | Represents customizable email templates. |
| | 108 | |
| | 109 | Attributes: |
| | 110 | - template_id: Numeric, primary key. |
| | 111 | - type: Enum (New Invoice, Invoice Overdue, Welcome Employee, etc.), required. |
| | 112 | - subject: Text, required. |
| | 113 | - body: Text, required. |
| | 114 | - company_id: Foreign key to Company. |
| | 115 | - created_at: Date, required. |
| | 116 | - updated_at: Date, required. |
| | 117 | |
| | 118 | = Relations |
| | 119 | |
| | 120 | - Company ↔ User: A company has many users; each user belongs to one company. |
| | 121 | - Company ↔ Employee: A company has many employees; each employee belongs to one company. |
| | 122 | - Company ↔ Candidate: A company has many candidates; each candidate belongs to one company. |
| | 123 | - Company ↔ Client: A company has many clients; each client belongs to one company. |
| | 124 | - Company ↔ Invoice: A company generates many invoices; each invoice belongs to one company. |
| | 125 | - Client ↔ Invoice: A client can have many invoices; each invoice is addressed to one client. |
| | 126 | - Invoice ↔ LineItem: An invoice has multiple line items; each line item belongs to one invoice. |
| | 127 | - Company ↔ EmailTemplate: A company has multiple email templates; each template belongs to one company. |