8.2 KiB
8.2 KiB
Royal Enfield Workflow Management System - Configuration Guide
📋 Overview
All system configurations are centralized in src/config/system.config.ts and can be customized via environment variables.
⚙️ Configuration Structure
1. Working Hours
Controls when TAT tracking is active.
WORK_START_HOUR=9 # 9 AM (default)
WORK_END_HOUR=18 # 6 PM (default)
TZ=Asia/Kolkata # Timezone
Working Days: Monday - Friday (hardcoded)
2. TAT (Turnaround Time) Settings
TAT_TEST_MODE=false # Enable for testing (1 hour = 1 minute)
DEFAULT_EXPRESS_TAT=24 # Express priority default TAT (hours)
DEFAULT_STANDARD_TAT=72 # Standard priority default TAT (hours)
TAT Thresholds (hardcoded):
- 50% - Warning notification
- 75% - Critical notification
- 100% - Breach notification
3. File Upload Limits
MAX_FILE_SIZE_MB=10 # Max file size per upload
MAX_FILES_PER_REQUEST=10 # Max files per request
ALLOWED_FILE_TYPES=pdf,doc,docx,xls,xlsx,ppt,pptx,jpg,jpeg,png,gif,txt
4. Workflow Limits
MAX_APPROVAL_LEVELS=10 # Max approval stages
MAX_PARTICIPANTS_PER_REQUEST=50 # Max total participants
MAX_SPECTATORS=20 # Max spectators
5. Work Notes Configuration
MAX_MESSAGE_LENGTH=2000 # Max characters per message
MAX_ATTACHMENTS_PER_NOTE=5 # Max files per work note
ENABLE_REACTIONS=true # Allow emoji reactions
ENABLE_MENTIONS=true # Allow @mentions
6. Redis & Queue
REDIS_URL=redis://localhost:6379 # Redis connection string
QUEUE_CONCURRENCY=5 # Concurrent job processing
RATE_LIMIT_MAX=10 # Max requests per duration
RATE_LIMIT_DURATION=1000 # Rate limit window (ms)
7. Security & Session
JWT_SECRET=your_secret_min_32_characters # JWT signing key
JWT_EXPIRY=8h # Token expiration
SESSION_TIMEOUT_MINUTES=480 # 8 hours
ENABLE_2FA=false # Two-factor authentication
8. Notifications
ENABLE_EMAIL_NOTIFICATIONS=true # Email alerts
ENABLE_PUSH_NOTIFICATIONS=true # Browser push
NOTIFICATION_BATCH_DELAY=5000 # Batch delay (ms)
Email SMTP (if email enabled):
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your_email@royalenfield.com
SMTP_PASSWORD=your_password
SMTP_FROM=noreply@royalenfield.com
9. Feature Flags
ENABLE_AI_CONCLUSION=true # AI-generated conclusion remarks
ENABLE_TEMPLATES=false # Template-based workflows (future)
ENABLE_ANALYTICS=true # Dashboard analytics
ENABLE_EXPORT=true # Export to CSV/PDF
10. Database
DB_HOST=localhost
DB_PORT=5432
DB_NAME=re_workflow
DB_USER=postgres
DB_PASSWORD=your_password
DB_SSL=false
11. Storage
STORAGE_TYPE=local # Options: local, s3, gcs
STORAGE_PATH=./uploads # Local storage path
For S3 (if using cloud storage):
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret
AWS_REGION=ap-south-1
AWS_S3_BUCKET=re-workflow-documents
🚀 Quick Setup
Development Environment
- Copy example configuration:
cp .env.example .env
- Update critical values:
DB_PASSWORD=your_local_postgres_password
JWT_SECRET=generate_random_32_char_string
REDIS_URL=redis://localhost:6379
- Enable test mode for faster TAT testing:
TAT_TEST_MODE=true # 1 hour = 1 minute
Production Environment
- Set environment to production:
NODE_ENV=production
- Configure secure secrets:
JWT_SECRET=use_very_strong_secret_here
DB_PASSWORD=strong_database_password
- Disable test mode:
TAT_TEST_MODE=false
- Enable SSL:
DB_SSL=true
- Configure email/push notifications with real credentials
📊 Configuration API
GET /api/v1/config
Returns public (non-sensitive) configuration for frontend.
Response:
{
"success": true,
"data": {
"appName": "Royal Enfield Workflow Management",
"appVersion": "1.2.0",
"workingHours": {
"START_HOUR": 9,
"END_HOUR": 18,
"START_DAY": 1,
"END_DAY": 5,
"TIMEZONE": "Asia/Kolkata"
},
"tat": {
"thresholds": {
"warning": 50,
"critical": 75,
"breach": 100
},
"testMode": false
},
"upload": {
"maxFileSizeMB": 10,
"allowedFileTypes": ["pdf", "doc", "docx", ...],
"maxFilesPerRequest": 10
},
"workflow": {
"maxApprovalLevels": 10,
"maxParticipants": 50,
"maxSpectators": 20
},
"workNotes": {
"maxMessageLength": 2000,
"maxAttachmentsPerNote": 5,
"enableReactions": true,
"enableMentions": true
},
"features": {
"ENABLE_AI_CONCLUSION": true,
"ENABLE_TEMPLATES": false,
"ENABLE_ANALYTICS": true,
"ENABLE_EXPORT": true
},
"ui": {
"DEFAULT_THEME": "light",
"DEFAULT_LANGUAGE": "en",
"DATE_FORMAT": "DD/MM/YYYY",
"TIME_FORMAT": "12h",
"CURRENCY": "INR",
"CURRENCY_SYMBOL": "₹"
}
}
}
🎯 Usage in Code
Backend
import { SYSTEM_CONFIG } from '@config/system.config';
// Access configuration
const maxLevels = SYSTEM_CONFIG.WORKFLOW.MAX_APPROVAL_LEVELS;
const workStart = SYSTEM_CONFIG.WORKING_HOURS.START_HOUR;
Frontend
import { configService } from '@/services/configService';
// Async usage
const config = await configService.getConfig();
const maxFileSize = config.upload.maxFileSizeMB;
// Helper functions
import { getWorkingHours, getTATThresholds } from '@/services/configService';
const workingHours = await getWorkingHours();
🔐 Security Best Practices
- Never commit
.envwith real credentials - Use strong JWT secrets (min 32 characters)
- Rotate secrets regularly in production
- Use environment-specific configs for dev/staging/prod
- Store secrets in secure vaults (AWS Secrets Manager, Azure Key Vault)
📝 Configuration Checklist
Before Deployment
- Set
NODE_ENV=production - Configure database with SSL
- Set strong JWT secret
- Disable TAT test mode
- Configure email SMTP
- Set up Redis connection
- Configure file storage (local/S3/GCS)
- Test working hours match business hours
- Verify TAT thresholds are correct
- Enable/disable feature flags as needed
🛠️ Adding New Configuration
- Add to
system.config.ts:
export const SYSTEM_CONFIG = {
// ...existing config
MY_NEW_SETTING: {
VALUE: process.env.MY_VALUE || 'default',
},
};
- Add to
getPublicConfig()if needed on frontend:
export function getPublicConfig() {
return {
// ...existing
myNewSetting: SYSTEM_CONFIG.MY_NEW_SETTING,
};
}
- Access in code:
const value = SYSTEM_CONFIG.MY_NEW_SETTING.VALUE;
📚 Related Files
src/config/system.config.ts- Central configurationsrc/config/tat.config.ts- TAT-specific (re-exports from system.config)src/config/constants.ts- Legacy constants (being migrated)src/routes/config.routes.ts- Configuration API endpoint- Frontend:
src/services/configService.ts- Configuration fetching service
✅ Benefits of Centralized Configuration
✅ Single Source of Truth - All settings in one place
✅ Environment-based - Different configs for dev/staging/prod
✅ Frontend Sync - Frontend fetches config from backend
✅ No Hardcoding - All values configurable via .env
✅ Type-Safe - TypeScript interfaces ensure correctness
✅ Easy Updates - Change .env without code changes