gcx/backend/migrations/seed_data.sql

1130 lines
47 KiB
PL/PgSQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- =============================================================================
-- Genex Platform - Comprehensive Seed Data
-- =============================================================================
-- Purpose: Populate dev/demo database with realistic data covering the full
-- user lifecycle: registration -> KYC -> wallet -> coupon browsing
-- -> purchase -> trading -> settlement.
--
-- Usage: psql -U genex -d genex_dev -f migrations/seed_data.sql
-- (Run AFTER all 000-025 migrations have been applied)
--
-- Password: All users share the password 'Test123456!'
-- The hash below is a bcrypt placeholder. In a real environment,
-- generate via: await bcrypt.hash('Test123456!', 12)
-- Placeholder hash: $2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM
--
-- Idempotency: All INSERTs use ON CONFLICT DO NOTHING so this script can be
-- re-run safely without duplicating data.
-- =============================================================================
BEGIN;
-- ---------------------------------------------------------------------------
-- 0. Password hash constant (used for ALL seed users)
-- ---------------------------------------------------------------------------
-- bcrypt hash for 'Test123456!' with cost factor 12
-- In production, each user would have a unique salt; this is for dev/demo only.
DO $$
DECLARE
pw_hash CONSTANT VARCHAR := '$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM';
BEGIN
RAISE NOTICE 'Seed data: using shared password hash for all users (password: Test123456!)';
END $$;
-- ---------------------------------------------------------------------------
-- 1. USERS (10 users)
-- ---------------------------------------------------------------------------
-- Roles: 1 admin, 2 issuers, 1 market_maker, 6 regular users
-- KYC levels: 0 (none), 1 (basic), 2 (enhanced), 3 (institutional)
INSERT INTO users (id, phone, email, password_hash, nickname, avatar_url, kyc_level, wallet_mode, role, status, residence_state, nationality, last_login_at, created_at) VALUES
-- [U01] Super Admin
('a0000000-0001-4000-8000-000000000001',
'13900000001', 'admin@gogenex.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'系统管理员', NULL, 3, 'pro', 'admin', 'active', 'CA', 'US',
NOW() - INTERVAL '1 hour', NOW() - INTERVAL '180 days'),
-- [U02] Issuer Account #1 - Coffee Chain
('a0000000-0002-4000-8000-000000000002',
'13800100002', 'issuer.coffee@gogenex.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'星享咖啡官方', 'https://cdn.gogenex.com/avatars/issuer_coffee.png', 2, 'standard', 'issuer', 'active', 'SH', 'CN',
NOW() - INTERVAL '3 hours', NOW() - INTERVAL '150 days'),
-- [U03] Issuer Account #2 - Cinema Group
('a0000000-0003-4000-8000-000000000003',
'13800200003', 'issuer.cinema@gogenex.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'云顶影业官方', 'https://cdn.gogenex.com/avatars/issuer_cinema.png', 2, 'standard', 'issuer', 'active', 'BJ', 'CN',
NOW() - INTERVAL '6 hours', NOW() - INTERVAL '120 days'),
-- [U04] Market Maker
('a0000000-0004-4000-8000-000000000004',
'13800300004', 'mm@gogenex.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'做市商Alpha', NULL, 2, 'pro', 'market_maker', 'active', 'HK', 'HK',
NOW() - INTERVAL '30 minutes', NOW() - INTERVAL '100 days'),
-- [U05] Regular user - KYC Level 3 (full verification)
('a0000000-0005-4000-8000-000000000005',
'13600500005', 'zhangwei@example.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'张伟', 'https://cdn.gogenex.com/avatars/user_zhangwei.png', 3, 'standard', 'user', 'active', 'GD', 'CN',
NOW() - INTERVAL '2 hours', NOW() - INTERVAL '90 days'),
-- [U06] Regular user - KYC Level 2
('a0000000-0006-4000-8000-000000000006',
'15800600006', 'lina@example.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'李娜', NULL, 2, 'standard', 'user', 'active', 'JS', 'CN',
NOW() - INTERVAL '1 day', NOW() - INTERVAL '75 days'),
-- [U07] Regular user - KYC Level 1
('a0000000-0007-4000-8000-000000000007',
'18600700007', 'wangfang@example.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'王芳', NULL, 1, 'standard', 'user', 'active', 'ZJ', 'CN',
NOW() - INTERVAL '3 days', NOW() - INTERVAL '60 days'),
-- [U08] Regular user - KYC Level 0 (new user, no KYC)
('a0000000-0008-4000-8000-000000000008',
'17700800008', 'liuyang@example.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'刘洋', NULL, 0, 'standard', 'user', 'active', 'SC', 'CN',
NOW() - INTERVAL '5 days', NOW() - INTERVAL '30 days'),
-- [U09] Regular user - KYC Level 1, frozen account
('a0000000-0009-4000-8000-000000000009',
'15900900009', 'chenhao@example.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'陈浩', NULL, 1, 'standard', 'user', 'frozen', 'HN', 'CN',
NOW() - INTERVAL '15 days', NOW() - INTERVAL '45 days'),
-- [U10] Regular user - KYC Level 2, active trader
('a0000000-0010-4000-8000-000000000010',
'13101000010', 'zhaoxue@example.com',
'$2a$12$LJ3m4ys3Mz5rQW3b2p3Uke5K6xMz5K6xMz5K6xMz5K6xMz5K6xM',
'赵雪', 'https://cdn.gogenex.com/avatars/user_zhaoxue.png', 2, 'standard', 'user', 'active', 'LN', 'CN',
NOW() - INTERVAL '4 hours', NOW() - INTERVAL '55 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 2. KYC SUBMISSIONS (5 submissions)
-- ---------------------------------------------------------------------------
INSERT INTO kyc_submissions (id, user_id, target_level, full_name, id_type, id_number, date_of_birth, id_front_url, id_back_url, selfie_url, address, annual_income, net_worth, status, reject_reason, reviewed_by, reviewed_at, created_at) VALUES
-- KYC-1: U05 张伟 -> Level 3 approved
('b0000000-0001-4000-8000-000000000001',
'a0000000-0005-4000-8000-000000000005', 3,
'张伟', 'id_card', '440106199001011234', '1990-01-01',
'https://cdn.gogenex.com/kyc/u05_front.jpg', 'https://cdn.gogenex.com/kyc/u05_back.jpg',
'https://cdn.gogenex.com/kyc/u05_selfie.jpg',
'广东省广州市天河区珠江新城花城大道100号', 350000.00, 1200000.00,
'approved', NULL,
'a0000000-0001-4000-8000-000000000001', NOW() - INTERVAL '85 days',
NOW() - INTERVAL '88 days'),
-- KYC-2: U06 李娜 -> Level 2 approved
('b0000000-0002-4000-8000-000000000002',
'a0000000-0006-4000-8000-000000000006', 2,
'李娜', 'id_card', '320105199205152345', '1992-05-15',
'https://cdn.gogenex.com/kyc/u06_front.jpg', 'https://cdn.gogenex.com/kyc/u06_back.jpg',
'https://cdn.gogenex.com/kyc/u06_selfie.jpg',
'江苏省南京市鼓楼区中山路200号', 180000.00, 500000.00,
'approved', NULL,
'a0000000-0001-4000-8000-000000000001', NOW() - INTERVAL '70 days',
NOW() - INTERVAL '73 days'),
-- KYC-3: U07 王芳 -> Level 2 rejected (blurry photo)
('b0000000-0003-4000-8000-000000000003',
'a0000000-0007-4000-8000-000000000007', 2,
'王芳', 'id_card', '330102199308203456', '1993-08-20',
'https://cdn.gogenex.com/kyc/u07_front.jpg', 'https://cdn.gogenex.com/kyc/u07_back.jpg',
'https://cdn.gogenex.com/kyc/u07_selfie.jpg',
'浙江省杭州市西湖区文三路300号', 120000.00, 300000.00,
'rejected', '证件照片模糊,请重新上传清晰照片',
'a0000000-0001-4000-8000-000000000001', NOW() - INTERVAL '55 days',
NOW() - INTERVAL '58 days'),
-- KYC-4: U08 刘洋 -> Level 1 pending
('b0000000-0004-4000-8000-000000000004',
'a0000000-0008-4000-8000-000000000008', 1,
'刘洋', 'id_card', '510105199506104567', '1995-06-10',
'https://cdn.gogenex.com/kyc/u08_front.jpg', NULL, NULL,
'四川省成都市武侯区科华北路400号', NULL, NULL,
'pending', NULL, NULL, NULL,
NOW() - INTERVAL '28 days'),
-- KYC-5: U10 赵雪 -> Level 2 approved
('b0000000-0005-4000-8000-000000000005',
'a0000000-0010-4000-8000-000000000010', 2,
'赵雪', 'passport', 'E12345678', '1994-12-03',
'https://cdn.gogenex.com/kyc/u10_front.jpg', NULL,
'https://cdn.gogenex.com/kyc/u10_selfie.jpg',
'辽宁省大连市中山区人民路500号', 220000.00, 800000.00,
'approved', NULL,
'a0000000-0001-4000-8000-000000000001', NOW() - INTERVAL '50 days',
NOW() - INTERVAL '53 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 3. WALLETS (10 wallets, one per user)
-- ---------------------------------------------------------------------------
INSERT INTO wallets (id, user_id, balance, frozen, currency, created_at) VALUES
('c0000000-0001-4000-8000-000000000001',
'a0000000-0001-4000-8000-000000000001', 500000.00, 0.00, 'USD',
NOW() - INTERVAL '180 days'),
('c0000000-0002-4000-8000-000000000002',
'a0000000-0002-4000-8000-000000000002', 250000.00, 10000.00, 'USD',
NOW() - INTERVAL '150 days'),
('c0000000-0003-4000-8000-000000000003',
'a0000000-0003-4000-8000-000000000003', 180000.00, 5000.00, 'USD',
NOW() - INTERVAL '120 days'),
('c0000000-0004-4000-8000-000000000004',
'a0000000-0004-4000-8000-000000000004', 1000000.00, 50000.00, 'USD',
NOW() - INTERVAL '100 days'),
('c0000000-0005-4000-8000-000000000005',
'a0000000-0005-4000-8000-000000000005', 45000.00, 2000.00, 'USD',
NOW() - INTERVAL '90 days'),
('c0000000-0006-4000-8000-000000000006',
'a0000000-0006-4000-8000-000000000006', 28000.00, 500.00, 'USD',
NOW() - INTERVAL '75 days'),
('c0000000-0007-4000-8000-000000000007',
'a0000000-0007-4000-8000-000000000007', 12000.00, 0.00, 'USD',
NOW() - INTERVAL '60 days'),
('c0000000-0008-4000-8000-000000000008',
'a0000000-0008-4000-8000-000000000008', 1000.00, 0.00, 'USD',
NOW() - INTERVAL '30 days'),
('c0000000-0009-4000-8000-000000000009',
'a0000000-0009-4000-8000-000000000009', 5500.00, 5500.00, 'USD',
NOW() - INTERVAL '45 days'),
('c0000000-0010-4000-8000-000000000010',
'a0000000-0010-4000-8000-000000000010', 38000.00, 3000.00, 'USD',
NOW() - INTERVAL '55 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 4. ISSUERS (2 issuers linked to user accounts)
-- ---------------------------------------------------------------------------
INSERT INTO issuers (id, user_id, company_name, business_license, contact_name, contact_phone, contact_email, credit_rating, credit_score, issuance_quota, used_quota, tier, status, is_first_month, approved_at, created_at) VALUES
-- Issuer #1: 星享咖啡 (linked to U02)
('d0000000-0001-4000-8000-000000000001',
'a0000000-0002-4000-8000-000000000002',
'星享咖啡连锁有限公司', 'BL-2024-SH-00158',
'陈明辉', '13800100002', 'issuer.coffee@gogenex.com',
'A', 78.50, 500000.00, 125000.00,
'gold', 'active', false,
NOW() - INTERVAL '145 days', NOW() - INTERVAL '148 days'),
-- Issuer #2: 云顶影业 (linked to U03)
('d0000000-0002-4000-8000-000000000002',
'a0000000-0003-4000-8000-000000000003',
'云顶影业集团股份有限公司', 'BL-2024-BJ-00672',
'林小燕', '13800200003', 'issuer.cinema@gogenex.com',
'AA', 86.20, 1000000.00, 280000.00,
'platinum', 'active', false,
NOW() - INTERVAL '115 days', NOW() - INTERVAL '118 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 5. STORES (4 stores across 2 issuers)
-- ---------------------------------------------------------------------------
INSERT INTO stores (id, issuer_id, name, address, phone, latitude, longitude, status, created_at) VALUES
-- 2 stores for 星享咖啡
('e0000000-0001-4000-8000-000000000001',
'd0000000-0001-4000-8000-000000000001',
'星享咖啡 陆家嘴旗舰店',
'上海市浦东新区陆家嘴环路1088号',
'021-50501234', 31.2397000, 121.4995000, 'active',
NOW() - INTERVAL '140 days'),
('e0000000-0002-4000-8000-000000000002',
'd0000000-0001-4000-8000-000000000001',
'星享咖啡 南京西路店',
'上海市静安区南京西路1266号恒隆广场B1',
'021-62881234', 31.2283000, 121.4486000, 'active',
NOW() - INTERVAL '130 days'),
-- 2 stores for 云顶影业
('e0000000-0003-4000-8000-000000000003',
'd0000000-0002-4000-8000-000000000002',
'云顶影城 国贸IMAX店',
'北京市朝阳区建国门外大街1号国贸商城5层',
'010-65051234', 39.9085000, 116.4583000, 'active',
NOW() - INTERVAL '110 days'),
('e0000000-0004-4000-8000-000000000004',
'd0000000-0002-4000-8000-000000000002',
'云顶影城 南山科技园店',
'深圳市南山区科技园南区科苑路15号科兴科学园A座3层',
'0755-86801234', 22.5431000, 113.9495000, 'active',
NOW() - INTERVAL '100 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 6. COUPONS (8 coupons across categories)
-- ---------------------------------------------------------------------------
INSERT INTO coupons (id, chain_token_id, issuer_id, name, description, image_url, face_value, current_price, issue_price, total_supply, remaining_supply, expiry_date, coupon_type, category, status, owner_user_id, resale_count, max_resale_count, is_transferable, created_at) VALUES
-- C01: 咖啡畅饮券 - Active, dining
('f0000000-0001-4000-8000-000000000001', 1001,
'd0000000-0001-4000-8000-000000000001',
'咖啡畅饮券', '星享咖啡任意门店任意饮品一杯,含经典系列与季节限定',
'https://cdn.gogenex.com/coupons/coffee_free.png',
50.00, 42.50, 45.00, 1000, 780,
CURRENT_DATE + INTERVAL '180 days', 'utility', '餐饮', 'listed',
NULL, 0, 3, true,
NOW() - INTERVAL '130 days'),
-- C02: 精品手冲体验券 - Active, dining
('f0000000-0002-4000-8000-000000000002', 1002,
'd0000000-0001-4000-8000-000000000001',
'精品手冲体验券', '指定旗舰门店精品单品手冲咖啡体验,含品鉴讲解',
'https://cdn.gogenex.com/coupons/pourover.png',
128.00, 108.80, 118.00, 500, 340,
CURRENT_DATE + INTERVAL '90 days', 'utility', '餐饮', 'listed',
NULL, 0, 2, true,
NOW() - INTERVAL '100 days'),
-- C03: 200元咖啡储值券 - Active, dining (higher value)
('f0000000-0003-4000-8000-000000000003', 1003,
'd0000000-0001-4000-8000-000000000001',
'200元咖啡储值券', '星享咖啡全线门店通用储值券,可拆分使用',
'https://cdn.gogenex.com/coupons/coffee_200.png',
200.00, 172.00, 180.00, 300, 210,
CURRENT_DATE + INTERVAL '365 days', 'utility', '餐饮', 'listed',
NULL, 0, 5, true,
NOW() - INTERVAL '80 days'),
-- C04: IMAX电影票 - Active, entertainment
('f0000000-0004-4000-8000-000000000004', 2001,
'd0000000-0002-4000-8000-000000000002',
'IMAX 3D电影通票', '云顶影城任意场次IMAX 3D电影一张含3D眼镜',
'https://cdn.gogenex.com/coupons/imax_ticket.png',
120.00, 96.00, 100.00, 800, 580,
CURRENT_DATE + INTERVAL '120 days', 'utility', '娱乐', 'listed',
NULL, 0, 3, true,
NOW() - INTERVAL '95 days'),
-- C05: 年度影院会员卡 - Active, entertainment (premium)
('f0000000-0005-4000-8000-000000000005', 2002,
'd0000000-0002-4000-8000-000000000002',
'年度影院会员卡', '云顶影城全年无限次2D观影IMAX/4D另加20元差价',
'https://cdn.gogenex.com/coupons/annual_pass.png',
999.00, 849.15, 899.00, 200, 142,
CURRENT_DATE + INTERVAL '365 days', 'utility', '娱乐', 'listed',
NULL, 0, 1, false,
NOW() - INTERVAL '90 days'),
-- C06: 双人电影套餐券 - Active, entertainment
('f0000000-0006-4000-8000-000000000006', 2003,
'd0000000-0002-4000-8000-000000000002',
'双人电影套餐券', '两张电影票+大桶爆米花+两杯饮料,周末通用',
'https://cdn.gogenex.com/coupons/couple_combo.png',
200.00, 165.00, 175.00, 600, 420,
CURRENT_DATE + INTERVAL '150 days', 'utility', '娱乐', 'listed',
NULL, 0, 3, true,
NOW() - INTERVAL '85 days'),
-- C07: 旅行出行券 - Paused (seasonal)
('f0000000-0007-4000-8000-000000000007', 3001,
'd0000000-0001-4000-8000-000000000001',
'春节出行礼券500元', '合作酒店及民宿通用代金券满1000可用',
'https://cdn.gogenex.com/coupons/travel_500.png',
500.00, 425.00, 450.00, 100, 100,
CURRENT_DATE + INTERVAL '60 days', 'utility', '旅行', 'minted',
NULL, 0, 2, true,
NOW() - INTERVAL '20 days'),
-- C08: 已过期券 - Expired, retail
('f0000000-0008-4000-8000-000000000008', 4001,
'd0000000-0001-4000-8000-000000000001',
'双十一特惠100元券', '全场通用限2024年双十一活动期间使用',
'https://cdn.gogenex.com/coupons/1111_special.png',
100.00, NULL, 88.00, 2000, 0,
CURRENT_DATE - INTERVAL '30 days', 'utility', '购物', 'expired',
NULL, 0, 3, true,
NOW() - INTERVAL '200 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 7. COUPON RULES (4 rules)
-- ---------------------------------------------------------------------------
INSERT INTO coupon_rules (id, coupon_id, rule_type, rule_value, created_at) VALUES
-- C01 rules: per-user limit and transferable
('70000000-0001-4000-8000-000000000001',
'f0000000-0001-4000-8000-000000000001', 'per_user_limit',
'{"max_quantity": 5}',
NOW() - INTERVAL '130 days'),
-- C03 rules: min purchase
('70000000-0002-4000-8000-000000000002',
'f0000000-0003-4000-8000-000000000003', 'min_purchase',
'{"min_amount": 200, "description": "满200元可用"}',
NOW() - INTERVAL '80 days'),
-- C04 rules: store restriction + resale limit
('70000000-0003-4000-8000-000000000003',
'f0000000-0004-4000-8000-000000000004', 'store_restriction',
'{"store_ids": ["e0000000-0003-4000-8000-000000000003", "e0000000-0004-4000-8000-000000000004"], "description": "仅限云顶影城线下门店"}',
NOW() - INTERVAL '95 days'),
-- C05 rules: not transferable (annual pass is personal)
('70000000-0004-4000-8000-000000000004',
'f0000000-0005-4000-8000-000000000005', 'transferable',
'{"enabled": false, "reason": "年度会员卡仅限本人使用"}',
NOW() - INTERVAL '90 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 8. ORDERS (6 orders - buy and sell at different prices)
-- ---------------------------------------------------------------------------
INSERT INTO orders (id, user_id, coupon_id, side, order_type, price, quantity, filled_quantity, status, is_maker, cancelled_at, created_at) VALUES
-- O01: U05 张伟 buys 咖啡畅饮券 (filled)
('80000000-0001-4000-8000-000000000001',
'a0000000-0005-4000-8000-000000000005',
'f0000000-0001-4000-8000-000000000001',
'buy', 'limit', 43.00, 2, 2, 'filled', false, NULL,
NOW() - INTERVAL '25 days'),
-- O02: U04 Market Maker sells 咖啡畅饮券 (filled - matched with O01)
('80000000-0002-4000-8000-000000000002',
'a0000000-0004-4000-8000-000000000004',
'f0000000-0001-4000-8000-000000000001',
'sell', 'limit', 42.50, 5, 2, 'partial', true, NULL,
NOW() - INTERVAL '26 days'),
-- O03: U06 李娜 buys IMAX电影票 (filled)
('80000000-0003-4000-8000-000000000003',
'a0000000-0006-4000-8000-000000000006',
'f0000000-0004-4000-8000-000000000004',
'buy', 'limit', 98.00, 1, 1, 'filled', false, NULL,
NOW() - INTERVAL '20 days'),
-- O04: U10 赵雪 sells IMAX电影票 (filled - matched with O03)
('80000000-0004-4000-8000-000000000004',
'a0000000-0010-4000-8000-000000000010',
'f0000000-0004-4000-8000-000000000004',
'sell', 'limit', 96.00, 3, 1, 'partial', true, NULL,
NOW() - INTERVAL '21 days'),
-- O05: U05 张伟 buy order still open (双人电影套餐券)
('80000000-0005-4000-8000-000000000005',
'a0000000-0005-4000-8000-000000000005',
'f0000000-0006-4000-8000-000000000006',
'buy', 'limit', 160.00, 1, 0, 'open', false, NULL,
NOW() - INTERVAL '5 days'),
-- O06: U10 赵雪 sell order cancelled
('80000000-0006-4000-8000-000000000006',
'a0000000-0010-4000-8000-000000000010',
'f0000000-0002-4000-8000-000000000002',
'sell', 'limit', 115.00, 2, 0, 'cancelled', false,
NOW() - INTERVAL '8 days',
NOW() - INTERVAL '12 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 9. TRADES (3 matched trades)
-- ---------------------------------------------------------------------------
INSERT INTO trades (id, buy_order_id, sell_order_id, coupon_id, buyer_id, seller_id, price, quantity, buyer_fee, seller_fee, status, tx_hash, settled_at, created_at) VALUES
-- T01: 咖啡畅饮券 trade (O01 buy matched with O02 sell)
('90000000-0001-4000-8000-000000000001',
'80000000-0001-4000-8000-000000000001',
'80000000-0002-4000-8000-000000000002',
'f0000000-0001-4000-8000-000000000001',
'a0000000-0005-4000-8000-000000000005', -- buyer: 张伟
'a0000000-0004-4000-8000-000000000004', -- seller: Market Maker
42.50, 2,
1.2750, 0.8500, -- buyer 1.5%, seller 1.0%
'settled',
'0xabc123def456789012345678901234567890abcdef1234567890abcdef123456',
NOW() - INTERVAL '24 days',
NOW() - INTERVAL '25 days'),
-- T02: IMAX电影票 trade (O03 buy matched with O04 sell)
('90000000-0002-4000-8000-000000000002',
'80000000-0003-4000-8000-000000000003',
'80000000-0004-4000-8000-000000000004',
'f0000000-0004-4000-8000-000000000004',
'a0000000-0006-4000-8000-000000000006', -- buyer: 李娜
'a0000000-0010-4000-8000-000000000010', -- seller: 赵雪
96.00, 1,
1.4400, 0.9600, -- buyer 1.5%, seller 1.0%
'settled',
'0xdef789abc012345678901234567890abcdef1234567890abcdef1234567890ab',
NOW() - INTERVAL '19 days',
NOW() - INTERVAL '20 days'),
-- T03: Another 咖啡畅饮券 trade - pending settlement
('90000000-0003-4000-8000-000000000003',
'80000000-0001-4000-8000-000000000001',
'80000000-0002-4000-8000-000000000002',
'f0000000-0001-4000-8000-000000000001',
'a0000000-0006-4000-8000-000000000006', -- buyer: 李娜
'a0000000-0004-4000-8000-000000000004', -- seller: Market Maker
43.00, 1,
0.6450, 0.4300,
'pending', NULL, NULL,
NOW() - INTERVAL '2 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 10. SETTLEMENTS (4 settlements)
-- ---------------------------------------------------------------------------
INSERT INTO settlements (id, trade_id, buyer_id, seller_id, amount, buyer_fee, seller_fee, status, tx_hash, completed_at, created_at) VALUES
-- S01: Settlement for T01 (completed)
('91000000-0001-4000-8000-000000000001',
'90000000-0001-4000-8000-000000000001',
'a0000000-0005-4000-8000-000000000005',
'a0000000-0004-4000-8000-000000000004',
85.00, 1.2750, 0.8500,
'completed',
'0xabc123def456789012345678901234567890abcdef1234567890abcdef123456',
NOW() - INTERVAL '24 days',
NOW() - INTERVAL '25 days'),
-- S02: Settlement for T02 (completed)
('91000000-0002-4000-8000-000000000002',
'90000000-0002-4000-8000-000000000002',
'a0000000-0006-4000-8000-000000000006',
'a0000000-0010-4000-8000-000000000010',
96.00, 1.4400, 0.9600,
'completed',
'0xdef789abc012345678901234567890abcdef1234567890abcdef1234567890ab',
NOW() - INTERVAL '19 days',
NOW() - INTERVAL '20 days'),
-- S03: Settlement for T03 (pending)
('91000000-0003-4000-8000-000000000003',
'90000000-0003-4000-8000-000000000003',
'a0000000-0006-4000-8000-000000000006',
'a0000000-0004-4000-8000-000000000004',
43.00, 0.6450, 0.4300,
'pending', NULL, NULL,
NOW() - INTERVAL '2 days'),
-- S04: A failed settlement (edge case for testing)
('91000000-0004-4000-8000-000000000004',
'90000000-0001-4000-8000-000000000001', -- re-uses trade T01 for demo; in production this would be a separate trade
'a0000000-0005-4000-8000-000000000005',
'a0000000-0004-4000-8000-000000000004',
42.50, 0.6375, 0.4250,
'failed', NULL, NULL,
NOW() - INTERVAL '23 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 11. TRANSACTIONS (15 wallet transactions)
-- ---------------------------------------------------------------------------
INSERT INTO transactions (id, wallet_id, user_id, type, amount, balance_after, reference_id, reference_type, description, status, created_at) VALUES
-- U05 张伟 deposits
('a1000000-0001-4000-8000-000000000001',
'c0000000-0005-4000-8000-000000000005',
'a0000000-0005-4000-8000-000000000005',
'deposit', 50000.00, 50000.00,
NULL, NULL, '银行转账充值', 'completed',
NOW() - INTERVAL '85 days'),
-- U05 张伟 purchases coupon (buy order O01)
('a1000000-0002-4000-8000-000000000002',
'c0000000-0005-4000-8000-000000000005',
'a0000000-0005-4000-8000-000000000005',
'purchase', -85.00, 49915.00,
'80000000-0001-4000-8000-000000000001', 'order',
'购买咖啡畅饮券x2', 'completed',
NOW() - INTERVAL '25 days'),
-- U05 张伟 fee for trade
('a1000000-0003-4000-8000-000000000003',
'c0000000-0005-4000-8000-000000000005',
'a0000000-0005-4000-8000-000000000005',
'fee', -1.28, 49913.72,
'90000000-0001-4000-8000-000000000001', 'trade',
'交易手续费(买方)', 'completed',
NOW() - INTERVAL '25 days'),
-- U04 Market Maker deposit
('a1000000-0004-4000-8000-000000000004',
'c0000000-0004-4000-8000-000000000004',
'a0000000-0004-4000-8000-000000000004',
'deposit', 1000000.00, 1000000.00,
NULL, NULL, '机构资金注入', 'completed',
NOW() - INTERVAL '98 days'),
-- U04 Market Maker sale proceeds (T01)
('a1000000-0005-4000-8000-000000000005',
'c0000000-0004-4000-8000-000000000004',
'a0000000-0004-4000-8000-000000000004',
'sale', 85.00, 1000085.00,
'90000000-0001-4000-8000-000000000001', 'trade',
'出售咖啡畅饮券x2收入', 'completed',
NOW() - INTERVAL '24 days'),
-- U04 Market Maker fee
('a1000000-0006-4000-8000-000000000006',
'c0000000-0004-4000-8000-000000000004',
'a0000000-0004-4000-8000-000000000004',
'fee', -0.85, 1000084.15,
'90000000-0001-4000-8000-000000000001', 'trade',
'交易手续费(卖方)', 'completed',
NOW() - INTERVAL '24 days'),
-- U06 李娜 deposit
('a1000000-0007-4000-8000-000000000007',
'c0000000-0006-4000-8000-000000000006',
'a0000000-0006-4000-8000-000000000006',
'deposit', 30000.00, 30000.00,
NULL, NULL, '银行转账充值', 'completed',
NOW() - INTERVAL '70 days'),
-- U06 李娜 purchase IMAX ticket (O03)
('a1000000-0008-4000-8000-000000000008',
'c0000000-0006-4000-8000-000000000006',
'a0000000-0006-4000-8000-000000000006',
'purchase', -96.00, 29904.00,
'80000000-0003-4000-8000-000000000003', 'order',
'购买IMAX 3D电影通票x1', 'completed',
NOW() - INTERVAL '20 days'),
-- U06 李娜 fee
('a1000000-0009-4000-8000-000000000009',
'c0000000-0006-4000-8000-000000000006',
'a0000000-0006-4000-8000-000000000006',
'fee', -1.44, 29902.56,
'90000000-0002-4000-8000-000000000002', 'trade',
'交易手续费(买方)', 'completed',
NOW() - INTERVAL '20 days'),
-- U10 赵雪 deposit
('a1000000-0010-4000-8000-000000000010',
'c0000000-0010-4000-8000-000000000010',
'a0000000-0010-4000-8000-000000000010',
'deposit', 40000.00, 40000.00,
NULL, NULL, '银行转账充值', 'completed',
NOW() - INTERVAL '50 days'),
-- U10 赵雪 sale proceeds (T02)
('a1000000-0011-4000-8000-000000000011',
'c0000000-0010-4000-8000-000000000010',
'a0000000-0010-4000-8000-000000000010',
'sale', 96.00, 40096.00,
'90000000-0002-4000-8000-000000000002', 'trade',
'出售IMAX 3D电影通票x1收入', 'completed',
NOW() - INTERVAL '19 days'),
-- U10 赵雪 fee
('a1000000-0012-4000-8000-000000000012',
'c0000000-0010-4000-8000-000000000010',
'a0000000-0010-4000-8000-000000000010',
'fee', -0.96, 40095.04,
'90000000-0002-4000-8000-000000000002', 'trade',
'交易手续费(卖方)', 'completed',
NOW() - INTERVAL '19 days'),
-- U07 王芳 deposit
('a1000000-0013-4000-8000-000000000013',
'c0000000-0007-4000-8000-000000000007',
'a0000000-0007-4000-8000-000000000007',
'deposit', 15000.00, 15000.00,
NULL, NULL, '银行转账充值', 'completed',
NOW() - INTERVAL '55 days'),
-- U07 王芳 withdrawal
('a1000000-0014-4000-8000-000000000014',
'c0000000-0007-4000-8000-000000000007',
'a0000000-0007-4000-8000-000000000007',
'withdraw', -3000.00, 12000.00,
NULL, NULL, '提现到银行卡', 'completed',
NOW() - INTERVAL '40 days'),
-- U05 张伟 transfer out to U06 李娜
('a1000000-0015-4000-8000-000000000015',
'c0000000-0005-4000-8000-000000000005',
'a0000000-0005-4000-8000-000000000005',
'transfer_out', -500.00, 45000.00,
'a0000000-0006-4000-8000-000000000006', 'user',
'转账给用户李娜', 'completed',
NOW() - INTERVAL '15 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 12. MESSAGES (8 messages)
-- ---------------------------------------------------------------------------
INSERT INTO messages (id, user_id, title, content, type, is_read, reference_type, reference_id, created_at) VALUES
-- M01: Welcome message for U05
('a2000000-0001-4000-8000-000000000001',
'a0000000-0005-4000-8000-000000000005',
'欢迎加入Genex', '您好张伟欢迎加入Genex券金融平台现在完成KYC认证即可开始交易。',
'system', true, NULL, NULL,
NOW() - INTERVAL '90 days'),
-- M02: KYC approved for U05
('a2000000-0002-4000-8000-000000000002',
'a0000000-0005-4000-8000-000000000005',
'KYC认证已通过', '恭喜您的KYC L3认证已审核通过现在可以享受全部交易功能。',
'kyc', true, 'kyc_submission', 'b0000000-0001-4000-8000-000000000001',
NOW() - INTERVAL '85 days'),
-- M03: Trade completed notification for U05
('a2000000-0003-4000-8000-000000000003',
'a0000000-0005-4000-8000-000000000005',
'交易成交通知', '您的买单已成交:咖啡畅饮券 x2成交价 ¥42.50/张,总计 ¥85.00。',
'trade', true, 'trade', '90000000-0001-4000-8000-000000000001',
NOW() - INTERVAL '25 days'),
-- M04: Deposit notification for U06
('a2000000-0004-4000-8000-000000000004',
'a0000000-0006-4000-8000-000000000006',
'充值成功', '您已成功充值 ¥30,000.00 到钱包,当前余额 ¥30,000.00。',
'wallet', true, 'transaction', 'a1000000-0007-4000-8000-000000000007',
NOW() - INTERVAL '70 days'),
-- M05: Trade notification for U06
('a2000000-0005-4000-8000-000000000005',
'a0000000-0006-4000-8000-000000000006',
'交易成交通知', '您的买单已成交IMAX 3D电影通票 x1成交价 ¥96.00。',
'trade', false, 'trade', '90000000-0002-4000-8000-000000000002',
NOW() - INTERVAL '20 days'),
-- M06: Account frozen notification for U09
('a2000000-0006-4000-8000-000000000006',
'a0000000-0009-4000-8000-000000000009',
'账户安全通知', '您的账户因安全原因已被临时冻结,请联系客服了解详情。',
'compliance', false, NULL, NULL,
NOW() - INTERVAL '15 days'),
-- M07: Promotion message for U07
('a2000000-0007-4000-8000-000000000007',
'a0000000-0007-4000-8000-000000000007',
'限时活动:新券上线', '春节出行礼券500元即将上线限量100张敬请关注',
'promotion', false, 'coupon', 'f0000000-0007-4000-8000-000000000007',
NOW() - INTERVAL '18 days'),
-- M08: System maintenance notice for U08
('a2000000-0008-4000-8000-000000000008',
'a0000000-0008-4000-8000-000000000008',
'系统维护通知', '平台将于本周六凌晨2:00-4:00进行系统升级维护届时交易功能暂停。',
'system', false, NULL, NULL,
NOW() - INTERVAL '10 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 13. AML ALERTS (3 alerts)
-- ---------------------------------------------------------------------------
INSERT INTO aml_alerts (id, user_id, alert_type, severity, details, status, resolved_by, resolved_at, created_at) VALUES
-- AML-1: Structuring alert for U09 (reason for frozen account)
('a3000000-0001-4000-8000-000000000001',
'a0000000-0009-4000-8000-000000000009',
'structuring', 'high',
'{"pattern": "多笔小额充值紧接大额提现", "total_in": 9800, "total_out": 9500, "window_hours": 24, "tx_count": 12}',
'investigating', NULL, NULL,
NOW() - INTERVAL '16 days'),
-- AML-2: Buy-transfer-withdraw pattern for U08 (low severity, dismissed)
('a3000000-0002-4000-8000-000000000002',
'a0000000-0008-4000-8000-000000000008',
'buy_transfer_withdraw', 'low',
'{"pattern": "充值后购买券并快速转让", "amount": 500, "time_span_minutes": 45}',
'dismissed',
'a0000000-0001-4000-8000-000000000001',
NOW() - INTERVAL '22 days',
NOW() - INTERVAL '25 days'),
-- AML-3: Fan-out pattern for U10 (medium, resolved)
('a3000000-0003-4000-8000-000000000003',
'a0000000-0010-4000-8000-000000000010',
'fan_out', 'medium',
'{"pattern": "同一券多次小额转让给不同用户", "coupon_id": "f0000000-0004-4000-8000-000000000004", "recipient_count": 5, "total_value": 480}',
'resolved',
'a0000000-0001-4000-8000-000000000001',
NOW() - INTERVAL '8 days',
NOW() - INTERVAL '12 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 14. DISPUTES (2 disputes)
-- ---------------------------------------------------------------------------
INSERT INTO disputes (id, type, status, plaintiff_id, defendant_id, order_id, description, amount, resolution, resolved_at, created_at, updated_at) VALUES
-- D01: Pending buyer complaint - coupon not usable
('a4000000-0001-4000-8000-000000000001',
'buyer_claim', 'processing',
'a0000000-0006-4000-8000-000000000006', -- plaintiff: 李娜
'a0000000-0010-4000-8000-000000000010', -- defendant: 赵雪
'80000000-0003-4000-8000-000000000003',
'购买的IMAX电影通票在到店使用时被拒商户称券已被核销。请求退款。',
96.00, NULL, NULL,
NOW() - INTERVAL '5 days', NOW() - INTERVAL '5 days'),
-- D02: Resolved refund request
('a4000000-0002-4000-8000-000000000002',
'refund_request', 'resolved',
'a0000000-0005-4000-8000-000000000005', -- plaintiff: 张伟
'a0000000-0004-4000-8000-000000000004', -- defendant: Market Maker
'80000000-0001-4000-8000-000000000001',
'咖啡畅饮券在门店使用时发现已过活动期,实际可用期限与描述不符。',
42.50,
'经核实该券活动描述确实存在歧义已为买方全额退款并补偿10元代金券。',
NOW() - INTERVAL '12 days',
NOW() - INTERVAL '18 days', NOW() - INTERVAL '12 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 15. AUDIT LOGS (6 entries)
-- ---------------------------------------------------------------------------
INSERT INTO audit_logs (id, admin_id, admin_name, action, resource, resource_id, details, ip_address, result, created_at, updated_at) VALUES
-- Audit: Admin approved KYC for U05
('a5000000-0001-4000-8000-000000000001',
'a0000000-0001-4000-8000-000000000001', '系统管理员',
'kyc.approve', 'kyc_submission', 'b0000000-0001-4000-8000-000000000001',
'{"user_id": "a0000000-0005-4000-8000-000000000005", "target_level": 3, "full_name": "张伟"}',
'10.0.1.100', 'success',
NOW() - INTERVAL '85 days', NOW() - INTERVAL '85 days'),
-- Audit: Admin froze U09 account
('a5000000-0002-4000-8000-000000000002',
'a0000000-0001-4000-8000-000000000001', '系统管理员',
'user.freeze', 'user', 'a0000000-0009-4000-8000-000000000009',
'{"reason": "AML alert - structuring pattern detected", "alert_id": "a3000000-0001-4000-8000-000000000001"}',
'10.0.1.100', 'success',
NOW() - INTERVAL '15 days', NOW() - INTERVAL '15 days'),
-- Audit: Issuer created coupon C01
('a5000000-0003-4000-8000-000000000003',
'a0000000-0002-4000-8000-000000000002', '星享咖啡官方',
'coupon.create', 'coupon', 'f0000000-0001-4000-8000-000000000001',
'{"name": "咖啡畅饮券", "face_value": 50.00, "total_supply": 1000}',
'192.168.1.50', 'success',
NOW() - INTERVAL '130 days', NOW() - INTERVAL '130 days'),
-- Audit: Admin resolved dispute D02
('a5000000-0004-4000-8000-000000000004',
'a0000000-0001-4000-8000-000000000001', '系统管理员',
'dispute.resolve', 'dispute', 'a4000000-0002-4000-8000-000000000002',
'{"resolution": "refund_approved", "refund_amount": 42.50, "compensation": 10.00}',
'10.0.1.100', 'success',
NOW() - INTERVAL '12 days', NOW() - INTERVAL '12 days'),
-- Audit: Admin dismissed AML alert
('a5000000-0005-4000-8000-000000000005',
'a0000000-0001-4000-8000-000000000001', '系统管理员',
'aml_alert.dismiss', 'aml_alert', 'a3000000-0002-4000-8000-000000000002',
'{"reason": "False positive - user is a small business owner with normal transaction pattern"}',
'10.0.1.100', 'success',
NOW() - INTERVAL '22 days', NOW() - INTERVAL '22 days'),
-- Audit: Admin rejected KYC for U07
('a5000000-0006-4000-8000-000000000006',
'a0000000-0001-4000-8000-000000000001', '系统管理员',
'kyc.reject', 'kyc_submission', 'b0000000-0003-4000-8000-000000000003',
'{"user_id": "a0000000-0007-4000-8000-000000000007", "target_level": 2, "reason": "证件照片模糊"}',
'10.0.1.100', 'success',
NOW() - INTERVAL '55 days', NOW() - INTERVAL '55 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 16. ADDRESS MAPPINGS (for users with KYC >= 1)
-- ---------------------------------------------------------------------------
INSERT INTO address_mappings (user_id, internal_address, chain_address, chain_type, created_at) VALUES
('a0000000-0002-4000-8000-000000000002',
'genex:issuer_coffee', '0x1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b', 'evm',
NOW() - INTERVAL '148 days'),
('a0000000-0003-4000-8000-000000000003',
'genex:issuer_cinema', '0x2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c', 'evm',
NOW() - INTERVAL '118 days'),
('a0000000-0004-4000-8000-000000000004',
'genex:mm_alpha', '0x3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d', 'evm',
NOW() - INTERVAL '98 days'),
('a0000000-0005-4000-8000-000000000005',
'genex:zhangwei', '0x4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e', 'evm',
NOW() - INTERVAL '85 days'),
('a0000000-0006-4000-8000-000000000006',
'genex:lina', '0x5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f', 'evm',
NOW() - INTERVAL '70 days'),
('a0000000-0007-4000-8000-000000000007',
'genex:wangfang', '0x6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a', 'evm',
NOW() - INTERVAL '58 days'),
('a0000000-0010-4000-8000-000000000010',
'genex:zhaoxue', '0x7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b', 'evm',
NOW() - INTERVAL '50 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 17. CREDIT METRICS (snapshots for both issuers)
-- ---------------------------------------------------------------------------
INSERT INTO credit_metrics (id, issuer_id, redemption_rate, breakage_ratio, market_tenure_months, user_satisfaction, computed_score, computed_rating, snapshot_date, created_at) VALUES
-- 星享咖啡 - current metrics
('a6000000-0001-4000-8000-000000000001',
'd0000000-0001-4000-8000-000000000001',
0.7200, 0.0800, 5, 0.8500, 78.50, 'A',
CURRENT_DATE, NOW()),
-- 星享咖啡 - last month
('a6000000-0002-4000-8000-000000000002',
'd0000000-0001-4000-8000-000000000001',
0.6800, 0.0900, 4, 0.8300, 75.20, 'A',
CURRENT_DATE - INTERVAL '30 days', NOW() - INTERVAL '30 days'),
-- 云顶影业 - current metrics
('a6000000-0003-4000-8000-000000000003',
'd0000000-0002-4000-8000-000000000002',
0.8500, 0.0500, 4, 0.9100, 86.20, 'AA',
CURRENT_DATE, NOW()),
-- 云顶影业 - last month
('a6000000-0004-4000-8000-000000000004',
'd0000000-0002-4000-8000-000000000002',
0.8200, 0.0600, 3, 0.8900, 84.50, 'AA',
CURRENT_DATE - INTERVAL '30 days', NOW() - INTERVAL '30 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 18. OFAC SCREENINGS (3 registration screenings)
-- ---------------------------------------------------------------------------
INSERT INTO ofac_screenings (id, user_id, screen_type, name_screened, address_screened, is_match, match_score, match_details, action_taken, created_at) VALUES
('a7000000-0001-4000-8000-000000000001',
'a0000000-0005-4000-8000-000000000005',
'registration', '张伟', NULL, false, 0.00, NULL, 'none',
NOW() - INTERVAL '90 days'),
('a7000000-0002-4000-8000-000000000002',
'a0000000-0006-4000-8000-000000000006',
'registration', '李娜', NULL, false, 0.00, NULL, 'none',
NOW() - INTERVAL '75 days'),
('a7000000-0003-4000-8000-000000000003',
'a0000000-0009-4000-8000-000000000009',
'transaction', '陈浩',
'0x9999999999999999999999999999999999999999', false, 12.50,
'{"closest_match": "Chen Hao (SDN List)", "list": "SDN", "score": 12.50, "threshold": 85.00}',
'none',
NOW() - INTERVAL '40 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 19. JOURNAL ENTRIES (4 accounting entries)
-- ---------------------------------------------------------------------------
INSERT INTO journal_entries (id, entry_date, debit_account, debit_amount, credit_account, credit_amount, memo, reference_type, reference_id, tx_hash, created_at) VALUES
-- Trading fee revenue from T01
('a8000000-0001-4000-8000-000000000001',
CURRENT_DATE - INTERVAL '24 days',
'1001', 2.13, '4001', 2.13,
'交易手续费收入 - 咖啡畅饮券 T01 (buyer_fee=1.28 + seller_fee=0.85)',
'trade', '90000000-0001-4000-8000-000000000001',
'0xabc123def456789012345678901234567890abcdef1234567890abcdef123456',
NOW() - INTERVAL '24 days'),
-- Trading fee revenue from T02
('a8000000-0002-4000-8000-000000000002',
CURRENT_DATE - INTERVAL '19 days',
'1001', 2.40, '4001', 2.40,
'交易手续费收入 - IMAX电影通票 T02 (buyer_fee=1.44 + seller_fee=0.96)',
'trade', '90000000-0002-4000-8000-000000000002',
'0xdef789abc012345678901234567890abcdef1234567890abcdef1234567890ab',
NOW() - INTERVAL '19 days'),
-- User deposit recognized as custodial liability
('a8000000-0003-4000-8000-000000000003',
CURRENT_DATE - INTERVAL '85 days',
'1001', 50000.00, '2002', 50000.00,
'用户充值 - 张伟 U05, 资金托管负债',
'transaction', 'a1000000-0001-4000-8000-000000000001', NULL,
NOW() - INTERVAL '85 days'),
-- Deferred revenue for coupon issuance
('a8000000-0004-4000-8000-000000000004',
CURRENT_DATE - INTERVAL '130 days',
'1101', 45000.00, '2001', 45000.00,
'券发行递延收入 - 咖啡畅饮券 C01 (1000张 x ¥45发行价)',
'coupon', 'f0000000-0001-4000-8000-000000000001', NULL,
NOW() - INTERVAL '130 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 20. SAR REPORTS (1 report linked to AML alert)
-- ---------------------------------------------------------------------------
INSERT INTO sar_reports (id, alert_id, user_id, filing_type, subject_info, suspicious_activity, total_amount, date_range_start, date_range_end, narrative, fincen_filing_id, status, filed_at, created_at) VALUES
('a9000000-0001-4000-8000-000000000001',
'a3000000-0001-4000-8000-000000000001',
'a0000000-0009-4000-8000-000000000009',
'initial',
'{"name": "陈浩", "id_type": "id_card", "id_number": "430***********9876", "phone": "159****0009", "account_opened": "2025-01-01"}',
'{"type": "structuring", "pattern": "多笔小额充值紧接大额提现", "transactions": [{"amount": 800, "type": "deposit"}, {"amount": 900, "type": "deposit"}, {"amount": 750, "type": "deposit"}, {"amount": 9500, "type": "withdraw"}]}',
9800.00,
CURRENT_DATE - INTERVAL '20 days',
CURRENT_DATE - INTERVAL '16 days',
'用户陈浩在24小时内进行了12笔小额充值总计9,800元随后立即发起一笔9,500元的大额提现。该行为符合资金分拆(structuring)模式,涉嫌规避大额交易报告门槛。账户已冻结待调查。',
NULL, -- Not yet filed with FinCEN
'pending_review',
NULL,
NOW() - INTERVAL '14 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 21. BREAKAGE RECORDS (1 record for expired coupon C08)
-- ---------------------------------------------------------------------------
INSERT INTO breakage_records (id, coupon_id, issuer_id, face_value, total_amount, platform_share, issuer_share, platform_share_rate, expired_at, processed_at, created_at) VALUES
('aa000000-0001-4000-8000-000000000001',
'f0000000-0008-4000-8000-000000000008',
'd0000000-0001-4000-8000-000000000001',
100.00, 176000.00, 17600.00, 158400.00, 0.1000,
CURRENT_DATE - INTERVAL '30 days',
NOW() - INTERVAL '29 days',
NOW() - INTERVAL '29 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 22. REFUNDS (1 completed refund linked to dispute D02)
-- ---------------------------------------------------------------------------
INSERT INTO refunds (id, user_id, coupon_id, order_id, refund_type, amount, fee_refunded, reason, status, requires_arbitration, processed_at, created_at) VALUES
('ab000000-0001-4000-8000-000000000001',
'a0000000-0005-4000-8000-000000000005',
'f0000000-0001-4000-8000-000000000001',
'80000000-0001-4000-8000-000000000001',
'secondary', 42.50, true,
'券活动描述与实际可用期限不符,经仲裁判定全额退款',
'completed', true,
NOW() - INTERVAL '12 days',
NOW() - INTERVAL '18 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- 23. TRAVEL RULE RECORDS (1 record for large transfer)
-- ---------------------------------------------------------------------------
INSERT INTO travel_rule_records (id, sender_id, receiver_id, amount, sender_address, receiver_address, sender_identity_hash, receiver_identity_hash, is_external, trisa_message_id, tx_hash, status, created_at) VALUES
('ac000000-0001-4000-8000-000000000001',
'a0000000-0004-4000-8000-000000000004',
'a0000000-0005-4000-8000-000000000005',
5000.00,
'0x3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d',
'0x4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e',
'0x9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08',
'0xa3bf4f1b2b0b822cd15d6c15b0f00a089f86d081884c7d659a2feaa0c55ad015',
false, NULL,
'0x1234abcdef567890abcdef1234567890abcdef1234567890abcdef1234567890',
'completed',
NOW() - INTERVAL '30 days')
ON CONFLICT (id) DO NOTHING;
-- ---------------------------------------------------------------------------
-- DONE
-- ---------------------------------------------------------------------------
COMMIT;
-- Post-commit verification (optional, useful for debugging)
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN
SELECT 'users' AS tbl, COUNT(*) AS cnt FROM users
UNION ALL SELECT 'kyc_submissions', COUNT(*) FROM kyc_submissions
UNION ALL SELECT 'wallets', COUNT(*) FROM wallets
UNION ALL SELECT 'issuers', COUNT(*) FROM issuers
UNION ALL SELECT 'stores', COUNT(*) FROM stores
UNION ALL SELECT 'coupons', COUNT(*) FROM coupons
UNION ALL SELECT 'coupon_rules', COUNT(*) FROM coupon_rules
UNION ALL SELECT 'orders', COUNT(*) FROM orders
UNION ALL SELECT 'trades', COUNT(*) FROM trades
UNION ALL SELECT 'settlements', COUNT(*) FROM settlements
UNION ALL SELECT 'transactions', COUNT(*) FROM transactions
UNION ALL SELECT 'messages', COUNT(*) FROM messages
UNION ALL SELECT 'aml_alerts', COUNT(*) FROM aml_alerts
UNION ALL SELECT 'disputes', COUNT(*) FROM disputes
UNION ALL SELECT 'audit_logs', COUNT(*) FROM audit_logs
UNION ALL SELECT 'address_mappings', COUNT(*) FROM address_mappings
UNION ALL SELECT 'credit_metrics', COUNT(*) FROM credit_metrics
UNION ALL SELECT 'ofac_screenings', COUNT(*) FROM ofac_screenings
UNION ALL SELECT 'journal_entries', COUNT(*) FROM journal_entries
UNION ALL SELECT 'sar_reports', COUNT(*) FROM sar_reports
UNION ALL SELECT 'breakage_records', COUNT(*) FROM breakage_records
UNION ALL SELECT 'refunds', COUNT(*) FROM refunds
UNION ALL SELECT 'travel_rule_records', COUNT(*) FROM travel_rule_records
LOOP
RAISE NOTICE 'Table %-25s: % rows', r.tbl, r.cnt;
END LOOP;
RAISE NOTICE '--- Seed data verification complete ---';
END $$;