Objective
Create a document workflow system with approval routing, task assignment, and audit trails. This enables managing document lifecycles through review and approval processes.
Step 1: Create Workflow Templates Table
Define workflow templates.
CREATE TABLE workflow_templates (
id INTEGER PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
document_type VARCHAR(50),
total_steps INTEGER DEFAULT 1,
sla_hours INTEGER,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Step 2: Create Workflow Steps Table
Define workflow steps.
CREATE TABLE workflow_steps (
id INTEGER PRIMARY KEY,
workflow_id INTEGER NOT NULL,
step_order INTEGER NOT NULL,
step_name VARCHAR(100) NOT NULL,
step_type VARCHAR(50) NOT NULL,
approver_role VARCHAR(100),
is_required BOOLEAN DEFAULT TRUE,
timeout_hours INTEGER,
FOREIGN KEY (workflow_id) REFERENCES workflow_templates(id)
);
Step 3: Create Document Instances Table
Track documents in workflow.
CREATE TABLE workflow_documents (
id INTEGER PRIMARY KEY,
workflow_id INTEGER NOT NULL,
document_pdf PDF,
document_title VARCHAR(255) NOT NULL,
submitted_by VARCHAR(100) NOT NULL,
submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
current_step INTEGER DEFAULT 1,
status VARCHAR(20) DEFAULT 'pending',
priority VARCHAR(20) DEFAULT 'normal',
due_date TIMESTAMP,
completed_at TIMESTAMP,
FOREIGN KEY (workflow_id) REFERENCES workflow_templates(id)
);
Step 4: Create Tasks Table
Track workflow tasks.
CREATE TABLE workflow_tasks (
id INTEGER PRIMARY KEY,
document_id INTEGER NOT NULL,
step_id INTEGER NOT NULL,
assigned_to VARCHAR(100) NOT NULL,
assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
action VARCHAR(50),
action_date TIMESTAMP,
comments TEXT,
status VARCHAR(20) DEFAULT 'pending',
FOREIGN KEY (document_id) REFERENCES workflow_documents(id),
FOREIGN KEY (step_id) REFERENCES workflow_steps(id)
);
Step 5: Insert Workflow Templates
Add sample workflows.
INSERT INTO workflow_templates (id, name, description, document_type, total_steps, sla_hours) VALUES
(1, 'Contract Approval', 'Approval workflow for new contracts', 'contract', 4, 72),
(2, 'Expense Approval', 'Expense report approval process', 'expense', 2, 48),
(3, 'Policy Review', 'Policy document review and approval', 'policy', 3, 120),
(4, 'Purchase Requisition', 'Purchase request approval chain', 'purchase', 3, 24);
Step 6: Insert Workflow Steps
Define steps for each workflow.
INSERT INTO workflow_steps (id, workflow_id, step_order, step_name, step_type, approver_role, is_required, timeout_hours) VALUES
-- Contract Approval steps
(1, 1, 1, 'Legal Review', 'review', 'legal_team', TRUE, 24),
(2, 1, 2, 'Finance Review', 'review', 'finance_team', TRUE, 24),
(3, 1, 3, 'Department Approval', 'approval', 'department_head', TRUE, 24),
(4, 1, 4, 'Executive Approval', 'approval', 'executive', TRUE, 24),
-- Expense Approval steps
(5, 2, 1, 'Manager Approval', 'approval', 'manager', TRUE, 24),
(6, 2, 2, 'Finance Processing', 'process', 'finance_team', TRUE, 24),
-- Policy Review steps
(7, 3, 1, 'Subject Matter Review', 'review', 'sme', TRUE, 48),
(8, 3, 2, 'Compliance Review', 'review', 'compliance', TRUE, 48),
(9, 3, 3, 'Executive Approval', 'approval', 'executive', TRUE, 24),
-- Purchase Requisition steps
(10, 4, 1, 'Budget Verification', 'review', 'finance_team', TRUE, 8),
(11, 4, 2, 'Manager Approval', 'approval', 'manager', TRUE, 8),
(12, 4, 3, 'Procurement Processing', 'process', 'procurement', TRUE, 8);
Step 7: Insert Document Instances
Add documents in workflow.
INSERT INTO workflow_documents (id, workflow_id, document_title, submitted_by, submitted_at, current_step, status, priority, due_date) VALUES
(1, 1, 'Vendor Agreement - TechCorp', 'sales_rep', '2024-01-15 09:00:00', 2, 'in_progress', 'high', '2024-01-18 09:00:00'),
(2, 1, 'Service Contract - ClientXYZ', 'account_mgr', '2024-01-16 14:00:00', 1, 'in_progress', 'normal', '2024-01-19 14:00:00'),
(3, 2, 'Expense Report - Q1 Travel', 'john_emp', '2024-01-17 10:00:00', 2, 'in_progress', 'normal', '2024-01-19 10:00:00'),
(4, 2, 'Expense Report - Conference', 'jane_emp', '2024-01-18 08:00:00', 1, 'pending', 'low', '2024-01-20 08:00:00'),
(5, 3, 'Remote Work Policy Update', 'hr_manager', '2024-01-10 11:00:00', 3, 'in_progress', 'high', '2024-01-15 11:00:00'),
(6, 4, 'Server Equipment Purchase', 'it_manager', '2024-01-18 15:00:00', 1, 'pending', 'urgent', '2024-01-19 15:00:00');