-- ============================================================
-- 量化投资数据库 Schema
-- PostgreSQL (Docker: 192.168.27.11:5438)
-- 数据来源：Tushare
-- ============================================================

-- 先创建数据库（需要超级用户权限，在 psql 中手动执行）：
-- CREATE DATABASE quant_db ENCODING 'UTF8';

-- ============================================================
-- 1. 股票基本信息表 (stock_basic)
--    tushare接口: stock_basic
-- ============================================================
CREATE TABLE IF NOT EXISTS stock_basic (
    ts_code      VARCHAR(20)   PRIMARY KEY,   -- 股票代码 (如 000001.SZ)
    symbol       VARCHAR(10)   NOT NULL,       -- 股票代码 (如 000001)
    name         VARCHAR(50)   NOT NULL,       -- 股票名称
    area         VARCHAR(30),                  -- 地区
    industry     VARCHAR(50),                  -- 行业
    market       VARCHAR(10),                  -- 市场类型 (主板/中小板/创业板/科创板)
    list_date    DATE,                         -- 上市日期
    list_status  CHAR(1)       DEFAULT 'L',    -- 上市状态 L上市 D退市 P暂停上市
    is_hs        VARCHAR(5),                   -- 是否沪深港通标的
    act_name     VARCHAR(100),                 -- 实控人名称
    act_ent_type VARCHAR(50),                  -- 实控人企业性质
    updated_at   TIMESTAMP     DEFAULT NOW()   -- 记录更新时间
);

COMMENT ON TABLE stock_basic IS '股票基本信息表 (Tushare: stock_basic)';

-- 索引
CREATE INDEX IF NOT EXISTS idx_stock_basic_industry ON stock_basic(industry);
CREATE INDEX IF NOT EXISTS idx_stock_basic_area ON stock_basic(area);
CREATE INDEX IF NOT EXISTS idx_stock_basic_list_status ON stock_basic(list_status);


-- ============================================================
-- 2. 日线行情表 (daily) - 按年份分区
--    tushare接口: daily / pro_bar
-- ============================================================
CREATE TABLE IF NOT EXISTS daily (
    id           BIGSERIAL,                    -- 自增主键
    ts_code      VARCHAR(20)   NOT NULL,       -- 股票代码
    trade_date   DATE          NOT NULL,       -- 交易日期
    open         NUMERIC(12,3),                -- 开盘价
    high         NUMERIC(12,3),                -- 最高价
    low          NUMERIC(12,3),                -- 最低价
    close        NUMERIC(12,3),                -- 收盘价
    pre_close    NUMERIC(12,3),                -- 昨收价
    change       NUMERIC(12,3),                -- 涨跌额
    pct_chg      NUMERIC(10,4),                -- 涨跌幅 (%)
    vol          NUMERIC(20,2),                -- 成交量 (手)
    amount       NUMERIC(20,4),                -- 成交额 (千元)
    turnover_rate NUMERIC(10,4),               -- 换手率 (%)
    volume_ratio NUMERIC(10,4),                -- 量比
    ma5          NUMERIC(12,3),                -- 5日均价
    ma10         NUMERIC(12,3),                -- 10日均价
    ma20         NUMERIC(12,3),                -- 20日均价
    ma_v_5       NUMERIC(20,2),                -- 5日均量
    ma_v_10      NUMERIC(20,2),                -- 10日均量
    ma_v_20      NUMERIC(20,2),                -- 20日均量
    updated_at   TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, trade_date)
);

COMMENT ON TABLE daily IS '日线行情表 (Tushare: daily)';

-- 核心索引
CREATE INDEX IF NOT EXISTS idx_daily_trade_date ON daily(trade_date);
CREATE INDEX IF NOT EXISTS idx_daily_ts_code ON daily(ts_code);
CREATE INDEX IF NOT EXISTS idx_daily_ts_code_date ON daily(ts_code, trade_date);


