File size: 7,363 Bytes
af8cc55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
-- ============================================================
-- OPTIM AI BRE ENGINE - SEED: ADMIN TENANT + USER
-- Run AFTER 001_initial_schema.sql
-- Password: Admin@1234  (BCrypt hash below)
-- ============================================================

-- Step 1: Create the default SYSTEM tenant
INSERT INTO tenants (
    id, tenant_code, tenant_name, display_name,
    plan_type, max_rules, max_executions_per_day,
    is_active, settings
) VALUES (
    'a0000000-0000-0000-0000-000000000001',
    'SYSTEM',
    'OPTIM AI - System Tenant',
    'System Admin',
    'ENTERPRISE',
    99999,
    99999999,
    TRUE,
    '{"isSystem": true}'::jsonb
) ON CONFLICT (tenant_code) DO NOTHING;

-- Step 2: Create SUPER_ADMIN role for the system tenant
INSERT INTO roles (
    id, tenant_id, role_code, role_name, description,
    is_system_role, is_active
) VALUES (
    'b0000000-0000-0000-0000-000000000001',
    'a0000000-0000-0000-0000-000000000001',
    'SUPER_ADMIN',
    'Super Administrator',
    'Full system access - all permissions',
    TRUE, TRUE
) ON CONFLICT DO NOTHING;

-- Step 3: Grant ALL permissions to SUPER_ADMIN
INSERT INTO role_permissions (role_id, permission_id)
SELECT
    'b0000000-0000-0000-0000-000000000001',
    p.id
FROM permissions p
ON CONFLICT DO NOTHING;

-- Step 4: Create the admin user
-- Email: admin@optimai.in
-- Password: Admin@1234
-- BCrypt hash generated with work factor 12
INSERT INTO users (
    id, tenant_id, email, username, password_hash,
    full_name, designation, department,
    is_active, is_email_verified
) VALUES (
    'c0000000-0000-0000-0000-000000000001',
    'a0000000-0000-0000-0000-000000000001',
    'admin@optimai.in',
    'admin',
    '$2a$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/Lewjoc.MiG6L6bHQW',
    'System Administrator',
    'Platform Administrator',
    'Technology',
    TRUE,
    TRUE
) ON CONFLICT (tenant_id, email) DO NOTHING;

-- Step 5: Assign SUPER_ADMIN role to admin user
INSERT INTO user_roles (user_id, role_id)
VALUES (
    'c0000000-0000-0000-0000-000000000001',
    'b0000000-0000-0000-0000-000000000001'
) ON CONFLICT DO NOTHING;

-- Step 6: Create a DEMO tenant for testing multi-tenancy
INSERT INTO tenants (
    id, tenant_code, tenant_name, display_name,
    plan_type, max_rules, max_executions_per_day, is_active, settings
) VALUES (
    'a0000000-0000-0000-0000-000000000002',
    'DEMO_BANK',
    'Demo Bank Ltd',
    'Demo Bank',
    'ENTERPRISE', 500, 100000, TRUE,
    '{"productTypes": ["VEHICLE_LOAN","TRACTOR_LOAN","MSME"]}'::jsonb
) ON CONFLICT (tenant_code) DO NOTHING;

-- Step 7: Create CREDIT_MANAGER role for Demo Bank
INSERT INTO roles (id, tenant_id, role_code, role_name, is_system_role, is_active)
VALUES (
    'b0000000-0000-0000-0000-000000000002',
    'a0000000-0000-0000-0000-000000000002',
    'CREDIT_MANAGER', 'Credit Manager', FALSE, TRUE
) ON CONFLICT DO NOTHING;

-- Step 8: Grant rule permissions to CREDIT_MANAGER
INSERT INTO role_permissions (role_id, permission_id)
SELECT 'b0000000-0000-0000-0000-000000000002', p.id
FROM permissions p
WHERE p.permission_code IN (
    'RULE.VIEW','RULE.CREATE','RULE.EDIT','RULE.CLONE',
    'EXECUTION.VIEW','EXECUTION.EXECUTE','EXECUTION.SANDBOX',
    'REPORT.VIEW','REPORT.EXPORT','AI.GENERATE','AI.ANALYSIS',
    'AUDIT.VIEW'
) ON CONFLICT DO NOTHING;

