// 数据字典和映射规则管理 // 根据需求文档中的要求,创建动态维护的数据字典 export interface DataField { name: string type: "string" | "number" | "boolean" | "date" | "json" | "array" description: string isRequired: boolean isPII: boolean // 个人身份信息标识 isIdentityKey: boolean // 身份识别关键字段 isAIFeature: boolean // 用于AI分析的特征字段 isDistributionKey: boolean // 用于分销/返点计算的关联字段 } export interface SourceMapping { sourceSystem: string sourceField: string targetField: string transformRule?: string validationRule?: string } export interface DataDictionary { coreFields: Record unifiedTags: string[] unifiedAttributes: Record sourceMappings: Record } // 核心数据字典定义 export const DATA_DICTIONARY: DataDictionary = { coreFields: { userId: { name: "userId", type: "string", description: "全局唯一用户ID", isRequired: true, isPII: false, isIdentityKey: true, isAIFeature: false, isDistributionKey: true, }, username: { name: "username", type: "string", description: "用户名", isRequired: false, isPII: true, isIdentityKey: true, isAIFeature: true, isDistributionKey: false, }, email: { name: "email", type: "string", description: "邮箱地址", isRequired: false, isPII: true, isIdentityKey: true, isAIFeature: false, isDistributionKey: false, }, phone: { name: "phone", type: "string", description: "手机号码", isRequired: false, isPII: true, isIdentityKey: true, isAIFeature: false, isDistributionKey: false, }, fullName: { name: "fullName", type: "string", description: "真实姓名", isRequired: false, isPII: true, isIdentityKey: true, isAIFeature: true, isDistributionKey: false, }, gender: { name: "gender", type: "string", description: "性别", isRequired: false, isPII: false, isIdentityKey: false, isAIFeature: true, isDistributionKey: false, }, birthDate: { name: "birthDate", type: "date", description: "出生日期", isRequired: false, isPII: true, isIdentityKey: false, isAIFeature: true, isDistributionKey: false, }, city: { name: "city", type: "string", description: "所在城市", isRequired: false, isPII: false, isIdentityKey: false, isAIFeature: true, isDistributionKey: false, }, province: { name: "province", type: "string", description: "所在省份", isRequired: false, isPII: false, isIdentityKey: false, isAIFeature: true, isDistributionKey: false, }, }, unifiedTags: [ "高价值客户", "新用户", "活跃用户", "流失风险", "科技爱好者", "内容创作者", "90后", "00后", "北京地区", "上海地区", "游戏爱好者", "旅游达人", "美食家", ], unifiedAttributes: { totalSpend: { name: "totalSpend", type: "number", description: "总消费金额", isRequired: false, isPII: false, isIdentityKey: false, isAIFeature: true, isDistributionKey: true, }, lastActiveDays: { name: "lastActiveDays", type: "number", description: "最后活跃天数", isRequired: false, isPII: false, isIdentityKey: false, isAIFeature: true, isDistributionKey: false, }, contentPreference: { name: "contentPreference", type: "array", description: "内容偏好", isRequired: false, isPII: false, isIdentityKey: false, isAIFeature: true, isDistributionKey: false, }, distributionLevel: { name: "distributionLevel", type: "number", description: "分销层级", isRequired: false, isPII: false, isIdentityKey: false, isAIFeature: false, isDistributionKey: true, }, }, sourceMappings: { douyin: [ { sourceSystem: "douyin", sourceField: "openid", targetField: "userId", transformRule: "prefix_dy_" }, { sourceSystem: "douyin", sourceField: "nickname", targetField: "username" }, { sourceSystem: "douyin", sourceField: "avatar", targetField: "avatarUrl" }, ], xiaohongshu: [ { sourceSystem: "xiaohongshu", sourceField: "openid", targetField: "userId", transformRule: "prefix_xhs_" }, { sourceSystem: "xiaohongshu", sourceField: "nickname", targetField: "username" }, ], cunkebao_form: [ { sourceSystem: "cunkebao_form", sourceField: "name", targetField: "fullName" }, { sourceSystem: "cunkebao_form", sourceField: "phone", targetField: "phone" }, { sourceSystem: "cunkebao_form", sourceField: "email", targetField: "email" }, ], touchkebao_call: [ { sourceSystem: "touchkebao_call", sourceField: "phone_number", targetField: "phone" }, { sourceSystem: "touchkebao_call", sourceField: "call_time", targetField: "lastContactTime" }, ], }, } // 获取字段映射规则 export function getFieldMapping(sourceSystem: string, sourceField: string): SourceMapping | undefined { const mappings = DATA_DICTIONARY.sourceMappings[sourceSystem] return mappings?.find((mapping) => mapping.sourceField === sourceField) } // 获取身份识别关键字段 export function getIdentityKeyFields(): string[] { return Object.entries(DATA_DICTIONARY.coreFields) .filter(([_, field]) => field.isIdentityKey) .map(([name, _]) => name) } // 获取AI特征字段 export function getAIFeatureFields(): string[] { return Object.entries(DATA_DICTIONARY.coreFields) .filter(([_, field]) => field.isAIFeature) .map(([name, _]) => name) } // 获取分销关联字段 export function getDistributionKeyFields(): string[] { return Object.entries(DATA_DICTIONARY.coreFields) .filter(([_, field]) => field.isDistributionKey) .map(([name, _]) => name) }