-- ============================================================
-- 3. 日线行情表 - 按年份分区子表（优化查询性能）
--    PostgreSQL 原生分区表 (PG 10+)
--    如果版本不支持，可以跳过，直接使用 daily 表
-- ============================================================

-- 仅 PG 10+ 支持以下语法，如果报错请删除分区表相关语句
-- CREATE TABLE daily_partitioned (
--     id           BIGSERIAL,
--     ts_code      VARCHAR(20)   NOT NULL,
--     trade_date   DATE          NOT NULL,
--     open         NUMERIC(12,3),
--     high         NUMERIC(12,3),
--     low          NUMERIC(12,3),
--     close        NUMERIC(12,3),
--     pre_close    NUMERIC(12,3),
--     change       NUMERIC(12,3),
--     pct_chg      NUMERIC(10,4),
--     vol          NUMERIC(20,2),
--     amount       NUMERIC(20,4),
--     turnover_rate NUMERIC(10,4),
--     volume_ratio NUMERIC(10,4),
--     ma5          NUMERIC(12,3),
--     ma10         NUMERIC(12,3),
--     ma20         NUMERIC(12,3),
--     ma_v_5       NUMERIC(20,2),
--     ma_v_10      NUMERIC(20,2),
--     ma_v_20      NUMERIC(20,2),
--     updated_at   TIMESTAMP     DEFAULT NOW(),
--     PRIMARY KEY (ts_code, trade_date, trade_date)  -- 分区键必须包含在主键中
-- ) PARTITION BY RANGE (trade_date);


-- ============================================================
-- 4. 复权因子表 (adj_factor)
--    tushare接口: adj_factor
--    用于计算前复权/后复权价格
-- ============================================================
CREATE TABLE IF NOT EXISTS adj_factor (
    ts_code      VARCHAR(20)   NOT NULL,
    trade_date   DATE          NOT NULL,
    adj_factor   NUMERIC(16,8),                -- 复权因子
    updated_at   TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, trade_date)
);

COMMENT ON TABLE adj_factor IS '复权因子表 (Tushare: adj_factor)';


-- ============================================================
-- 5. 个股资金流向表 (moneyflow)
--    tushare接口: moneyflow
-- ============================================================
CREATE TABLE IF NOT EXISTS moneyflow (
    ts_code        VARCHAR(20)   NOT NULL,
    trade_date     DATE          NOT NULL,
    buy_sm_vol     NUMERIC(20,2),              -- 小单买入量(手)
    buy_sm_amount  NUMERIC(20,4),              -- 小单买入金额(万元)
    sell_sm_vol    NUMERIC(20,2),              -- 小单卖出量(手)
    sell_sm_amount NUMERIC(20,4),              -- 小单卖出金额(万元)
    buy_md_vol     NUMERIC(20,2),              -- 中单买入量(手)
    buy_md_amount  NUMERIC(20,4),              -- 中单买入金额(万元)
    sell_md_vol    NUMERIC(20,2),              -- 中单卖出量(手)
    sell_md_amount NUMERIC(20,4),              -- 中单卖出金额(万元)
    buy_lg_vol     NUMERIC(20,2),              -- 大单买入量(手)
    buy_lg_amount  NUMERIC(20,4),              -- 大单买入金额(万元)
    sell_lg_vol    NUMERIC(20,2),              -- 大单卖出量(手)
    sell_lg_amount NUMERIC(20,4),              -- 大单卖出金额(万元)
    buy_elg_vol    NUMERIC(20,2),              -- 特大单买入量(手)
    buy_elg_amount NUMERIC(20,4),              -- 特大单买入金额(万元)
    sell_elg_vol   NUMERIC(20,2),              -- 特大单卖出量(手)
    sell_elg_amount NUMERIC(20,4),             -- 特大单卖出金额(万元)
    net_mf_vol     NUMERIC(20,2),              -- 净流入量(手)
    net_mf_amount  NUMERIC(20,4),              -- 净流入额(万元)
    updated_at     TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, trade_date)
);

