api
Some checks failed
Cloudflare Worker API Template / Deploy to ${{ github.ref_name }} environment (pull_request) Failing after 15s
Some checks failed
Cloudflare Worker API Template / Deploy to ${{ github.ref_name }} environment (pull_request) Failing after 15s
This commit is contained in:
219
docs/leave-agent-design.md
Normal file
219
docs/leave-agent-design.md
Normal file
@@ -0,0 +1,219 @@
|
||||
# Leave Agent - Database Design
|
||||
|
||||
## Database Schema
|
||||
|
||||
### 1. Employees
|
||||
Stores employee information and their leave balances.
|
||||
|
||||
```sql
|
||||
CREATE TABLE employees (
|
||||
employee_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
email TEXT UNIQUE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
### 2. Leave Types
|
||||
Defines different types of leaves available in the system.
|
||||
|
||||
```sql
|
||||
CREATE TABLE leave_types (
|
||||
leave_types_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT UNIQUE NOT NULL, -- e.g., "Annual Leave", "Sick Leave"
|
||||
description TEXT,
|
||||
max_days INTEGER NOT NULL,
|
||||
is_active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
### 3. Leave Balances
|
||||
Tracks the number of leave days available for each employee by leave type.
|
||||
|
||||
```sql
|
||||
CREATE TABLE leave_balances (
|
||||
leave_balances_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
employee_id INTEGER NOT NULL,
|
||||
leave_type_id INTEGER NOT NULL,
|
||||
balance_days REAL NOT NULL,
|
||||
year INTEGER NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (employee_id) REFERENCES employees(employee_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (leave_type_id) REFERENCES leave_types(leave_types_id) ON DELETE CASCADE,
|
||||
UNIQUE(employee_id, leave_type_id, year)
|
||||
);
|
||||
```
|
||||
|
||||
### 4. Leave Requests
|
||||
Tracks all leave requests made by employees.
|
||||
|
||||
```sql
|
||||
CREATE TABLE leave_requests (
|
||||
leave_requests_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
employee_id INTEGER NOT NULL,
|
||||
leave_type_id INTEGER NOT NULL,
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE NOT NULL,
|
||||
reason TEXT,
|
||||
status TEXT NOT NULL, -- 'pending', 'approved', 'rejected', 'cancelled'
|
||||
business_days REAL NOT NULL,
|
||||
notes TEXT,
|
||||
approved_by INTEGER,
|
||||
approved_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (employee_id) REFERENCES employees(employee_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (leave_type_id) REFERENCES leave_types(leave_types_id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (approved_by) REFERENCES employees(employee_id) ON DELETE SET NULL
|
||||
);
|
||||
```
|
||||
|
||||
### 5. Holidays
|
||||
Stores public holidays.
|
||||
|
||||
```sql
|
||||
CREATE TABLE holidays (
|
||||
holidays_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
date DATE NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
is_recurring BOOLEAN DEFAULT false,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(date, name)
|
||||
);
|
||||
```
|
||||
|
||||
### 6. Team Events
|
||||
Stores company events and team activities.
|
||||
|
||||
```sql
|
||||
CREATE TABLE team_events (
|
||||
team_events_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE,
|
||||
is_recurring BOOLEAN DEFAULT false,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
## Entity Relationship Diagram
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
employees ||--o{ leave_balances : has
|
||||
employees ||--o{ leave_requests : makes
|
||||
leave_types ||--o{ leave_balances : has
|
||||
leave_types ||--o{ leave_requests : has
|
||||
employees ||--o{ leave_requests : approves
|
||||
|
||||
employees {
|
||||
int employee_id PK
|
||||
string name
|
||||
string email
|
||||
timestamp created_at
|
||||
timestamp updated_at
|
||||
}
|
||||
|
||||
leave_types {
|
||||
int leave_types_id PK
|
||||
string name
|
||||
string description
|
||||
int max_days
|
||||
boolean is_active
|
||||
timestamp created_at
|
||||
}
|
||||
|
||||
leave_balances {
|
||||
int leave_balances_id PK
|
||||
int employee_id FK
|
||||
int leave_type_id FK
|
||||
real balance_days
|
||||
int year
|
||||
timestamp created_at
|
||||
timestamp updated_at
|
||||
}
|
||||
|
||||
leave_requests {
|
||||
int leave_requests_id PK
|
||||
int employee_id FK
|
||||
int leave_type_id FK
|
||||
date start_date
|
||||
date end_date
|
||||
string reason
|
||||
string status
|
||||
real business_days
|
||||
string notes
|
||||
int approved_by FK
|
||||
timestamp approved_at
|
||||
timestamp created_at
|
||||
timestamp updated_at
|
||||
}
|
||||
|
||||
holidays {
|
||||
int holidays_id PK
|
||||
date date
|
||||
string name
|
||||
string description
|
||||
boolean is_recurring
|
||||
timestamp created_at
|
||||
}
|
||||
|
||||
team_events {
|
||||
int team_events_id PK
|
||||
string name
|
||||
string description
|
||||
date start_date
|
||||
date end_date
|
||||
boolean is_recurring
|
||||
timestamp created_at
|
||||
timestamp updated_at
|
||||
}
|
||||
```
|
||||
|
||||
## Initial Data Setup
|
||||
|
||||
### Default Leave Types
|
||||
```sql
|
||||
INSERT INTO leave_types (name, description, max_days, is_active) VALUES
|
||||
('Annual Leave', 'Paid time off for vacation or personal reasons', 24, true),
|
||||
('Sick Leave', 'Paid time off for illness or medical appointments', 12, true),
|
||||
('Maternity Leave', 'Paid leave for new mothers', 182, true),
|
||||
('Paternity Leave', 'Paid leave for new fathers', 14, true),
|
||||
('Bereavement Leave', 'Paid time off following the death of a family member', 5, true),
|
||||
('Marriage Leave', 'Paid time off for employee''s own marriage', 5, true);
|
||||
```
|
||||
|
||||
### Sample Holidays (2025)
|
||||
```sql
|
||||
INSERT INTO holidays (date, name, description, is_recurring) VALUES
|
||||
('2025-01-01', 'New Year''s Day', 'First day of the year', true),
|
||||
('2025-01-26', 'Republic Day', 'Indian Republic Day', true),
|
||||
('2025-03-17', 'Holi', 'Festival of Colors', true),
|
||||
('2025-04-14', 'Ambedkar Jayanti', 'Birth anniversary of Dr. B.R. Ambedkar', true),
|
||||
('2025-08-15', 'Independence Day', 'Indian Independence Day', true),
|
||||
('2025-10-02', 'Gandhi Jayanti', 'Birth anniversary of Mahatma Gandhi', true),
|
||||
('2025-12-25', 'Christmas Day', 'Christmas holiday', true);
|
||||
```
|
||||
|
||||
## Indexes
|
||||
|
||||
For better query performance, the following indexes are recommended:
|
||||
|
||||
```sql
|
||||
-- Indexes for leave_requests
|
||||
CREATE INDEX idx_leave_requests_employee_id ON leave_requests(employee_id);
|
||||
CREATE INDEX idx_leave_requests_status ON leave_requests(status);
|
||||
CREATE INDEX idx_leave_requests_dates ON leave_requests(start_date, end_date);
|
||||
|
||||
-- Indexes for leave_balances
|
||||
CREATE INDEX idx_leave_balances_employee ON leave_balances(employee_id, year);
|
||||
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user