-- ============================================================
-- 资金流图谱 MySQL 结果表
-- 说明：
-- 1. 表名和核心字段保持图谱平台 ODPS SQL 的必要结果表一致。
-- 2. 先从 ODPS 一次性同步已验证的行内流水图谱基座。
-- 3. 后续在纪检 MySQL 内从 ccdi_bank_statement 做增量去重插入。
-- 4. 不增加 project_id，资金流图谱按全局 cret_no / 姓名查询。
-- 5. 只保留资金流图谱页面必需表，不依赖 lx_fund_flow_sum_edge。
-- 6. 真实资金边由后端基于 lx_fund_flow_detail_edge.trx_date 实时聚合。
-- 7. 手工资金流向作为主体级汇总边单独存储，不写入真实流水明细表。
-- 8. nullable 扩展字段只服务家庭关系、手工分析和增量来源。
-- ============================================================

CREATE TABLE IF NOT EXISTS lx_fund_flow_subject_node (
    object_key  VARCHAR(64)  NOT NULL COMMENT '主体节点唯一标识，通常为证件号MD5或代理主体MD5',
    idnocfno    VARCHAR(64)  NULL COMMENT '证件号/身份证号',
    name        VARCHAR(255) NULL COMMENT '主体名称',
    cinocsno    VARCHAR(64)  NULL COMMENT '客户内部号',
    idno_type   VARCHAR(64)  NULL COMMENT '主体类型，如个人、企业、代理主体',
    staff_id    VARCHAR(64)  NULL COMMENT '员工标识',
    source_type VARCHAR(64)  NULL COMMENT '来源类型',
    created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (object_key),
    KEY idx_lx_fund_flow_subject_idnocfno (idnocfno),
    KEY idx_lx_fund_flow_subject_name (name),
    KEY idx_lx_fund_flow_subject_source_type (source_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资金流图谱主体节点表';

CREATE TABLE IF NOT EXISTS lx_fund_flow_account_node (
    object_key VARCHAR(64)  NOT NULL COMMENT '账户节点唯一标识',
    acc_no     VARCHAR(128) NULL COMMENT '账号',
    acc_name   VARCHAR(255) NULL COMMENT '账户名称',
    cinocsno   VARCHAR(64)  NULL COMMENT '客户内部号',
    source     VARCHAR(128) NULL COMMENT '来源',
    acc_type   VARCHAR(64)  NULL COMMENT '账户类型，如INTERNAL/EXTERNAL',
    acc_idno   VARCHAR(64)  NULL COMMENT '开户证件号',
    acc_status VARCHAR(64)  NULL COMMENT '账户状态',
    acc_date   VARCHAR(32)  NULL COMMENT '开户日期',
    created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (object_key),
    KEY idx_lx_fund_flow_account_acc_no (acc_no),
    KEY idx_lx_fund_flow_account_acc_name (acc_name),
    KEY idx_lx_fund_flow_account_acc_idno (acc_idno)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资金流图谱账户节点表';

CREATE TABLE IF NOT EXISTS lx_fund_flow_own_account_edge (
    object_key VARCHAR(128) NOT NULL COMMENT '主体持有账户边唯一标识',
    from_key   VARCHAR(128) NOT NULL COMMENT '主体节点key，格式 idno_node/{object_key}',
    to_key     VARCHAR(128) NOT NULL COMMENT '账户节点key，格式 account_node/{object_key}',
    acc_name   VARCHAR(255) NULL COMMENT '账户名称',
    acc_no     VARCHAR(128) NULL COMMENT '账号',
    created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (object_key),
    KEY idx_lx_fund_flow_own_from_key (from_key),
    KEY idx_lx_fund_flow_own_to_key (to_key),
    KEY idx_lx_fund_flow_own_acc_no (acc_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资金流图谱主体持有账户边表';

CREATE TABLE IF NOT EXISTS lx_fund_flow_detail_edge (
    object_key            VARCHAR(64)    NOT NULL COMMENT '账户层交易明细边唯一标识',
    le_account_name       VARCHAR(255)   NULL COMMENT '本方账户名称',
    le_account_no         VARCHAR(128)   NULL COMMENT '本方账号',
    customer_account_no   VARCHAR(128)   NULL COMMENT '对手方账号',
    customer_account_name VARCHAR(255)   NULL COMMENT '对手方账户名称',
    trx_date              VARCHAR(32)    NULL COMMENT '交易日期',
    user_memo             VARCHAR(1000)  NULL COMMENT '交易摘要',
    cash_type             VARCHAR(255)   NULL COMMENT '交易类型',
    amount                DECIMAL(19, 2) NULL COMMENT '交易金额',
    flag                  VARCHAR(8)     NULL COMMENT '收支方向，1支出，2收入',
    amount_balance        DECIMAL(19, 2) NULL COMMENT '交易后余额',
    currency              VARCHAR(32)    NULL COMMENT '币种',
    bank                  VARCHAR(255)   NULL COMMENT '银行',
    from_key              VARCHAR(128)   NOT NULL COMMENT '账户层起点key，格式 account_node/{object_key}',
    to_key                VARCHAR(128)   NOT NULL COMMENT '账户层终点key，格式 account_node/{object_key}',

    family_relation_type  VARCHAR(64)    NULL COMMENT '家庭关系类型，如配偶、父母、子女',
    source_table          VARCHAR(32)    NULL COMMENT '流水来源，基座可为空，增量可为CCDI_BANK_STATEMENT/FIRST/LEVEL1',
    penetrate_level       INT            NOT NULL DEFAULT 0 COMMENT '穿透层级，一期为0',
    bank_statement_id     BIGINT         NULL COMMENT '增量来源ccdi_bank_statement主键',
    bank_trx_number       VARCHAR(128)   NULL COMMENT '银行流水号/交易流水号，如来源存在则记录',
    created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

    PRIMARY KEY (object_key),
    KEY idx_lx_fund_flow_detail_from_to (from_key, to_key),
    KEY idx_lx_fund_flow_detail_from_date (from_key, trx_date),
    KEY idx_lx_fund_flow_detail_to_date (to_key, trx_date),
    KEY idx_lx_fund_flow_detail_le_acc (le_account_no),
    KEY idx_lx_fund_flow_detail_cp_acc (customer_account_no),
    KEY idx_lx_fund_flow_detail_trx_date (trx_date),
    KEY idx_lx_fund_flow_detail_statement (bank_statement_id),
    KEY idx_lx_fund_flow_detail_family (family_relation_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资金流图谱账户层交易明细边表';

CREATE TABLE IF NOT EXISTS lx_fund_flow_manual_edge (
    object_key           VARCHAR(64)    NOT NULL COMMENT '手工资金流向汇总边唯一标识',
    from_object_key      VARCHAR(64)    NOT NULL COMMENT '起点主体object_key，身份证MD5或手工主体MD5',
    to_object_key        VARCHAR(64)    NOT NULL COMMENT '终点主体object_key，身份证MD5或手工主体MD5',
    from_name            VARCHAR(255)   NULL COMMENT '起点主体名称冗余',
    to_name              VARCHAR(255)   NULL COMMENT '终点主体名称冗余',
    amount               DECIMAL(19, 2) NULL COMMENT '手工录入汇总金额',
    transaction_count    INT            NOT NULL DEFAULT 1 COMMENT '手工录入笔数',
    direction            VARCHAR(8)     NOT NULL COMMENT '资金方向，1支出，2收入',
    relation_desc        VARCHAR(255)   NULL COMMENT '资金流向关系说明',
    source_desc          VARCHAR(500)   NULL COMMENT '手工边来源说明',
    remark               VARCHAR(1000)  NULL COMMENT '分析备注',
    source_type          VARCHAR(64)    NOT NULL DEFAULT 'MANUAL' COMMENT '来源类型，固定为MANUAL',
    created_by           VARCHAR(64)    NULL COMMENT '创建人',
    created_time         DATETIME       NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_by           VARCHAR(64)    NULL COMMENT '更新人',
    updated_time         DATETIME       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (object_key),
    KEY idx_lx_fund_flow_manual_from (from_object_key),
    KEY idx_lx_fund_flow_manual_to (to_object_key),
    KEY idx_lx_fund_flow_manual_pair_direction (from_object_key, to_object_key, direction),
    KEY idx_lx_fund_flow_manual_source_type (source_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='资金流图谱手工资金流向汇总边表';