COMMENT ON TABLE moneyflow IS '个股资金流向表 (Tushare: moneyflow)';


-- ============================================================
-- 6. 每日指标表 (daily_basic) - 包含基本面/估值数据
--    tushare接口: daily_basic
-- ============================================================
CREATE TABLE IF NOT EXISTS daily_basic (
    ts_code        VARCHAR(20)   NOT NULL,
    trade_date     DATE          NOT NULL,
    close          NUMERIC(12,3),              -- 收盘价
    turnover_rate  NUMERIC(10,4),              -- 换手率(%)
    turnover_rate_f NUMERIC(10,4),             -- 自由流通股换手率(%)
    volume_ratio   NUMERIC(10,4),              -- 量比
    pe             NUMERIC(16,4),              -- 市盈率(PE)
    pe_ttm         NUMERIC(16,4),              -- 市盈率(TTM)
    pb             NUMERIC(16,4),              -- 市净率(PB)
    ps             NUMERIC(16,4),              -- 市销率(PS)
    ps_ttm         NUMERIC(16,4),              -- 市销率(TTM)
    dv_ratio       NUMERIC(10,4),              -- 股息率(%)
    dv_ttm         NUMERIC(10,4),              -- 股息率(TTM)(%)
    total_share    NUMERIC(20,4),              -- 总股本(万股)
    float_share    NUMERIC(20,4),              -- 流通股本(万股)
    free_share     NUMERIC(20,4),              -- 自由流通股本(万股)
    total_mv       NUMERIC(20,4),              -- 总市值(万元)
    circ_mv        NUMERIC(20,4),              -- 流通市值(万元)
    updated_at     TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, trade_date)
);

COMMENT ON TABLE daily_basic IS '每日指标表/基本面估值表 (Tushare: daily_basic)';


