-- =================================================================== -- Royal Enfield Workflow Management - Complete Configuration Seed -- Run this script to seed all 18 admin configurations -- =================================================================== -- Clear existing configurations (optional - remove if you want to keep custom values) -- DELETE FROM admin_configurations; -- Insert all 18 configurations with proper field mapping INSERT INTO admin_configurations ( config_id, config_key, config_category, config_value, value_type, display_name, description, default_value, is_editable, is_sensitive, validation_rules, ui_component, sort_order, requires_restart, created_at, updated_at ) VALUES -- ==================== TAT SETTINGS (6) ==================== ( gen_random_uuid(), 'DEFAULT_TAT_EXPRESS_HOURS', 'TAT_SETTINGS', '24', 'NUMBER', 'Default TAT for Express Priority', 'Default turnaround time in hours for express priority requests (calendar days, 24/7)', '24', true, false, '{"min": 1, "max": 168}'::jsonb, 'number', 1, false, NOW(), NOW() ), ( gen_random_uuid(), 'DEFAULT_TAT_STANDARD_HOURS', 'TAT_SETTINGS', '48', 'NUMBER', 'Default TAT for Standard Priority', 'Default turnaround time in hours for standard priority requests (working days only)', '48', true, false, '{"min": 1, "max": 720}'::jsonb, 'number', 2, false, NOW(), NOW() ), ( gen_random_uuid(), 'TAT_REMINDER_THRESHOLD_1', 'TAT_SETTINGS', '50', 'NUMBER', 'First TAT Reminder Threshold (%)', 'Send first gentle reminder when this percentage of TAT is elapsed', '50', true, false, '{"min": 1, "max": 100}'::jsonb, 'slider', 3, false, NOW(), NOW() ), ( gen_random_uuid(), 'TAT_REMINDER_THRESHOLD_2', 'TAT_SETTINGS', '75', 'NUMBER', 'Second TAT Reminder Threshold (%)', 'Send escalation warning when this percentage of TAT is elapsed', '75', true, false, '{"min": 1, "max": 100}'::jsonb, 'slider', 4, false, NOW(), NOW() ), ( gen_random_uuid(), 'WORK_START_HOUR', 'TAT_SETTINGS', '9', 'NUMBER', 'Working Day Start Hour', 'Hour when working day starts (24-hour format, 0-23)', '9', true, false, '{"min": 0, "max": 23}'::jsonb, 'number', 5, true, NOW(), NOW() ), ( gen_random_uuid(), 'WORK_END_HOUR', 'TAT_SETTINGS', '18', 'NUMBER', 'Working Day End Hour', 'Hour when working day ends (24-hour format, 0-23)', '18', true, false, '{"min": 0, "max": 23}'::jsonb, 'number', 6, true, NOW(), NOW() ), -- ==================== DOCUMENT POLICY (3) ==================== ( gen_random_uuid(), 'MAX_FILE_SIZE_MB', 'DOCUMENT_POLICY', '10', 'NUMBER', 'Maximum File Upload Size (MB)', 'Maximum allowed file size for document uploads in megabytes', '10', true, false, '{"min": 1, "max": 100}'::jsonb, 'number', 10, true, NOW(), NOW() ), ( gen_random_uuid(), 'ALLOWED_FILE_TYPES', 'DOCUMENT_POLICY', 'pdf,doc,docx,xls,xlsx,ppt,pptx,jpg,jpeg,png,gif', 'STRING', 'Allowed File Types', 'Comma-separated list of allowed file extensions for uploads', 'pdf,doc,docx,xls,xlsx,ppt,pptx,jpg,jpeg,png,gif', true, false, '{}'::jsonb, 'text', 11, true, NOW(), NOW() ), ( gen_random_uuid(), 'DOCUMENT_RETENTION_DAYS', 'DOCUMENT_POLICY', '365', 'NUMBER', 'Document Retention Period (Days)', 'Number of days to retain documents after workflow closure before archival', '365', true, false, '{"min": 30, "max": 3650}'::jsonb, 'number', 12, false, NOW(), NOW() ), -- ==================== AI CONFIGURATION (2) ==================== ( gen_random_uuid(), 'AI_REMARK_GENERATION_ENABLED', 'AI_CONFIGURATION', 'true', 'BOOLEAN', 'Enable AI Remark Generation', 'Toggle AI-generated conclusion remarks for workflow closures', 'true', true, false, '{}'::jsonb, 'toggle', 20, false, NOW(), NOW() ), ( gen_random_uuid(), 'AI_REMARK_MAX_CHARACTERS', 'AI_CONFIGURATION', '500', 'NUMBER', 'AI Remark Maximum Characters', 'Maximum character limit for AI-generated conclusion remarks', '500', true, false, '{"min": 100, "max": 2000}'::jsonb, 'number', 21, false, NOW(), NOW() ), -- ==================== NOTIFICATION RULES (3) ==================== ( gen_random_uuid(), 'ENABLE_EMAIL_NOTIFICATIONS', 'NOTIFICATION_RULES', 'true', 'BOOLEAN', 'Enable Email Notifications', 'Send email notifications for workflow events', 'true', true, false, '{}'::jsonb, 'toggle', 30, false, NOW(), NOW() ), ( gen_random_uuid(), 'ENABLE_IN_APP_NOTIFICATIONS', 'NOTIFICATION_RULES', 'true', 'BOOLEAN', 'Enable In-App Notifications', 'Show notifications within the application portal', 'true', true, false, '{}'::jsonb, 'toggle', 31, false, NOW(), NOW() ), ( gen_random_uuid(), 'NOTIFICATION_BATCH_DELAY_MS', 'NOTIFICATION_RULES', '5000', 'NUMBER', 'Notification Batch Delay (ms)', 'Delay in milliseconds before sending batched notifications to avoid spam', '5000', true, false, '{"min": 1000, "max": 30000}'::jsonb, 'number', 32, false, NOW(), NOW() ), -- ==================== DASHBOARD LAYOUT (4) ==================== ( gen_random_uuid(), 'DASHBOARD_SHOW_TOTAL_REQUESTS', 'DASHBOARD_LAYOUT', 'true', 'BOOLEAN', 'Show Total Requests Card', 'Display total requests KPI card on dashboard', 'true', true, false, '{}'::jsonb, 'toggle', 40, false, NOW(), NOW() ), ( gen_random_uuid(), 'DASHBOARD_SHOW_OPEN_REQUESTS', 'DASHBOARD_LAYOUT', 'true', 'BOOLEAN', 'Show Open Requests Card', 'Display open requests KPI card on dashboard', 'true', true, false, '{}'::jsonb, 'toggle', 41, false, NOW(), NOW() ), ( gen_random_uuid(), 'DASHBOARD_SHOW_TAT_COMPLIANCE', 'DASHBOARD_LAYOUT', 'true', 'BOOLEAN', 'Show TAT Compliance Card', 'Display TAT compliance KPI card on dashboard', 'true', true, false, '{}'::jsonb, 'toggle', 42, false, NOW(), NOW() ), ( gen_random_uuid(), 'DASHBOARD_SHOW_PENDING_ACTIONS', 'DASHBOARD_LAYOUT', 'true', 'BOOLEAN', 'Show Pending Actions Card', 'Display pending actions KPI card on dashboard', 'true', true, false, '{}'::jsonb, 'toggle', 43, false, NOW(), NOW() ), -- ==================== WORKFLOW SHARING (3) ==================== ( gen_random_uuid(), 'ALLOW_ADD_SPECTATOR', 'WORKFLOW_SHARING', 'true', 'BOOLEAN', 'Allow Adding Spectators', 'Enable users to add spectators to workflow requests', 'true', true, false, '{}'::jsonb, 'toggle', 50, false, NOW(), NOW() ), ( gen_random_uuid(), 'MAX_SPECTATORS_PER_REQUEST', 'WORKFLOW_SHARING', '20', 'NUMBER', 'Maximum Spectators per Request', 'Maximum number of spectators allowed per workflow request', '20', true, false, '{"min": 1, "max": 100}'::jsonb, 'number', 51, false, NOW(), NOW() ), ( gen_random_uuid(), 'ALLOW_EXTERNAL_SHARING', 'WORKFLOW_SHARING', 'false', 'BOOLEAN', 'Allow External Sharing', 'Allow sharing workflow links with users outside the organization', 'false', true, false, '{}'::jsonb, 'toggle', 52, false, NOW(), NOW() ), -- ==================== WORKFLOW LIMITS (2) ==================== ( gen_random_uuid(), 'MAX_APPROVAL_LEVELS', 'WORKFLOW_LIMITS', '10', 'NUMBER', 'Maximum Approval Levels', 'Maximum number of approval levels allowed per workflow', '10', true, false, '{"min": 1, "max": 20}'::jsonb, 'number', 60, false, NOW(), NOW() ), ( gen_random_uuid(), 'MAX_PARTICIPANTS_PER_REQUEST', 'WORKFLOW_LIMITS', '50', 'NUMBER', 'Maximum Participants per Request', 'Maximum total participants (approvers + spectators) per workflow', '50', true, false, '{"min": 2, "max": 200}'::jsonb, 'number', 61, false, NOW(), NOW() ) ON CONFLICT (config_key) DO UPDATE SET config_value = EXCLUDED.config_value, display_name = EXCLUDED.display_name, description = EXCLUDED.description, is_editable = EXCLUDED.is_editable, updated_at = NOW(); -- Verify insertion SELECT config_category, config_key, is_editable, is_sensitive, requires_restart FROM admin_configurations ORDER BY config_category, sort_order; -- Show summary SELECT config_category AS category, COUNT(*) AS total_settings, SUM(CASE WHEN is_editable = true THEN 1 ELSE 0 END) AS editable_count FROM admin_configurations GROUP BY config_category ORDER BY config_category;