business_rules.proto 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. // Copyright 2025 Kuban Technologies
  2. //
  3. // 业务规则库 - 针对中国业务场景的预定义验证规则
  4. // 提供开箱即用的常用业务验证
  5. syntax = "proto3";
  6. package kuban.api.validate;
  7. import "google/protobuf/descriptor.proto";
  8. import "kuban/api/validate/validate.proto";
  9. option go_package = "git.ikuban.com/server/kubanapis/kuban/api/validate;validate";
  10. // ============================================================================
  11. // 业务规则定义
  12. // ============================================================================
  13. //
  14. // 注意: Proto3 不支持 extend 语法,这些业务规则应该通过以下方式使用:
  15. // 1. 在 FieldRules 中使用 CEL 表达式引用这些规则
  16. // 2. 在应用层直接使用这些独立的规则消息
  17. // 3. 使用 StringRules 中已有的 well_known 字段(如 chinese_mobile, chinese_id_card 等)
  18. //
  19. // ============================================================================
  20. // 中国手机号验证规则
  21. message ChineseMobileRules {
  22. // 是否启用验证
  23. bool enabled = 1;
  24. // 允许的运营商
  25. repeated MobileOperator allowed_operators = 2;
  26. // 是否允许虚拟运营商号码
  27. bool allow_virtual = 3;
  28. // 自定义错误消息
  29. string error_message = 4;
  30. }
  31. // 手机运营商枚举
  32. enum MobileOperator {
  33. MOBILE_OPERATOR_UNSPECIFIED = 0;
  34. MOBILE_OPERATOR_CHINA_MOBILE = 1; // 中国移动
  35. MOBILE_OPERATOR_CHINA_UNICOM = 2; // 中国联通
  36. MOBILE_OPERATOR_CHINA_TELECOM = 3; // 中国电信
  37. MOBILE_OPERATOR_CHINA_BROADNET = 4; // 中国广电
  38. }
  39. // 中国身份证验证规则
  40. message ChineseIdCardRules {
  41. // 是否启用验证
  42. bool enabled = 1;
  43. // 是否验证校验位
  44. bool verify_checksum = 2;
  45. // 是否验证出生日期有效性
  46. bool verify_birth_date = 3;
  47. // 是否验证地区码有效性
  48. bool verify_area_code = 4;
  49. // 允许的身份证类型
  50. repeated IdCardType allowed_types = 5;
  51. // 年龄范围限制
  52. optional int32 min_age = 6;
  53. optional int32 max_age = 7;
  54. // 性别限制
  55. optional Gender required_gender = 8;
  56. // 自定义错误消息
  57. string error_message = 9;
  58. }
  59. // 身份证类型
  60. enum IdCardType {
  61. ID_CARD_TYPE_UNSPECIFIED = 0;
  62. ID_CARD_TYPE_18_DIGIT = 1; // 18位身份证
  63. ID_CARD_TYPE_15_DIGIT = 2; // 15位身份证(旧版)
  64. }
  65. // 性别枚举
  66. enum Gender {
  67. GENDER_UNSPECIFIED = 0;
  68. GENDER_MALE = 1; // 男性
  69. GENDER_FEMALE = 2; // 女性
  70. }
  71. // 统一社会信用代码验证规则
  72. message UnifiedSocialCreditCodeRules {
  73. // 是否启用验证
  74. bool enabled = 1;
  75. // 是否验证校验位
  76. bool verify_checksum = 2;
  77. // 允许的机构类型
  78. repeated OrganizationType allowed_types = 3;
  79. // 自定义错误消息
  80. string error_message = 4;
  81. }
  82. // 机构类型
  83. enum OrganizationType {
  84. ORGANIZATION_TYPE_UNSPECIFIED = 0;
  85. ORGANIZATION_TYPE_ENTERPRISE = 1; // 企业
  86. ORGANIZATION_TYPE_INSTITUTION = 2; // 事业单位
  87. ORGANIZATION_TYPE_SOCIAL_GROUP = 3; // 社会团体
  88. ORGANIZATION_TYPE_GOVERNMENT = 9; // 机关
  89. }
  90. // 银行卡号验证规则
  91. message BankCardRules {
  92. // 是否启用验证
  93. bool enabled = 1;
  94. // 是否使用 Luhn 算法验证
  95. bool verify_luhn = 2;
  96. // 允许的卡类型
  97. repeated BankCardType allowed_types = 3;
  98. // 允许的银行
  99. repeated string allowed_banks = 4; // 银行代码列表
  100. // 自定义错误消息
  101. string error_message = 5;
  102. }
  103. // 银行卡类型
  104. enum BankCardType {
  105. BANK_CARD_TYPE_UNSPECIFIED = 0;
  106. BANK_CARD_TYPE_DEBIT = 1; // 借记卡
  107. BANK_CARD_TYPE_CREDIT = 2; // 信用卡
  108. }
  109. // 中文姓名验证规则
  110. message ChineseNameRules {
  111. // 是否启用验证
  112. bool enabled = 1;
  113. // 最小长度(字符数)
  114. optional uint32 min_length = 2;
  115. // 最大长度(字符数)
  116. optional uint32 max_length = 3;
  117. // 是否允许少数民族姓名(可能包含·等特殊字符)
  118. bool allow_ethnic_minority = 4;
  119. // 是否允许英文名
  120. bool allow_english = 5;
  121. // 自定义错误消息
  122. string error_message = 6;
  123. }
  124. // 邮政编码验证规则
  125. message PostcodeRules {
  126. // 是否启用验证
  127. bool enabled = 1;
  128. // 国家/地区代码(默认为中国 CN)
  129. string country_code = 2;
  130. // 允许的省份代码(中国邮编前两位)
  131. repeated string allowed_provinces = 3;
  132. // 自定义错误消息
  133. string error_message = 4;
  134. }
  135. // ============================================================================
  136. // 常用业务场景验证规则组合
  137. // ============================================================================
  138. // 用户注册验证规则
  139. message UserRegistrationRules {
  140. // 用户名规则
  141. StringRules username = 1;
  142. // 手机号规则
  143. ChineseMobileRules mobile = 2;
  144. // 邮箱规则
  145. StringRules email = 3;
  146. // 密码规则
  147. PasswordRules password = 4;
  148. // 真实姓名规则(可选)
  149. ChineseNameRules real_name = 5;
  150. // 身份证规则(可选)
  151. ChineseIdCardRules id_card = 6;
  152. }
  153. // 密码强度验证规则
  154. message PasswordRules {
  155. // 最小长度
  156. uint32 min_length = 1;
  157. // 最大长度
  158. uint32 max_length = 2;
  159. // 是否要求包含大写字母
  160. bool require_uppercase = 3;
  161. // 是否要求包含小写字母
  162. bool require_lowercase = 4;
  163. // 是否要求包含数字
  164. bool require_digit = 5;
  165. // 是否要求包含特殊字符
  166. bool require_special = 6;
  167. // 特殊字符集合(默认: !@#$%^&*()_+-=[]{}|;:,.<>?)
  168. string special_chars = 7;
  169. // 是否禁止常见弱密码
  170. bool reject_common_weak = 8;
  171. // 自定义错误消息
  172. string error_message = 9;
  173. }
  174. // 企业信息验证规则
  175. message EnterpriseInfoRules {
  176. // 企业名称规则
  177. StringRules company_name = 1;
  178. // 统一社会信用代码规则
  179. UnifiedSocialCreditCodeRules uscc = 2;
  180. // 法人姓名规则
  181. ChineseNameRules legal_person_name = 3;
  182. // 注册资本范围
  183. optional int64 min_registered_capital = 4;
  184. optional int64 max_registered_capital = 5;
  185. // 营业执照号码(旧格式)
  186. StringRules business_license = 6;
  187. }
  188. // 地址验证规则
  189. message AddressRules {
  190. // 省份
  191. StringRules province = 1;
  192. // 城市
  193. StringRules city = 2;
  194. // 区县
  195. StringRules district = 3;
  196. // 详细地址
  197. StringRules detail = 4;
  198. // 邮政编码
  199. PostcodeRules postcode = 5;
  200. // 是否要求完整地址
  201. bool require_complete = 6;
  202. }
  203. // 金融交易验证规则
  204. message FinancialTransactionRules {
  205. // 交易金额范围
  206. optional double min_amount = 1;
  207. optional double max_amount = 2;
  208. // 银行卡号验证
  209. BankCardRules bank_card = 3;
  210. // 交易密码规则
  211. PasswordRules transaction_password = 4;
  212. // 是否要求二次确认
  213. bool require_confirmation = 5;
  214. }
  215. // ============================================================================
  216. // 验证规则辅助消息
  217. // ============================================================================
  218. // 验证错误详情
  219. message ValidationError {
  220. // 字段路径
  221. string field_path = 1;
  222. // 规则 ID
  223. string rule_id = 2;
  224. // 错误消息(中文)
  225. string message = 3;
  226. // 错误消息(英文)
  227. string message_en = 4;
  228. // 失败的值
  229. string value = 5;
  230. // 附加信息
  231. map<string, string> metadata = 6;
  232. }
  233. // 批量验证结果
  234. message ValidationResult {
  235. // 是否验证通过
  236. bool valid = 1;
  237. // 错误列表
  238. repeated ValidationError errors = 2;
  239. // 警告列表(非阻塞性)
  240. repeated ValidationError warnings = 3;
  241. // 验证组
  242. string group = 4;
  243. }