# Electronic Document Management System (EDMS) - Technical Guide

## Table of Contents
1. [System Overview](#system-overview)
2. [Architecture](#architecture)
3. [Technology Stack](#technology-stack)
4. [Database Schema](#database-schema)
5. [Installation & Setup](#installation--setup)
6. [Development Environment](#development-environment)
7. [Component Structure](#component-structure)
8. [API & Data Management](#api--data-management)
9. [DMS Settings System](#dms-settings-system)
10. [Site Settings Integration](#site-settings-integration)
11. [Security & Authentication](#security--authentication)
12. [Deployment](#deployment)
13. [Maintenance & Monitoring](#maintenance--monitoring)
14. [Extension & Customization](#extension--customization)

## System Overview

The Electronic Document Management System (EDMS) is a modern web application built with Nuxt.js 3 and Vue.js 3, designed to provide a comprehensive document management solution for organizations. The system implements a hierarchical document organization structure with role-based access control (RBAC) and supports integration with external authentication providers.

### Key Technical Features
- **Modern Frontend**: Vue.js 3 with Composition API and script setup syntax
- **SSR/SPA Support**: Nuxt.js 3 for optimal performance and SEO
- **Database**: Prisma ORM with MySQL support and comprehensive schema
- **Styling**: TailwindCSS with custom Rs component system
- **State Management**: Pinia for reactive state management with persistence
- **Authentication**: Flexible authentication with JWT tokens and RBAC
- **File Management**: Server-side file handling with metadata and versioning
- **Real-time Features**: Vue reactivity for live updates and notifications
- **Responsive Design**: Mobile-first approach with adaptive layouts
- **Configurable System**: Comprehensive settings management for DMS and site configuration

## Architecture

### System Architecture
```
┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Frontend      │    │   Backend       │    │   Database      │
│   (Nuxt.js)     │◄──►│   (Server API)  │◄──►│   (MySQL)       │
│                 │    │                 │    │                 │
│ • Vue.js 3      │    │ • Prisma ORM    │    │ • User Data     │
│ • TailwindCSS   │    │ • File System   │    │ • Documents     │
│ • Pinia Store   │    │ • Authentication│    │ • Permissions   │
│ • Rs Components │    │ • API Routes    │    │ • Audit Logs    │
│ • Settings UI   │    │ • Settings API  │    │ • DMS Settings  │
└─────────────────┘    └─────────────────┘    └─────────────────┘
        │                       │                       │
        │              ┌─────────────────┐             │
        │              │ File Storage    │             │
        └──────────────►│ • Documents     │◄────────────┘
                       │ • Versions      │
                       │ • Thumbnails    │
                       │ • Temp Files    │
                       └─────────────────┘
```

### Application Flow
1. **Authentication**: User authenticates via configured authentication provider
2. **Authorization**: System validates user permissions against RBAC rules
3. **Configuration Loading**: System loads DMS and site settings from database
4. **Navigation**: User navigates document hierarchy with access level tabs
5. **Data Fetching**: Pinia store manages API calls with caching and error handling
6. **Rendering**: Vue components render UI with reactive updates
7. **File Operations**: Server handles secure file upload/download/preview
8. **Access Control**: System enforces granular document permissions
9. **Audit Trail**: All actions are logged for compliance and security
10. **Settings Management**: Administrators configure system behavior through settings UI

## Technology Stack

### Frontend Dependencies
```json
{
  "core": {
    "nuxt": "^3.6.5",
    "vue": "^3.x",
    "@pinia/nuxt": "^0.4.11",
    "@pinia-plugin-persistedstate/nuxt": "^1.1.1"
  },
  "styling": {
    "@nuxtjs/tailwindcss": "^6.8.0",
    "sass": "^1.62.0",
    "postcss-import": "^15.1.0"
  },
  "forms": {
    "@formkit/nuxt": "^1.0.0",
    "@formkit/themes": "^1.0.0",
    "@formkit/addons": "^1.0.0",
    "@formkit/pro": "^0.115.3"
  },
  "ui": {
    "apexcharts": "^3.36.0",
    "vue3-apexcharts": "^1.4.1",
    "@vueuse/core": "^9.5.0",
    "@vueuse/nuxt": "^9.5.0",
    "floating-vue": "^2.0.0-beta.24",
    "vue3-dropzone": "^2.0.1"
  },
  "utilities": {
    "luxon": "^3.1.0",
    "uuid": "^10.0.0",
    "crypto-js": "^4.1.1",
    "@shimyshack/uid": "^0.1.7"
  }
}
```

### Backend Dependencies
```json
{
  "database": {
    "@prisma/client": "^5.1.1",
    "prisma": "^5.1.1"
  },
  "authentication": {
    "jsonwebtoken": "^8.5.1"
  },
  "file-handling": {
    "jspdf": "^2.5.1"
  },
  "security": {
    "nuxt-security": "^0.13.0"
  }
}
```

### Development Tools
- **ESLint**: Code linting with Vue.js specific rules
- **TypeScript**: Type safety with Nuxt TypeScript integration
- **Prettier**: Consistent code formatting
- **Vite**: Lightning-fast build tool and HMR
- **PostCSS**: Advanced CSS processing with plugins

## Database Schema

### Core Models

#### User Management
```prisma
model user {
  userID           Int                @id @default(autoincrement())
  userSecretKey    String?            @db.VarChar(255)
  userUsername     String?            @db.VarChar(255)
  userPassword     String?            @db.VarChar(255)
  userFullName     String?            @db.VarChar(255)
  userEmail        String?            @db.VarChar(255)
  userPhone        String?            @db.VarChar(255)
  userStatus       String?            @db.VarChar(255)
  userCreatedDate  DateTime?          @default(now()) @db.DateTime(0)
  userModifiedDate DateTime?          @db.DateTime(0)
  
  // Relationships
  audit            audit[]
  userrole         userrole[]
}

model role {
  roleID              Int                @id @default(autoincrement())
  roleName            String?            @db.VarChar(255)
  roleDescription     String?            @db.VarChar(255)
  roleStatus          String?            @db.VarChar(255)
  roleCreatedDate     DateTime?          @db.DateTime(0)
  roleModifiedDate    DateTime?          @db.DateTime(0)
  
  userrole            userrole[]
}

model userrole {
  userRoleID          Int      @id @default(autoincrement())
  userRoleUserID      Int      @default(0)
  userRoleRoleID      Int      @default(0)
  userRoleCreatedDate DateTime @db.DateTime(0)
  
  role                role     @relation(fields: [userRoleRoleID], references: [roleID])
  user                user     @relation(fields: [userRoleUserID], references: [userID])
}
```

#### Organization Structure
```prisma
model organization {
  org_id       Int          @id @default(autoincrement())
  org_name     String       @unique @db.VarChar(255)
  org_address1 String?      @db.VarChar(255)
  org_address2 String?      @db.VarChar(255)
  org_postcode Int?
  org_state    String?      @db.VarChar(100)
  org_country  String?      @db.VarChar(100)
  org_active   Int?
  
  departments  department[]
}

model department {
  dp_id        Int          @id @default(autoincrement())
  dp_name      String       @db.VarChar(255)
  org_id       Int
  
  organization organization @relation(fields: [org_id], references: [org_id])
  cabinets     cabinets[]
  users        sys_user[]
}

model cabinets {
  cb_id        Int         @id @default(autoincrement())
  cb_name      String      @unique @db.VarChar(255)
  cb_parent_id Int?
  cb_private   Int?        @default(0)
  cb_owner     Int?
  dp_id        Int?
  created_at   DateTime?   @db.DateTime(0)
  modified_at  DateTime?   @db.DateTime(0)
  
  department   department? @relation(fields: [dp_id], references: [dp_id])
}
```

#### Site Settings Configuration
```prisma
model site_settings {
  settingID                Int       @id @default(autoincrement())
  siteName                 String?   @default("corradAF") @db.VarChar(255)
  siteNameFontSize         Int?      @default(18)
  siteDescription          String?   @db.Text
  siteLogo                 String?   @db.VarChar(500)
  siteLoadingLogo          String?   @db.VarChar(500)
  siteFavicon              String?   @db.VarChar(500)
  siteLoginLogo            String?   @db.VarChar(500)
  showSiteNameInHeader     Boolean?  @default(true)
  customCSS                String?   @db.LongText
  themeMode                String?   @default("biasa") @db.VarChar(100)
  customThemeFile          String?   @db.VarChar(500)
  currentFont              String?   @db.VarChar(100)
  fontSource               String?   @db.VarChar(100)
  seoTitle                 String?   @db.VarChar(255)
  seoDescription           String?   @db.Text
  seoKeywords              String?   @db.Text
  seoAuthor                String?   @db.VarChar(255)
  seoOgImage               String?   @db.VarChar(500)
  seoTwitterCard           String?   @default("summary_large_image") @db.VarChar(100)
  seoCanonicalUrl          String?   @db.VarChar(500)
  seoRobots                String?   @default("index, follow") @db.VarChar(100)
  seoGoogleAnalytics       String?   @db.VarChar(255)
  seoGoogleTagManager      String?   @db.VarChar(255)
  seoFacebookPixel         String?   @db.VarChar(255)
  settingCreatedDate       DateTime? @default(now()) @db.DateTime(0)
  settingModifiedDate      DateTime? @default(now()) @db.DateTime(0)
}
```

#### DMS Settings Configuration
```prisma
model dms_settings {
  settingID                     Int       @id @default(autoincrement())
  
  // User & Access Management
  userRoles                     String?   @db.Text
  rbacEnabled                   Boolean?  @default(true)
  userGroups                    String?   @db.Text
  permissionView                Boolean?  @default(true)
  permissionEdit                Boolean?  @default(true)
  permissionDelete              Boolean?  @default(false)
  permissionDownload            Boolean?  @default(true)
  permissionShare               Boolean?  @default(true)
  ssoEnabled                    Boolean?  @default(false)
  mfaRequired                   Boolean?  @default(false)
  ldapIntegration               Boolean?  @default(false)
  sessionTimeout                Int?      @default(8)
  
  // Document & Folder Settings
  folderMaxDepth                Int?      @default(5)
  folderDefaultStructure        String?   @db.Text
  folderTemplates               String?   @db.Text
  namingAutoGenerate            Boolean?  @default(true)
  namingMandatoryFields         String?   @db.Text
  namingPattern                 String?   @default("{department}_{title}_{date}") @db.VarChar(255)
  retentionEnabled              Boolean?  @default(true)
  retentionDefaultDays          Int?      @default(2555)
  retentionArchiveBeforeDelete  Boolean?  @default(true)
  versionControlEnabled         Boolean?  @default(true)
  versionControlMaxVersions     Int?      @default(10)
  versionControlAutoVersioning  Boolean?  @default(true)
  
  // Metadata & Tagging
  metadataCustomFields          String?   @db.LongText
  taggingPredefinedTags         String?   @db.Text
  taggingUserGeneratedTags      Boolean?  @default(true)
  taggingTagSuggestions         Boolean?  @default(true)
  classificationAutoEnabled     Boolean?  @default(true)
  classificationRules           String?   @db.Text
  
  // Workflow & Automation
  workflowApprovalEnabled       Boolean?  @default(true)
  workflowDefaultFlow           String?   @default("department-head-approval") @db.VarChar(255)
  workflowCustomFlows           String?   @db.Text
  notificationEmail             Boolean?  @default(true)
  notificationInApp             Boolean?  @default(true)
  notificationUploadAlerts      Boolean?  @default(true)
  notificationDeadlineReminders Boolean?  @default(true)
  automationTriggers            String?   @db.Text
  automationActions             String?   @db.Text
  
  // Upload & Storage Settings
  uploadAllowedFileTypes        String?   @db.Text
  uploadBlockedFileTypes        String?   @db.Text
  uploadFileSizeLimit           Int?      @default(100)
  uploadQuotaPerUser            Int?      @default(5000)
  uploadQuotaPerGroup           Int?      @default(50000)
  uploadQuotaPerProject         Int?      @default(100000)
  storageType                   String?   @default("local") @db.VarChar(100)
  storagePath                   String?   @default("/var/uploads/edms") @db.VarChar(500)
  storageBackupEnabled          Boolean?  @default(true)
  storageCompressionEnabled     Boolean?  @default(false)
  
  // System Settings
  systemTimezone                String?   @default("Asia/Kuala_Lumpur") @db.VarChar(100)
  systemBackupSchedule          String?   @default("daily") @db.VarChar(100)
  systemLogLevel                String?   @default("info") @db.VarChar(100)
  systemMaintenanceMode         Boolean?  @default(false)
  systemAutoUpdates             Boolean?  @default(false)
  systemMonitoring              Boolean?  @default(true)
  systemPerformanceMetrics      Boolean?  @default(true)
  
  settingCreatedDate            DateTime? @default(now()) @db.DateTime(0)
  settingModifiedDate           DateTime? @default(now()) @db.DateTime(0)
}
```

#### Audit Trail
```prisma
model audit {
  auditID          Int       @id @default(autoincrement())
  auditIP          String?   @db.VarChar(255)
  auditURL         String?   @db.VarChar(255)
  auditURLMethod   String?   @db.VarChar(255)
  auditURLPayload  String?   @db.Text
  auditCreatedDate DateTime? @default(now()) @db.DateTime(0)
  auditAction      String?   @db.VarChar(255)
  auditDetails     String?   @db.Text
  auditUserID      Int?
  auditUsername    String?   @db.VarChar(255)
  
  user             user?     @relation(fields: [auditUserID], references: [userID])
}
```

## Installation & Setup

### Prerequisites
- Node.js 18+ with npm/yarn/pnpm
- MySQL 8.0+ or PostgreSQL 13+
- Git for version control

### Environment Configuration
Create a `.env` file in the project root:
```bash
# Database Configuration
DATABASE_URL="mysql://username:password@localhost:3306/edms_db"

# Authentication Settings
JWT_SECRET="your-super-secret-jwt-key"
AUTH_PROVIDER="local" # or "authentik", "ldap"

# File Storage
UPLOAD_PATH="/var/uploads/edms"
MAX_FILE_SIZE="100" # MB

# Application Settings
NUXT_SECRET_KEY="your-nuxt-secret-key"
NUXT_PUBLIC_API_BASE="/api"
```

### Database Setup
```bash
# Install dependencies
npm install

# Generate Prisma client
npx prisma generate

# Apply database migrations
npx prisma db push

# Seed initial data (optional)
npx prisma db seed
```

### Development Server
```bash
# Start development server
npm run dev

# Access application
# http://localhost:3000
```

## Component Structure

### Frontend Architecture
```
pages/
├── dms/
│   ├── index.vue                 # Main DMS interface with access level tabs
│   ├── settings.vue              # Comprehensive DMS settings management
│   └── erd.vue                   # Entity Relationship Diagram viewer
├── index.vue                     # Dashboard/landing page
└── [...other pages]

components/
├── dms/
│   └── explorer/
│       └── DMSExplorer.vue       # Document management interface
├── Rs/                           # Reusable component system
│   ├── RsButton.vue
│   ├── RsCard.vue
│   ├── RsInput.vue
│   └── [...other components]
└── layouts/
    └── Breadcrumb.vue            # Navigation breadcrumb component

composables/
├── useDmsSettings.js             # DMS settings state management
├── useSiteSettings.js            # Site configuration management
└── [...other composables]

stores/
├── dms.js                        # DMS-specific Pinia store
└── [...other stores]
```

### Rs Component System
The EDMS uses a custom component library (Rs components) for consistent UI:
- **RsButton**: Standardized button component with variants
- **RsCard**: Card container with header/body/footer slots
- **RsInput**: Form input components with validation
- **RsModal**: Modal dialog components
- **RsTable**: Data table components with sorting/filtering

## API & Data Management

### API Route Structure
```
server/api/
├── dms/
│   └── settings.js               # DMS configuration API
├── devtool/
│   └── config/
│       ├── site-settings.js      # Site settings API
│       ├── upload-file.js        # File upload handling
│       └── add-custom-theme.js   # Theme management
└── [...other API routes]
```

### DMS Settings API
The DMS settings API provides comprehensive configuration management:

#### GET `/api/dms/settings`
Retrieves current DMS settings with automatic defaults if none exist.

**Response Structure:**
```json
{
  "statusCode": 200,
  "message": "Success",
  "data": {
    "access": {
      "userRoles": ["Admin", "Editor", "Viewer", "Uploader"],
      "rbacEnabled": true,
      "userGroups": ["HR Department", "Finance", "IT", "Legal"],
      "permissions": {
        "view": true,
        "edit": true,
        "delete": false,
        "download": true,
        "share": true
      },
      "authentication": {
        "ssoEnabled": false,
        "mfaRequired": false,
        "ldapIntegration": false,
        "sessionTimeout": 8
      }
    },
    "documents": {
      "folderHierarchy": {
        "maxDepth": 5,
        "defaultStructure": ["Department", "Project", "Category", "Year"],
        "folderTemplates": ["Standard", "Project-based", "Department-based"]
      },
      "namingConventions": {
        "autoGenerate": true,
        "mandatoryFields": ["title", "department", "date"],
        "pattern": "{department}_{title}_{date}"
      },
      "retention": {
        "enabled": true,
        "defaultDays": 2555,
        "archiveBeforeDelete": true
      },
      "versionControl": {
        "enabled": true,
        "maxVersions": 10,
        "autoVersioning": true
      }
    },
    "metadata": {
      "customFields": [
        {"name": "Department", "type": "dropdown", "required": true},
        {"name": "Priority", "type": "select", "required": false}
      ],
      "tagging": {
        "predefinedTags": ["urgent", "confidential", "public", "draft", "final"],
        "userGeneratedTags": true,
        "tagSuggestions": true
      },
      "classification": {
        "autoClassification": true,
        "rules": ["confidential-keywords", "department-based", "file-type"]
      }
    },
    "workflow": {
      "approvalFlows": {
        "enabled": true,
        "defaultFlow": "department-head-approval",
        "customFlows": ["legal-review", "finance-approval", "director-sign-off"]
      },
      "notifications": {
        "emailNotifications": true,
        "inAppNotifications": true,
        "uploadAlerts": true,
        "deadlineReminders": true
      },
      "automation": {
        "triggers": ["document-uploaded", "approval-completed", "deadline-reached"],
        "actions": ["move-to-folder", "send-notification", "create-task"]
      }
    },
    "upload": {
      "fileTypes": {
        "allowed": ["pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "jpg", "png"],
        "blocked": ["exe", "bat", "cmd"]
      },
      "fileSizeLimit": 100,
      "quotas": {
        "perUser": 5000,
        "perGroup": 50000,
        "perProject": 100000
      },
      "storage": {
        "type": "local",
        "path": "/var/uploads/edms",
        "backupEnabled": true,
        "compressionEnabled": false
      }
    },
    "system": {
      "timezone": "Asia/Kuala_Lumpur",
      "backupSchedule": "daily",
      "logLevel": "info",
      "maintenanceMode": false,
      "autoUpdates": false,
      "systemMonitoring": true,
      "performanceMetrics": true
    }
  }
}
```

#### POST `/api/dms/settings`
Updates DMS settings with validation and automatic database creation.

**Request Body:** Complete or partial settings object
**Response:** Success confirmation with updated data

### Data Transformation
The API handles transformation between frontend structure and database format:
- **Arrays to Strings**: Converts arrays like `userRoles` to comma-separated strings for database storage
- **Nested Objects**: Flattens nested frontend structure to database columns
- **Type Conversion**: Handles boolean/integer conversions between frontend and database
- **Default Values**: Provides sensible defaults for undefined settings

## DMS Settings System

### Overview
The DMS Settings system provides comprehensive configuration management for all aspects of the document management system. Administrators can customize user access, document handling, metadata management, workflows, upload settings, and system configuration through an intuitive web interface.

### Settings Categories

#### 1. User & Access Management
- **User Roles**: Define custom roles (Admin, Editor, Viewer, Uploader, etc.)
- **RBAC Configuration**: Enable/disable role-based access control
- **User Groups**: Organize users into departments or teams
- **Permissions**: Granular control over view, edit, delete, download, and share permissions
- **Authentication**: SSO, MFA, and LDAP integration settings
- **Session Management**: Configure session timeout periods

#### 2. Document & Folder Settings
- **Folder Hierarchy**: Configure maximum depth and default structure
- **Naming Conventions**: Automatic name generation with customizable patterns
- **Document Retention**: Set retention policies and archive settings
- **Version Control**: Enable versioning with configurable version limits
- **Folder Templates**: Predefined folder structures for different use cases

#### 3. Metadata & Tagging
- **Custom Fields**: Define custom metadata fields with types (text, dropdown, date, etc.)
- **Tagging System**: Manage predefined tags and user-generated tags
- **Tag Suggestions**: Enable intelligent tag suggestions
- **Auto-Classification**: Configure automatic document classification rules

#### 4. Workflow & Automation
- **Approval Flows**: Configure document approval workflows
- **Notifications**: Email and in-app notification settings
- **Automation Triggers**: Define triggers for automated actions
- **Custom Workflows**: Create department-specific approval processes

#### 5. Upload & Storage Settings
- **File Type Restrictions**: Allowed and blocked file types
- **Size Limits**: Maximum file size and storage quotas
- **Storage Configuration**: Local storage or cloud storage settings
- **Backup Settings**: Automatic backup and compression options

#### 6. System Settings
- **Timezone Configuration**: System-wide timezone settings
- **Backup Schedules**: Automated backup frequency
- **Monitoring**: System monitoring and performance metrics
- **Maintenance Mode**: Enable/disable maintenance mode
- **Logging**: Configure system log levels

### Settings Interface Features

#### Tabbed Navigation
- **Organized Categories**: Six main categories with intuitive icons
- **Active Indicators**: Visual feedback for the current tab
- **Color-Coded Icons**: Each category has a distinct color scheme

#### Form Management
- **Real-time Updates**: Changes are reflected immediately in the UI
- **Validation**: Client-side and server-side validation
- **Loading States**: Visual feedback during save operations
- **Error Handling**: Comprehensive error messages with auto-dismiss

#### Dynamic Fields
- **Add/Remove Roles**: Dynamic management of user roles
- **Custom Field Builder**: Add/remove custom metadata fields with type selection
- **Array Management**: Tag lists and file type lists with comma-separated input

#### Import/Export Functionality
- **JSON Export**: Export complete settings as JSON for backup
- **JSON Import**: Import settings from backup files
- **Settings Migration**: Easy transfer between environments

#### Reset to Defaults
- **One-Click Reset**: Reset all settings to default values
- **Confirmation Dialog**: Prevent accidental resets
- **Selective Reset**: Reset individual categories (future enhancement)

### Implementation Details

#### Composable Pattern
```javascript
// useDmsSettings.js provides:
const {
  dmsSettings,           // Reactive settings object
  loading,               // Loading state
  saving,                // Saving state
  loadDmsSettings,       // Load from API
  updateDmsSettings,     // Save to API
  resetToDefaults,       // Reset functionality
  exportSettings,        // Export as JSON
  importSettings,        // Import from JSON
  getSetting,            // Get individual setting
  updateSetting          // Update individual setting
} = useDmsSettings();
```

#### Database Integration
- **Automatic Creation**: Settings table created automatically if not exists
- **Upsert Operations**: Update existing or create new settings
- **Default Values**: Sensible defaults for all configuration options
- **Data Transformation**: Automatic conversion between frontend and database formats

#### Error Handling
- **API Errors**: Graceful handling of network and server errors
- **Validation Errors**: Client-side validation with user-friendly messages
- **Fallback Values**: Default settings if API fails
- **Retry Mechanisms**: Automatic retry for failed operations

## Site Settings Integration

### Comprehensive Branding System
The site settings system allows complete customization of the application appearance:

#### Basic Configuration
- **Site Name**: Global application name with font size control
- **Site Description**: SEO and meta tag descriptions
- **Theme Selection**: Choose from standard and accessibility themes

#### Branding Assets
- **Site Logo**: Custom logo for header and sidebar
- **Loading Logo**: Branding for loading screens
- **Favicon**: Custom browser icon
- **Login Logo**: Dedicated login page branding

#### Advanced Customization
- **Custom CSS**: Inject custom styles globally
- **Custom Themes**: Upload and manage custom theme files
- **Font Configuration**: Custom font selection and sources

#### SEO Integration
- **Meta Tags**: Complete SEO meta tag management
- **Open Graph**: Social media sharing optimization
- **Twitter Cards**: Twitter-specific meta tags
- **Analytics**: Google Analytics and Tag Manager integration

### Global Application Integration
Site settings are integrated throughout the application:
- **Header Component**: Dynamic logo and name display
- **Loading Screen**: Branded loading experience
- **Document Title**: Dynamic page titles
- **Theme System**: Synchronized theme selection

## Security & Authentication

### Authentication Methods
- **Local Authentication**: Username/password with bcrypt hashing
- **JWT Tokens**: Secure token-based authentication
- **Session Management**: Configurable session timeouts
- **Multi-Factor Authentication**: Optional MFA support
- **LDAP Integration**: Enterprise directory integration
- **SSO Support**: Single Sign-On capabilities

### Authorization & RBAC
- **Role-Based Access Control**: Granular permission system
- **Dynamic Permissions**: Configurable permission sets
- **Resource-Level Security**: Document-level access control
- **Access Request Workflow**: Formal access request process
- **Audit Trail**: Comprehensive activity logging

### Data Security
- **Input Validation**: Server-side validation for all inputs
- **SQL Injection Prevention**: Prisma ORM parameter binding
- **XSS Protection**: Content Security Policy and input sanitization
- **File Upload Security**: File type validation and virus scanning
- **Encryption**: Data encryption at rest and in transit

## Deployment

### Production Environment
```bash
# Build for production
npm run build

# Start production server
npm run start

# Environment configuration
NODE_ENV=production
DATABASE_URL="mysql://user:pass@host:port/db"
NUXT_SECRET_KEY="production-secret-key"
```

### Docker Deployment
```dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
```

### Database Migrations
```bash
# Apply schema changes
npx prisma db push

# Generate migration files
npx prisma migrate dev --name init

# Apply migrations in production
npx prisma migrate deploy
```

## Maintenance & Monitoring

### Database Maintenance
- **Backup Strategies**: Automated database backups
- **Performance Monitoring**: Query optimization and indexing
- **Data Retention**: Configurable document retention policies
- **Archive Management**: Automated archiving of old documents

### System Monitoring
- **Performance Metrics**: Configurable system monitoring
- **Error Tracking**: Comprehensive error logging
- **Audit Logs**: User activity and system event logging
- **Health Checks**: API endpoint health monitoring

### Update Management
- **Automated Updates**: Optional automatic system updates
- **Version Control**: Database schema versioning
- **Rollback Procedures**: Safe rollback mechanisms
- **Testing Procedures**: Comprehensive testing protocols

## Extension & Customization

### Custom Components
The Rs component system allows easy customization:
```vue
<template>
  <RsButton variant="custom" @click="handleClick">
    Custom Action
  </RsButton>
</template>
```

### API Extensions
Add custom API endpoints:
```javascript
// server/api/custom/endpoint.js
export default defineEventHandler(async (event) => {
  // Custom logic here
  return { message: "Custom API response" };
});
```

### Theme Customization
Create custom themes:
```css
html[data-theme="custom-theme"] {
  --color-primary: 255, 0, 0;
  --color-secondary: 0, 255, 0;
  /* Custom variables */
}
```

### Plugin Development
Extend functionality with Nuxt plugins:
```javascript
// plugins/custom-plugin.client.js
export default defineNuxtPlugin(() => {
  // Client-side plugin logic
});
```

### Settings Extensions
The DMS settings system is designed for extensibility:
- **Custom Setting Categories**: Add new configuration sections
- **Validation Rules**: Custom validation for settings
- **Setting Computed Properties**: Derived settings based on other values
- **Setting Watchers**: React to setting changes automatically

This technical guide provides comprehensive coverage of the EDMS system architecture, implementation details, and customization options. The system is designed for scalability, maintainability, and extensibility while providing a robust document management solution. 