-- Step 9: Create demo user for Demo Bank
-- Email: demo@demobank.in
-- Password: Demo@1234
INSERT INTO users (
    id, tenant_id, email, username, password_hash,
    full_name, designation, department, is_active, is_email_verified
) VALUES (
    'c0000000-0000-0000-0000-000000000002',
    'a0000000-0000-0000-0000-000000000002',
    'demo@demobank.in',
    'demo_credit',
    '$2a$12$9k.GJjJDiZqSVhWNi3W4C.F.5XknZ3Nuo8hHE1t3L3XuoUgJAOxFW',
    'Demo Credit Manager',
    'Credit Manager',
    'Credit Department',
    TRUE, TRUE
) ON CONFLICT (tenant_id, email) DO NOTHING;

-- Step 10: Assign CREDIT_MANAGER role to demo user
INSERT INTO user_roles (user_id, role_id)
VALUES (
    'c0000000-0000-0000-0000-000000000002',
    'b0000000-0000-0000-0000-000000000002'
) ON CONFLICT DO NOTHING;

-- Step 11: Seed rule categories for Demo Bank
INSERT INTO rule_categories (id, tenant_id, category_code, category_name, icon, sort_order, is_active)
VALUES
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'ELIGIBILITY', 'Eligibility Rules', 'βœ…', 1, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'BUREAU', 'Bureau Rules', 'πŸ“Š', 2, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'INCOME', 'Income Rules', 'πŸ’°', 3, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'VEHICLE', 'Vehicle Rules', 'πŸš—', 4, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FI', 'FI Rules', '🏠', 5, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FRAUD', 'Fraud Rules', '🚨', 6, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'COMPLIANCE', 'Compliance Rules', 'πŸ“‹', 7, TRUE)
ON CONFLICT DO NOTHING;

-- Step 12: Seed loan stages for Demo Bank
INSERT INTO loan_stages (id, tenant_id, stage_code, stage_name, stage_order, is_active)
VALUES
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'LOGIN', 'Login Stage', 1, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'DEDUPE', 'De-Dupe Check', 2, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'BUREAU_PULL', 'Bureau Pull', 3, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'CREDIT_EVAL', 'Credit Evaluation', 4, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FI', 'Field Investigation', 5, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'VALUATION', 'Vehicle Valuation', 6, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'FINAL_CREDIT', 'Final Credit Decision', 7, TRUE),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'SANCTION', 'Sanction', 8, TRUE)
ON CONFLICT DO NOTHING;

-- Step 13: Seed products for Demo Bank
INSERT INTO products (id, tenant_id, product_code, product_name, product_type, is_active, config)
VALUES
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'VL', 'Vehicle Loan', 'VEHICLE_LOAN', TRUE, '{}'::jsonb),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'TL', 'Tractor Loan', 'TRACTOR_LOAN', TRUE, '{}'::jsonb),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'AL', 'Auto Loan', 'AUTO_LOAN', TRUE, '{}'::jsonb),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'CVL', 'Commercial Vehicle Loan', 'CV_LOAN', TRUE, '{}'::jsonb),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'MSME', 'MSME Loan', 'MSME', TRUE, '{}'::jsonb),
    (uuid_generate_v4(), 'a0000000-0000-0000-0000-000000000002', 'PL', 'Personal Loan', 'PERSONAL_LOAN', TRUE, '{}'::jsonb)
ON CONFLICT DO NOTHING;

-- ============================================================
-- VERIFICATION QUERIES (run to confirm seed data)
-- ============================================================
-- SELECT * FROM tenants;
-- SELECT u.email, u.full_name, r.role_name FROM users u
--   JOIN user_roles ur ON ur.user_id = u.id
--   JOIN roles r ON r.id = ur.role_id;
-- SELECT COUNT(*) FROM permissions;