Re_Backend/CONFIGURATION.md

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

  1. Copy example configuration:
cp .env.example .env
  1. Update critical values:
DB_PASSWORD=your_local_postgres_password
JWT_SECRET=generate_random_32_char_string
REDIS_URL=redis://localhost:6379
  1. Enable test mode for faster TAT testing:
TAT_TEST_MODE=true    # 1 hour = 1 minute

Production Environment

  1. Set environment to production:
NODE_ENV=production
  1. Configure secure secrets:
JWT_SECRET=use_very_strong_secret_here
DB_PASSWORD=strong_database_password
  1. Disable test mode:
TAT_TEST_MODE=false
  1. Enable SSL:
DB_SSL=true
  1. 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

  1. Never commit .env with real credentials
  2. Use strong JWT secrets (min 32 characters)
  3. Rotate secrets regularly in production
  4. Use environment-specific configs for dev/staging/prod
  5. 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

  1. Add to system.config.ts:
export const SYSTEM_CONFIG = {
  // ...existing config
  MY_NEW_SETTING: {
    VALUE: process.env.MY_VALUE || 'default',
  },
};
  1. Add to getPublicConfig() if needed on frontend:
export function getPublicConfig() {
  return {
    // ...existing
    myNewSetting: SYSTEM_CONFIG.MY_NEW_SETTING,
  };
}
  1. Access in code:
const value = SYSTEM_CONFIG.MY_NEW_SETTING.VALUE;

  • src/config/system.config.ts - Central configuration
  • src/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