-- ============================================================
-- 7. 利润表 (income)
--    tushare接口: income
-- ============================================================
CREATE TABLE IF NOT EXISTS income (
    ts_code         VARCHAR(20)   NOT NULL,
    ann_date        DATE,                       -- 公告日期
    f_ann_date      DATE,                       -- 实际公告日期
    end_date        DATE          NOT NULL,     -- 报告期
    report_type     VARCHAR(10),                -- 报告类型
    comp_type       CHAR(1),                    -- 公司类型
    end_type        VARCHAR(10),                -- 报告期类型
    basic_eps       NUMERIC(16,4),              -- 基本每股收益
    diluted_eps     NUMERIC(16,4),              -- 稀释每股收益
    total_revenue   NUMERIC(20,4),              -- 营业总收入(元)
    revenue         NUMERIC(20,4),              -- 营业收入(元)
    int_income      NUMERIC(20,4),              -- 利息收入
    prem_earned     NUMERIC(20,4),              -- 已赚保费
    comm_income     NUMERIC(20,4),              -- 手续费及佣金收入
    n_commis_income NUMERIC(20,4),              -- 手续费及佣金净收入
    n_oth_income    NUMERIC(20,4),              -- 其他经营净收益
    n_oth_b_income  NUMERIC(20,4),              -- 加:其他业务净收益
    prem_income     NUMERIC(20,4),              -- 保险业务收入
    out_prem        NUMERIC(20,4),              -- 减:分出保费
    une_prem_reser  NUMERIC(20,4),              -- 提取未到期责任准备金
    reins_income    NUMERIC(20,4),              -- 其中:分保费收入
    n_sec_tb_income NUMERIC(20,4),              -- 代理买卖证券业务净收入
    n_sec_uw_income NUMERIC(20,4),              -- 证券承销业务净收入
    n_asset_mg_income NUMERIC(20,4),            -- 受托客户资产管理业务净收入
    oth_b_income    NUMERIC(20,4),              -- 其他业务收入
    fv_value_chg    NUMERIC(20,4),              -- 加:公允价值变动净收益 (兼容旧版字段)
    fv_value_chg_gain NUMERIC(20,4),            -- 加:公允价值变动净收益 (Tushare income 实际字段)
    invest_income   NUMERIC(20,4),              -- 加:投资净收益
    ass_invest_income NUMERIC(20,4),            -- 其中:对联营企业和合营企业的投资收益
    forex_gain      NUMERIC(20,4),              -- 加:汇兑净收益
    total_cogs      NUMERIC(20,4),              -- 营业总成本
    oper_cost       NUMERIC(20,4),              -- 减:营业成本
    int_exp         NUMERIC(20,4),              -- 减:利息支出
    comm_exp        NUMERIC(20,4),              -- 减:手续费及佣金支出
    biz_tax_surchg  NUMERIC(20,4),              -- 减:营业税金及附加
    sell_exp        NUMERIC(20,4),              -- 减:销售费用
    admin_exp       NUMERIC(20,4),              -- 减:管理费用
    fin_exp         NUMERIC(20,4),              -- 减:财务费用
    assets_impair_loss NUMERIC(20,4),           -- 减:资产减值损失
    prem_refund     NUMERIC(20,4),              -- 退保金
    compens_payout  NUMERIC(20,4),              -- 赔付总支出
    reser_insur_liab NUMERIC(20,4),             -- 提取保险责任准备金
    div_payt        NUMERIC(20,4),              -- 保户红利支出
    reins_exp       NUMERIC(20,4),              -- 分保费用
    oper_exp        NUMERIC(20,4),              -- 营业支出
    compens_payout_refu NUMERIC(20,4),          -- 减:摊回赔付支出
    insur_reser_refu NUMERIC(20,4),             -- 减:摊回保险责任准备金
    reins_cost_refund NUMERIC(20,4),            -- 减:摊回分保费用
    other_bus_cost  NUMERIC(20,4),              -- 其他业务成本
    operate_profit  NUMERIC(20,4),              -- 营业利润
    non_oper_income NUMERIC(20,4),              -- 加:营业外收入
    non_oper_exp    NUMERIC(20,4),              -- 减:营业外支出
    nca_disploss    NUMERIC(20,4),              -- 其中:减:非流动资产处置净损失
    total_profit    NUMERIC(20,4),              -- 利润总额
    income_tax      NUMERIC(20,4),              -- 所得税费用
    n_income        NUMERIC(20,4),              -- 净利润(含少数股东损益)
    n_income_attr_p NUMERIC(20,4),              -- 净利润(不含少数股东损益)
    minority_gain   NUMERIC(20,4),              -- 少数股东损益
    oth_compre_income NUMERIC(20,4),            -- 其他综合收益
    total_compre_income NUMERIC(20,4),          -- 综合收益总额
    comp_pre_inc_attr_p NUMERIC(20,4),          -- 归属于母公司(或股东)的综合收益总额
    comp_inc_attr_m_s NUMERIC(20,4),            -- 归属于少数股东的综合收益总额
    ebit            NUMERIC(20,4),              -- 息税前利润
    ebitda          NUMERIC(20,4),              -- 息税折旧摊销前利润
    insurance_exp   NUMERIC(20,4),              -- 保险业务支出
    undist_profit   NUMERIC(20,4),              -- 年初未分配利润
    distable_profit NUMERIC(20,4),              -- 可分配利润
    updated_at      TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, end_date, report_type)
);

COMMENT ON TABLE income IS '利润表 (Tushare: income)';


