diff --git a/scripts/core/01-ddl.sql b/scripts/core/01-ddl.sql index 6e47471..3ea3f8b 100644 --- a/scripts/core/01-ddl.sql +++ b/scripts/core/01-ddl.sql @@ -1,4 +1,4 @@ --- jinrong_core 表结构 · P0 +-- jinrong_core 表结构 · 对齐客户资料(用户信息示例 / 适当性指南 / AML 规则) USE jinrong_core; -- 风险等级字典(客户 C1~C5 · 产品 R1~R5) @@ -14,6 +14,18 @@ CREATE TABLE core_industry ( industry_name VARCHAR(64) NOT NULL ) ENGINE=InnoDB COMMENT='行业分类'; +-- C×R 适当性匹配矩阵(《个人投资者适当性管理指南》第十二条) +CREATE TABLE core_suitability_rule ( + id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + customer_risk_code CHAR(2) NOT NULL COMMENT 'C1~C5', + product_risk_code CHAR(2) NOT NULL COMMENT 'R1~R5', + match_result ENUM('allowed','allowed_with_disclosure','forbidden') NOT NULL, + rule_ref VARCHAR(32) NOT NULL DEFAULT 'JR-AST-012', + UNIQUE KEY uk_cx_r (customer_risk_code, product_risk_code), + CONSTRAINT fk_suit_cust_risk FOREIGN KEY (customer_risk_code) REFERENCES core_risk_grade(code), + CONSTRAINT fk_suit_prod_risk FOREIGN KEY (product_risk_code) REFERENCES core_risk_grade(code) +) ENGINE=InnoDB COMMENT='适当性匹配规则(L0 权威)'; + -- 内部员工(含 RBAC 角色种子,供 JWT/鉴权联调对照) CREATE TABLE core_staff ( staff_id VARCHAR(64) NOT NULL PRIMARY KEY, @@ -25,27 +37,59 @@ CREATE TABLE core_staff ( created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ) ENGINE=InnoDB COMMENT='内部员工主档(模拟 IdP 账号源)'; +-- 客户主档 L0(KYC + 财务概况 · 对齐用户信息数据示例) CREATE TABLE core_customer ( - customer_id VARCHAR(64) NOT NULL PRIMARY KEY, - display_name VARCHAR(64) NOT NULL COMMENT '脱敏展示名', - age TINYINT UNSIGNED NULL, - occupation VARCHAR(64) NULL, - phone_mask VARCHAR(16) NULL COMMENT '138****9527', - tenant_id VARCHAR(32) NOT NULL DEFAULT 'TENANT-001', - open_date DATE NOT NULL, - is_active TINYINT(1) NOT NULL DEFAULT 1, - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) -) ENGINE=InnoDB COMMENT='客户主档 L0'; + customer_id VARCHAR(64) NOT NULL PRIMARY KEY, + display_name VARCHAR(64) NOT NULL COMMENT '脱敏展示名', + gender ENUM('M','F','U') NOT NULL DEFAULT 'U', + birth_date DATE NULL, + age TINYINT UNSIGNED NULL, + id_no_mask VARCHAR(32) NULL COMMENT '310101199903XXXXXX', + occupation VARCHAR(64) NULL, + employer VARCHAR(128) NULL, + education ENUM('high_school','associate','bachelor','master','doctor','other') NULL, + marital_status ENUM('single','married','widowed','divorced','other') NULL, + city VARCHAR(64) NULL, + address_mask VARCHAR(256) NULL, + phone_mask VARCHAR(16) NULL, + email_mask VARCHAR(64) NULL, + annual_income DECIMAL(18,2) NULL COMMENT '家庭年收入(元)', + financial_asset DECIMAL(18,2) NULL COMMENT '金融资产规模(不含房产)', + monthly_investable DECIMAL(18,2) NULL COMMENT '月可投资金额', + is_hnw TINYINT(1) NOT NULL DEFAULT 0 COMMENT '高净值客户', + service_tier ENUM('normal','vip','diamond') NOT NULL DEFAULT 'normal', + is_pep TINYINT(1) NOT NULL DEFAULT 0 COMMENT '政治公众人物', + aml_risk_level ENUM('low','medium','high') NOT NULL DEFAULT 'low', + invest_experience_years TINYINT UNSIGNED NULL, + first_invest_date DATE NULL, + tenant_id VARCHAR(32) NOT NULL DEFAULT 'TENANT-001', + open_date DATE NOT NULL, + is_active TINYINT(1) NOT NULL DEFAULT 1, + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + KEY idx_service_tier (service_tier), + KEY idx_hnw (is_hnw), + KEY idx_aml (aml_risk_level) +) ENGINE=InnoDB COMMENT='客户主档 L0 · KYC'; +-- 正式风险测评 L0(对齐适当性指南 16 题问卷 + FM-03 风评过期) CREATE TABLE core_customer_risk ( - id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - customer_id VARCHAR(64) NOT NULL, - risk_code CHAR(2) NOT NULL COMMENT 'C1~C5', - is_authoritative TINYINT(1) NOT NULL DEFAULT 1, - evaluated_at DATE NOT NULL, - source VARCHAR(32) NOT NULL DEFAULT 'risk_questionnaire', + id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + customer_id VARCHAR(64) NOT NULL, + risk_code CHAR(2) NOT NULL COMMENT 'C1~C5', + questionnaire_score SMALLINT UNSIGNED NULL COMMENT '问卷总分 20-100', + max_loss_tolerance_pct DECIMAL(5,2) NULL COMMENT '最大可承受亏损比例', + investment_goal VARCHAR(128) NULL, + investment_horizon ENUM('short','medium','long','flexible') NULL, + investor_category ENUM('ordinary','professional','professional_pending') NOT NULL DEFAULT 'ordinary', + professional_approved_at DATE NULL, + is_authoritative TINYINT(1) NOT NULL DEFAULT 1, + evaluated_at DATE NOT NULL, + expires_at DATE NOT NULL COMMENT '风评有效期(通常 evaluated_at+12 月)', + source VARCHAR(32) NOT NULL DEFAULT 'risk_questionnaire', UNIQUE KEY uk_customer_current (customer_id), KEY idx_risk (risk_code), + KEY idx_expires (expires_at), + KEY idx_investor_cat (investor_category), CONSTRAINT fk_cust_risk_customer FOREIGN KEY (customer_id) REFERENCES core_customer(customer_id), CONSTRAINT fk_cust_risk_code FOREIGN KEY (risk_code) REFERENCES core_risk_grade(code) ) ENGINE=InnoDB COMMENT='客户正式风险测评 L0'; @@ -63,16 +107,24 @@ CREATE TABLE core_customer_advisor ( CONSTRAINT fk_ca_advisor FOREIGN KEY (advisor_id) REFERENCES core_staff(staff_id) ) ENGINE=InnoDB COMMENT='客户-代理人归属'; +-- 产品主档(对齐 C-11:风险等级 + 期限 + 起购金额) CREATE TABLE core_product ( - product_id VARCHAR(64) NOT NULL PRIMARY KEY, - product_name VARCHAR(128) NOT NULL, - product_type ENUM('bond','mixed','stock','index','money') NOT NULL, - min_risk_code CHAR(2) NOT NULL COMMENT 'R1~R5 最低适配', - industry_code VARCHAR(16) NULL, - fee_rate DECIMAL(6,4) NULL, - is_open TINYINT(1) NOT NULL DEFAULT 1, - created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + product_id VARCHAR(64) NOT NULL PRIMARY KEY, + product_name VARCHAR(128) NOT NULL, + product_type ENUM( + 'money','bond','mixed','stock','index', + 'wealth_mgmt','private_fund','insurance','structured' + ) NOT NULL, + min_risk_code CHAR(2) NOT NULL COMMENT 'R1~R5 最低适配', + min_subscribe_amount DECIMAL(18,2) NOT NULL DEFAULT 1.00 COMMENT '起购金额(元)', + term_days INT UNSIGNED NULL COMMENT '产品期限(天),NULL=灵活开放', + requires_disclosure TINYINT(1) NOT NULL DEFAULT 0 COMMENT '购买前需签署风险揭示书', + industry_code VARCHAR(16) NULL, + fee_rate DECIMAL(6,4) NULL, + is_open TINYINT(1) NOT NULL DEFAULT 1, + created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), KEY idx_min_risk (min_risk_code), + KEY idx_product_type (product_type), CONSTRAINT fk_product_risk FOREIGN KEY (min_risk_code) REFERENCES core_risk_grade(code), CONSTRAINT fk_product_industry FOREIGN KEY (industry_code) REFERENCES core_industry(industry_code) ) ENGINE=InnoDB COMMENT='产品主档'; @@ -92,29 +144,42 @@ CREATE TABLE core_holding ( CONSTRAINT fk_hold_product FOREIGN KEY (product_id) REFERENCES core_product(product_id) ) ENGINE=InnoDB COMMENT='持仓快照'; +-- 交易流水(扩展 AML 字段 · 对齐反洗钱规则 RW-001~020) CREATE TABLE core_trade ( - trade_id VARCHAR(64) NOT NULL PRIMARY KEY, - customer_id VARCHAR(64) NOT NULL, - product_id VARCHAR(64) NOT NULL, - trade_type ENUM('subscribe','redeem','convert') NOT NULL, - amount DECIMAL(18,2) NOT NULL, - qty DECIMAL(18,4) NULL, - trade_status ENUM('confirmed','pending','cancelled') NOT NULL DEFAULT 'confirmed', - traded_at DATETIME(3) NOT NULL, + trade_id VARCHAR(64) NOT NULL PRIMARY KEY, + customer_id VARCHAR(64) NOT NULL, + product_id VARCHAR(64) NOT NULL, + trade_type ENUM('subscribe','redeem','convert') NOT NULL, + amount DECIMAL(18,2) NOT NULL, + qty DECIMAL(18,4) NULL, + channel ENUM('online','mobile','counter','other') NOT NULL DEFAULT 'online', + counterparty_account_mask VARCHAR(32) NULL, + counterparty_name VARCHAR(64) NULL, + is_cash TINYINT(1) NOT NULL DEFAULT 0, + payer_name VARCHAR(64) NULL COMMENT '代付人(RW-014)', + is_third_party_pay TINYINT(1) NOT NULL DEFAULT 0, + trade_status ENUM('confirmed','pending','cancelled') NOT NULL DEFAULT 'confirmed', + traded_at DATETIME(3) NOT NULL, KEY idx_customer_time (customer_id, traded_at), KEY idx_amount (amount, traded_at), + KEY idx_channel_time (channel, traded_at), CONSTRAINT fk_trade_customer FOREIGN KEY (customer_id) REFERENCES core_customer(customer_id), CONSTRAINT fk_trade_product FOREIGN KEY (product_id) REFERENCES core_product(product_id) ) ENGINE=InnoDB COMMENT='交易流水'; CREATE TABLE core_cash_flow ( - id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - customer_id VARCHAR(64) NOT NULL, - flow_type ENUM('in','out') NOT NULL, - amount DECIMAL(18,2) NOT NULL, - remark VARCHAR(128) NULL, - occurred_at DATETIME(3) NOT NULL, + id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + customer_id VARCHAR(64) NOT NULL, + flow_type ENUM('in','out') NOT NULL, + flow_subtype ENUM('deposit','withdraw','transfer_in','transfer_out','subscribe','redeem','other') NOT NULL DEFAULT 'other', + amount DECIMAL(18,2) NOT NULL, + channel ENUM('online','mobile','counter','other') NOT NULL DEFAULT 'online', + counterparty_account_mask VARCHAR(32) NULL, + counterparty_name VARCHAR(64) NULL, + remark VARCHAR(128) NULL, + occurred_at DATETIME(3) NOT NULL, KEY idx_customer (customer_id, occurred_at), + KEY idx_flow_subtype (flow_subtype, occurred_at), CONSTRAINT fk_cf_customer FOREIGN KEY (customer_id) REFERENCES core_customer(customer_id) ) ENGINE=InnoDB COMMENT='资金进出'; diff --git a/scripts/core/02-seed-base.sql b/scripts/core/02-seed-base.sql index 07dd9db..386cfe4 100644 --- a/scripts/core/02-seed-base.sql +++ b/scripts/core/02-seed-base.sql @@ -1,14 +1,14 @@ USE jinrong_core; --- 客户风险等级 C1~C5 +-- 客户风险等级 C1~C5(对齐《适当性管理指南》第六条) INSERT INTO core_risk_grade (code, grade_type, display_name, sort_order) VALUES ('C1', 'customer', '保守型 C1', 1), ('C2', 'customer', '稳健型 C2', 2), ('C3', 'customer', '平衡型 C3', 3), -('C4', 'customer', '成长型 C4', 4), -('C5', 'customer', '进取型 C5', 5); +('C4', 'customer', '进取型 C4', 4), +('C5', 'customer', '激进型 C5', 5); --- 产品风险等级 R1~R5 +-- 产品风险等级 R1~R5(对齐《适当性管理指南》第十一条) INSERT INTO core_risk_grade (code, grade_type, display_name, sort_order) VALUES ('R1', 'product', '低风险 R1', 1), ('R2', 'product', '中低风险 R2', 2), @@ -16,6 +16,14 @@ INSERT INTO core_risk_grade (code, grade_type, display_name, sort_order) VALUES ('R4', 'product', '中高风险 R4', 4), ('R5', 'product', '高风险 R5', 5); +-- C×R 匹配矩阵(第十二条) +INSERT INTO core_suitability_rule (customer_risk_code, product_risk_code, match_result) VALUES +('C1', 'R1', 'allowed'), ('C1', 'R2', 'allowed'), ('C1', 'R3', 'forbidden'), ('C1', 'R4', 'forbidden'), ('C1', 'R5', 'forbidden'), +('C2', 'R1', 'allowed'), ('C2', 'R2', 'allowed'), ('C2', 'R3', 'allowed'), ('C2', 'R4', 'forbidden'), ('C2', 'R5', 'forbidden'), +('C3', 'R1', 'allowed'), ('C3', 'R2', 'allowed'), ('C3', 'R3', 'allowed'), ('C3', 'R4', 'allowed_with_disclosure'), ('C3', 'R5', 'forbidden'), +('C4', 'R1', 'allowed'), ('C4', 'R2', 'allowed'), ('C4', 'R3', 'allowed'), ('C4', 'R4', 'allowed'), ('C4', 'R5', 'allowed_with_disclosure'), +('C5', 'R1', 'allowed'), ('C5', 'R2', 'allowed'), ('C5', 'R3', 'allowed'), ('C5', 'R4', 'allowed'), ('C5', 'R5', 'allowed'); + INSERT INTO core_industry (industry_code, industry_name) VALUES ('IND-BOND', '债券固收'), ('IND-MIX', '混合平衡'), @@ -23,52 +31,47 @@ INSERT INTO core_industry (industry_code, industry_name) VALUES ('IND-CONS', '消费'), ('IND-MED', '医药健康'), ('IND-INDEX', '宽基指数'), -('IND-MONEY', '货币现金'); +('IND-MONEY', '货币现金'), +('IND-WMGMT', '银行理财'), +('IND-PRIV', '私募证券'); -- ========== 内部员工 · RBAC 种子 ========== --- 5 理财代理人 INSERT INTO core_staff (staff_id, display_name, staff_type, roles) VALUES ('STAFF-10086', '张理财', 'advisor', '["advisor"]'), ('STAFF-10087', '李顾问', 'advisor', '["advisor"]'), ('STAFF-10088', '王经理', 'advisor', '["advisor"]'), ('STAFF-10089', '赵专员', 'advisor', '["advisor"]'), -('STAFF-10090', '刘助理', 'advisor', '["advisor"]'); - --- 2 数据分析员 -INSERT INTO core_staff (staff_id, display_name, staff_type, roles) VALUES +('STAFF-10090', '刘助理', 'advisor', '["advisor"]'), ('STAFF-20001', '陈分析', 'analyst', '["analyst"]'), -('STAFF-20002', '周数据', 'analyst', '["analyst"]'); - --- 2 风控专员 -INSERT INTO core_staff (staff_id, display_name, staff_type, roles) VALUES +('STAFF-20002', '周数据', 'analyst', '["analyst"]'), ('STAFF-30001', '吴风控', 'risk_officer', '["risk_officer"]'), -('STAFF-30002', '郑监测', 'risk_officer', '["risk_officer"]'); - --- 1 风控演示账号(网关演示用,roles 含 risk_demo · 见 docs/PRD/PRD-风控监测Agent.md §10.1) -INSERT INTO core_staff (staff_id, display_name, staff_type, roles) VALUES -('STAFF-90001', '风控演示账号', 'risk_officer', '["risk_officer", "risk_demo"]'); - --- 2 合规专员(兼 advisor 审计台场景用 compliance 单角色) -INSERT INTO core_staff (staff_id, display_name, staff_type, roles) VALUES +('STAFF-30002', '郑监测', 'risk_officer', '["risk_officer"]'), ('STAFF-40001', '孙合规', 'compliance', '["compliance"]'), -('STAFF-40002', '钱监察', 'compliance', '["compliance"]'); - --- 1 运营 + 1 双角色(代理人+合规,测权限并集与归属最窄) -INSERT INTO core_staff (staff_id, display_name, staff_type, roles) VALUES +('STAFF-40002', '钱监察', 'compliance', '["compliance"]'), ('STAFF-50001', '冯运营', 'ops', '["ops"]'), ('STAFF-10091', '双角色顾问', 'advisor', '["advisor", "compliance"]'); --- ========== 产品 12 只 ========== -INSERT INTO core_product (product_id, product_name, product_type, min_risk_code, industry_code, fee_rate) VALUES -('PROD-110022', '稳健债基 A', 'bond', 'R1', 'IND-BOND', 0.0030), -('PROD-110023', '信用债精选', 'bond', 'R2', 'IND-BOND', 0.0040), -('PROD-005827', '平衡混合一号', 'mixed', 'R3', 'IND-MIX', 0.0150), -('PROD-005828', '稳健增利混合', 'mixed', 'R2', 'IND-MIX', 0.0120), -('PROD-161725', '科技成长主题', 'stock', 'R4', 'IND-TECH', 0.0150), -('PROD-161726', '消费升级主题', 'stock', 'R4', 'IND-CONS', 0.0150), -('PROD-003095', '医药健康精选', 'stock', 'R4', 'IND-MED', 0.0120), -('PROD-510300', '沪深300指数', 'index', 'R3', 'IND-INDEX', 0.0050), -('PROD-510500', '中证500指数', 'index', 'R4', 'IND-INDEX', 0.0060), -('PROD-XYZ999', '进取成长五号', 'stock', 'R5', 'IND-TECH', 0.0180), -('PROD-000001', '现金宝货币', 'money', 'R1', 'IND-MONEY', 0.0010), -('PROD-000002', '同业存单基金', 'bond', 'R1', 'IND-BOND', 0.0020); +-- 1 风控演示账号(网关演示用,roles 含 risk_demo · 见 docs/PRD/PRD-风控监测Agent.md §10.1) +-- 我方分支独有种子(main 侧无此账号),对齐 main 时保留 +INSERT INTO core_staff (staff_id, display_name, staff_type, roles) VALUES +('STAFF-90001', '风控演示账号', 'risk_officer', '["risk_officer", "risk_demo"]'); + +-- ========== 产品 14 只(含起购/期限 · C-11) ========== +INSERT INTO core_product ( + product_id, product_name, product_type, min_risk_code, + min_subscribe_amount, term_days, requires_disclosure, industry_code, fee_rate +) VALUES +('PROD-110022', '稳健债基 A', 'bond', 'R1', 100.00, NULL, 0, 'IND-BOND', 0.0030), +('PROD-110023', '信用债精选', 'bond', 'R2', 100.00, NULL, 0, 'IND-BOND', 0.0040), +('PROD-005827', '平衡混合一号', 'mixed', 'R3', 100.00, NULL, 0, 'IND-MIX', 0.0150), +('PROD-005828', '稳健增利混合', 'mixed', 'R2', 100.00, NULL, 0, 'IND-MIX', 0.0120), +('PROD-161725', '科技成长主题', 'stock', 'R4', 100.00, NULL, 1, 'IND-TECH', 0.0150), +('PROD-161726', '消费升级主题', 'stock', 'R4', 100.00, NULL, 1, 'IND-CONS', 0.0150), +('PROD-003095', '医药健康精选', 'stock', 'R4', 100.00, NULL, 1, 'IND-MED', 0.0120), +('PROD-510300', '沪深300指数', 'index', 'R3', 100.00, NULL, 0, 'IND-INDEX', 0.0050), +('PROD-510500', '中证500指数', 'index', 'R4', 100.00, NULL, 1, 'IND-INDEX', 0.0060), +('PROD-XYZ999', '进取成长五号', 'stock', 'R5', 100.00, NULL, 1, 'IND-TECH', 0.0180), +('PROD-000001', '现金宝货币', 'money', 'R1', 1.00, NULL, 0, 'IND-MONEY', 0.0010), +('PROD-000002', '同业存单基金', 'bond', 'R1', 100.00, NULL, 0, 'IND-BOND', 0.0020), +('PROD-WMG001', '稳享180天理财', 'wealth_mgmt', 'R2', 200000.00, 180, 0, 'IND-WMGMT', 0.0035), +('PROD-PRIV01', '量化中性私募一号', 'private_fund','R4', 1000000.00, NULL, 1, 'IND-PRIV', 0.0200); diff --git a/scripts/core/03-seed-customers.sql b/scripts/core/03-seed-customers.sql index 94319c3..98de7ee 100644 --- a/scripts/core/03-seed-customers.sql +++ b/scripts/core/03-seed-customers.sql @@ -1,69 +1,110 @@ USE jinrong_core; --- 28 位客户(脱敏展示名) -INSERT INTO core_customer (customer_id, display_name, age, occupation, phone_mask, open_date) VALUES -('CUST-9527', '客户·林**', 35, '工程师', '138****9527', '2020-03-15'), -('CUST-1001', '客户·王**', 28, '职员', '139****1001', '2021-06-01'), -('CUST-1002', '客户·赵**', 42, '教师', '137****1002', '2019-11-20'), -('CUST-1003', '客户·孙**', 72, '退休', '136****1003', '2018-05-10'), -('CUST-1004', '客户·周**', 55, '企业主', '135****1004', '2017-08-22'), -('CUST-1005', '客户·吴**', 31, '设计师', '133****1005', '2022-01-08'), -('CUST-1006', '客户·郑**', 48, '会计', '132****1006', '2016-12-30'), -('CUST-1007', '客户·冯**', 39, '销售', '131****1007', '2020-09-14'), -('CUST-1008', '客户·陈**', 26, '程序员', '130****1008', '2023-04-02'), -('CUST-1009', '客户·褚**', 61, '退休干部', '189****1009', '2015-07-18'), -('CUST-1010', '客户·卫**', 44, '医生', '188****1010', '2019-02-28'), -('CUST-1011', '客户·蒋**', 33, '律师', '187****1011', '2021-10-11'), -('CUST-1012', '客户·沈**', 50, '经理', '186****1012', '2018-03-03'), -('CUST-1013', '客户·韩**', 29, '职员', '185****1013', '2022-08-19'), -('CUST-1014', '客户·杨**', 37, '研究员', '184****1014', '2020-12-01'), -('CUST-1015', '客户·朱**', 58, '个体户', '183****1015', '2016-06-06'), -('CUST-1016', '客户·秦**', 45, '工程师', '182****1016', '2019-09-09'), -('CUST-1017', '客户·尤**', 32, '产品经理', '181****1017', '2021-03-21'), -('CUST-1018', '客户·许**', 67, '退休', '180****1018', '2014-11-11'), -('CUST-1019', '客户·何**', 41, '公务员', '177****1019', '2018-08-08'), -('CUST-1020', '客户·吕**', 36, '金融从业', '176****1020', '2020-05-05'), -('CUST-1021', '客户·施**', 27, '研究生', '175****1021', '2023-01-15'), -('CUST-1022', '客户·张**', 53, '主管', '174****1022', '2017-04-04'), -('CUST-1023', '客户·孔**', 38, '运营', '173****1023', '2019-07-07'), -('CUST-1024', '客户·曹**', 46, '顾问', '172****1024', '2018-10-10'), -('CUST-3001', '客户·大额**', 49, '企业主', '171****3001', '2016-01-01'), -('CUST-4001', '客户·高龄进取**', 70, '退休', '170****4001', '2015-05-05'), -('CUST-4002', '客户·冲突测**', 71, '退休', '169****4002', '2015-06-06'); +-- 28 位客户(脱敏 · 含 KYC 基础字段) +INSERT INTO core_customer ( + customer_id, display_name, gender, birth_date, age, occupation, phone_mask, open_date, + education, marital_status, city, annual_income, financial_asset, monthly_investable, + is_hnw, service_tier, aml_risk_level, invest_experience_years, first_invest_date +) VALUES +('CUST-9527', '客户·林**', 'M', '1991-05-12', 35, '工程师', '138****9527', '2020-03-15', 'bachelor', 'married', '上海', 280000.00, 350000.00, 8000.00, 0, 'normal', 'low', 5, '2020-03-15'), +('CUST-1001', '客户·王**', 'F', '1998-02-08', 28, '职员', '139****1001', '2021-06-01', 'bachelor', 'single', '北京', 180000.00, 120000.00, 3000.00, 0, 'normal', 'low', 2, '2021-06-01'), +('CUST-1002', '客户·赵**', 'M', '1984-09-20', 42, '教师', '137****1002', '2019-11-20', 'master', 'married', '杭州', 220000.00, 280000.00, 5000.00, 0, 'normal', 'low', 6, '2019-11-20'), +('CUST-1003', '客户·孙**', 'F', '1954-03-01', 72, '退休', '136****1003', '2018-05-10', 'bachelor', 'widowed', '南京', 96000.00, 1200000.00, 500.00, 0, 'normal', 'low', 8, '2018-05-10'), +('CUST-1004', '客户·周**', 'M', '1971-07-15', 55, '企业主', '135****1004', '2017-08-22', 'master', 'married', '深圳', 800000.00, 5000000.00, 50000.00, 1, 'vip', 'low', 15, '2017-08-22'), +('CUST-1005', '客户·吴**', 'F', '1995-11-30', 31, '设计师', '133****1005', '2022-01-08', 'bachelor', 'single', '成都', 200000.00, 180000.00, 4000.00, 0, 'normal', 'low', 3, '2022-01-08'), +('CUST-1006', '客户·郑**', 'M', '1978-04-22', 48, '会计', '132****1006', '2016-12-30', 'bachelor', 'married', '武汉', 350000.00, 620000.00, 10000.00, 0, 'normal', 'low', 10, '2016-12-30'), +('CUST-1007', '客户·冯**', 'M', '1987-01-18', 39, '销售', '131****1007', '2020-09-14', 'associate','married', '西安', 260000.00, 210000.00, 6000.00, 0, 'normal', 'low', 4, '2020-09-14'), +('CUST-1008', '客户·陈**', 'M', '1999-08-05', 26, '程序员', '130****1008', '2023-04-02', 'bachelor', 'single', '上海', 350000.00, 450000.00, 12000.00, 0, 'normal', 'low', 3, '2023-04-02'), +('CUST-1009', '客户·褚**', 'M', '1965-12-12', 61, '退休干部', '189****1009', '2015-07-18', 'bachelor', 'married', '北京', 150000.00, 890000.00, 2000.00, 0, 'normal', 'low', 12, '2015-07-18'), +('CUST-1010', '客户·卫**', 'M', '1981-06-25', 44, '医生', '188****1010', '2019-02-28', 'doctor', 'married', '成都', 500000.00, 2000000.00, 12000.00, 0, 'vip', 'low', 5, '2019-02-28'), +('CUST-1011', '客户·蒋**', 'F', '1993-03-14', 33, '律师', '187****1011', '2021-10-11', 'master', 'single', '上海', 420000.00, 680000.00, 8000.00, 0, 'normal', 'low', 4, '2021-10-11'), +('CUST-1012', '客户·沈**', 'M', '1976-09-09', 50, '经理', '186****1012', '2018-03-03', 'bachelor', 'married', '广州', 380000.00, 950000.00, 9000.00, 0, 'normal', 'low', 8, '2018-03-03'), +('CUST-1013', '客户·韩**', 'F', '1997-07-07', 29, '职员', '185****1013', '2022-08-19', 'bachelor', 'single', '苏州', 160000.00, 90000.00, 2500.00, 0, 'normal', 'low', 2, '2022-08-19'), +('CUST-1014', '客户·杨**', 'M', '1989-10-10', 37, '研究员', '184****1014', '2020-12-01', 'master', 'married', '北京', 480000.00, 1200000.00, 15000.00, 0, 'normal', 'low', 6, '2020-12-01'), +('CUST-1015', '客户·朱**', 'M', '1968-02-28', 58, '个体户', '183****1015', '2016-06-06', 'high_school','married','郑州', 240000.00, 520000.00, 4000.00, 0, 'normal', 'medium', 7, '2016-06-06'), +('CUST-1016', '客户·秦**', 'M', '1981-11-11', 45, '工程师', '182****1016', '2019-09-09', 'bachelor', 'married', '重庆', 320000.00, 410000.00, 7000.00, 0, 'normal', 'low', 5, '2019-09-09'), +('CUST-1017', '客户·尤**', 'F', '1993-12-01', 32, '产品经理', '181****1017', '2021-03-21', 'master', 'married', '深圳', 450000.00, 380000.00, 10000.00, 0, 'normal', 'low', 4, '2021-03-21'), +('CUST-1018', '客户·许**', 'F', '1959-04-04', 67, '退休', '180****1018', '2014-11-11', 'bachelor', 'widowed', '杭州', 96000.00, 1200000.00, 800.00, 0, 'normal', 'low', 9, '2014-11-11'), +('CUST-1019', '客户·何**', 'M', '1985-05-05', 41, '公务员', '177****1019', '2018-08-08', 'bachelor', 'married', '南京', 280000.00, 560000.00, 6000.00, 0, 'normal', 'low', 6, '2018-08-08'), +('CUST-1020', '客户·吕**', 'M', '1985-08-08', 36, '金融从业', '176****1020', '2020-05-05', 'master', 'married', '上海', 520000.00, 880000.00, 12000.00, 0, 'normal', 'low', 7, '2020-05-05'), +('CUST-1021', '客户·施**', 'F', '1999-01-15', 27, '研究生', '175****1021', '2023-01-15', 'master', 'single', '北京', 120000.00, 50000.00, 2000.00, 0, 'normal', 'low', 1, '2023-01-15'), +('CUST-1022', '客户·张**', 'M', '1973-04-04', 53, '主管', '174****1022', '2017-04-04', 'bachelor', 'married', '天津', 360000.00, 780000.00, 8000.00, 0, 'normal', 'low', 11, '2017-04-04'), +('CUST-1023', '客户·孔**', 'F', '1988-07-07', 38, '运营', '173****1023', '2019-07-07', 'bachelor', 'married', '长沙', 240000.00, 190000.00, 5000.00, 0, 'normal', 'low', 4, '2019-07-07'), +('CUST-1024', '客户·曹**', 'M', '1980-10-10', 46, '顾问', '172****1024', '2018-10-10', 'bachelor', 'married', '青岛', 400000.00, 650000.00, 9000.00, 0, 'normal', 'low', 8, '2018-10-10'), +('CUST-3001', '客户·大额**','M', '1977-01-01', 49, '企业主', '171****3001', '2016-01-01', 'master', 'married', '深圳',1200000.00, 8000000.00, 80000.00, 1, 'diamond', 'low', 18, '2016-01-01'), +('CUST-4001', '客户·高龄进取**','M','1956-05-05',70,'退休', '170****4001', '2015-05-05', 'bachelor', 'married', '上海', 180000.00, 3500000.00, 3000.00, 0, 'vip', 'low', 20, '2015-05-05'), +('CUST-4002', '客户·冲突测**','F', '1955-06-06', 71, '退休', '169****4002', '2015-06-06', 'bachelor', 'widowed', '北京', 120000.00, 800000.00, 1000.00, 0, 'normal', 'low', 10, '2015-06-06'); --- 正式风险测评 L0 -INSERT INTO core_customer_risk (customer_id, risk_code, evaluated_at) VALUES -('CUST-9527', 'C3', '2025-06-01'), -('CUST-1001', 'C1', '2025-03-15'), -('CUST-1002', 'C2', '2025-04-20'), -('CUST-1003', 'C2', '2024-12-01'), -('CUST-1004', 'C4', '2025-01-10'), -('CUST-1005', 'C3', '2025-05-05'), -('CUST-1006', 'C3', '2024-08-18'), -('CUST-1007', 'C2', '2025-02-14'), -('CUST-1008', 'C3', '2025-07-01'), -('CUST-1009', 'C1', '2024-06-30'), -('CUST-1010', 'C3', '2025-03-03'), -('CUST-1011', 'C4', '2025-04-04'), -('CUST-1012', 'C3', '2024-11-11'), -('CUST-1013', 'C2', '2025-08-08'), -('CUST-1014', 'C4', '2025-01-20'), -('CUST-1015', 'C2', '2024-09-09'), -('CUST-1016', 'C3', '2025-02-02'), -('CUST-1017', 'C3', '2025-06-06'), -('CUST-1018', 'C1', '2024-03-03'), -('CUST-1019', 'C2', '2025-05-15'), -('CUST-1020', 'C4', '2025-03-30'), -('CUST-1021', 'C3', '2025-09-01'), -('CUST-1022', 'C3', '2024-07-07'), -('CUST-1023', 'C2', '2025-04-18'), -('CUST-1024', 'C4', '2025-02-28'), -('CUST-3001', 'C3', '2025-01-01'), -('CUST-4001', 'C5', '2025-06-15'), -('CUST-4002', 'C1', '2025-06-20'); +-- 正式风险测评 L0(含问卷得分、期限、过期日 FM-03) +INSERT INTO core_customer_risk ( + customer_id, risk_code, questionnaire_score, max_loss_tolerance_pct, + investment_goal, investment_horizon, investor_category, + evaluated_at, expires_at +) VALUES +('CUST-9527', 'C3', 58, 20.00, '资产稳健增值', 'long', 'ordinary', '2025-06-01', '2026-06-01'), +('CUST-1001', 'C1', 28, 0.00, '本金安全', 'flexible', 'ordinary', '2025-03-15', '2026-03-15'), +('CUST-1002', 'C2', 45, 10.00, '稳健增值', 'medium', 'ordinary', '2025-04-20', '2026-04-20'), +('CUST-1003', 'C2', 42, 10.00, '养老补充', 'flexible', 'ordinary', '2024-12-01', '2025-12-01'), +('CUST-1004', 'C4', 72, 30.00, '资产大幅增值', 'flexible', 'professional_pending', '2025-01-10', '2026-01-10'), +('CUST-1005', 'C3', 55, 15.00, '购房储蓄', 'medium', 'ordinary', '2025-05-05', '2026-05-05'), +('CUST-1006', 'C3', 52, 15.00, '子女教育', 'long', 'ordinary', '2024-08-18', '2025-08-18'), +('CUST-1007', 'C2', 48, 10.00, '稳健理财', 'medium', 'ordinary', '2025-02-14', '2026-02-14'), +('CUST-1008', 'C3', 56, 15.00, '长期积累', 'long', 'ordinary', '2025-07-01', '2026-07-01'), +('CUST-1009', 'C1', 30, 5.00, '保值', 'flexible', 'ordinary', '2024-06-30', '2025-06-30'), +('CUST-1010', 'C3', 58, 20.00, '子女教育+养老', 'long', 'ordinary', '2025-03-03', '2026-03-03'), +('CUST-1011', 'C4', 68, 25.00, '资产增值', 'long', 'ordinary', '2025-04-04', '2026-04-04'), +('CUST-1012', 'C3', 54, 15.00, '稳健增值', 'medium', 'ordinary', '2024-11-11', '2025-11-11'), +('CUST-1013', 'C2', 46, 10.00, '储蓄', 'short', 'ordinary', '2025-08-08', '2026-08-08'), +('CUST-1014', 'C4', 70, 25.00, '较高回报', 'long', 'ordinary', '2025-01-20', '2026-01-20'), +('CUST-1015', 'C2', 44, 10.00, '养老', 'flexible', 'ordinary', '2024-09-09', '2025-09-09'), +('CUST-1016', 'C3', 57, 15.00, '资产增值', 'medium', 'ordinary', '2025-02-02', '2026-02-02'), +('CUST-1017', 'C3', 59, 20.00, '购房', 'medium', 'ordinary', '2025-06-06', '2026-06-06'), +('CUST-1018', 'C1', 26, 0.00, '保本养老', 'flexible', 'ordinary', '2024-03-03', '2025-03-03'), +('CUST-1019', 'C2', 47, 10.00, '稳健', 'medium', 'ordinary', '2025-05-15', '2026-05-15'), +('CUST-1020', 'C4', 74, 30.00, '增值', 'long', 'ordinary', '2025-03-30', '2026-03-30'), +('CUST-1021', 'C3', 53, 15.00, '学习理财', 'medium', 'ordinary', '2025-09-01', '2026-09-01'), +('CUST-1022', 'C3', 55, 15.00, '退休准备', 'long', 'ordinary', '2024-07-07', '2025-07-07'), +('CUST-1023', 'C2', 49, 10.00, '稳健', 'medium', 'ordinary', '2025-04-18', '2026-04-18'), +('CUST-1024', 'C4', 69, 25.00, '增值', 'long', 'ordinary', '2025-02-28', '2026-02-28'), +('CUST-3001', 'C3', 60, 20.00, '传承规划', 'flexible', 'professional_pending', '2025-01-01', '2026-01-01'), +('CUST-4001', 'C5', 88, 50.00, '高回报', 'flexible', 'ordinary', '2025-06-15', '2026-06-15'), +('CUST-4002', 'C1', 25, 0.00, '保本', 'flexible', 'ordinary', '2025-06-20', '2026-06-20'); + +-- ========== 客户资料手册 · 5 位示范客户(JR-DATA-2024-001) ========== +INSERT INTO core_customer ( + customer_id, display_name, gender, birth_date, age, id_no_mask, occupation, employer, + education, marital_status, city, address_mask, phone_mask, email_mask, + annual_income, financial_asset, monthly_investable, is_hnw, service_tier, + is_pep, aml_risk_level, invest_experience_years, first_invest_date, open_date +) VALUES +('CUST-DEMO-A', '张**明', 'M', '1999-03-15', 25, '310101199903XXXXXX', '产品经理', '上海某互联网科技有限公司', + 'bachelor', 'single', '上海', '上海市浦东新区**路**号', '138****0001', 'zhang**@example.com', + 150000.00, 120000.00, 3000.00, 0, 'normal', 0, 'low', 2, '2022-05-01', '2022-05-01'), +('CUST-DEMO-B', '王**国', 'M', '1979-08-20', 45, '440301197908XXXXXX', '企业主', '深圳市XX电子科技有限公司', + 'master', 'married', '深圳', '深圳市南山区**路**号', '138****0002', 'wang**@xx-tech.com', + 2000000.00, 15000000.00, 100000.00, 1, 'diamond', 0, 'low', 15, '2008-01-01', '2008-01-01'), +('CUST-DEMO-C', '陈**兰', 'F', '1964-11-10', 60, '330102196411XXXXXX', '退休教师', NULL, + 'bachelor', 'widowed', '杭州', '杭州市西湖区**路**号', '138****0003', 'chen**@example.com', + 96000.00, 1200000.00, 500.00, 0, 'normal', 0, 'low', 5, '2019-01-01', '2019-01-01'), +('CUST-DEMO-D', '李**伟', 'M', '1989-05-12', 35, '510105198905XXXXXX', '副主任医师', '成都华西医院', + 'doctor', 'married', '成都', '成都市武侯区**路**号', '138****0004', 'liwei**@example.com', + 500000.00, 2000000.00, 10000.00, 0, 'vip', 0, 'low', 5, '2019-03-01', '2019-03-01'), +('CUST-DEMO-E', '赵**鹏', 'M', '1996-07-08', 28, '110108199607XXXXXX', '算法工程师', '北京某头部互联网科技公司', + 'master', 'single', '北京', '北京市海淀区**路**号', '138****0005', 'zhao**@example.com', + 300000.00, 450000.00, 15000.00, 0, 'normal', 0, 'medium', 3, '2021-06-01', '2021-06-01'); + +INSERT INTO core_customer_risk ( + customer_id, risk_code, questionnaire_score, max_loss_tolerance_pct, + investment_goal, investment_horizon, investor_category, + evaluated_at, expires_at +) VALUES +('CUST-DEMO-A', 'C2', 45, 10.00, '购房积累首付', 'medium', 'ordinary', '2025-04-01', '2026-04-01'), +('CUST-DEMO-B', 'C4', 76, 30.00, '资产增值与传承', 'flexible', 'professional_pending', '2025-02-01', '2026-02-01'), +('CUST-DEMO-C', 'C1', 28, 0.00, '本金安全抵御通胀', 'flexible', 'ordinary', '2025-01-15', '2026-01-15'), +('CUST-DEMO-D', 'C3', 58, 20.00, '子女教育+养老储备', 'long', 'ordinary', '2025-03-01', '2026-03-01'), +('CUST-DEMO-E', 'C5', 88, 50.00, '追求高回报快速积累', 'short', 'ordinary', '2025-05-01', '2026-05-01'); -- 客户-代理人归属(RBAC:代理人只能查名下) --- STAFF-10086: 10 人 INSERT INTO core_customer_advisor (customer_id, advisor_id, effective_from) VALUES ('CUST-9527', 'STAFF-10086', '2020-03-15'), ('CUST-1001', 'STAFF-10086', '2021-06-01'), @@ -74,34 +115,27 @@ INSERT INTO core_customer_advisor (customer_id, advisor_id, effective_from) VALU ('CUST-1008', 'STAFF-10086', '2023-04-02'), ('CUST-1013', 'STAFF-10086', '2022-08-19'), ('CUST-3001', 'STAFF-10086', '2016-01-01'), -('CUST-4002', 'STAFF-10086', '2015-06-06'); - --- STAFF-10087: 6 人 -INSERT INTO core_customer_advisor (customer_id, advisor_id, effective_from) VALUES +('CUST-4002', 'STAFF-10086', '2015-06-06'), +('CUST-DEMO-A', 'STAFF-10086', '2022-05-01'), +('CUST-DEMO-C', 'STAFF-10086', '2019-01-01'), ('CUST-1004', 'STAFF-10087', '2017-08-22'), +('CUST-1006', 'STAFF-10087', '2016-12-30'), +('CUST-1009', 'STAFF-10087', '2015-07-18'), ('CUST-1010', 'STAFF-10087', '2019-02-28'), -('CUST-1011', 'STAFF-10087', '2021-10-11'), -('CUST-1014', 'STAFF-10087', '2025-01-20'), -('CUST-1020', 'STAFF-10087', '2020-05-05'), -('CUST-4001', 'STAFF-10087', '2015-05-05'); - --- STAFF-10088: 5 人 -INSERT INTO core_customer_advisor (customer_id, advisor_id, effective_from) VALUES -('CUST-1006', 'STAFF-10088', '2016-12-30'), -('CUST-1009', 'STAFF-10088', '2015-07-18'), -('CUST-1012', 'STAFF-10088', '2018-03-03'), -('CUST-1015', 'STAFF-10088', '2016-06-06'), -('CUST-1018', 'STAFF-10088', '2014-11-11'); - --- STAFF-10089: 4 人 -INSERT INTO core_customer_advisor (customer_id, advisor_id, effective_from) VALUES -('CUST-1016', 'STAFF-10089', '2019-09-09'), +('CUST-1012', 'STAFF-10087', '2018-03-03'), +('CUST-1015', 'STAFF-10087', '2016-06-06'), +('CUST-DEMO-B', 'STAFF-10087', '2008-01-01'), +('CUST-DEMO-D', 'STAFF-10087', '2019-03-01'), +('CUST-1011', 'STAFF-10088', '2021-10-11'), +('CUST-1014', 'STAFF-10088', '2020-12-01'), +('CUST-1016', 'STAFF-10088', '2019-09-09'), +('CUST-1018', 'STAFF-10088', '2014-11-11'), +('CUST-1020', 'STAFF-10088', '2020-05-05'), +('CUST-1022', 'STAFF-10088', '2017-04-04'), +('CUST-DEMO-E', 'STAFF-10088', '2021-06-01'), ('CUST-1017', 'STAFF-10089', '2021-03-21'), ('CUST-1019', 'STAFF-10089', '2018-08-08'), -('CUST-1023', 'STAFF-10089', '2019-07-07'); - --- STAFF-10090: 3 人 -INSERT INTO core_customer_advisor (customer_id, advisor_id, effective_from) VALUES -('CUST-1021', 'STAFF-10090', '2023-01-15'), -('CUST-1022', 'STAFF-10090', '2017-04-04'), -('CUST-1024', 'STAFF-10090', '2018-10-10'); +('CUST-1021', 'STAFF-10089', '2023-01-15'), +('CUST-1023', 'STAFF-10089', '2019-07-07'), +('CUST-1024', 'STAFF-10089', '2018-10-10'), +('CUST-4001', 'STAFF-10090', '2015-05-05'); diff --git a/scripts/core/04-seed-holdings.sql b/scripts/core/04-seed-holdings.sql index 70c41d6..d9a2ce3 100644 --- a/scripts/core/04-seed-holdings.sql +++ b/scripts/core/04-seed-holdings.sql @@ -76,4 +76,16 @@ INSERT INTO core_holding (customer_id, product_id, qty, cost_amount, market_valu ('CUST-4001', 'PROD-XYZ999', 80000.0000, 80000.00, 72000.00, -10.0000, '2026-09-04'), ('CUST-4001', 'PROD-161725', 50000.0000, 50000.00, 52500.00, 5.0000, '2026-09-04'), -- CUST-4002 C1 却持有 R4(适当性冲突测) -('CUST-4002', 'PROD-161725', 10000.0000, 10000.00, 9500.00, -5.0000, '2026-09-04'); +('CUST-4002', 'PROD-161725', 10000.0000, 10000.00, 9500.00, -5.0000, '2026-09-04'), +-- 手册示范客户(JR-DATA-2024-001) +('CUST-DEMO-A', 'PROD-510300', 35000.0000, 35000.00, 36050.00, 3.0000, '2026-09-04'), +('CUST-DEMO-A', 'PROD-510500', 25000.0000, 25000.00, 25500.00, 2.0000, '2026-09-04'), +('CUST-DEMO-A', 'PROD-000001', 10000.0000, 10000.00, 10020.00, 0.2000, '2026-09-04'), +('CUST-DEMO-B', 'PROD-161725', 500000.0000, 500000.00, 525000.00, 5.0000, '2026-09-04'), +('CUST-DEMO-B', 'PROD-PRIV01', 2500000.0000, 2500000.00, 2625000.00, 5.0000, '2026-09-04'), +('CUST-DEMO-C', 'PROD-110022', 400000.0000, 400000.00, 412000.00, 3.0000, '2026-09-04'), +('CUST-DEMO-C', 'PROD-WMG001', 200000.0000, 200000.00, 203000.00, 1.5000, '2026-09-04'), +('CUST-DEMO-D', 'PROD-005827', 300000.0000, 300000.00, 315000.00, 5.0000, '2026-09-04'), +('CUST-DEMO-D', 'PROD-510300', 150000.0000, 150000.00, 154500.00, 3.0000, '2026-09-04'), +('CUST-DEMO-E', 'PROD-161725', 120000.0000, 120000.00, 108000.00, -10.0000, '2026-09-04'), +('CUST-DEMO-E', 'PROD-510500', 80000.0000, 80000.00, 88000.00, 10.0000, '2026-09-04'); diff --git a/scripts/core/05-seed-trades.sql b/scripts/core/05-seed-trades.sql index 1274307..72a2dc6 100644 --- a/scripts/core/05-seed-trades.sql +++ b/scripts/core/05-seed-trades.sql @@ -31,11 +31,20 @@ INSERT INTO core_trade (trade_id, customer_id, product_id, trade_type, amount, q ('TRD-20260904-021', 'CUST-1023', 'PROD-005828', 'subscribe', 9000.00, 9000.0000, '2026-09-04 14:30:00.000'), ('TRD-20260904-022', 'CUST-1024', 'PROD-161726', 'subscribe', 35000.00, 35000.0000, '2026-09-04 15:00:00.000'); -INSERT INTO core_cash_flow (customer_id, flow_type, amount, remark, occurred_at) VALUES -('CUST-9527', 'in', 50000.00, '银行转入', '2026-08-01 09:00:00.000'), -('CUST-9527', 'out', 10000.00, '申购扣款', '2026-08-01 10:15:00.000'), -('CUST-3001', 'in', 600000.00, '大额转入', '2026-09-03 09:30:00.000'), -('CUST-1010', 'in', 30000.00, '工资结余', '2026-09-01 08:00:00.000'), -('CUST-1018', 'in', 100000.00, '退休年金', '2026-09-03 10:30:00.000'), -('CUST-1002', 'out', 8000.00, '赎回到账', '2026-09-02 11:30:00.000'), -('CUST-1020', 'in', 120000.00, '经营收入', '2026-09-02 10:00:00.000'); +-- AML 样例(RW-001 大额现金 / RW-014 第三方代付 / RW-008 非正常时段) +INSERT INTO core_trade ( + trade_id, customer_id, product_id, trade_type, amount, qty, + channel, is_cash, payer_name, is_third_party_pay, traded_at +) VALUES +('TRD-20260905-001', 'CUST-DEMO-B', 'PROD-PRIV01', 'subscribe', 500000.00, NULL, 'online', 0, NULL, 0, '2026-09-05 10:00:00.000'), +('TRD-20260905-002', 'CUST-DEMO-C', 'PROD-WMG001', 'subscribe', 200000.00, NULL, 'counter', 1, NULL, 0, '2026-09-05 11:00:00.000'), +('TRD-20260905-003', 'CUST-DEMO-E', 'PROD-161725', 'subscribe', 80000.00, NULL, 'mobile', 0, '李四', 1, '2026-09-05 02:30:00.000'); + +INSERT INTO core_cash_flow (customer_id, flow_type, flow_subtype, amount, channel, remark, occurred_at) VALUES +('CUST-9527', 'in', 'deposit', 50000.00, 'online', '银行转入', '2026-08-01 09:00:00.000'), +('CUST-9527', 'out', 'subscribe', 10000.00, 'online', '申购扣款', '2026-08-01 10:15:00.000'), +('CUST-3001', 'in', 'transfer_in', 600000.00, 'online', '大额转入', '2026-09-03 09:30:00.000'), +('CUST-1010', 'in', 'deposit', 30000.00, 'online', '工资结余', '2026-09-01 08:00:00.000'), +('CUST-1018', 'in', 'deposit', 100000.00, 'counter', '退休年金', '2026-09-03 10:30:00.000'), +('CUST-1002', 'in', 'redeem', 8000.00, 'online', '赎回到账', '2026-09-02 11:30:00.000'), +('CUST-1020', 'in', 'transfer_in', 120000.00, 'online', '经营收入', '2026-09-02 10:00:00.000'); diff --git a/scripts/core/06-seed-nav.sql b/scripts/core/06-seed-nav.sql index 439bd5c..f5a2c66 100644 --- a/scripts/core/06-seed-nav.sql +++ b/scripts/core/06-seed-nav.sql @@ -13,4 +13,6 @@ INSERT INTO core_product_nav (product_id, nav, daily_chg_pct, nav_date) VALUES ('PROD-510500', 0.9800, -0.5000, '2026-09-04'), ('PROD-XYZ999', 0.9000, -2.0000, '2026-09-04'), ('PROD-000001', 1.0020, 0.0100, '2026-09-04'), -('PROD-000002', 1.0050, 0.0200, '2026-09-04'); +('PROD-000002', 1.0050, 0.0200, '2026-09-04'), +('PROD-WMG001', 1.0150, 0.0500, '2026-09-04'), +('PROD-PRIV01', 1.0800, 0.3000, '2026-09-04'); diff --git a/scripts/core/README.md b/scripts/core/README.md index 28a2192..ddbf83c 100644 --- a/scripts/core/README.md +++ b/scripts/core/README.md @@ -30,13 +30,14 @@ python scripts/sync/sync_neo4j.py | 类型 | 数量 | | --- | --- | -| 客户 | 28 | +| 客户 | 28 + 5 手册示范(CUST-DEMO-A~E) | | 理财代理人 | 5 | -| 分析/风控/合规/运营 | 2+2+2+1 | +| 分析/风控/合规/运营 | 2+2+2+1(风控另有演示账号 STAFF-90001,我方分支独有) | | 双角色 staff | 1(STAFF-10091 advisor+compliance) | -| 产品 | 12 | +| 产品 | 14 | | 持仓记录 | ~45 | | 交易 | 25+ | +| C×R 适当性矩阵 | 25 行(core_suitability_rule,L0 权威) | ## RBAC 联调账号见