"""全局常量。 集中定义 Redis 键模板、响应码、角色编码等跨模块共享的字面量, 避免各处硬编码字符串导致拼写漂移。 """ # ===== 响应码(与 HTTP 状态码保持一致,见 PROJECT_STANDARDS 第 9 节)===== CODE_SUCCESS = 200 CODE_BAD_REQUEST = 400 CODE_UNAUTHORIZED = 401 CODE_FORBIDDEN = 403 CODE_NOT_FOUND = 404 CODE_SERVER_ERROR = 500 # ===== Redis 键模板 ===== # 规范第 6 节:键格式 {项目缩写}:{业务}:{标识},项目缩写为 ys REDIS_KEY_CAPTCHA = "ys:captcha:{captcha_id}" REDIS_KEY_LOGIN_FAIL = "ys:login:fail:{username}" REDIS_KEY_TOKEN_BLACKLIST = "ys:token:blacklist:{jti}" # ===== JWT ===== JWT_ALGORITHM = "HS256" TOKEN_TYPE_BEARER = "Bearer" # ===== 角色编码(与 db/migration 初始化数据保持一致)===== ROLE_ADMIN = "admin" ROLE_USER = "user" # 2026-10-15 复核审批补充需求新增职能登录角色:营销后勤(提交+录入)、 # 财务(复核)、领导(审核)。roles 表无 is_builtin 列,内置保护用代码 # 白名单判定(role_service 两处内置校验改查此集合); # permissions/role_permissions 细粒度激活待业务权限清单(待澄清 #6)。 ROLE_MARKETING_OPS = "marketing_ops" ROLE_FINANCE = "finance" ROLE_LEADER = "leader" BUILTIN_ROLE_CODES = { ROLE_ADMIN, ROLE_MARKETING_OPS, ROLE_FINANCE, ROLE_LEADER, } # ===== 密码策略 ===== # bcrypt 5.0 起对超过 72 字节的密码由「静默截断」改为「抛 ValueError」, # 而中文一个字符占 3 字节,因此必须按字节数校验,按字符数校验是错的。 PASSWORD_MIN_BYTES = 8 PASSWORD_MAX_BYTES = 72 # ===== 验证码 ===== # 剔除易混淆字符 0/O/1/I/l,降低人工识别错误率 CAPTCHA_CHARSET = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ" CAPTCHA_LENGTH = 4 # ===== 业务岗位编码(与 db/migration 种子一致,business_roles.role_code)===== BUSINESS_ROLE_SALESPERSON = "salesperson" BUSINESS_ROLE_SALES_MANAGER = "sales_manager" BUSINESS_ROLE_INFO_OFFICER = "info_officer" # ===== 产品类别码(与 param_values.dimension_value 口径一致)===== PRODUCT_CATEGORY_MUNICIPAL_WATER = "municipal_water" PRODUCT_CATEGORY_RAIL_TRANSIT = "rail_transit" PRODUCT_CATEGORIES = {PRODUCT_CATEGORY_MUNICIPAL_WATER, PRODUCT_CATEGORY_RAIL_TRANSIT} # ===== 客户分类码(customers.customer_type,计提规则匹配锚点)===== CUSTOMER_TYPE_PERSONAL = "personal" CUSTOMER_TYPE_MANAGER_PERSONAL = "manager_personal" CUSTOMER_TYPE_ENTERPRISE = "enterprise" CUSTOMER_TYPES = { CUSTOMER_TYPE_PERSONAL, CUSTOMER_TYPE_MANAGER_PERSONAL, CUSTOMER_TYPE_ENTERPRISE, } # ===== 操作日志词表(operation_logs 的 module / action 取值)===== # 集中定义避免各处硬编码导致日志值漂移;前端筛选下拉项与此保持一致 MODULE_USER = "用户管理" MODULE_ROLE = "角色管理" MODULE_BUSINESS_ROLE = "岗位角色" MODULE_PARAM = "计提参数" MODULE_PERSONNEL = "人员管理" MODULE_PRODUCT = "产品管理" MODULE_CUSTOMER = "客户管理" MODULE_BUSINESS = "业务管理" MODULE_SHIPMENT = "发货管理" MODULE_RECEIPT = "回款管理" MODULE_RATING = "客户评级" MODULE_SYSTEM_SETTINGS = "系统设置" MODULE_APPROVAL = "审批管理" # ===== 单据编号前缀({前缀}{YYYYMMDD}-{当日4位序号},序号按自然日重置)===== # 一期为代码常量(业务未提出配置诉求);如需可配置,走 M1 参数体系新增参数组 NO_PREFIX_BUSINESS = "YW" NO_PREFIX_SHIPMENT = "SH" NO_PREFIX_RECEIPT = "HK" NO_PREFIX_PARAM = "P" NO_PREFIX_APPROVAL = "AP" ACTION_CREATE = "新增" ACTION_UPDATE = "修改" ACTION_DELETE = "删除" ACTION_RESET_PASSWORD = "重置密码" ACTION_ENABLE = "启用" ACTION_DISABLE = "禁用"