namespace Admin.NET.Plugin.AiDOP.DataPlatform.S0Dim;
///
/// dim 列的取值方式,决定 为该列生成哪种 SQL 表达式。
/// 除 外全部作用于 staging 的 raw_data JSON,
/// 底层统一走 (已处理 JSON null → 字符串 'null'、ISO-T 时间、STRICT CAST)。
///
public enum S0DimValueKind
{
/// 取 staging 的物理列 s.tenant_id,不走 raw_data。租户身份的唯一来源。
TenantIdColumn,
/// 可空字符串。
Str,
///
/// 可空整数(SIGNED)。
///
/// 🔴 源列若是 MySQL 的 bit(1),绝不能用本 Kind(2026-09-07 实测):
/// 对账两侧都走 IFNULL(CAST(expr AS CHAR), 哨兵),而
/// CAST(b'1' AS CHAR) 返回的是**裸字节** 0x01,
/// dim 侧的 CAST(1 AS CHAR) 是字符 '1' = 0x31 —— 两者不等,
/// 于是 source_chk ≠ dim_chk,每一轮刷新都会被阻断对账打回,
/// 而数据本身其实是对的,排查时极易怀疑错方向。
///
/// 正确做法:bit(1) 用 (其 Norm 是双层
/// CAST(CAST(… AS UNSIGNED) AS CHAR),能把 bit 正规化成 '1'/'0')。
/// 但要先确认该列**不会为 NULL** —— BoolTrue 的可辨识性守卫要求原值
/// ∈ {1,0,true,false},NULL 会让整行被过滤、行数对账 FAIL。
/// 两个条件都不满足时,本阶段的结论是**不物化该列**。
///
Int,
/// 可空 DECIMAL(Precision, Scale)。
Dec,
/// 秒级 datetime(源侧微秒被截断,与对账口径一致)。
DateTimeSec,
///
/// 布尔判真,产出 1/0。
/// ⚠️ 会把 JSON null / 无法识别的值**静默判为 0**。
/// 为杜绝静默失真, 对本类型**强制追加可辨识性守卫**
/// (原始值必须是 1/0/true/false 之一),不满足的行被过滤掉 →
/// 触发 dim_count < stg_count → 对账 FAIL,问题被暴露而非被吞掉。
///
BoolTrue
}