-- ============================================================
-- 8. 资产负债表 (balancesheet)
--    tushare接口: balancesheet
-- ============================================================
CREATE TABLE IF NOT EXISTS balancesheet (
    ts_code          VARCHAR(20)   NOT NULL,
    ann_date         DATE,
    f_ann_date       DATE,
    end_date         DATE          NOT NULL,     -- 报告期
    report_type      VARCHAR(10),
    comp_type        CHAR(1),
    end_type         VARCHAR(10),

    -- 资产
    total_hldr_eqy_exc_min_int NUMERIC(20,4),   -- 股东权益合计(不含少数股东权益)
    total_hldr_eqy_inc_min_int NUMERIC(20,4),   -- 股东权益合计(含少数股东权益)
    total_assets     NUMERIC(20,4),              -- 资产总计
    total_cur_assets NUMERIC(20,4),              -- 流动资产合计
    total_nca        NUMERIC(20,4),              -- 非流动资产合计
    money_cap        NUMERIC(20,4),              -- 货币资金
    trad_asset       NUMERIC(20,4),              -- 交易性金融资产
    notes_receiv     NUMERIC(20,4),              -- 应收票据
    account_receiv   NUMERIC(20,4),              -- 应收账款
    oth_receiv       NUMERIC(20,4),              -- 其他应收款
    prepayment       NUMERIC(20,4),              -- 预付款项
    div_receiv       NUMERIC(20,4),              -- 应收股利
    int_receiv       NUMERIC(20,4),              -- 应收利息
    inventories      NUMERIC(20,4),              -- 存货
    amor_exp         NUMERIC(20,4),              -- 待摊费用
    nca_within_1y    NUMERIC(20,4),              -- 一年内到期的非流动资产
    sett_rsrv        NUMERIC(20,4),              -- 结算备付金
    loanto_oth_bank_fi NUMERIC(20,4),            -- 拆出资金
    premium_receiv   NUMERIC(20,4),              -- 应收保费
    reinsur_receiv   NUMERIC(20,4),              -- 应收分保账款
    reinsur_res_receiv NUMERIC(20,4),            -- 应收分保合同准备金
    pur_resale_fa    NUMERIC(20,4),              -- 买入返售金融资产
    oth_cur_assets   NUMERIC(20,4),              -- 其他流动资产

    -- 非流动资产
    fa_avail_for_sale NUMERIC(20,4),             -- 可供出售金融资产
    htm_invest       NUMERIC(20,4),              -- 持有至到期投资
    lt_eqt_invest    NUMERIC(20,4),              -- 长期股权投资
    invest_real_estate NUMERIC(20,4),            -- 投资性房地产
    time_deposits    NUMERIC(20,4),              -- 定期存款
    oth_assets       NUMERIC(20,4),              -- 其他资产
    lt_rec           NUMERIC(20,4),              -- 长期应收款
    fix_assets       NUMERIC(20,4),              -- 固定资产
    cip              NUMERIC(20,4),              -- 在建工程
    const_materials  NUMERIC(20,4),              -- 工程物资
    fixed_assets_disp NUMERIC(20,4),             -- 固定资产清理
    produc_bio_assets NUMERIC(20,4),             -- 生产性生物资产
    oil_and_gas_assets NUMERIC(20,4),            -- 油气资产
    intan_assets     NUMERIC(20,4),              -- 无形资产
    r_and_d          NUMERIC(20,4),              -- 研发支出
    goodwill         NUMERIC(20,4),              -- 商誉
    lt_amor_exp      NUMERIC(20,4),              -- 长期待摊费用
    defer_tax_assets NUMERIC(20,4),              -- 递延所得税资产
    decr_in_disbur   NUMERIC(20,4),              -- 待处理流动资产损益
    oth_nca          NUMERIC(20,4),              -- 其他非流动资产

    -- 股东权益相关
    total_share      NUMERIC(20,4),              -- 总股本 (Tushare balancesheet 返回字段)

    -- 负债
    total_liab       NUMERIC(20,4),              -- 负债合计
    total_cur_liab   NUMERIC(20,4),              -- 流动负债合计
    total_ncl        NUMERIC(20,4),              -- 非流动负债合计
    short_borr       NUMERIC(20,4),              -- 短期借款
    lt_borr          NUMERIC(20,4),              -- 长期借款
    st_notes_payable NUMERIC(20,4),              -- 应付票据
    acct_payable     NUMERIC(20,4),              -- 应付账款
    adv_receipts     NUMERIC(20,4),              -- 预收款项
    bonds_payable    NUMERIC(20,4),              -- 应付债券
    oth_payable      NUMERIC(20,4),              -- 其他应付款
    div_payable      NUMERIC(20,4),              -- 应付股利
    int_payable      NUMERIC(20,4),              -- 应付利息
    lt_payable       NUMERIC(20,4),              -- 长期应付款
    special_payable  NUMERIC(20,4),              -- 专项应付款
    updated_at       TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, end_date, report_type)
);

