🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
389 lines
11 KiB
Markdown
389 lines
11 KiB
Markdown
# Due Diligence Tracking System
|
||
## Product Requirements Document (PRD)
|
||
|
||
### 1. Executive Summary
|
||
|
||
A web-based due diligence tracking system that enables systematic evaluation of corporate dimensions through KPIs and checks. The system provides a dashboard overview of progress across multiple dimensions with drill-down capabilities to individual checks.
|
||
|
||
### 2. System Architecture
|
||
|
||
#### 2.1 Technology Stack
|
||
- **Frontend**: React with TypeScript
|
||
- **Styling**: Tailwind CSS
|
||
- **Database**: SQLite (via sql.js for browser compatibility)
|
||
- **File Storage**: Local file system (server-side)
|
||
- **Build Tool**: Vite
|
||
- **Deployment**: Self-hosted on dedicated server
|
||
|
||
#### 2.2 Data Architecture
|
||
```
|
||
Database: SQLite
|
||
├── dimensions (id, name, order, created_at)
|
||
├── kpis (id, dimension_id, name, order, created_at)
|
||
├── checks (id, kpi_id, question, check_type, current_value, expected_value,
|
||
│ reference_url, reference_file_id, comment, is_completed, created_at, updated_at)
|
||
├── check_types (id, name, data_type, options_json)
|
||
└── files (id, original_name, stored_path, mime_type, size_bytes, uploaded_at)
|
||
```
|
||
|
||
### 3. Data Model
|
||
|
||
#### 3.1 Hierarchy
|
||
- **Dimension** → **KPIs** → **Checks** (strict 3-level hierarchy)
|
||
- One-to-many relationships throughout
|
||
- No cross-references between checks and KPIs
|
||
|
||
#### 3.2 Check Structure
|
||
Each check contains:
|
||
1. **Question/Statement** (text): The evaluation criteria
|
||
2. **Current Value** (dynamic type based on check_type)
|
||
3. **Expected Value** (dynamic type based on check_type)
|
||
4. **Reference** (URL or file upload)
|
||
5. **Comment** (text): Additional notes
|
||
6. **Is Completed** (boolean): Manual completion flag
|
||
|
||
#### 3.3 Check Types
|
||
- **Text**: Free-form text input
|
||
- **Dropdown**: Predefined options stored in JSON
|
||
- **Number**: Numeric input with optional min/max
|
||
- **Percentage**: 0-100 with % display
|
||
|
||
Example check_types configuration:
|
||
```json
|
||
{
|
||
"development_method": {
|
||
"type": "dropdown",
|
||
"options": ["Traditional", "Agile", "Waterfall", "Hybrid"]
|
||
},
|
||
"team_size": {
|
||
"type": "number",
|
||
"min": 1,
|
||
"max": 1000
|
||
},
|
||
"completion_rate": {
|
||
"type": "percentage"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4. Core Features
|
||
|
||
#### 4.1 Dashboard View
|
||
- **Overview Cards**: Display each dimension with:
|
||
- Icon and name
|
||
- KPI count
|
||
- Total items (open + completed)
|
||
- Progress percentage
|
||
- Visual progress bar
|
||
- **Expandable Sections**: Click to reveal KPI details
|
||
- **Progress Calculation**: (Completed checks / Total checks) × 100%
|
||
|
||
#### 4.2 Check Management
|
||
- **Add Check**: Form with dynamic fields based on check type
|
||
- **Edit Check**: In-place editing with validation
|
||
- **Complete Check**: Checkbox to mark as done
|
||
- **Bulk Actions**: Select multiple checks for completion/deletion
|
||
|
||
#### 4.3 File Handling
|
||
- **Upload**: Drag-and-drop or click to upload
|
||
- **File Types**: All types accepted (max 100MB)
|
||
- **Storage**: Server file system with database reference
|
||
- **Preview**: Quick preview for common formats (PDF, images)
|
||
|
||
### 5. User Interface
|
||
|
||
#### 5.1 Design System Options
|
||
|
||
**Option A: Professional Blue**
|
||
- Primary: #3B82F6 (Blue)
|
||
- Success: #10B981 (Green)
|
||
- Warning: #F59E0B (Amber)
|
||
- Error: #EF4444 (Red)
|
||
- Neutral: Gray scale
|
||
|
||
**Option B: Modern Purple**
|
||
- Primary: #8B5CF6 (Purple)
|
||
- Success: #10B981 (Green)
|
||
- Warning: #F59E0B (Amber)
|
||
- Error: #EF4444 (Red)
|
||
- Neutral: Slate scale
|
||
|
||
**Option C: Corporate Dark**
|
||
- Primary: #1F2937 (Dark Gray)
|
||
- Success: #059669 (Emerald)
|
||
- Warning: #D97706 (Amber)
|
||
- Error: #DC2626 (Red)
|
||
- Neutral: Gray scale
|
||
|
||
#### 5.2 Layout Structure
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ Header (Logo, Title, Actions) │
|
||
├─────────────────────────────────────┤
|
||
│ ┌─────────┐ ┌─────────┐ ┌─────────┐│
|
||
│ │Strategy │ │ Sales │ │Product ││ <- Dimension Cards
|
||
│ └─────────┘ └─────────┘ └─────────┘│
|
||
│ ┌─────────┐ ┌─────────┐ ┌─────────┐│
|
||
│ │Engineer │ │ DevOps │ │ Cyber ││
|
||
│ └─────────┘ └─────────┘ └─────────┘│
|
||
│ ┌─────────┐ ┌─────────┐ │
|
||
│ │ People │ │Culture │ │
|
||
│ └─────────┘ └─────────┘ │
|
||
└─────────────────────────────────────┘
|
||
|
||
Expanded View:
|
||
┌─────────────────────────────────────┐
|
||
│ ▼ Engineering │
|
||
├─────────────────────────────────────┤
|
||
│ KPI: Development Efficiency │
|
||
│ ├─ Check 1: Dev methodology │
|
||
│ ├─ Check 2: Sprint velocity │
|
||
│ └─ Check 3: Code coverage │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
### 6. Functional Requirements
|
||
|
||
#### 6.1 Phase 1 (MVP)
|
||
- [ ] Dashboard with all dimensions
|
||
- [ ] Expandable dimension views
|
||
- [ ] Add/Edit/Complete checks
|
||
- [ ] File upload and reference
|
||
- [ ] Progress tracking
|
||
- [ ] Data persistence in SQLite
|
||
- [ ] Export data to JSON/CSV
|
||
|
||
#### 6.2 Phase 2 (Future)
|
||
- [ ] Configurable dimensions
|
||
- [ ] Advanced queries and filters
|
||
- [ ] PDF report generation
|
||
- [ ] Historical progress tracking
|
||
- [ ] Multi-user support
|
||
- [ ] Check templates
|
||
- [ ] Automated reminders
|
||
|
||
### 7. Technical Implementation
|
||
|
||
#### 7.1 Database Schema
|
||
```sql
|
||
-- Dimensions table
|
||
CREATE TABLE dimensions (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
name TEXT NOT NULL,
|
||
icon TEXT,
|
||
color TEXT,
|
||
order_index INTEGER,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- KPIs table
|
||
CREATE TABLE kpis (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
dimension_id INTEGER NOT NULL,
|
||
name TEXT NOT NULL,
|
||
description TEXT,
|
||
order_index INTEGER,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (dimension_id) REFERENCES dimensions(id)
|
||
);
|
||
|
||
-- Checks table
|
||
CREATE TABLE checks (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
kpi_id INTEGER NOT NULL,
|
||
question TEXT NOT NULL,
|
||
check_type TEXT NOT NULL,
|
||
current_value TEXT,
|
||
expected_value TEXT,
|
||
reference_url TEXT,
|
||
reference_file_id INTEGER,
|
||
comment TEXT,
|
||
is_completed BOOLEAN DEFAULT 0,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
FOREIGN KEY (kpi_id) REFERENCES kpis(id),
|
||
FOREIGN KEY (reference_file_id) REFERENCES files(id)
|
||
);
|
||
|
||
-- Files table
|
||
CREATE TABLE files (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
original_name TEXT NOT NULL,
|
||
stored_path TEXT NOT NULL,
|
||
mime_type TEXT,
|
||
size_bytes INTEGER,
|
||
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- Check types configuration
|
||
CREATE TABLE check_types (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
name TEXT NOT NULL UNIQUE,
|
||
data_type TEXT NOT NULL,
|
||
options_json TEXT,
|
||
validation_json TEXT
|
||
);
|
||
```
|
||
|
||
#### 7.2 API Endpoints
|
||
```
|
||
GET /api/dimensions
|
||
GET /api/dimensions/:id/kpis
|
||
GET /api/kpis/:id/checks
|
||
POST /api/checks
|
||
PUT /api/checks/:id
|
||
DELETE /api/checks/:id
|
||
POST /api/files/upload
|
||
GET /api/files/:id
|
||
GET /api/export/:format (json|csv)
|
||
```
|
||
|
||
### 8. Non-Functional Requirements
|
||
|
||
#### 8.1 Performance
|
||
- Dashboard load time < 2 seconds
|
||
- Check updates < 500ms
|
||
- Support 10,000+ checks without degradation
|
||
|
||
#### 8.2 Security
|
||
- File upload validation
|
||
- SQL injection prevention
|
||
- XSS protection
|
||
- File size limits (100MB)
|
||
|
||
#### 8.3 Usability
|
||
- Responsive design (mobile, tablet, desktop)
|
||
- Keyboard navigation support
|
||
- Print-friendly views
|
||
- Intuitive drag-and-drop
|
||
|
||
### 9. Initial Data Structure
|
||
|
||
```json
|
||
{
|
||
"dimensions": [
|
||
{
|
||
"name": "Strategy",
|
||
"icon": "Briefcase",
|
||
"kpis": [
|
||
{
|
||
"name": "Strategic Alignment",
|
||
"checks": [
|
||
{
|
||
"question": "Is the company vision clearly defined?",
|
||
"check_type": "dropdown",
|
||
"options": ["Yes", "Partially", "No"]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "Sales",
|
||
"icon": "TrendingUp",
|
||
"kpis": [
|
||
{
|
||
"name": "Sales Performance",
|
||
"checks": [
|
||
{
|
||
"question": "Monthly revenue growth rate",
|
||
"check_type": "percentage"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "Engineering",
|
||
"icon": "Code",
|
||
"kpis": [
|
||
{
|
||
"name": "Development Practices",
|
||
"checks": [
|
||
{
|
||
"question": "Development methodology",
|
||
"check_type": "dropdown",
|
||
"options": ["Traditional", "Agile", "Waterfall", "Hybrid"]
|
||
},
|
||
{
|
||
"question": "Average sprint velocity",
|
||
"check_type": "number"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 10. Development Roadmap
|
||
|
||
#### Week 1-2: Foundation
|
||
- Set up project structure
|
||
- Implement SQLite integration
|
||
- Create basic UI components
|
||
- Dashboard layout
|
||
|
||
#### Week 3-4: Core Features
|
||
- Check CRUD operations
|
||
- File upload system
|
||
- Progress calculations
|
||
- Expand/collapse functionality
|
||
|
||
#### Week 5-6: Polish & Testing
|
||
- Validation rules
|
||
- Export functionality
|
||
- Responsive design
|
||
- Performance optimization
|
||
|
||
### 11. Success Metrics
|
||
|
||
- **Efficiency**: 50% reduction in due diligence tracking time
|
||
- **Completeness**: 100% of checks documented
|
||
- **Visibility**: Real-time progress tracking
|
||
- **Usability**: < 5 minute onboarding time
|
||
|
||
### 12. Appendix
|
||
|
||
#### Sample Check Types Configuration
|
||
```javascript
|
||
const checkTypes = {
|
||
text: {
|
||
component: 'TextInput',
|
||
validation: null
|
||
},
|
||
dropdown: {
|
||
component: 'SelectInput',
|
||
validation: 'requiredOption'
|
||
},
|
||
number: {
|
||
component: 'NumberInput',
|
||
validation: 'numeric'
|
||
},
|
||
percentage: {
|
||
component: 'PercentageInput',
|
||
validation: 'range:0:100'
|
||
}
|
||
};
|
||
```
|
||
|
||
#### File Structure
|
||
```
|
||
due-diligence-tracker/
|
||
├── client/
|
||
│ ├── src/
|
||
│ │ ├── components/
|
||
│ │ ├── pages/
|
||
│ │ ├── hooks/
|
||
│ │ ├── utils/
|
||
│ │ └── types/
|
||
│ └── public/
|
||
├── server/
|
||
│ ├── api/
|
||
│ ├── db/
|
||
│ ├── uploads/
|
||
│ └── utils/
|
||
└── shared/
|
||
└── types/
|
||
``` |