COMMENT ON TABLE balancesheet IS '资产负债表 (Tushare: balancesheet)';


-- ============================================================
-- 9. 现金流量表 (cashflow)
--    tushare接口: cashflow
-- ============================================================
CREATE TABLE IF NOT EXISTS cashflow (
    ts_code          VARCHAR(20)   NOT NULL,
    ann_date         DATE,
    f_ann_date       DATE,
    end_date         DATE          NOT NULL,     -- 报告期
    report_type      VARCHAR(10),
    comp_type        CHAR(1),
    end_type         VARCHAR(10),

    -- 经营活动
    net_profit       NUMERIC(20,4),              -- 净利润
    fin_exp          NUMERIC(20,4),              -- 财务费用 (兼容旧版字段)
    finan_exp        NUMERIC(20,4),              -- 财务费用 (Tushare cashflow 实际字段)
    c_fr_sale_sg     NUMERIC(20,4),              -- 销售商品、提供劳务收到的现金
    recp_tax_rends   NUMERIC(20,4),              -- 收到的税费返还
    n_depos_incr_fi  NUMERIC(20,4),              -- 客户存款和同业存放款项净增加额
    n_incr_loans_cb  NUMERIC(20,4),              -- 向中央银行借款净增加额
    n_incr_borr_oth_fi NUMERIC(20,4),            -- 向其他金融机构拆入资金净增加额
    prem_fr_orig_contr NUMERIC(20,4),            -- 收到原保险合同保费取得的现金
    n_incr_insured_dep NUMERIC(20,4),            -- 保户储金净增加额
    n_reinsur_prem   NUMERIC(20,4),              -- 收到再保业务现金净额
    n_incr_disp_tfa  NUMERIC(20,4),              -- 处置交易性金融资产净增加额
    ifc_cash_incr    NUMERIC(20,4),              -- 收取利息、手续费及佣金的现金
    n_incr_disp_faas NUMERIC(20,4),              -- 处置可供出售金融资产净增加额
    n_incr_loans_oth_bank NUMERIC(20,4),         -- 拆入资金净增加额
    dcr_cash_paym    NUMERIC(20,4),              -- 回购业务资金净增加额
    oth_cash_recp_ral_oper_act NUMERIC(20,4),    -- 收到其他与经营活动有关的现金
    st_cash_out_act  NUMERIC(20,4),              -- 经营活动现金流出小计
    n_cashflow_act   NUMERIC(20,4),              -- 经营活动产生的现金流量净额

    -- 投资活动
    c_inf_fr_invest_act NUMERIC(20,4),           -- 投资活动现金流入小计
    c_out_invest_act NUMERIC(20,4),              -- 投资活动现金流出小计
    n_cashflow_inv_act NUMERIC(20,4),            -- 投资活动产生的现金流量净额

    -- 筹资活动
    c_inf_fr_fin_act NUMERIC(20,4),              -- 筹资活动现金流入小计
    st_cash_out_fin_act NUMERIC(20,4),           -- 筹资活动现金流出小计
    n_cash_flows_fin_act NUMERIC(20,4),          -- 筹资活动产生的现金流量净额
    eff_fx_flu_cash  NUMERIC(20,4),              -- 汇率变动对现金的影响
    n_incr_cash_cash_equ NUMERIC(20,4),          -- 现金及现金等价物净增加额
    c_cash_equ_beg_period NUMERIC(20,4),         -- 期初现金及现金等价物余额
    c_cash_equ_end_period NUMERIC(20,4),         -- 期末现金及现金等价物余额
    updated_at       TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, end_date, report_type)
);

COMMENT ON TABLE cashflow IS '现金流量表 (Tushare: cashflow)';


-- ============================================================
-- 10. 财务指标表 (fina_indicator) - 核心基本面指标
--     tushare接口: fina_indicator
-- ============================================================
CREATE TABLE IF NOT EXISTS fina_indicator (
    ts_code          VARCHAR(20)   NOT NULL,
    ann_date         DATE,
    end_date         DATE          NOT NULL,     -- 报告期
    -- 每股指标
    eps              NUMERIC(16,4),              -- 每股收益
    dt_eps           NUMERIC(16,4),              -- 稀释每股收益
    total_revenue_ps NUMERIC(16,4),              -- 每股营业总收入
    revenue_ps       NUMERIC(16,4),              -- 每股营业收入
    capital_rese_ps  NUMERIC(16,4),              -- 每股资本公积
    surplus_rese_ps  NUMERIC(16,4),              -- 每股盈余公积
    undist_profit_ps NUMERIC(16,4),              -- 每股未分配利润
    extra_item       NUMERIC(16,4),              -- 非经常性损益
    profit_dedt      NUMERIC(16,4),              -- 扣除非经常性损益后的净利润(扣非净利润)
    -- 成长能力
    gross_margin     NUMERIC(16,4),              -- 毛利
    current_ratio    NUMERIC(16,4),              -- 流动比率
    quick_ratio      NUMERIC(16,4),              -- 速动比率
    cash_ratio       NUMERIC(16,4),              -- 保守速动比率
    invturn_days     NUMERIC(16,4),              -- 存货周转天数
    arturn_days      NUMERIC(16,4),              -- 应收账款周转天数
    inv_turn         NUMERIC(16,4),              -- 存货周转率
    ar_turn          NUMERIC(16,4),              -- 应收账款周转率
    ca_turn          NUMERIC(16,4),              -- 流动资产周转率 (Tushare fina_indicator 实际字段)
    assets_turn      NUMERIC(16,4),              -- 总资产周转率
    -- 盈利能力
    roe              NUMERIC(16,4),              -- 净资产收益率
    roe_dt           NUMERIC(16,4),              -- 净资产收益率(扣除非经常损益)
    roa              NUMERIC(16,4),              -- 总资产净利率
    roa2             NUMERIC(16,4),              -- 总资产报酬率
    roic             NUMERIC(16,4),              -- 投入资本回报率
    -- 杠杆/偿债
    longdeb_to_debt  NUMERIC(16,4),              -- 长期借款与资产总计之比
    debt_to_assets   NUMERIC(16,4),              -- 资产负债率
    ncfm             NUMERIC(16,4),              -- 销售商品提供劳务收到的现金/营业收入
    -- 收益质量
    profit_to_op     NUMERIC(16,4),              -- 经营活动净收益/利润总额
    cfo_to_or        NUMERIC(16,4),              -- 经营活动现金流净额/营业收入
    ocf_to_or        NUMERIC(16,4),               -- 经营现金净流量/营业总收入
    -- 杜邦分析
    dupont_roe       NUMERIC(16,4),              -- 净资产收益率(杜邦)
    dupont_assets_turn NUMERIC(16,4),            -- 资产周转率(杜邦)
    dupont_equity_multi NUMERIC(16,4),           -- 权益乘数(杜邦)
    dupont_net_profit_margin NUMERIC(16,4),      -- 销售净利率(杜邦)
    -- 分红
    div_rec          NUMERIC(16,4),              -- 每股股利(税前)
    -- 其他
    ocfps            NUMERIC(16,4),              -- 每股经营活动产生的现金流量净额
    cfps             NUMERIC(16,4),              -- 每股现金流量净额
    ebit_ps          NUMERIC(16,4),              -- 每股息税前利润
    fcff_ps          NUMERIC(16,4),              -- 每股企业自由现金流量
    fcfe_ps          NUMERIC(16,4),              -- 每股股东自由现金流量
    updated_at       TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, end_date)
);

COMMENT ON TABLE fina_indicator IS '财务指标表 (Tushare: fina_indicator)';


-- ============================================================
-- 11. 交易日历表 (trade_cal)
--     tushare接口: trade_cal
-- ============================================================
CREATE TABLE IF NOT EXISTS trade_cal (
    exchange     VARCHAR(10)   NOT NULL,          -- 交易所 SSE上交所 SZSE深交所
    cal_date     DATE          NOT NULL,          -- 日历日期
    is_open      INTEGER       NOT NULL,          -- 是否交易 0休市 1交易
    pretrade_date DATE,                           -- 上一个交易日
    updated_at   TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (exchange, cal_date)
);

COMMENT ON TABLE trade_cal IS '交易日历表 (Tushare: trade_cal)';


-- ============================================================
-- 12. 指数日线行情表 (index_daily)
--     tushare接口: index_daily
--     用于记录主要指数(沪深300、中证500等)的日线行情
-- ============================================================
CREATE TABLE IF NOT EXISTS index_daily (
    ts_code      VARCHAR(20)   NOT NULL,         -- 指数代码 (如 000300.SH)
    trade_date   DATE          NOT NULL,
    close        NUMERIC(12,4),
    open         NUMERIC(12,4),
    high         NUMERIC(12,4),
    low          NUMERIC(12,4),
    pre_close    NUMERIC(12,4),
    change       NUMERIC(12,4),
    pct_chg      NUMERIC(10,4),
    vol          NUMERIC(20,2),
    amount       NUMERIC(20,4),
    updated_at   TIMESTAMP     DEFAULT NOW(),

    PRIMARY KEY (ts_code, trade_date)
);

COMMENT ON TABLE index_daily IS '指数日线行情表 (Tushare: index_daily)';


-- ============================================================
-- 常用查询视图
-- ============================================================

-- 视图1: 日线行情 + 估值指标联合查询
CREATE OR REPLACE VIEW v_daily_with_valuation AS
SELECT
    d.ts_code,
    d.trade_date,
    b.name,
    b.industry,
    b.area,
    d.open,
    d.high,
    d.low,
    d.close,
    d.pre_close,
    d.pct_chg,
    d.vol,
    d.amount,
    d.turnover_rate,
    db.pe,
    db.pe_ttm,
    db.pb,
    db.ps,
    db.ps_ttm,
    db.total_mv,
    db.circ_mv,
    db.dv_ratio,
    db.dv_ttm
FROM daily d
LEFT JOIN stock_basic b ON d.ts_code = b.ts_code
LEFT JOIN daily_basic db ON d.ts_code = db.ts_code AND d.trade_date = db.trade_date;

COMMENT ON VIEW v_daily_with_valuation IS '日线行情+估值联合查询视图';


-- 视图2: 最新财务指标 + 股票基本信息
CREATE OR REPLACE VIEW v_latest_financials AS
SELECT DISTINCT ON (f.ts_code)
    f.ts_code,
    b.name,
    b.industry,
    b.area,
    b.list_date,
    f.end_date AS report_date,
    f.eps,
    f.roe,
    f.roa,
    f.roic,
    f.current_ratio,
    f.quick_ratio,
    f.debt_to_assets,
    f.gross_margin,
    f.assets_turn,
    f.cfps,
    f.ocfps,
    f.div_rec
FROM fina_indicator f
JOIN stock_basic b ON f.ts_code = b.ts_code
ORDER BY f.ts_code, f.end_date DESC;

COMMENT ON VIEW v_latest_financials IS '最新财务指标+股票信息';

-- ============================================================
-- 完成
-- ============================================================