add
This commit is contained in:
@@ -42,6 +42,7 @@ import (
|
||||
"tyapi-server/internal/infrastructure/external/alicloud"
|
||||
"tyapi-server/internal/infrastructure/external/captcha"
|
||||
"tyapi-server/internal/infrastructure/external/email"
|
||||
"tyapi-server/internal/infrastructure/external/haiyuapi"
|
||||
"tyapi-server/internal/infrastructure/external/huibo"
|
||||
"tyapi-server/internal/infrastructure/external/jiguang"
|
||||
"tyapi-server/internal/infrastructure/external/muzi"
|
||||
@@ -51,7 +52,6 @@ import (
|
||||
"tyapi-server/internal/infrastructure/external/shumai"
|
||||
"tyapi-server/internal/infrastructure/external/sms"
|
||||
"tyapi-server/internal/infrastructure/external/storage"
|
||||
"tyapi-server/internal/infrastructure/external/haiyuapi"
|
||||
"tyapi-server/internal/infrastructure/external/tianyancha"
|
||||
"tyapi-server/internal/infrastructure/external/westdex"
|
||||
"tyapi-server/internal/infrastructure/external/xingwei"
|
||||
|
||||
@@ -89,6 +89,17 @@ type JRZQ0A03Req struct {
|
||||
IDCard string `json:"id_card" validate:"required,validIDCard"`
|
||||
Name string `json:"name" validate:"required,min=1,validName"`
|
||||
}
|
||||
|
||||
type JRZQ5T8SReq struct {
|
||||
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
|
||||
IDCard string `json:"id_card" validate:"required,validIDCard"`
|
||||
Name string `json:"name" validate:"required,min=1,validName"`
|
||||
}
|
||||
type JRZQT57ZReq struct {
|
||||
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
|
||||
IDCard string `json:"id_card" validate:"required,validIDCard"`
|
||||
Name string `json:"name" validate:"required,min=1,validName"`
|
||||
}
|
||||
type JRZQ4AA8Req struct {
|
||||
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
|
||||
IDCard string `json:"id_card" validate:"required,validIDCard"`
|
||||
|
||||
@@ -238,6 +238,8 @@ func registerAllProcessors(combService *comb.CombService) {
|
||||
"JRZQV4TF": jrzq.ProcessJRZQV4TFRequest, // 智瞳分尊享版
|
||||
"JRZQV5F4": jrzq.ProcessJRZQV5F4Request, // 风险变量V5F4
|
||||
"JRZQV7MD": jrzq.ProcessJRZQV7MDRequest, // 特殊名单
|
||||
"JRZQ5T8S": jrzq.ProcessJRZQ5T8SRequest, // 借贷意向验证V2
|
||||
"JRZQT57Z": jrzq.ProcessJRZQT57ZRequest, // 团伙欺诈风险识别
|
||||
|
||||
// QYGL系列处理器
|
||||
"QYGL8261": qygl.ProcessQYGL8261Request,
|
||||
|
||||
@@ -337,6 +337,8 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string
|
||||
"YYSYXF7J": &dto.YYSYXF7JReq{}, //手机消费区间验证
|
||||
"QCXG1S2L": &dto.QCXG1S2LReq{}, //车辆车五项信息核验V2
|
||||
"QCXGA8V3": &dto.QCXGA8V3Req{}, //全国车辆配置查验(车五项+使用性质+承保)
|
||||
"JRZQ5T8S": &dto.JRZQ5T8SReq{}, //借贷意向验证V22
|
||||
"JRZQT57Z": &dto.JRZQT57ZReq{}, //团伙欺诈风险识别
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestFormConfigService_GetFormConfig(t *testing.T) {
|
||||
service := NewFormConfigServiceWithoutDependencies()
|
||||
|
||||
// 测试获取存在的API配置
|
||||
config, err := service.GetFormConfig(context.Background(), "IVYZ9363")
|
||||
if err != nil {
|
||||
t.Fatalf("获取表单配置失败: %v", err)
|
||||
}
|
||||
|
||||
if config == nil {
|
||||
t.Fatal("表单配置不应为空")
|
||||
}
|
||||
|
||||
if config.ApiCode != "IVYZ9363" {
|
||||
t.Errorf("期望API代码为 IVYZ9363,实际为 %s", config.ApiCode)
|
||||
}
|
||||
|
||||
if len(config.Fields) == 0 {
|
||||
t.Fatal("字段列表不应为空")
|
||||
}
|
||||
|
||||
// 验证字段信息
|
||||
expectedFields := map[string]bool{
|
||||
"man_name": false,
|
||||
"man_id_card": false,
|
||||
"woman_name": false,
|
||||
"woman_id_card": false,
|
||||
}
|
||||
|
||||
for _, field := range config.Fields {
|
||||
if _, exists := expectedFields[field.Name]; !exists {
|
||||
t.Errorf("意外的字段: %s", field.Name)
|
||||
}
|
||||
expectedFields[field.Name] = true
|
||||
}
|
||||
|
||||
for fieldName, found := range expectedFields {
|
||||
if !found {
|
||||
t.Errorf("缺少字段: %s", fieldName)
|
||||
}
|
||||
}
|
||||
|
||||
// 测试获取不存在的API配置
|
||||
config, err = service.GetFormConfig(context.Background(), "NONEXISTENT")
|
||||
if err != nil {
|
||||
t.Fatalf("获取不存在的API配置不应返回错误: %v", err)
|
||||
}
|
||||
|
||||
if config != nil {
|
||||
t.Fatal("不存在的API配置应返回nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormConfigService_FieldValidation(t *testing.T) {
|
||||
service := NewFormConfigServiceWithoutDependencies()
|
||||
|
||||
config, err := service.GetFormConfig(context.Background(), "FLXG3D56")
|
||||
if err != nil {
|
||||
t.Fatalf("获取表单配置失败: %v", err)
|
||||
}
|
||||
|
||||
if config == nil {
|
||||
t.Fatal("表单配置不应为空")
|
||||
}
|
||||
|
||||
// 验证手机号字段
|
||||
var mobileField *FormField
|
||||
for _, field := range config.Fields {
|
||||
if field.Name == "mobile_no" {
|
||||
mobileField = &field
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if mobileField == nil {
|
||||
t.Fatal("应找到mobile_no字段")
|
||||
}
|
||||
|
||||
if !mobileField.Required {
|
||||
t.Error("mobile_no字段应为必填")
|
||||
}
|
||||
|
||||
if mobileField.Type != "tel" {
|
||||
t.Errorf("mobile_no字段类型应为tel,实际为%s", mobileField.Type)
|
||||
}
|
||||
|
||||
if !contains(mobileField.Validation, "手机号格式") {
|
||||
t.Errorf("mobile_no字段验证规则应包含'手机号格式',实际为: %s", mobileField.Validation)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFormConfigService_FieldLabels(t *testing.T) {
|
||||
service := NewFormConfigServiceWithoutDependencies()
|
||||
|
||||
config, err := service.GetFormConfig(context.Background(), "IVYZ9363")
|
||||
if err != nil {
|
||||
t.Fatalf("获取表单配置失败: %v", err)
|
||||
}
|
||||
|
||||
// 验证字段标签
|
||||
expectedLabels := map[string]string{
|
||||
"man_name": "男方姓名",
|
||||
"man_id_card": "男方身份证",
|
||||
"woman_name": "女方姓名",
|
||||
"woman_id_card": "女方身份证",
|
||||
}
|
||||
|
||||
for _, field := range config.Fields {
|
||||
if expectedLabel, exists := expectedLabels[field.Name]; exists {
|
||||
if field.Label != expectedLabel {
|
||||
t.Errorf("字段 %s 的标签应为 %s,实际为 %s", field.Name, expectedLabel, field.Label)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 辅助函数
|
||||
func contains(s, substr string) bool {
|
||||
return len(s) >= len(substr) && (s == substr || (len(s) > len(substr) && (s[:len(substr)] == substr || s[len(s)-len(substr):] == substr || func() bool {
|
||||
for i := 0; i <= len(s)-len(substr); i++ {
|
||||
if s[i:i+len(substr)] == substr {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}())))
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,350 +0,0 @@
|
||||
## 返回字段说明
|
||||
|
||||
# 5. 返回参数说明
|
||||
|
||||
## result.detail 参数说明(Object)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| lawsuitStat | object | 涉诉结果,详见【lawsuitStat 参数说明】 |
|
||||
| breachCaseList | array | 失信结果,详见【breachCaseList 参数说明】 |
|
||||
| consumptionRestrictionList | array | 限高结果,详见【consumptionRestrictionList 参数说明】 |
|
||||
|
||||
---
|
||||
|
||||
## lawsuitStat 参数说明(Object)
|
||||
|
||||
### 一、统计概览(count)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| area_stat | string | 涉案地点分布 |
|
||||
| ay_stat | string | 涉案案由分布 |
|
||||
| jafs_stat | string | 结案方式分布 |
|
||||
| larq_stat | string | 涉案时间分布 |
|
||||
| count_total | string | 案件总数 |
|
||||
| count_beigao | string | 被告总数 |
|
||||
| count_yuangao | string | 原告总数 |
|
||||
| count_other | string | 第三人总数 |
|
||||
| count_jie_total | string | 已结案总数 |
|
||||
| count_jie_beigao | string | 被告已结案总数 |
|
||||
| count_jie_yuangao | string | 原告已结案总数 |
|
||||
| count_jie_other | string | 第三人已结案总数 |
|
||||
| count_wei_total | string | 未结案总数 |
|
||||
| count_wei_beigao | string | 被告未结案总数 |
|
||||
| count_wei_yuangao | string | 原告未结案总数 |
|
||||
| count_wei_other | string | 第三人未结案总数 |
|
||||
| money_total | string | 涉案总金额 |
|
||||
| money_beigao | string | 被告金额 |
|
||||
| money_yuangao | string | 原告金额 |
|
||||
| money_other | string | 第三人金额 |
|
||||
| money_jie_total | string | 已结案金额 |
|
||||
| money_jie_beigao | string | 被告已结案金额 |
|
||||
| money_jie_yuangao | string | 原告已结金额 |
|
||||
| money_jie_other | string | 第三人已结案金额 |
|
||||
| money_wei_total | string | 未结案金额 |
|
||||
| money_wei_beigao | string | 被告未结案金额 |
|
||||
| money_wei_yuangao | string | 原告未结案金额 |
|
||||
| money_wei_other | string | 第三人未结案金额 |
|
||||
| money_wei_percent | string | 未结案金额百分比 |
|
||||
|
||||
---
|
||||
|
||||
### 二、案件明细
|
||||
|
||||
#### 1. 行政案件(administrative)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| cases | array | 案件列表 |
|
||||
| count | object | 统计信息(同 count 结构) |
|
||||
|
||||
**cases 子字段说明**
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| c_ah | string | 案号 |
|
||||
| c_ah_hx | string | 后续案号 |
|
||||
| c_ah_ys | string | 原审案号 |
|
||||
| c_gkws_dsr | string | 当事人 |
|
||||
| c_gkws_glah | string | 相关案件号 |
|
||||
| c_gkws_id | string | 公开文书 ID |
|
||||
| c_gkws_pjjg | string | 判决结果 |
|
||||
| c_slfsxx | string | 审理方式信息 |
|
||||
| c_ssdy | string | 所属地域 |
|
||||
| d_jarq | string | 结案时间 |
|
||||
| d_larq | string | 立案时间 |
|
||||
| n_ajbs | string | 案件标识 |
|
||||
| n_ajjzjd | string | 案件进展阶段 |
|
||||
| n_ajlx | string | 案件类型 |
|
||||
| n_jaay | string | 结案案由 |
|
||||
| n_jaay_tree | string | 结案案由详细 |
|
||||
| n_jabdje | string | 结案标的金额 |
|
||||
| n_jabdje_gj | string | 结案标的金额估计 |
|
||||
| n_jabdje_gj_level | string | 结案标的金额估计等级(万元) |
|
||||
| n_jabdje_level | string | 结案标的金额等级(万元) |
|
||||
| n_jafs | string | 结案方式 |
|
||||
| n_jbfy | string | 经办法院 |
|
||||
| n_jbfy_cj | string | 法院所属层级 |
|
||||
| n_laay | string | 立案案由 |
|
||||
| n_laay_tree | string | 立案案由详细 |
|
||||
| n_pj_victory | string | 胜诉估计 |
|
||||
| n_qsbdje | string | 起诉标的金额 |
|
||||
| n_qsbdje_level | string | 起诉标的金额等级 |
|
||||
| n_slcx | string | 审理程序 |
|
||||
| n_ssdw | string | 诉讼地位 |
|
||||
| n_ssdw_ys | string | 一审诉讼地位 |
|
||||
| c_dsrxx | array | 当事人信息列表 |
|
||||
|
||||
**c_dsrxx 子字段说明**
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| n_ssdw | string | 诉讼地位 |
|
||||
| c_mc | string | 名称 |
|
||||
| n_dsrlx | string | 当事人类型 |
|
||||
|
||||
---
|
||||
|
||||
#### 2. 民事案件(civil)
|
||||
|
||||
> 字段结构与 **行政案件** 基本一致,新增以下字段:
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| n_jaay_tag | string | 结案案由标签 |
|
||||
| n_laay_tag | string | 立案案由标签 |
|
||||
| n_qsbdje_gj | string | 起诉标的金额估计 |
|
||||
| n_qsbdje_gj_level | string | 起诉标的金额估计等级 |
|
||||
|
||||
---
|
||||
|
||||
#### 3. 刑事案件(criminal)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| n_dzzm | string | 定罪罪名 |
|
||||
| n_dzzm_tree | string | 定罪罪名详细 |
|
||||
| n_fzje | string | 犯罪金额 |
|
||||
| n_fzje_level | string | 犯罪金额等级 |
|
||||
| n_ccxzxje | string | 财产刑执行金额 |
|
||||
| n_ccxzxje_gj | string | 财产刑执行金额估计 |
|
||||
| n_ccxzxje_gj_level | string | 财产刑执行金额估计等级 |
|
||||
| n_pcjg | string | 判处结果 |
|
||||
| n_pcpcje | string | 判处赔偿金额 |
|
||||
| n_pcpcje_gj | string | 判处赔偿金额估计 |
|
||||
| n_pcpcje_gj_level | string | 判处赔偿金额估计等级 |
|
||||
| n_bqqpcje | string | 被请求赔偿金额 |
|
||||
| n_bqqpcje_level | string | 被请求赔偿金额等级 |
|
||||
|
||||
---
|
||||
|
||||
#### 4. 执行案件(implement)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| n_sqzxbdje | string | 申请执行标的金额 |
|
||||
| n_sjdwje | string | 实际到位金额 |
|
||||
| n_wzxje | string | 未执行金额 |
|
||||
|
||||
---
|
||||
|
||||
#### 5. 非诉保全审查(preservation)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| c_sqbqbdw | string | 申请保全标的物 |
|
||||
| n_sqbqse | string | 申请保全数额 |
|
||||
| n_sqbqse_level | string | 申请保全数额等级 |
|
||||
|
||||
---
|
||||
|
||||
#### 6. 强制清算与破产案件(bankrupt)
|
||||
|
||||
> 字段结构与行政案件一致,主要用于破产/清算类案件。
|
||||
|
||||
---
|
||||
|
||||
### 三、案件串联树(cases_tree)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| administrative | array | 行政案件链 |
|
||||
| civil | array | 民事案件链 |
|
||||
| criminal | array | 刑事案件链 |
|
||||
|
||||
**案件节点说明**
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| c_ah | string | 案号 |
|
||||
| case_type | string | 案件类型 |
|
||||
| n_ajbs | string | 案件标识 |
|
||||
| stage_type | string | 审理阶段类型 |
|
||||
| next | object | 后续关联案件 |
|
||||
|
||||
---
|
||||
|
||||
## breachCaseList 参数说明(Array)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| xb | string | 性别 |
|
||||
| zzjgdm | string | 组织机构代码(企业查询时有值) |
|
||||
| qyfr | string | 企业法人 |
|
||||
| zxfy | string | 执行法院 |
|
||||
| sf | string | 省份 |
|
||||
| zxyjwh | string | 执行依据文号 |
|
||||
| larq | string | 立案时间(yyyy-mm-dd) |
|
||||
| ah | string | 案号 |
|
||||
| zxyjdw | string | 执行依据单位 |
|
||||
| yw | string | 生效法律文书确定的义务 |
|
||||
| lxqk | string | 被执行人的履行情况 |
|
||||
| xwqx | string | 失信被执行人行为具体情形 |
|
||||
| fbrq | string | 发布时间(yyyy-mm-dd) |
|
||||
| pjje_gj | string | 判决金额估计 |
|
||||
|
||||
---
|
||||
|
||||
## consumptionRestrictionList 参数说明(Array)
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| qyfr | string | 企业法人 |
|
||||
| qymc | string | 企业名称 |
|
||||
| zxfy | string | 执行法院 |
|
||||
| fbrq | string | 发布时间(yyyy-mm-dd) |
|
||||
| larq | string | 立案时间(yyyy-mm-dd) |
|
||||
| ah | string | 案号 |
|
||||
|
||||
---
|
||||
## 字典说明
|
||||
|
||||
### 案件类型(case_type)
|
||||
|
||||
| 代码 | 说明 |
|
||||
|---|---|
|
||||
| 200 | 刑事案件 |
|
||||
| 300 | 民事案件 |
|
||||
| 400 | 行政案件 |
|
||||
| 1000 | 执行案件 |
|
||||
|
||||
---
|
||||
|
||||
### 审理阶段(stage_type)
|
||||
|
||||
| 代码 | 说明 |
|
||||
|---|---|
|
||||
| 1 | 一审 |
|
||||
| 2 | 二审 |
|
||||
| 3 | 再审审查 |
|
||||
| 4 | 再审 |
|
||||
| 5 | 执行 |
|
||||
|
||||
---
|
||||
|
||||
### 金额等级(单位:万元)
|
||||
|
||||
| 代码 | 金额区间(万元) |
|
||||
|---|---|
|
||||
| 0 | 未填写或 0 |
|
||||
| 1 | N < 1 |
|
||||
| 2 | 1 ≤ N < 2 |
|
||||
| 3 | 2 ≤ N < 3 |
|
||||
| 4 | 3 ≤ N < 4 |
|
||||
| 5 | 4 ≤ N < 5 |
|
||||
| 6 | 5 ≤ N < 6 |
|
||||
| 7 | 6 ≤ N < 7 |
|
||||
| 8 | 7 ≤ N < 8 |
|
||||
| 9 | 8 ≤ N < 9 |
|
||||
| 10 | 9 ≤ N < 10 |
|
||||
| 11 | 10 ≤ N < 20 |
|
||||
| 12 | 20 ≤ N < 30 |
|
||||
| 13 | 30 ≤ N < 40 |
|
||||
| 14 | 40 ≤ N < 50 |
|
||||
| 15 | 50 ≤ N < 60 |
|
||||
| 16 | 60 ≤ N < 70 |
|
||||
| 17 | 70 ≤ N < 80 |
|
||||
| 18 | 80 ≤ N < 90 |
|
||||
| 19 | 90 ≤ N < 100 |
|
||||
| 20 | 100 ≤ N < 150 |
|
||||
| 21 | 150 ≤ N < 200 |
|
||||
| 22 | 200 ≤ N < 250 |
|
||||
| 23 | 250 ≤ N < 300 |
|
||||
| 24 | 300 ≤ N < 350 |
|
||||
| 25 | 350 ≤ N < 400 |
|
||||
| 26 | 400 ≤ N < 450 |
|
||||
| 27 | 450 ≤ N < 500 |
|
||||
| 28 | 500 ≤ N < 550 |
|
||||
| 29 | 550 ≤ N < 600 |
|
||||
| 30 | 600 ≤ N < 650 |
|
||||
| 31 | 650 ≤ N < 700 |
|
||||
| 32 | 700 ≤ N < 750 |
|
||||
| 33 | 750 ≤ N < 800 |
|
||||
| 34 | 800 ≤ N < 850 |
|
||||
| 35 | 850 ≤ N < 900 |
|
||||
| 36 | 900 ≤ N < 950 |
|
||||
| 37 | 950 ≤ N < 1000 |
|
||||
| 38 | 1000 ≤ N < 1500 |
|
||||
| 39 | 1500 ≤ N < 2000 |
|
||||
| 40 | 2000 ≤ N < 2500 |
|
||||
| 41 | 2500 ≤ N < 3000 |
|
||||
| 42 | 3000 ≤ N < 3500 |
|
||||
| 43 | 3500 ≤ N < 4000 |
|
||||
| 44 | 4000 ≤ N < 4500 |
|
||||
| 45 | 4500 ≤ N < 5000 |
|
||||
| 46 | 5000 ≤ N < 5500 |
|
||||
| 47 | 5500 ≤ N < 6000 |
|
||||
| 48 | 6000 ≤ N < 6500 |
|
||||
| 49 | 6500 ≤ N < 7000 |
|
||||
| 50 | 7000 ≤ N < 7500 |
|
||||
| 51 | 7500 ≤ N < 8000 |
|
||||
| 52 | 8000 ≤ N < 8500 |
|
||||
| 53 | 8500 ≤ N < 9000 |
|
||||
| 54 | 9000 ≤ N < 9500 |
|
||||
| 55 | 9500 ≤ N < 10000 |
|
||||
| 56 | 10000 ≤ N < 15000 |
|
||||
| 57 | 15000 ≤ N < 20000 |
|
||||
| 58 | 20000 ≤ N < 25000 |
|
||||
| 59 | 25000 ≤ N < 30000 |
|
||||
| 60 | 30000 ≤ N < 35000 |
|
||||
| 61 | 35000 ≤ N < 40000 |
|
||||
| 62 | 40000 ≤ N < 45000 |
|
||||
| 63 | 45000 ≤ N < 50000 |
|
||||
| 64 | 50000 ≤ N < 55000 |
|
||||
| 65 | 55000 ≤ N < 60000 |
|
||||
| 66 | 60000 ≤ N < 65000 |
|
||||
| 67 | 65000 ≤ N < 70000 |
|
||||
| 68 | 70000 ≤ N < 75000 |
|
||||
| 69 | 75000 ≤ N < 80000 |
|
||||
| 70 | 80000 ≤ N < 85000 |
|
||||
| 71 | 85000 ≤ N < 90000 |
|
||||
| 72 | 90000 ≤ N < 95000 |
|
||||
| 73 | 95000 ≤ N < 100000 |
|
||||
| 74 | 100000 ≤ N < 150000 |
|
||||
| 75 | 150000 ≤ N < 200000 |
|
||||
| 76 | 200000 ≤ N < 250000 |
|
||||
| 77 | 250000 ≤ N < 300000 |
|
||||
| 78 | 300000 ≤ N < 350000 |
|
||||
| 79 | 350000 ≤ N < 400000 |
|
||||
| 80 | 400000 ≤ N < 450000 |
|
||||
| 81 | 450000 ≤ N < 500000 |
|
||||
| 82 | 500000 ≤ N < 550000 |
|
||||
| 83 | 550000 ≤ N < 600000 |
|
||||
| 84 | 600000 ≤ N < 650000 |
|
||||
| 85 | 650000 ≤ N < 700000 |
|
||||
| 86 | 700000 ≤ N < 750000 |
|
||||
| 87 | 750000 ≤ N < 800000 |
|
||||
| 88 | 800000 ≤ N < 850000 |
|
||||
| 89 | 850000 ≤ N < 900000 |
|
||||
| 90 | 900000 ≤ N < 950000 |
|
||||
| 91 | 950000 ≤ N < 1000000 |
|
||||
| 92 | 1000000 ≤ N < 1500000 |
|
||||
| 93 | 1500000 ≤ N < 2000000 |
|
||||
| 94 | 2000000 ≤ N < 2500000 |
|
||||
| 95 | 2500000 ≤ N < 3000000 |
|
||||
| 96 | 3000000 ≤ N < 3500000 |
|
||||
| 97 | 3500000 ≤ N < 4000000 |
|
||||
| 98 | 4000000 ≤ N < 4500000 |
|
||||
| 99 | 4500000 ≤ N < 5000000 |
|
||||
| 100 | 5000000 ≤ N |
|
||||
@@ -1,137 +0,0 @@
|
||||
{
|
||||
"sxbzxr": [],
|
||||
"xgbzxr": [],
|
||||
"entout": {
|
||||
"jurisdict": {
|
||||
"cases": [],
|
||||
"count": {}
|
||||
},
|
||||
"preservation": {
|
||||
"cases": [],
|
||||
"count": {
|
||||
"money_jie_total": "11",
|
||||
"count_total": "1",
|
||||
"larq_stat": "2025(1)",
|
||||
"money_wei_percent": "0",
|
||||
"area_stat": "重庆市(1)",
|
||||
"money_jie_beigao": "0",
|
||||
"count_jie_total": "1",
|
||||
"money_jie_other": "0",
|
||||
"count_wei_total": "0",
|
||||
"money_yuangao": "11",
|
||||
"count_jie_beigao": "0",
|
||||
"money_beigao": "0",
|
||||
"ay_stat": "非讼程序案件案由(1)",
|
||||
"count_wei_other": "0",
|
||||
"count_wei_beigao": "0",
|
||||
"count_wei_yuangao": "0",
|
||||
"money_other": "0",
|
||||
"count_yuangao": "1",
|
||||
"money_wei_yuangao": "0",
|
||||
"money_jie_yuangao": "11",
|
||||
"money_wei_beigao": "0",
|
||||
"count_jie_yuangao": "1",
|
||||
"count_other": "0",
|
||||
"count_jie_other": "0",
|
||||
"count_beigao": "0",
|
||||
"money_wei_total": "0",
|
||||
"money_wei_other": "0",
|
||||
"money_total": "11",
|
||||
"jafs_stat": "转为其他案件中的保全(1)"
|
||||
}
|
||||
},
|
||||
"cases_tree": {},
|
||||
"administrative": {
|
||||
"cases": [],
|
||||
"count": {}
|
||||
},
|
||||
"civil": {
|
||||
"cases": [
|
||||
{
|
||||
"n_ssdw": "原告",
|
||||
"n_ccxzxje": "",
|
||||
"n_pcjg": "",
|
||||
"n_sqbqbdw": "",
|
||||
"c_gkws_glah": "",
|
||||
"n_sqbqse_level": "",
|
||||
"n_pj_victory": "未知",
|
||||
"n_wzxje": "",
|
||||
"c_gkws_dsr": "",
|
||||
"n_qsbdje_gj_level": "",
|
||||
"n_jbfy_cj": "基层法院",
|
||||
"n_qsbdje": "14858.43",
|
||||
"n_slcx": "一审",
|
||||
"n_ajjzjd": "已结案",
|
||||
"n_jbfy": "淮南市田家庵区人民法院",
|
||||
"c_gkws_id": "",
|
||||
"d_jarq": "2023-03-29",
|
||||
"n_jabdje_level": "2",
|
||||
"c_slfsxx": "1,2023-03-27 15:00:00,淮南市田家庵区法院6号法庭,1",
|
||||
"n_ccxzxje_gj_level": "",
|
||||
"n_pcpcje": "",
|
||||
"n_sjdwje": "",
|
||||
"n_fzje_level": "",
|
||||
"n_pcpcje_level": "",
|
||||
"c_ah": "(2023)皖0403民初1229号",
|
||||
"n_qsbdje_level": "2",
|
||||
"c_ssdy": "安徽省",
|
||||
"n_jabdje": "14460.43",
|
||||
"n_ajlx": "民事一审",
|
||||
"n_laay": "合同、准合同纠纷",
|
||||
"n_jaay": "合同、准合同纠纷",
|
||||
"n_laay_tree": "合同、准合同纠纷,合同纠纷,租赁合同纠纷",
|
||||
"n_bqqpcje": "",
|
||||
"n_jabdje_gj": "",
|
||||
"n_jaay_tree": "合同、准合同纠纷,合同纠纷,租赁合同纠纷",
|
||||
"n_pcpcje_gj": "",
|
||||
"n_jabdje_gj_level": "",
|
||||
"n_ccxzxje_level": "",
|
||||
"n_ssdw_ys": "原告",
|
||||
"n_pcpcje_gj_level": "",
|
||||
"n_jafs": "判决",
|
||||
"c_id": "71542222",
|
||||
"n_qsbdje_gj": "",
|
||||
"c_ah_hx": "(2023)皖0403执3847号:c996fda58ff2552d6ba834603c2e9e63",
|
||||
"n_fzje": "",
|
||||
"n_ccxzxje_gj": "",
|
||||
"n_sqbqse": "",
|
||||
"n_dzzm": "",
|
||||
"n_bqqpcje_level": "",
|
||||
"c_gkws_pjjg": "",
|
||||
"n_laay_tag": "",
|
||||
"n_jaay_tag": "",
|
||||
"n_ajbs": "b1802615be1d2dd9236192322b247c6d",
|
||||
"n_dzzm_tree": "",
|
||||
"n_sqzxbdje": "",
|
||||
"c_ah_ys": "",
|
||||
"c_dsrxx": [
|
||||
{
|
||||
"n_ssdw": "原告",
|
||||
"c_mc": "xxxxxx",
|
||||
"n_dsrlx": "企业组织"
|
||||
},
|
||||
{
|
||||
"n_ssdw": "被告",
|
||||
"c_mc": "xxx",
|
||||
"n_dsrlx": "自然人"
|
||||
}
|
||||
],
|
||||
"d_larq": "2023-02-06"
|
||||
}
|
||||
],
|
||||
"count": {}
|
||||
},
|
||||
"criminal": {
|
||||
"cases": [],
|
||||
"count": {}
|
||||
},
|
||||
"compensate": {
|
||||
"cases": [],
|
||||
"count": {}
|
||||
},
|
||||
"bankrupt": {
|
||||
"cases": [],
|
||||
"count": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
## 返回字段说明
|
||||
|
||||
| 名称 | 说明 | 备注 |
|
||||
|--------|--------------------|------|
|
||||
| sxbzxr | 失信被执行人 | |
|
||||
| entout | 涉诉信息 | |
|
||||
| xgbzxr | 限高被执行人 | |
|
||||
|
||||
### sxbzxr参数
|
||||
| 名称 | 说明 | 备注 |
|
||||
|------------------|------------------------------|------|
|
||||
| yw | 生效法律文书确定的义务 | |
|
||||
| pjje_gj | 判决金额_估计 | |
|
||||
| xwqx | 失信被执行人行为具体情形 | |
|
||||
| id | 标识 | |
|
||||
| zxfy | 执行法院 | |
|
||||
| ah | 案号 | |
|
||||
| zxyjwh | 执行依据文号 | |
|
||||
| lxqk | 被执行人的履行情况 | |
|
||||
| zxyjdw | 出执行依据单位 | |
|
||||
| fbrq | 发布时间(日期) | |
|
||||
| xb | 性别 | |
|
||||
| larq | 立案日期 | |
|
||||
| sf | 省份 | |
|
||||
|
||||
### entout参数
|
||||
| 名称 | 说明 | 备注 |
|
||||
|--------------------------------|------------------------------|------|
|
||||
| civil | 案件名称 | 返回有案件的信息,如:<br>administrative/行政案<br>implement/执行案件<br>count/统计<br>preservation/非诉保全审查<br>crc/当事人变更码<br>civil/民事案件<br>criminal/刑事案件<br>cases_tree/串联树<br>bankrupt/强制清算与破产案件<br>jurisdict/管辖案件<br>compensate/赔偿案件 |
|
||||
| cases | 案件 | |
|
||||
| n_jabdje_gj_level | 结案标的金额估计等级 | |
|
||||
| n_jbfy_cj | 法院所属层级 | |
|
||||
| c_gkws_glah | 相关案件号 | |
|
||||
| n_jafs | 结案方式 | |
|
||||
| n_sjdwje | 实际到位金额 | |
|
||||
| n_sqzxbdje | 申请执行标的金额 | |
|
||||
| n_wzxje | 未执行金额 | |
|
||||
| n_sqbqse | 申请保全数额 | |
|
||||
| n_sqbqse_level | 申请保全数额等级 | |
|
||||
| n_jaay_tag | 结案案由标签 | |
|
||||
| n_qsbdje_gj_level | 起诉标的金额估计等级 | |
|
||||
| n_laay_tag | 立案案由标签 | |
|
||||
| n_pcpcje_level | 判处赔偿金额等级 | |
|
||||
| n_bqqpcje | 被请求赔偿金额 | |
|
||||
| n_pcpcje_gj_level | 判处赔偿金额估计等级 | |
|
||||
| n_dzzm | 定罪罪名 | |
|
||||
| n_ccxzxje_level | 财产刑执行金额等级 | |
|
||||
| n_ccxzxje_gj_level | 财产刑执行金额估计等级 | |
|
||||
| n_fzje | 犯罪金额 | |
|
||||
| n_pcpcje | 判处赔偿金额 | |
|
||||
| n_dzzm_tree | 定罪罪名树 | |
|
||||
| n_pcjg | 判处结果 | |
|
||||
| n_ccxzxje | 财产刑执行金额 | |
|
||||
| n_fzje_level | 犯罪金额等级 | |
|
||||
| n_ccxzxje_gj | 财产刑执行金额估计 | |
|
||||
| n_bqqpcje_level | 被请求赔偿金额等级 | |
|
||||
| n_ssdw | 诉讼地位 | |
|
||||
| d_jarq | 结案时间 | |
|
||||
| c_gkws_pjjg | 判决结果 | |
|
||||
| n_qsbdje | 起诉标的金额 | |
|
||||
| n_crc | 案件变更码 | |
|
||||
| c_ssdy | 所属地域 | |
|
||||
| n_ajjzjd | 案件进展阶段 | |
|
||||
| n_jaay | 结案案由 | |
|
||||
| n_ajlx | 案件类型 | |
|
||||
| c_ah_ys | 原审案号 | |
|
||||
| n_laay_tree | 立案案由详细 | |
|
||||
| n_ajbs | 案件
|
||||
@@ -1,22 +0,0 @@
|
||||
|
||||
{
|
||||
"id": {
|
||||
"court_executed_time": "2",
|
||||
"court_executed_allnum": "5",
|
||||
"court_executed": "0"
|
||||
},
|
||||
"cell": {
|
||||
"nbank_lost_time": "5",
|
||||
"nbank_other_bad_time": "2",
|
||||
"nbank_lost_allnum": "4",
|
||||
"nbank_finlea_lost": "0",
|
||||
"nbank_finlea_lost_time": "5",
|
||||
"nbank_bad_allnum": "1",
|
||||
"nbank_other_bad_allnum": "1",
|
||||
"nbank_bad_time": "2",
|
||||
"nbank_other_bad": "0",
|
||||
"nbank_bad": "0",
|
||||
"nbank_lost": "0",
|
||||
"nbank_finlea_lost_allnum": "4"
|
||||
}
|
||||
}
|
||||
@@ -1,217 +0,0 @@
|
||||
|
||||
|
||||
## 一、响应参数
|
||||
|
||||
此接口用于验证个人在各类金融机构和法院系统的信用状况,包括法院失信、银行风险、非银机构风险等多个维度。
|
||||
|
||||
| 序号 | 参数名 | 类型 | 中文名称 | 取值解释 |
|
||||
|------|--------|------|----------|----------|
|
||||
| 2 | id_court_bad | string | 通过身份证查询,法院失信人 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 3 | id_court_executed | string | 通过身份证查询,法院被执行人 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 4 | id_bank_bad | string | 通过身份证查询,银行(含信用卡)中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 5 | id_bank_overdue | string | 通过身份证查询,银行(含信用卡)一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 6 | id_bank_lost | string | 通过身份证查询,银行(含信用卡)高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 7 | id_nbank_bad | string | 通过身份证查询,非银(含全部非银类型)中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 8 | id_nbank_overdue | string | 通过身份证查询,非银(含全部非银类型)一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 9 | id_nbank_lost | string | 通过身份证查询,非银(含全部非银类型)高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 10 | id_nbank_nsloan_bad | string | 通过身份证查询,非银-持牌网络小贷中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 11 | id_nbank_nsloan_overdue | string | 通过身份证查询,非银-持牌网络小贷一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 12 | id_nbank_nsloan_lost | string | 通过身份证查询,非银-持牌网络小贷高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 13 | id_nbank_sloan_bad | string | 通过身份证查询,非银-持牌小贷中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 14 | id_nbank_sloan_overdue | string | 通过身份证查询,非银-持牌小贷一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 15 | id_nbank_sloan_lost | string | 通过身份证查询,非银-持牌小贷高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 16 | id_nbank_cons_bad | string | 通过身份证查询,非银-持牌消费金融中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 17 | id_nbank_cons_overdue | string | 通过身份证查询,非银-持牌消费金融一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 18 | id_nbank_cons_lost | string | 通过身份证查询,非银-持牌消费金融高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 19 | id_nbank_finlea_bad | string | 通过身份证查询,非银-持牌融资租赁中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 20 | id_nbank_finlea_overdue | string | 通过身份证查询,非银-持牌融资租赁一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 21 | id_nbank_finlea_lost | string | 通过身份证查询,非银-持牌融资租赁高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 22 | id_nbank_autofin_bad | string | 通过身份证查询,非银-持牌汽车金融中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 23 | id_nbank_autofin_overdue | string | 通过身份证查询,非银-持牌汽车金融一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 24 | id_nbank_autofin_lost | string | 通过身份证查询,非银-持牌汽车金融高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 25 | id_nbank_other_bad | string | 通过身份证查询,非银-其他中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 26 | id_nbank_other_overdue | string | 通过身份证查询,非银-其他一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 27 | id_nbank_other_lost | string | 通过身份证查询,非银-其他高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 28 | cell_bank_bad | string | 通过手机号查询,银行(含信用卡)中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 29 | cell_bank_overdue | string | 通过手机号查询,银行(含信用卡)一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 30 | cell_bank_lost | string | 通过手机号查询,银行(含信用卡)高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 31 | cell_nbank_bad | string | 通过手机号查询,非银(含全部非银类型)中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 32 | cell_nbank_overdue | string | 通过手机号查询,非银(含全部非银类型)一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 33 | cell_nbank_lost | string | 通过手机号查询,非银(含全部非银类型)高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 34 | cell_nbank_nsloan_bad | string | 通过手机号查询,非银-持牌网络小贷中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 35 | cell_nbank_nsloan_overdue | string | 通过手机号查询,非银-持牌网络小贷一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 36 | cell_nbank_nsloan_lost | string | 通过手机号查询,非银-持牌网络小贷高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 37 | cell_nbank_sloan_bad | string | 通过手机号查询,非银-持牌小贷中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 38 | cell_nbank_sloan_overdue | string | 通过手机号查询,非银-持牌小贷一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 39 | cell_nbank_sloan_lost | string | 通过手机号查询,非银-持牌小贷高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 40 | cell_nbank_cons_bad | string | 通过手机号查询,非银-持牌消费金融中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 41 | cell_nbank_cons_overdue | string | 通过手机号查询,非银-持牌消费金融一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 42 | cell_nbank_cons_lost | string | 通过手机号查询,非银-持牌消费金融高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 43 | cell_nbank_finlea_bad | string | 通过手机号查询,非银-持牌融资租赁中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 44 | cell_nbank_finlea_overdue | string | 通过手机号查询,非银-持牌融资租赁一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 45 | cell_nbank_finlea_lost | string | 通过手机号查询,非银-持牌融资租赁高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 46 | cell_nbank_autofin_bad | string | 通过手机号查询,非银-持牌汽车金融中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 47 | cell_nbank_autofin_overdue | string | 通过手机号查询,非银-持牌汽车金融一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 48 | cell_nbank_autofin_lost | string | 通过手机号查询,非银-持牌汽车金融高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 49 | cell_nbank_other_bad | string | 通过手机号查询,非银-其他中风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 50 | cell_nbank_other_overdue | string | 通过手机号查询,非银-其他一般风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 51 | cell_nbank_other_lost | string | 通过手机号查询,非银-其他高风险 | 取“空/0”;0:命中,空:未命中 |
|
||||
| 52 | id_court_bad_allnum | string | 通过身份证查询,法院失信人命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 53 | id_court_executed_allnum | string | 通过身份证查询,法院被执行人命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 54 | id_bank_bad_allnum | string | 通过身份证查询,银行(含信用卡)中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 55 | id_bank_overdue_allnum | string | 通过身份证查询,银行(含信用卡)一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 56 | id_bank_lost_allnum | string | 通过身份证查询,银行(含信用卡)高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 57 | id_nbank_bad_allnum | string | 通过身份证查询,非银(含全部非银类型)中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 58 | id_nbank_overdue_allnum | string | 通过身份证查询,非银(含全部非银类型)一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 59 | id_nbank_lost_allnum | string | 通过身份证查询,非银(含全部非银类型)高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 60 | id_nbank_nsloan_bad_allnum | string | 通过身份证查询,非银-持牌网络小贷中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 61 | id_nbank_nsloan_overdue_allnum | string | 通过身份证查询,非银-持牌网络小贷一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 62 | id_nbank_nsloan_lost_allnum | string | 通过身份证查询,非银-持牌网络小贷高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 63 | id_nbank_sloan_bad_allnum | string | 通过身份证查询,非银-持牌小贷中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 64 | id_nbank_sloan_overdue_allnum | string | 通过身份证查询,非银-持牌小贷一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 65 | id_nbank_sloan_lost_allnum | string | 通过身份证查询,非银-持牌小贷高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 66 | id_nbank_cons_bad_allnum | string | 通过身份证查询,非银-持牌消费金融中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 67 | id_nbank_cons_overdue_allnum | string | 通过身份证查询,非银-持牌消费金融一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 68 | id_nbank_cons_lost_allnum | string | 通过身份证查询,非银-持牌消费金融高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 69 | id_nbank_finlea_bad_allnum | string | 通过身份证查询,非银-持牌融资租赁中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 70 | id_nbank_finlea_overdue_allnum | string | 通过身份证查询,非银-持牌融资租赁一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 71 | id_nbank_finlea_lost_allnum | string | 通过身份证查询,非银-持牌融资租赁高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 72 | id_nbank_autofin_bad_allnum | string | 通过身份证查询,非银-持牌汽车金融中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 73 | id_nbank_autofin_overdue_allnum | string | 通过身份证查询,非银-持牌汽车金融一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 74 | id_nbank_autofin_lost_allnum | string | 通过身份证查询,非银-持牌汽车金融高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 75 | id_nbank_other_bad_allnum | string | 通过身份证查询,非银-其他中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 76 | id_nbank_other_overdue_allnum | string | 通过身份证查询,非银-其他一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 77 | id_nbank_other_lost_allnum | string | 通过身份证查询,非银-其他高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 78 | cell_bank_bad_allnum | string | 通过手机号查询,银行(含信用卡)中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 79 | cell_bank_overdue_allnum | string | 通过手机号查询,银行(含信用卡)一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 80 | cell_bank_lost_allnum | string | 通过手机号查询,银行(含信用卡)高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 81 | cell_nbank_bad_allnum | string | 通过手机号查询,非银(含全部非银类型)中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 82 | cell_nbank_overdue_allnum | string | 通过手机号查询,非银(含全部非银类型)一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 83 | cell_nbank_lost_allnum | string | 通过手机号查询,非银(含全部非银类型)高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 84 | cell_nbank_nsloan_bad_allnum | string | 通过手机号查询,非银-持牌网络小贷中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 85 | cell_nbank_nsloan_overdue_allnum | string | 通过手机号查询,非银-持牌网络小贷一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 86 | cell_nbank_nsloan_lost_allnum | string | 通过手机号查询,非银-持牌网络小贷高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 87 | cell_nbank_sloan_bad_allnum | string | 通过手机号查询,非银-持牌小贷中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 88 | cell_nbank_sloan_overdue_allnum | string | 通过手机号查询,非银-持牌小贷一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 89 | cell_nbank_sloan_lost_allnum | string | 通过手机号查询,非银-持牌小贷高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 90 | cell_nbank_cons_bad_allnum | string | 通过手机号查询,非银-持牌消费金融中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 91 | cell_nbank_cons_overdue_allnum | string | 通过手机号查询,非银-持牌消费金融一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 92 | cell_nbank_cons_lost_allnum | string | 通过手机号查询,非银-持牌消费金融高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 93 | cell_nbank_finlea_bad_allnum | string | 通过手机号查询,非银-持牌融资租赁中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 94 | cell_nbank_finlea_overdue_allnum | string | 通过手机号查询,非银-持牌融资租赁一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 95 | cell_nbank_finlea_lost_allnum | string | 通过手机号查询,非银-持牌融资租赁高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 96 | cell_nbank_autofin_bad_allnum | string | 通过手机号查询,非银-持牌汽车金融中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 97 | cell_nbank_autofin_overdue_allnum | string | 通过手机号查询,非银-持牌汽车金融一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 98 | cell_nbank_autofin_lost_allnum | string | 通过手机号查询,非银-持牌汽车金融高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 99 | cell_nbank_other_bad_allnum | string | 通过手机号查询,非银-其他中风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 100 | cell_nbank_other_overdue_allnum | string | 通过手机号查询,非银-其他一般风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 101 | cell_nbank_other_lost_allnum | string | 通过手机号查询,非银-其他高风险命中次数 | 取“1-N”;返回命中次数 |
|
||||
| 102 | id_court_bad_time | string | 通过身份证查询,法院失信人距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 103 | id_court_executed_time | string | 通过身份证查询,法院被执行人距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 104 | id_bank_bad_time | string | 通过身份证查询,银行(含信用卡)中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 105 | id_bank_overdue_time | string | 通过身份证查询,银行(含信用卡)一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 106 | id_bank_lost_time | string | 通过身份证查询,银行(含信用卡)高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 107 | id_nbank_bad_time | string | 通过身份证查询,非银(含全部非银类型)中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 108 | id_nbank_overdue_time | string | 通过身份证查询,非银(含全部非银类型)一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 109 | id_nbank_lost_time | string | 通过身份证查询,非银(含全部非银类型)高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 110 | id_nbank_nsloan_bad_time | string | 通过身份证查询,非银-持牌网络小贷中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 111 | id_nbank_nsloan_overdue_time | string | 通过身份证查询,非银-持牌网络小贷一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 112 | id_nbank_nsloan_lost_time | string | 通过身份证查询,非银-持牌网络小贷高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 113 | id_nbank_sloan_bad_time | string | 通过身份证查询,非银-持牌小贷中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 114 | id_nbank_sloan_overdue_time | string | 通过身份证查询,非银-持牌小贷一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 115 | id_nbank_sloan_lost_time | string | 通过身份证查询,非银-持牌小贷高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 116 | id_nbank_cons_bad_time | string | 通过身份证查询,非银-持牌消费金融中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 117 | id_nbank_cons_overdue_time | string | 通过身份证查询,非银-持牌消费金融一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 118 | id_nbank_cons_lost_time | string | 通过身份证查询,非银-持牌消费金融高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 119 | id_nbank_finlea_bad_time | string | 通过身份证查询,非银-持牌融资租赁中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 120 | id_nbank_finlea_overdue_time | string | 通过身份证查询,非银-持牌融资租赁一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 121 | id_nbank_finlea_lost_time | string | 通过身份证查询,非银-持牌融资租赁高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 122 | id_nbank_autofin_bad_time | string | 通过身份证查询,非银-持牌汽车金融中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 123 | id_nbank_autofin_overdue_time | string | 通过身份证查询,非银-持牌汽车金融一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 124 | id_nbank_autofin_lost_time | string | 通过身份证查询,非银-持牌汽车金融高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 125 | id_nbank_other_bad_time | string | 通过身份证查询,非银-其他中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 126 | id_nbank_other_overdue_time | string | 通过身份证查询,非银-其他一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 127 | id_nbank_other_lost_time | string | 通过身份证查询,非银-其他高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 128 | cell_bank_bad_time | string | 通过手机号查询,银行(含信用卡)中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 129 | cell_bank_overdue_time | string | 通过手机号查询,银行(含信用卡)一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 130 | cell_bank_lost_time | string | 通过手机号查询,银行(含信用卡)高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 131 | cell_nbank_bad_time | string | 通过手机号查询,非银(含全部非银类型)中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 132 | cell_nbank_overdue_time | string | 通过手机号查询,非银(含全部非银类型)一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 133 | cell_nbank_lost_time | string | 通过手机号查询,非银(含全部非银类型)高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 134 | cell_nbank_nsloan_bad_time | string | 通过手机号查询,非银-持牌网络小贷中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 135 | cell_nbank_nsloan_overdue_time | string | 通过手机号查询,非银-持牌网络小贷一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 136 | cell_nbank_nsloan_lost_time | string | 通过手机号查询,非银-持牌网络小贷高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 137 | cell_nbank_sloan_bad_time | string | 通过手机号查询,非银-持牌小贷中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 138 | cell_nbank_sloan_overdue_time | string | 通过手机号查询,非银-持牌小贷一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 139 | cell_nbank_sloan_lost_time | string | 通过手机号查询,非银-持牌小贷高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 140 | cell_nbank_cons_bad_time | string | 通过手机号查询,非银-持牌消费金融中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 141 | cell_nbank_cons_overdue_time | string | 通过手机号查询,非银-持牌消费金融一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 142 | cell_nbank_cons_lost_time | string | 通过手机号查询,非银-持牌消费金融高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 143 | cell_nbank_finlea_bad_time | string | 通过手机号查询,非银-持牌融资租赁中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 144 | cell_nbank_finlea_overdue_time | string | 通过手机号查询,非银-持牌融资租赁一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 145 | cell_nbank_finlea_lost_time | string | 通过手机号查询,非银-持牌融资租赁高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 146 | cell_nbank_autofin_bad_time | string | 通过手机号查询,非银-持牌汽车金融中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 147 | cell_nbank_autofin_overdue_time | string | 通过手机号查询,非银-持牌汽车金融一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 148 | cell_nbank_autofin_lost_time | string | 通过手机号查询,非银-持牌汽车金融高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 149 | cell_nbank_other_bad_time | string | 通过手机号查询,非银-其他中风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 150 | cell_nbank_other_overdue_time | string | 通过手机号查询,非银-其他一般风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 151 | cell_nbank_other_lost_time | string | 通过手机号查询,非银-其他高风险距今时间 | 取“0-N”,单位:年;返回最近一次命中距查询时间 |
|
||||
| 152 | Rule_final_decision | string | 最終決策結果 | "final_weight"="0","final_decision"="Accept"(通过);"final_weight">="80","final_decision"="Reject"(拒绝);"0"<"final_weight"<"80","final_decision"="Review"(复议) |
|
||||
| 153 | Rule_final_weight | string | 最终规则评分 | 取值范围为大于0的整数 |
|
||||
| 154 | Rule_name_odr0000331 | string | 近两年命中法院失信人 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 155 | Rule_weight_odr0000331 | string | 近两年命中法院失信人权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 156 | Rule_name_odr0000332 | string | 两年前命中法院失信人 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 157 | Rule_weight_odr0000332 | string | 两年前命中法院失信人权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 158 | Rule_name_odr0000333 | string | 近两年命中法院被执行人 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 159 | Rule_weight_odr0000333 | string | 近两年命中法院被执行人权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 160 | Rule_name_odr0000334 | string | 两年前命中法院被执行人 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 161 | Rule_weight_odr0000334 | string | 两年前命中法院被执行人权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 162 | Rule_name_odr0000335 | string | 近两年命中银行高风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 163 | Rule_weight_odr0000335 | string | 近两年命中银行高风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 164 | Rule_name_odr0000336 | string | 两年前命中银行高风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 165 | Rule_weight_odr0000336 | string | 两年前命中银行高风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 166 | Rule_name_odr0000337 | string | 近两年命中银行中风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 167 | Rule_weight_odr0000337 | string | 近两年命中银行中风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 168 | Rule_name_odr0000338 | string | 两年前命中银行中风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 169 | Rule_weight_odr0000338 | string | 两年前命中银行中风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 170 | Rule_name_odr0000339 | string | 近两年命中银行一般风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 171 | Rule_weight_odr0000339 | string | 近两年命中银行一般风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 172 | Rule_name_odr0000340 | string | 两年前命中银行一般风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 173 | Rule_weight_odr0000340 | string | 两年前命中银行一般风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 174 | Rule_name_odr0000341 | string | 近两年命中非银高风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 175 | Rule_weight_odr0000341 | string | 近两年命中非银高风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 176 | Rule_name_odr0000342 | string | 两年前命中非银高风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 177 | Rule_weight_odr0000342 | string | 两年前命中非银高风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 178 | Rule_name_odr0000343 | string | 近两年命中非银中风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 179 | Rule_weight_odr0000343 | string | 近两年命中非银中风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 180 | Rule_name_odr0000344 | string | 两年前命中非银中风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 181 | Rule_weight_odr0000344 | string | 两年前命中非银中风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 182 | Rule_name_odr0000345 | string | 近两年命中非银一般风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 183 | Rule_weight_odr0000345 | string | 近两年命中非银一般风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 184 | Rule_name_odr0000346 | string | 两年前命中非银一般风险 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 185 | Rule_weight_odr0000346 | string | 两年前命中非银一般风险权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 186 | Rule_name_odr0000347 | string | 命中银行中风险次数较多 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 187 | Rule_weight_odr0000347 | string | 命中银行中风险次数较多权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 188 | Rule_name_odr0000348 | string | 命中银行一般风险次数较多 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 189 | Rule_weight_odr0000348 | string | 命中银行一般风险次数较多权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 190 | Rule_name_odr0000349 | string | 命中非银中风险次数较多 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 191 | Rule_weight_odr0000349 | string | 命中非银中风险次数较多权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 192 | Rule_name_odr0000350 | string | 命中非银一般风险次数较多 | 命中规则名称(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
| 193 | Rule_weight_odr0000350 | string | 命中非银一般风险次数较多权重 | 命中规则权重(如命中多条规则,则出现多条,odrxxxxxxx为10位规则编号) |
|
||||
|
||||
|
||||
## 参数说明
|
||||
|
||||
1. 所有参数均通过身份证号码进行查询
|
||||
2. 返回值为"空"表示未命中相关风险名单
|
||||
3. 返回值为"0"表示命中相关风险名单
|
||||
4. 部分参数涉及不同类型的金融机构风险,包括:
|
||||
- 银行(含信用卡)风险
|
||||
- 非银机构风险(包括持牌消费金融、融资租赁、汽车金融等)
|
||||
- 法院相关风险(失信人、被执行人等)
|
||||
|
||||
## 使用场景
|
||||
|
||||
该接口适用于金融机构在信贷审批、风险控制等场景中,对客户信用状况进行综合评估。
|
||||
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"result": {
|
||||
"Rule": {
|
||||
"result": {
|
||||
"final_weight": "70",
|
||||
"final_decision": "Accept"
|
||||
},
|
||||
"hit_rules": {
|
||||
"rulespeciallist_c": {
|
||||
"odr0000334": {
|
||||
"weight": "70",
|
||||
"name_rule": "两年前命中法院被执行人"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"RiskStrategy": {
|
||||
"Rule": {
|
||||
"weight": "70",
|
||||
"decision": "Accept"
|
||||
},
|
||||
"scene": "lend",
|
||||
"platform": "web",
|
||||
"strategy_id": "STR_BR0009345",
|
||||
"product_name": "预置_反欺诈规则-特殊名单验证",
|
||||
"product_type": "100099",
|
||||
"final_decision": "Accept",
|
||||
"strategy_version": "1.0"
|
||||
},
|
||||
"SpecialList_c": {
|
||||
"id": {
|
||||
"court_executed": "0",
|
||||
"court_executed_time": "3",
|
||||
"court_executed_allnum": "2"
|
||||
},
|
||||
"cell": {}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,301 +0,0 @@
|
||||
result参数说明【object】
|
||||
RiskStrategy
|
||||
object
|
||||
策略说明,详见【RiskStrategy字段说明】
|
||||
Rule
|
||||
object
|
||||
规则说明,详见【Rule字段说明】
|
||||
SpecialList_c
|
||||
object
|
||||
特殊名单结果列表,详见【SpecialList_c字段说明】
|
||||
|
||||
RiskStrategy字段说明【object】
|
||||
final_decision
|
||||
String
|
||||
最终决策结果;策略结果取决于规则 、反欺 诈风险识别、信用风险识别最终决策结果:final_decision=Accept(通过); final_decision=Reject(拒绝) ; final_decision=Review(复议);final_decision(无建议)
|
||||
platform
|
||||
String
|
||||
策略使用平台;android ,ios,web,线下
|
||||
scene
|
||||
String
|
||||
策略使用事件类型; 借款: lend ,注册: register,登录 :login,提现:cash
|
||||
product_name
|
||||
String
|
||||
策略产品名称;制定策略时 ,制定的策略产 品名称
|
||||
product_type
|
||||
String
|
||||
策略产品类型;返回对应具体编号:100081: 线上现金分期; 100082: 线下现金分期; 100084:信用卡(类信用卡) ;100085: 线 上 小 额 现 金 贷 ; 100086 : 汽 车 金 融 ; 100087:线下消费分期;100099:其他
|
||||
Rule
|
||||
object
|
||||
策略规则
|
||||
weight
|
||||
String
|
||||
规则集决策权重;取值范围为大于 0 的整数
|
||||
decision
|
||||
String
|
||||
规则集决策结果;支持客户自定义权重区间:weight=0 , decision=Accept (通 过);weight>=80 ,decision=Reject(拒 绝);0<weight<80, decision=Review(复议)
|
||||
|
||||
Rule字段说明【object】
|
||||
result
|
||||
object
|
||||
规则结果
|
||||
final_decision
|
||||
String
|
||||
最終決策結果,final_weight>=80,final_decision=Reject(拒绝); 0<final_weight<80 ,final_decision=Accept(通过)
|
||||
final_weight
|
||||
String
|
||||
最终规则评分,取值范围为大于 0 的整数
|
||||
hit_rules
|
||||
object
|
||||
命中规则
|
||||
rulespeciallist_c
|
||||
object
|
||||
详细返回
|
||||
odr0000331/...
|
||||
object
|
||||
命中规则标识 说明
|
||||
name_rule
|
||||
String
|
||||
命中规则名称
|
||||
weight
|
||||
String
|
||||
命中规则权重
|
||||
|
||||
SpecialList_c参数说明【object】
|
||||
id/cell
|
||||
object
|
||||
查询结果维度,id:身份证,cell:手机号
|
||||
court_bad
|
||||
string
|
||||
查询法院失信人,取“空/0”;0:命中,空:未命中
|
||||
court_executed
|
||||
string
|
||||
查询法院被执行人,取“空/0”;0:命中,空:未命中
|
||||
bank_bad
|
||||
string
|
||||
查询银行(含信用卡)中风险,取“空/0”;0:命中,空:未命中
|
||||
bank_overdue
|
||||
string
|
||||
查询银行(含信用卡)一般风险,取“空/0”;0:命中,空:未命中
|
||||
bank_lost
|
||||
string
|
||||
查询银行(含信用卡)高风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_bad
|
||||
string
|
||||
查询非银(含全部非银类型)中风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_overdue
|
||||
string
|
||||
查询非银(含全部非银类型)一般风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_lost
|
||||
string
|
||||
查询非银(含全部非银类型)高风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_nsloan_bad
|
||||
string
|
||||
查询非银-持牌网络小贷中风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_nsloan_overdue
|
||||
string
|
||||
查询非银-持牌网络小贷一般风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_nsloan_lost
|
||||
string
|
||||
查询非银-持牌网络小贷高风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_sloan_bad
|
||||
string
|
||||
查询非银-持牌小贷中风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_sloan_overdue
|
||||
string
|
||||
查询非银-持牌小贷一般风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_sloan_lost
|
||||
string
|
||||
查询非银-持牌小贷高风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_cons_bad
|
||||
string
|
||||
查询非银-持牌消费金融中风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_cons_overdue
|
||||
string
|
||||
查询非银-持牌消费金融一般风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_cons_lost
|
||||
string
|
||||
查询非银-持牌消费金融高风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_finlea_bad
|
||||
string
|
||||
查询非银-持牌融资租赁中风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_finlea_overdue
|
||||
string
|
||||
查询非银-持牌融资租赁一般风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_finlea_lost
|
||||
string
|
||||
查询非银-持牌融资租赁高风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_autofin_bad
|
||||
string
|
||||
查询非银-持牌汽车金融中风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_autofin_overdue
|
||||
string
|
||||
查询非银-持牌汽车金融一般风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_autofin_lost
|
||||
string
|
||||
查询非银-持牌汽车金融高风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_other_bad
|
||||
string
|
||||
查询非银-其他中风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_other_overdue
|
||||
string
|
||||
查询非银-其他一般风险,取“空/0”;0:命中,空:未命中
|
||||
nbank_other_lost
|
||||
string
|
||||
查询非银-其他高风险,取“空/0”;0:命中,空:未命中
|
||||
court_bad_allnum
|
||||
string
|
||||
查询法院失信人命中次数,取“1-N”;返回命中次数
|
||||
court_executed_allnum
|
||||
string
|
||||
查询法院被执行人命中次数,取“1-N”;返回命中次数
|
||||
bank_bad_allnum
|
||||
string
|
||||
查询银行(含信用卡)中风险命中次数,取“1-N”;返回命中次数
|
||||
bank_overdue_allnum
|
||||
string
|
||||
查询银行(含信用卡)一般风险命中次数,取“1-N”;返回命中次数
|
||||
bank_lost_allnum
|
||||
string
|
||||
查询银行(含信用卡)高风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_bad_allnum
|
||||
string
|
||||
查询非银(含全部非银类型)中风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_overdue_allnum
|
||||
string
|
||||
查询非银(含全部非银类型)一般风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_lost_allnum
|
||||
string
|
||||
查询非银(含全部非银类型)高风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_nsloan_bad_allnum
|
||||
string
|
||||
查询非银-持牌网络小贷中风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_nsloan_overdue_allnum
|
||||
string
|
||||
查询非银-持牌网络小贷一般风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_nsloan_lost_allnum
|
||||
string
|
||||
查询非银-持牌网络小贷高风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_sloan_bad_allnum
|
||||
string
|
||||
查询非银-持牌小贷中风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_sloan_overdue_allnum
|
||||
string
|
||||
查询非银-持牌小贷一般风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_sloan_lost_allnum
|
||||
string
|
||||
查询非银-持牌小贷高风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_cons_bad_allnum
|
||||
string
|
||||
查询非银-持牌消费金融中风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_cons_overdue_allnum
|
||||
string
|
||||
查询非银-持牌消费金融一般风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_cons_lost_allnum
|
||||
string
|
||||
查询非银-持牌消费金融高风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_finlea_bad_allnum
|
||||
string
|
||||
查询非银-持牌融资租赁中风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_finlea_overdue_allnum
|
||||
string
|
||||
查询非银-持牌融资租赁一般风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_finlea_lost_allnum
|
||||
string
|
||||
查询非银-持牌融资租赁高风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_autofin_bad_allnum
|
||||
string
|
||||
查询非银-持牌汽车金融中风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_autofin_overdue_allnum
|
||||
string
|
||||
查询非银-持牌汽车金融一般风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_autofin_lost_allnum
|
||||
string
|
||||
查询非银-持牌汽车金融高风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_other_bad_allnum
|
||||
string
|
||||
查询非银-其他中风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_other_overdue_allnum
|
||||
string
|
||||
查询非银-其他一般风险命中次数,取“1-N”;返回命中次数
|
||||
nbank_other_lost_allnum
|
||||
string
|
||||
查询非银-其他高风险命中次数,取“1-N”;返回命中次数
|
||||
court_bad_time
|
||||
string
|
||||
查询法院失信人距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
court_executed_time
|
||||
string
|
||||
查询法院被执行人距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
bank_bad_time
|
||||
string
|
||||
查询银行(含信用卡)中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
bank_overdue_time
|
||||
string
|
||||
查询银行(含信用卡)一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
bank_lost_time
|
||||
string
|
||||
查询银行(含信用卡)高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_bad_time
|
||||
string
|
||||
查询非银(含全部非银类型)中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_overdue_time
|
||||
string
|
||||
查询非银(含全部非银类型)一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_lost_time
|
||||
string
|
||||
查询非银(含全部非银类型)高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_nsloan_bad_time
|
||||
string
|
||||
查询非银-持牌网络小贷中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_nsloan_overdue_time
|
||||
string
|
||||
查询非银-持牌网络小贷一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_nsloan_lost_time
|
||||
string
|
||||
查询非银-持牌网络小贷高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_sloan_bad_time
|
||||
string
|
||||
查询非银-持牌小贷中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_sloan_overdue_time
|
||||
string
|
||||
查询非银-持牌小贷一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_sloan_lost_time
|
||||
string
|
||||
查询非银-持牌小贷高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_cons_bad_time
|
||||
string
|
||||
查询非银-持牌消费金融中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_cons_overdue_time
|
||||
string
|
||||
查询非银-持牌消费金融一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_cons_lost_time
|
||||
string
|
||||
查询非银-持牌消费金融高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_finlea_bad_time
|
||||
string
|
||||
查询非银-持牌融资租赁中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_finlea_overdue_time
|
||||
string
|
||||
查询非银-持牌融资租赁一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_finlea_lost_time
|
||||
string
|
||||
查询非银-持牌融资租赁高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_autofin_bad_time
|
||||
string
|
||||
查询非银-持牌汽车金融中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_autofin_overdue_time
|
||||
string
|
||||
查询非银-持牌汽车金融一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_autofin_lost_time
|
||||
string
|
||||
查询非银-持牌汽车金融高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_other_bad_time
|
||||
string
|
||||
查询非银-其他中风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_other_overdue_time
|
||||
string
|
||||
查询非银-其他一般风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
nbank_other_lost_time
|
||||
string
|
||||
查询非银-其他高风险距今时间,取“0-N”,单位:年;返回最近一次命中距查询时间
|
||||
@@ -0,0 +1,57 @@
|
||||
package jrzq
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
|
||||
"tyapi-server/internal/domains/api/dto"
|
||||
"tyapi-server/internal/domains/api/services/processors"
|
||||
"tyapi-server/internal/infrastructure/external/nuoer"
|
||||
)
|
||||
|
||||
// ProcessJRZQ5T8SRequest JRZQ5T8S API处理方法 - 借贷意向验证V22
|
||||
func ProcessJRZQ5T8SRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
|
||||
var paramsDto dto.JRZQ5T8SReq
|
||||
if err := json.Unmarshal(params, ¶msDto); err != nil {
|
||||
return nil, errors.Join(processors.ErrSystem, err)
|
||||
}
|
||||
|
||||
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
|
||||
return nil, errors.Join(processors.ErrInvalidParam, err)
|
||||
}
|
||||
|
||||
body := map[string]string{
|
||||
"name": paramsDto.Name,
|
||||
"idCard": paramsDto.IDCard,
|
||||
"mobile": paramsDto.MobileNo,
|
||||
}
|
||||
|
||||
nuoerDoCheckAPIKey := "loanRiskTagV22"
|
||||
ApiPath := "/v1/doCheck"
|
||||
|
||||
resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body)
|
||||
if err != nil {
|
||||
if errors.Is(err, nuoer.ErrDatasource) {
|
||||
return nil, errors.Join(processors.ErrDatasource, err)
|
||||
}
|
||||
if errors.Is(err, nuoer.ErrNotFound) {
|
||||
return nil, errors.Join(processors.ErrNotFound, err)
|
||||
}
|
||||
return nil, errors.Join(processors.ErrSystem, err)
|
||||
}
|
||||
|
||||
rawData, ok := resp.Data.(map[string]interface{})
|
||||
if !ok {
|
||||
return processors.MarshalRawResponse(resp.Data)
|
||||
}
|
||||
|
||||
result := mapNuoerApplyLoanToResponse(rawData)
|
||||
|
||||
respBytes, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
return nil, errors.Join(processors.ErrSystem, err)
|
||||
}
|
||||
|
||||
return respBytes, nil
|
||||
}
|
||||
@@ -1,167 +0,0 @@
|
||||
package jrzq
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMapNuoerApplyLoanToRiskScreenResponse_FromSample2JSON(t *testing.T) {
|
||||
_, filename, _, ok := runtime.Caller(0)
|
||||
if !ok {
|
||||
t.Fatal("runtime.Caller failed")
|
||||
}
|
||||
dir := filepath.Dir(filename)
|
||||
|
||||
rawBytes, err := os.ReadFile(filepath.Join(dir, "2.json"))
|
||||
if err != nil {
|
||||
t.Fatalf("read 2.json: %v", err)
|
||||
}
|
||||
|
||||
var payload map[string]interface{}
|
||||
if err := json.Unmarshal(rawBytes, &payload); err != nil {
|
||||
t.Fatalf("unmarshal 2.json: %v", err)
|
||||
}
|
||||
|
||||
got := mapNuoerApplyLoanToRiskScreenResponse(payload)
|
||||
|
||||
riskScreenV2, ok := got["risk_screen_v2"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("risk_screen_v2 type = %T, want map[string]interface{}", got["risk_screen_v2"])
|
||||
}
|
||||
|
||||
if riskScreenV2["code"] != "OK" {
|
||||
t.Fatalf("code = %v, want OK", riskScreenV2["code"])
|
||||
}
|
||||
if riskScreenV2["decision"] != "review" {
|
||||
t.Fatalf("decision = %v, want review", riskScreenV2["decision"])
|
||||
}
|
||||
if riskScreenV2["fulinHitFlag"] != 1 {
|
||||
t.Fatalf("fulinHitFlag = %v, want 1", riskScreenV2["fulinHitFlag"])
|
||||
}
|
||||
if riskScreenV2["id"] != "" {
|
||||
t.Fatalf("id = %v, want empty string", riskScreenV2["id"])
|
||||
}
|
||||
if _, ok := riskScreenV2["knowledge"].(map[string]interface{}); !ok {
|
||||
t.Fatalf("knowledge type = %T, want map[string]interface{}", riskScreenV2["knowledge"])
|
||||
}
|
||||
|
||||
variables, ok := riskScreenV2["variables"].([]map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("variables type = %T, want []map[string]interface{}", riskScreenV2["variables"])
|
||||
}
|
||||
if len(variables) != 1 {
|
||||
t.Fatalf("variables len = %d, want 1", len(variables))
|
||||
}
|
||||
if variables[0]["variableName"] != jrzq6F2AVariableName {
|
||||
t.Fatalf("variableName = %v, want %s", variables[0]["variableName"], jrzq6F2AVariableName)
|
||||
}
|
||||
|
||||
variableValue, ok := variables[0]["variableValue"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("variableValue type = %T, want map[string]interface{}", variables[0]["variableValue"])
|
||||
}
|
||||
if len(variableValue) != len(jrzq6F2AOutputKeys) {
|
||||
t.Fatalf("variableValue len = %d, want %d", len(variableValue), len(jrzq6F2AOutputKeys))
|
||||
}
|
||||
if variableValue["flag_applyloanstr"] != "1" {
|
||||
t.Fatalf("flag_applyloanstr = %v, want 1", variableValue["flag_applyloanstr"])
|
||||
}
|
||||
if variableValue["als_Flag_applyloanstr"] != "1" {
|
||||
t.Fatalf("als_Flag_applyloanstr = %v, want 1", variableValue["als_Flag_applyloanstr"])
|
||||
}
|
||||
if variableValue["code"] != "00" {
|
||||
t.Fatalf("code = %v, want 00", variableValue["code"])
|
||||
}
|
||||
if variableValue["swift_number"] != "" {
|
||||
t.Fatalf("swift_number = %v, want empty string", variableValue["swift_number"])
|
||||
}
|
||||
if variableValue["als_m12_id_nbank_allnum"] != "5" {
|
||||
t.Fatalf("als_m12_id_nbank_allnum = %v, want 5", variableValue["als_m12_id_nbank_allnum"])
|
||||
}
|
||||
if variableValue["als_m6_id_nbank_selfnum"] != "0" {
|
||||
t.Fatalf("als_m6_id_nbank_selfnum = %v, want 0", variableValue["als_m6_id_nbank_selfnum"])
|
||||
}
|
||||
if variableValue["als_d7_id_nbank_allnum"] != "" {
|
||||
t.Fatalf("als_d7_id_nbank_allnum = %v, want empty string", variableValue["als_d7_id_nbank_allnum"])
|
||||
}
|
||||
if _, exists := variableValue["Rule_final_decision"]; exists {
|
||||
t.Fatal("Rule_final_decision should not appear in variableValue")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMapNuoerApplyLoanToRiskScreenResponse_AlignsWithTargetStructure(t *testing.T) {
|
||||
_, filename, _, ok := runtime.Caller(0)
|
||||
if !ok {
|
||||
t.Fatal("runtime.Caller failed")
|
||||
}
|
||||
dir := filepath.Dir(filename)
|
||||
|
||||
rawBytes, err := os.ReadFile(filepath.Join(dir, "2.json"))
|
||||
if err != nil {
|
||||
t.Fatalf("read 2.json: %v", err)
|
||||
}
|
||||
targetBytes, err := os.ReadFile(filepath.Join(dir, "目标结构.json"))
|
||||
if err != nil {
|
||||
t.Fatalf("read 目标结构.json: %v", err)
|
||||
}
|
||||
|
||||
var payload map[string]interface{}
|
||||
if err := json.Unmarshal(rawBytes, &payload); err != nil {
|
||||
t.Fatalf("unmarshal 2.json: %v", err)
|
||||
}
|
||||
var target map[string]interface{}
|
||||
if err := json.Unmarshal(targetBytes, &target); err != nil {
|
||||
t.Fatalf("unmarshal 目标结构.json: %v", err)
|
||||
}
|
||||
|
||||
gotVV := mapNuoerApplyLoanToRiskScreenResponse(payload)["risk_screen_v2"].(map[string]interface{})["variables"].([]map[string]interface{})[0]["variableValue"].(map[string]interface{})
|
||||
targetVV := target["risk_screen_v2"].(map[string]interface{})["variables"].([]interface{})[0].(map[string]interface{})["variableValue"].(map[string]interface{})
|
||||
|
||||
for key, want := range targetVV {
|
||||
gotVal, exists := gotVV[key]
|
||||
if !exists {
|
||||
t.Fatalf("missing key %s", key)
|
||||
}
|
||||
if stringifyVal(gotVal) != stringifyVal(want) {
|
||||
t.Fatalf("%s = %v, want %v", key, gotVal, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMapNuoerApplyLoanToRiskScreenResponse_EmptyData(t *testing.T) {
|
||||
got := mapNuoerApplyLoanToRiskScreenResponse(map[string]interface{}{})
|
||||
|
||||
riskScreenV2 := got["risk_screen_v2"].(map[string]interface{})
|
||||
variables := riskScreenV2["variables"].([]map[string]interface{})
|
||||
variableValue := variables[0]["variableValue"].(map[string]interface{})
|
||||
|
||||
if len(variableValue) != len(jrzq6F2AOutputKeys) {
|
||||
t.Fatalf("variableValue len = %d, want %d", len(variableValue), len(jrzq6F2AOutputKeys))
|
||||
}
|
||||
if variableValue["flag_applyloanstr"] != "0" {
|
||||
t.Fatalf("flag_applyloanstr = %v, want 0", variableValue["flag_applyloanstr"])
|
||||
}
|
||||
if variableValue["als_Flag_applyloanstr"] != "0" {
|
||||
t.Fatalf("als_Flag_applyloanstr = %v, want 0", variableValue["als_Flag_applyloanstr"])
|
||||
}
|
||||
if variableValue["code"] != "" {
|
||||
t.Fatalf("code = %v, want empty string", variableValue["code"])
|
||||
}
|
||||
for _, key := range jrzq6F2AOutputKeys {
|
||||
if key == "flag_applyloanstr" || key == "als_Flag_applyloanstr" {
|
||||
continue
|
||||
}
|
||||
if stringifyVal(variableValue[key]) != "" {
|
||||
t.Fatalf("%s = %v, want empty string", key, variableValue[key])
|
||||
}
|
||||
}
|
||||
if riskScreenV2["fulinHitFlag"] != 0 {
|
||||
t.Fatalf("fulinHitFlag = %v, want 0", riskScreenV2["fulinHitFlag"])
|
||||
}
|
||||
if riskScreenV2["decision"] != "" {
|
||||
t.Fatalf("decision = %v, want empty string", riskScreenV2["decision"])
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
package jrzq
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMapNuoerSpecialListToResponse_FromTSMD2JSON(t *testing.T) {
|
||||
_, filename, _, ok := runtime.Caller(0)
|
||||
if !ok {
|
||||
t.Fatal("runtime.Caller failed")
|
||||
}
|
||||
dir := filepath.Dir(filename)
|
||||
|
||||
rawBytes, err := os.ReadFile(filepath.Join(dir, "TSMD2.json"))
|
||||
if err != nil {
|
||||
t.Fatalf("read TSMD2.json: %v", err)
|
||||
}
|
||||
|
||||
var payload map[string]interface{}
|
||||
if err := json.Unmarshal(rawBytes, &payload); err != nil {
|
||||
t.Fatalf("unmarshal TSMD2.json: %v", err)
|
||||
}
|
||||
|
||||
got := mapNuoerSpecialListToResponse(payload)
|
||||
|
||||
idData, ok := got["id"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("id type = %T, want map[string]interface{}", got["id"])
|
||||
}
|
||||
assertStringField(t, idData, "court_executed", "0")
|
||||
assertStringField(t, idData, "court_executed_time", "3")
|
||||
assertStringField(t, idData, "court_executed_allnum", "2")
|
||||
|
||||
if _, exists := got["cell"]; exists {
|
||||
t.Fatal("cell should be omitted when empty")
|
||||
}
|
||||
|
||||
assertStringField(t, got, "Rule_final_decision", "Accept")
|
||||
assertStringField(t, got, "Rule_final_weight", "70")
|
||||
assertStringField(t, got, "Rule_name_odr0000334", "两年前命中法院被执行人")
|
||||
assertStringField(t, got, "Rule_weight_odr0000334", "70")
|
||||
|
||||
if _, exists := got["SpecialList_c"]; exists {
|
||||
t.Fatal("SpecialList_c should not appear in transformed response")
|
||||
}
|
||||
if _, exists := got["RiskStrategy"]; exists {
|
||||
t.Fatal("RiskStrategy should not appear in transformed response")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMapNuoerSpecialListToResponse_FromTSMD1JSONShape(t *testing.T) {
|
||||
_, filename, _, ok := runtime.Caller(0)
|
||||
if !ok {
|
||||
t.Fatal("runtime.Caller failed")
|
||||
}
|
||||
dir := filepath.Dir(filename)
|
||||
|
||||
rawBytes, err := os.ReadFile(filepath.Join(dir, "TSMD1.json"))
|
||||
if err != nil {
|
||||
t.Fatalf("read TSMD1.json: %v", err)
|
||||
}
|
||||
|
||||
var want map[string]interface{}
|
||||
if err := json.Unmarshal(rawBytes, &want); err != nil {
|
||||
t.Fatalf("unmarshal TSMD1.json: %v", err)
|
||||
}
|
||||
|
||||
got := mapNuoerSpecialListToResponse(want)
|
||||
assertMapFields(t, got, want)
|
||||
}
|
||||
|
||||
func assertMapFields(t *testing.T, got, want map[string]interface{}) {
|
||||
t.Helper()
|
||||
for key, wantVal := range want {
|
||||
gotVal, exists := got[key]
|
||||
if !exists {
|
||||
t.Fatalf("missing key %q", key)
|
||||
}
|
||||
wantMap, wantIsMap := wantVal.(map[string]interface{})
|
||||
gotMap, gotIsMap := gotVal.(map[string]interface{})
|
||||
if wantIsMap {
|
||||
if !gotIsMap {
|
||||
t.Fatalf("key %q type = %T, want map[string]interface{}", key, gotVal)
|
||||
}
|
||||
assertMapFields(t, gotMap, wantMap)
|
||||
continue
|
||||
}
|
||||
if stringifyVal(gotVal) != stringifyVal(wantVal) {
|
||||
t.Fatalf("key %q = %v, want %v", key, gotVal, wantVal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func assertStringField(t *testing.T, data map[string]interface{}, key, want string) {
|
||||
t.Helper()
|
||||
got, ok := data[key].(string)
|
||||
if !ok {
|
||||
t.Fatalf("key %q type = %T, want string", key, data[key])
|
||||
}
|
||||
if got != want {
|
||||
t.Fatalf("key %q = %q, want %q", key, got, want)
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package jrzq
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestMapNuoerLoanRiskTagV23ToResponse_RenamesTCContentsKeys(t *testing.T) {
|
||||
raw := map[string]interface{}{
|
||||
"result": map[string]interface{}{
|
||||
"score": "750",
|
||||
"reason": "ok",
|
||||
"contents": map[string]interface{}{
|
||||
"TC_Q016_q20": "1.5",
|
||||
"TC_A001": "3",
|
||||
"BH_A002": "2",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
got := mapNuoerLoanRiskTagV23ToResponse(raw)
|
||||
|
||||
if got["score"] != "750" {
|
||||
t.Fatalf("score = %v, want 750", got["score"])
|
||||
}
|
||||
contents, ok := got["contents"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("contents type = %T, want map[string]interface{}", got["contents"])
|
||||
}
|
||||
if contents["BH_A001"] != "3" {
|
||||
t.Fatalf("BH_A001 = %v, want 3", contents["BH_A001"])
|
||||
}
|
||||
if contents["BH_A002"] != "2" {
|
||||
t.Fatalf("BH_A002 = %v, want 2", contents["BH_A002"])
|
||||
}
|
||||
if _, exists := contents["TC_Q016_q20"]; exists {
|
||||
t.Fatal("TC_Q016_q20 should be renamed")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package jrzq
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
|
||||
"tyapi-server/internal/domains/api/dto"
|
||||
"tyapi-server/internal/domains/api/services/processors"
|
||||
"tyapi-server/internal/infrastructure/external/nuoer"
|
||||
)
|
||||
|
||||
// ProcessJRZQT57ZRequest JRZQT57Z API处理方法 - 团伙欺诈风险识别
|
||||
func ProcessJRZQT57ZRequest(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
|
||||
var paramsDto dto.JRZQT57ZReq
|
||||
if err := json.Unmarshal(params, ¶msDto); err != nil {
|
||||
return nil, errors.Join(processors.ErrSystem, err)
|
||||
}
|
||||
|
||||
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
|
||||
return nil, errors.Join(processors.ErrInvalidParam, err)
|
||||
}
|
||||
|
||||
body := map[string]string{
|
||||
"name": paramsDto.Name,
|
||||
"idCard": paramsDto.IDCard,
|
||||
"mobile": paramsDto.MobileNo,
|
||||
}
|
||||
|
||||
nuoerDoCheckAPIKey := "idRelationRisk"
|
||||
ApiPath := "/v1/doCheck"
|
||||
|
||||
resp, err := deps.NuoerService.CallAPI(ctx, nuoerDoCheckAPIKey, ApiPath, body)
|
||||
if err != nil {
|
||||
if errors.Is(err, nuoer.ErrDatasource) {
|
||||
return nil, errors.Join(processors.ErrDatasource, err)
|
||||
}
|
||||
if errors.Is(err, nuoer.ErrNotFound) {
|
||||
return nil, errors.Join(processors.ErrNotFound, err)
|
||||
}
|
||||
return nil, errors.Join(processors.ErrSystem, err)
|
||||
}
|
||||
|
||||
rawData, ok := resp.Data.(map[string]interface{})
|
||||
if !ok {
|
||||
return processors.MarshalRawResponse(resp.Data)
|
||||
}
|
||||
|
||||
result := mapNuoerApplyLoanToResponse(rawData)
|
||||
|
||||
respBytes, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
return nil, errors.Join(processors.ErrSystem, err)
|
||||
}
|
||||
|
||||
return respBytes, nil
|
||||
}
|
||||
@@ -1,848 +0,0 @@
|
||||
{
|
||||
"risk_screen_v2": {
|
||||
"code": "OK",
|
||||
"decision": "accept",
|
||||
"fulinHitFlag": 1,
|
||||
"id": "",
|
||||
"knowledge": {},
|
||||
"message": "业务处理成功!",
|
||||
"models": [],
|
||||
"propertyValidations": [],
|
||||
"scenes": [],
|
||||
"strategies": [],
|
||||
"validateInfo": {
|
||||
"productCodes": []
|
||||
},
|
||||
"variables": [
|
||||
{
|
||||
"variableName": "bairong_applyloan_extend",
|
||||
"variableValue": {
|
||||
"als_Flag_applyloanstr": "1",
|
||||
"als_d15_cell_af_allnum": "",
|
||||
"als_d15_cell_af_orgnum": "",
|
||||
"als_d15_cell_bank_allnum": "",
|
||||
"als_d15_cell_bank_night_allnum": "",
|
||||
"als_d15_cell_bank_night_orgnum": "",
|
||||
"als_d15_cell_bank_orgnum": "",
|
||||
"als_d15_cell_bank_ret_allnum": "",
|
||||
"als_d15_cell_bank_ret_orgnum": "",
|
||||
"als_d15_cell_bank_selfnum": "",
|
||||
"als_d15_cell_bank_tra_allnum": "",
|
||||
"als_d15_cell_bank_tra_orgnum": "",
|
||||
"als_d15_cell_bank_week_allnum": "",
|
||||
"als_d15_cell_bank_week_orgnum": "",
|
||||
"als_d15_cell_caoff_allnum": "1",
|
||||
"als_d15_cell_caoff_orgnum": "1",
|
||||
"als_d15_cell_caon_allnum": "",
|
||||
"als_d15_cell_caon_orgnum": "",
|
||||
"als_d15_cell_cooff_allnum": "",
|
||||
"als_d15_cell_cooff_orgnum": "",
|
||||
"als_d15_cell_coon_allnum": "2",
|
||||
"als_d15_cell_coon_orgnum": "2",
|
||||
"als_d15_cell_nbank_allnum": "2",
|
||||
"als_d15_cell_nbank_autofin_allnum": "",
|
||||
"als_d15_cell_nbank_autofin_orgnum": "",
|
||||
"als_d15_cell_nbank_ca_allnum": "1",
|
||||
"als_d15_cell_nbank_ca_orgnum": "1",
|
||||
"als_d15_cell_nbank_cf_allnum": "",
|
||||
"als_d15_cell_nbank_cf_orgnum": "",
|
||||
"als_d15_cell_nbank_com_allnum": "",
|
||||
"als_d15_cell_nbank_com_orgnum": "",
|
||||
"als_d15_cell_nbank_cons_allnum": "",
|
||||
"als_d15_cell_nbank_cons_orgnum": "",
|
||||
"als_d15_cell_nbank_else_allnum": "1",
|
||||
"als_d15_cell_nbank_else_orgnum": "1",
|
||||
"als_d15_cell_nbank_finlea_allnum": "1",
|
||||
"als_d15_cell_nbank_finlea_orgnum": "1",
|
||||
"als_d15_cell_nbank_mc_allnum": "",
|
||||
"als_d15_cell_nbank_mc_orgnum": "",
|
||||
"als_d15_cell_nbank_night_allnum": "0",
|
||||
"als_d15_cell_nbank_night_orgnum": "0",
|
||||
"als_d15_cell_nbank_nsloan_allnum": "",
|
||||
"als_d15_cell_nbank_nsloan_orgnum": "",
|
||||
"als_d15_cell_nbank_orgnum": "2",
|
||||
"als_d15_cell_nbank_oth_allnum": "1",
|
||||
"als_d15_cell_nbank_oth_orgnum": "1",
|
||||
"als_d15_cell_nbank_p2p_allnum": "",
|
||||
"als_d15_cell_nbank_p2p_orgnum": "",
|
||||
"als_d15_cell_nbank_selfnum": "0",
|
||||
"als_d15_cell_nbank_sloan_allnum": "",
|
||||
"als_d15_cell_nbank_sloan_orgnum": "",
|
||||
"als_d15_cell_nbank_week_allnum": "0",
|
||||
"als_d15_cell_nbank_week_orgnum": "0",
|
||||
"als_d15_cell_oth_allnum": "",
|
||||
"als_d15_cell_oth_orgnum": "",
|
||||
"als_d15_cell_pdl_allnum": "",
|
||||
"als_d15_cell_pdl_orgnum": "",
|
||||
"als_d15_cell_rel_allnum": "",
|
||||
"als_d15_cell_rel_orgnum": "",
|
||||
"als_d15_id_af_allnum": "",
|
||||
"als_d15_id_af_orgnum": "",
|
||||
"als_d15_id_bank_allnum": "",
|
||||
"als_d15_id_bank_night_allnum": "",
|
||||
"als_d15_id_bank_night_orgnum": "",
|
||||
"als_d15_id_bank_orgnum": "",
|
||||
"als_d15_id_bank_ret_allnum": "",
|
||||
"als_d15_id_bank_ret_orgnum": "",
|
||||
"als_d15_id_bank_selfnum": "",
|
||||
"als_d15_id_bank_tra_allnum": "",
|
||||
"als_d15_id_bank_tra_orgnum": "",
|
||||
"als_d15_id_bank_week_allnum": "",
|
||||
"als_d15_id_bank_week_orgnum": "",
|
||||
"als_d15_id_caoff_allnum": "1",
|
||||
"als_d15_id_caoff_orgnum": "1",
|
||||
"als_d15_id_caon_allnum": "",
|
||||
"als_d15_id_caon_orgnum": "",
|
||||
"als_d15_id_cooff_allnum": "",
|
||||
"als_d15_id_cooff_orgnum": "",
|
||||
"als_d15_id_coon_allnum": "2",
|
||||
"als_d15_id_coon_orgnum": "2",
|
||||
"als_d15_id_nbank_allnum": "2",
|
||||
"als_d15_id_nbank_autofin_allnum": "",
|
||||
"als_d15_id_nbank_autofin_orgnum": "",
|
||||
"als_d15_id_nbank_ca_allnum": "1",
|
||||
"als_d15_id_nbank_ca_orgnum": "1",
|
||||
"als_d15_id_nbank_cf_allnum": "",
|
||||
"als_d15_id_nbank_cf_orgnum": "",
|
||||
"als_d15_id_nbank_com_allnum": "",
|
||||
"als_d15_id_nbank_com_orgnum": "",
|
||||
"als_d15_id_nbank_cons_allnum": "",
|
||||
"als_d15_id_nbank_cons_orgnum": "",
|
||||
"als_d15_id_nbank_else_allnum": "1",
|
||||
"als_d15_id_nbank_else_orgnum": "1",
|
||||
"als_d15_id_nbank_finlea_allnum": "1",
|
||||
"als_d15_id_nbank_finlea_orgnum": "1",
|
||||
"als_d15_id_nbank_mc_allnum": "",
|
||||
"als_d15_id_nbank_mc_orgnum": "",
|
||||
"als_d15_id_nbank_night_allnum": "0",
|
||||
"als_d15_id_nbank_night_orgnum": "0",
|
||||
"als_d15_id_nbank_nsloan_allnum": "",
|
||||
"als_d15_id_nbank_nsloan_orgnum": "",
|
||||
"als_d15_id_nbank_orgnum": "2",
|
||||
"als_d15_id_nbank_oth_allnum": "1",
|
||||
"als_d15_id_nbank_oth_orgnum": "1",
|
||||
"als_d15_id_nbank_p2p_allnum": "",
|
||||
"als_d15_id_nbank_p2p_orgnum": "",
|
||||
"als_d15_id_nbank_selfnum": "0",
|
||||
"als_d15_id_nbank_sloan_allnum": "",
|
||||
"als_d15_id_nbank_sloan_orgnum": "",
|
||||
"als_d15_id_nbank_week_allnum": "0",
|
||||
"als_d15_id_nbank_week_orgnum": "0",
|
||||
"als_d15_id_oth_allnum": "",
|
||||
"als_d15_id_oth_orgnum": "",
|
||||
"als_d15_id_pdl_allnum": "",
|
||||
"als_d15_id_pdl_orgnum": "",
|
||||
"als_d15_id_rel_allnum": "",
|
||||
"als_d15_id_rel_orgnum": "",
|
||||
"als_d7_cell_af_allnum": "",
|
||||
"als_d7_cell_af_orgnum": "",
|
||||
"als_d7_cell_bank_allnum": "",
|
||||
"als_d7_cell_bank_night_allnum": "",
|
||||
"als_d7_cell_bank_night_orgnum": "",
|
||||
"als_d7_cell_bank_orgnum": "",
|
||||
"als_d7_cell_bank_ret_allnum": "",
|
||||
"als_d7_cell_bank_ret_orgnum": "",
|
||||
"als_d7_cell_bank_selfnum": "",
|
||||
"als_d7_cell_bank_tra_allnum": "",
|
||||
"als_d7_cell_bank_tra_orgnum": "",
|
||||
"als_d7_cell_bank_week_allnum": "",
|
||||
"als_d7_cell_bank_week_orgnum": "",
|
||||
"als_d7_cell_caoff_allnum": "",
|
||||
"als_d7_cell_caoff_orgnum": "",
|
||||
"als_d7_cell_caon_allnum": "",
|
||||
"als_d7_cell_caon_orgnum": "",
|
||||
"als_d7_cell_cooff_allnum": "",
|
||||
"als_d7_cell_cooff_orgnum": "",
|
||||
"als_d7_cell_coon_allnum": "",
|
||||
"als_d7_cell_coon_orgnum": "",
|
||||
"als_d7_cell_nbank_allnum": "",
|
||||
"als_d7_cell_nbank_autofin_allnum": "",
|
||||
"als_d7_cell_nbank_autofin_orgnum": "",
|
||||
"als_d7_cell_nbank_ca_allnum": "",
|
||||
"als_d7_cell_nbank_ca_orgnum": "",
|
||||
"als_d7_cell_nbank_cf_allnum": "",
|
||||
"als_d7_cell_nbank_cf_orgnum": "",
|
||||
"als_d7_cell_nbank_com_allnum": "",
|
||||
"als_d7_cell_nbank_com_orgnum": "",
|
||||
"als_d7_cell_nbank_cons_allnum": "",
|
||||
"als_d7_cell_nbank_cons_orgnum": "",
|
||||
"als_d7_cell_nbank_else_allnum": "",
|
||||
"als_d7_cell_nbank_else_orgnum": "",
|
||||
"als_d7_cell_nbank_finlea_allnum": "",
|
||||
"als_d7_cell_nbank_finlea_orgnum": "",
|
||||
"als_d7_cell_nbank_mc_allnum": "",
|
||||
"als_d7_cell_nbank_mc_orgnum": "",
|
||||
"als_d7_cell_nbank_night_allnum": "",
|
||||
"als_d7_cell_nbank_night_orgnum": "",
|
||||
"als_d7_cell_nbank_nsloan_allnum": "",
|
||||
"als_d7_cell_nbank_nsloan_orgnum": "",
|
||||
"als_d7_cell_nbank_orgnum": "",
|
||||
"als_d7_cell_nbank_oth_allnum": "",
|
||||
"als_d7_cell_nbank_oth_orgnum": "",
|
||||
"als_d7_cell_nbank_p2p_allnum": "",
|
||||
"als_d7_cell_nbank_p2p_orgnum": "",
|
||||
"als_d7_cell_nbank_selfnum": "",
|
||||
"als_d7_cell_nbank_sloan_allnum": "",
|
||||
"als_d7_cell_nbank_sloan_orgnum": "",
|
||||
"als_d7_cell_nbank_week_allnum": "",
|
||||
"als_d7_cell_nbank_week_orgnum": "",
|
||||
"als_d7_cell_oth_allnum": "",
|
||||
"als_d7_cell_oth_orgnum": "",
|
||||
"als_d7_cell_pdl_allnum": "",
|
||||
"als_d7_cell_pdl_orgnum": "",
|
||||
"als_d7_cell_rel_allnum": "",
|
||||
"als_d7_cell_rel_orgnum": "",
|
||||
"als_d7_id_af_allnum": "",
|
||||
"als_d7_id_af_orgnum": "",
|
||||
"als_d7_id_bank_allnum": "",
|
||||
"als_d7_id_bank_night_allnum": "",
|
||||
"als_d7_id_bank_night_orgnum": "",
|
||||
"als_d7_id_bank_orgnum": "",
|
||||
"als_d7_id_bank_ret_allnum": "",
|
||||
"als_d7_id_bank_ret_orgnum": "",
|
||||
"als_d7_id_bank_selfnum": "",
|
||||
"als_d7_id_bank_tra_allnum": "",
|
||||
"als_d7_id_bank_tra_orgnum": "",
|
||||
"als_d7_id_bank_week_allnum": "",
|
||||
"als_d7_id_bank_week_orgnum": "",
|
||||
"als_d7_id_caoff_allnum": "",
|
||||
"als_d7_id_caoff_orgnum": "",
|
||||
"als_d7_id_caon_allnum": "",
|
||||
"als_d7_id_caon_orgnum": "",
|
||||
"als_d7_id_cooff_allnum": "",
|
||||
"als_d7_id_cooff_orgnum": "",
|
||||
"als_d7_id_coon_allnum": "",
|
||||
"als_d7_id_coon_orgnum": "",
|
||||
"als_d7_id_nbank_allnum": "",
|
||||
"als_d7_id_nbank_autofin_allnum": "",
|
||||
"als_d7_id_nbank_autofin_orgnum": "",
|
||||
"als_d7_id_nbank_ca_allnum": "",
|
||||
"als_d7_id_nbank_ca_orgnum": "",
|
||||
"als_d7_id_nbank_cf_allnum": "",
|
||||
"als_d7_id_nbank_cf_orgnum": "",
|
||||
"als_d7_id_nbank_com_allnum": "",
|
||||
"als_d7_id_nbank_com_orgnum": "",
|
||||
"als_d7_id_nbank_cons_allnum": "",
|
||||
"als_d7_id_nbank_cons_orgnum": "",
|
||||
"als_d7_id_nbank_else_allnum": "",
|
||||
"als_d7_id_nbank_else_orgnum": "",
|
||||
"als_d7_id_nbank_finlea_allnum": "",
|
||||
"als_d7_id_nbank_finlea_orgnum": "",
|
||||
"als_d7_id_nbank_mc_allnum": "",
|
||||
"als_d7_id_nbank_mc_orgnum": "",
|
||||
"als_d7_id_nbank_night_allnum": "",
|
||||
"als_d7_id_nbank_night_orgnum": "",
|
||||
"als_d7_id_nbank_nsloan_allnum": "",
|
||||
"als_d7_id_nbank_nsloan_orgnum": "",
|
||||
"als_d7_id_nbank_orgnum": "",
|
||||
"als_d7_id_nbank_oth_allnum": "",
|
||||
"als_d7_id_nbank_oth_orgnum": "",
|
||||
"als_d7_id_nbank_p2p_allnum": "",
|
||||
"als_d7_id_nbank_p2p_orgnum": "",
|
||||
"als_d7_id_nbank_selfnum": "",
|
||||
"als_d7_id_nbank_sloan_allnum": "",
|
||||
"als_d7_id_nbank_sloan_orgnum": "",
|
||||
"als_d7_id_nbank_week_allnum": "",
|
||||
"als_d7_id_nbank_week_orgnum": "",
|
||||
"als_d7_id_oth_allnum": "",
|
||||
"als_d7_id_oth_orgnum": "",
|
||||
"als_d7_id_pdl_allnum": "",
|
||||
"als_d7_id_pdl_orgnum": "",
|
||||
"als_d7_id_rel_allnum": "",
|
||||
"als_d7_id_rel_orgnum": "",
|
||||
"als_fst_cell_bank_inteday": "",
|
||||
"als_fst_cell_nbank_inteday": "220",
|
||||
"als_fst_id_bank_inteday": "",
|
||||
"als_fst_id_nbank_inteday": "220",
|
||||
"als_lst_cell_bank_consnum": "",
|
||||
"als_lst_cell_bank_csinteday": "",
|
||||
"als_lst_cell_bank_inteday": "",
|
||||
"als_lst_cell_nbank_consnum": "1",
|
||||
"als_lst_cell_nbank_csinteday": "1",
|
||||
"als_lst_cell_nbank_inteday": "15",
|
||||
"als_lst_id_bank_consnum": "",
|
||||
"als_lst_id_bank_csinteday": "",
|
||||
"als_lst_id_bank_inteday": "",
|
||||
"als_lst_id_nbank_consnum": "1",
|
||||
"als_lst_id_nbank_csinteday": "1",
|
||||
"als_lst_id_nbank_inteday": "15",
|
||||
"als_m12_cell_af_allnum": "",
|
||||
"als_m12_cell_af_orgnum": "",
|
||||
"als_m12_cell_avg_monnum": "2.50",
|
||||
"als_m12_cell_bank_allnum": "",
|
||||
"als_m12_cell_bank_avg_monnum": "",
|
||||
"als_m12_cell_bank_max_inteday": "",
|
||||
"als_m12_cell_bank_max_monnum": "",
|
||||
"als_m12_cell_bank_min_inteday": "",
|
||||
"als_m12_cell_bank_min_monnum": "",
|
||||
"als_m12_cell_bank_night_allnum": "",
|
||||
"als_m12_cell_bank_night_orgnum": "",
|
||||
"als_m12_cell_bank_orgnum": "",
|
||||
"als_m12_cell_bank_ret_allnum": "",
|
||||
"als_m12_cell_bank_ret_orgnum": "",
|
||||
"als_m12_cell_bank_selfnum": "",
|
||||
"als_m12_cell_bank_tot_mons": "",
|
||||
"als_m12_cell_bank_tra_allnum": "",
|
||||
"als_m12_cell_bank_tra_orgnum": "",
|
||||
"als_m12_cell_bank_week_allnum": "",
|
||||
"als_m12_cell_bank_week_orgnum": "",
|
||||
"als_m12_cell_caoff_allnum": "2",
|
||||
"als_m12_cell_caoff_orgnum": "1",
|
||||
"als_m12_cell_caon_allnum": "1",
|
||||
"als_m12_cell_caon_orgnum": "1",
|
||||
"als_m12_cell_cooff_allnum": "",
|
||||
"als_m12_cell_cooff_orgnum": "",
|
||||
"als_m12_cell_coon_allnum": "9",
|
||||
"als_m12_cell_coon_orgnum": "3",
|
||||
"als_m12_cell_max_inteday": "198",
|
||||
"als_m12_cell_max_monnum": "4",
|
||||
"als_m12_cell_min_inteday": "0",
|
||||
"als_m12_cell_min_monnum": "0",
|
||||
"als_m12_cell_nbank_allnum": "5",
|
||||
"als_m12_cell_nbank_autofin_allnum": "",
|
||||
"als_m12_cell_nbank_autofin_orgnum": "",
|
||||
"als_m12_cell_nbank_avg_monnum": "2.50",
|
||||
"als_m12_cell_nbank_ca_allnum": "2",
|
||||
"als_m12_cell_nbank_ca_orgnum": "1",
|
||||
"als_m12_cell_nbank_cf_allnum": "",
|
||||
"als_m12_cell_nbank_cf_orgnum": "",
|
||||
"als_m12_cell_nbank_com_allnum": "",
|
||||
"als_m12_cell_nbank_com_orgnum": "",
|
||||
"als_m12_cell_nbank_cons_allnum": "",
|
||||
"als_m12_cell_nbank_cons_orgnum": "",
|
||||
"als_m12_cell_nbank_else_allnum": "3",
|
||||
"als_m12_cell_nbank_else_orgnum": "3",
|
||||
"als_m12_cell_nbank_finlea_allnum": "2",
|
||||
"als_m12_cell_nbank_finlea_orgnum": "1",
|
||||
"als_m12_cell_nbank_max_inteday": "198",
|
||||
"als_m12_cell_nbank_max_monnum": "4",
|
||||
"als_m12_cell_nbank_mc_allnum": "",
|
||||
"als_m12_cell_nbank_mc_orgnum": "",
|
||||
"als_m12_cell_nbank_min_inteday": "0",
|
||||
"als_m12_cell_nbank_min_monnum": "0",
|
||||
"als_m12_cell_nbank_night_allnum": "0",
|
||||
"als_m12_cell_nbank_night_orgnum": "0",
|
||||
"als_m12_cell_nbank_nsloan_allnum": "",
|
||||
"als_m12_cell_nbank_nsloan_orgnum": "",
|
||||
"als_m12_cell_nbank_orgnum": "4",
|
||||
"als_m12_cell_nbank_oth_allnum": "3",
|
||||
"als_m12_cell_nbank_oth_orgnum": "3",
|
||||
"als_m12_cell_nbank_p2p_allnum": "",
|
||||
"als_m12_cell_nbank_p2p_orgnum": "",
|
||||
"als_m12_cell_nbank_selfnum": "0",
|
||||
"als_m12_cell_nbank_sloan_allnum": "",
|
||||
"als_m12_cell_nbank_sloan_orgnum": "",
|
||||
"als_m12_cell_nbank_tot_mons": "2",
|
||||
"als_m12_cell_nbank_week_allnum": "0",
|
||||
"als_m12_cell_nbank_week_orgnum": "0",
|
||||
"als_m12_cell_oth_allnum": "",
|
||||
"als_m12_cell_oth_orgnum": "",
|
||||
"als_m12_cell_pdl_allnum": "",
|
||||
"als_m12_cell_pdl_orgnum": "",
|
||||
"als_m12_cell_rel_allnum": "",
|
||||
"als_m12_cell_rel_orgnum": "",
|
||||
"als_m12_cell_tot_mons": "2",
|
||||
"als_m12_id_af_allnum": "",
|
||||
"als_m12_id_af_orgnum": "",
|
||||
"als_m12_id_avg_monnum": "2.50",
|
||||
"als_m12_id_bank_allnum": "",
|
||||
"als_m12_id_bank_avg_monnum": "",
|
||||
"als_m12_id_bank_max_inteday": "",
|
||||
"als_m12_id_bank_max_monnum": "",
|
||||
"als_m12_id_bank_min_inteday": "",
|
||||
"als_m12_id_bank_min_monnum": "",
|
||||
"als_m12_id_bank_night_allnum": "",
|
||||
"als_m12_id_bank_night_orgnum": "",
|
||||
"als_m12_id_bank_orgnum": "",
|
||||
"als_m12_id_bank_ret_allnum": "",
|
||||
"als_m12_id_bank_ret_orgnum": "",
|
||||
"als_m12_id_bank_selfnum": "",
|
||||
"als_m12_id_bank_tot_mons": "",
|
||||
"als_m12_id_bank_tra_allnum": "",
|
||||
"als_m12_id_bank_tra_orgnum": "",
|
||||
"als_m12_id_bank_week_allnum": "",
|
||||
"als_m12_id_bank_week_orgnum": "",
|
||||
"als_m12_id_caoff_allnum": "2",
|
||||
"als_m12_id_caoff_orgnum": "1",
|
||||
"als_m12_id_caon_allnum": "1",
|
||||
"als_m12_id_caon_orgnum": "1",
|
||||
"als_m12_id_cooff_allnum": "",
|
||||
"als_m12_id_cooff_orgnum": "",
|
||||
"als_m12_id_coon_allnum": "11",
|
||||
"als_m12_id_coon_orgnum": "3",
|
||||
"als_m12_id_max_inteday": "198",
|
||||
"als_m12_id_max_monnum": "4",
|
||||
"als_m12_id_min_inteday": "0",
|
||||
"als_m12_id_min_monnum": "0",
|
||||
"als_m12_id_nbank_allnum": "5",
|
||||
"als_m12_id_nbank_autofin_allnum": "",
|
||||
"als_m12_id_nbank_autofin_orgnum": "",
|
||||
"als_m12_id_nbank_avg_monnum": "2.50",
|
||||
"als_m12_id_nbank_ca_allnum": "2",
|
||||
"als_m12_id_nbank_ca_orgnum": "1",
|
||||
"als_m12_id_nbank_cf_allnum": "",
|
||||
"als_m12_id_nbank_cf_orgnum": "",
|
||||
"als_m12_id_nbank_com_allnum": "",
|
||||
"als_m12_id_nbank_com_orgnum": "",
|
||||
"als_m12_id_nbank_cons_allnum": "",
|
||||
"als_m12_id_nbank_cons_orgnum": "",
|
||||
"als_m12_id_nbank_else_allnum": "3",
|
||||
"als_m12_id_nbank_else_orgnum": "3",
|
||||
"als_m12_id_nbank_finlea_allnum": "2",
|
||||
"als_m12_id_nbank_finlea_orgnum": "1",
|
||||
"als_m12_id_nbank_max_inteday": "198",
|
||||
"als_m12_id_nbank_max_monnum": "4",
|
||||
"als_m12_id_nbank_mc_allnum": "",
|
||||
"als_m12_id_nbank_mc_orgnum": "",
|
||||
"als_m12_id_nbank_min_inteday": "0",
|
||||
"als_m12_id_nbank_min_monnum": "0",
|
||||
"als_m12_id_nbank_night_allnum": "0",
|
||||
"als_m12_id_nbank_night_orgnum": "0",
|
||||
"als_m12_id_nbank_nsloan_allnum": "",
|
||||
"als_m12_id_nbank_nsloan_orgnum": "",
|
||||
"als_m12_id_nbank_orgnum": "4",
|
||||
"als_m12_id_nbank_oth_allnum": "3",
|
||||
"als_m12_id_nbank_oth_orgnum": "3",
|
||||
"als_m12_id_nbank_p2p_allnum": "",
|
||||
"als_m12_id_nbank_p2p_orgnum": "",
|
||||
"als_m12_id_nbank_selfnum": "0",
|
||||
"als_m12_id_nbank_sloan_allnum": "",
|
||||
"als_m12_id_nbank_sloan_orgnum": "",
|
||||
"als_m12_id_nbank_tot_mons": "2",
|
||||
"als_m12_id_nbank_week_allnum": "0",
|
||||
"als_m12_id_nbank_week_orgnum": "0",
|
||||
"als_m12_id_oth_allnum": "",
|
||||
"als_m12_id_oth_orgnum": "",
|
||||
"als_m12_id_pdl_allnum": "",
|
||||
"als_m12_id_pdl_orgnum": "",
|
||||
"als_m12_id_rel_allnum": "",
|
||||
"als_m12_id_rel_orgnum": "",
|
||||
"als_m12_id_tot_mons": "2",
|
||||
"als_m1_cell_af_allnum": "",
|
||||
"als_m1_cell_af_orgnum": "",
|
||||
"als_m1_cell_bank_allnum": "",
|
||||
"als_m1_cell_bank_night_allnum": "",
|
||||
"als_m1_cell_bank_night_orgnum": "",
|
||||
"als_m1_cell_bank_orgnum": "",
|
||||
"als_m1_cell_bank_ret_allnum": "",
|
||||
"als_m1_cell_bank_ret_orgnum": "",
|
||||
"als_m1_cell_bank_selfnum": "",
|
||||
"als_m1_cell_bank_tra_allnum": "",
|
||||
"als_m1_cell_bank_tra_orgnum": "",
|
||||
"als_m1_cell_bank_week_allnum": "",
|
||||
"als_m1_cell_bank_week_orgnum": "",
|
||||
"als_m1_cell_caoff_allnum": "2",
|
||||
"als_m1_cell_caoff_orgnum": "1",
|
||||
"als_m1_cell_caon_allnum": "",
|
||||
"als_m1_cell_caon_orgnum": "",
|
||||
"als_m1_cell_cooff_allnum": "",
|
||||
"als_m1_cell_cooff_orgnum": "",
|
||||
"als_m1_cell_coon_allnum": "4",
|
||||
"als_m1_cell_coon_orgnum": "3",
|
||||
"als_m1_cell_nbank_allnum": "4",
|
||||
"als_m1_cell_nbank_autofin_allnum": "",
|
||||
"als_m1_cell_nbank_autofin_orgnum": "",
|
||||
"als_m1_cell_nbank_ca_allnum": "2",
|
||||
"als_m1_cell_nbank_ca_orgnum": "1",
|
||||
"als_m1_cell_nbank_cf_allnum": "",
|
||||
"als_m1_cell_nbank_cf_orgnum": "",
|
||||
"als_m1_cell_nbank_com_allnum": "",
|
||||
"als_m1_cell_nbank_com_orgnum": "",
|
||||
"als_m1_cell_nbank_cons_allnum": "",
|
||||
"als_m1_cell_nbank_cons_orgnum": "",
|
||||
"als_m1_cell_nbank_else_allnum": "2",
|
||||
"als_m1_cell_nbank_else_orgnum": "2",
|
||||
"als_m1_cell_nbank_finlea_allnum": "2",
|
||||
"als_m1_cell_nbank_finlea_orgnum": "1",
|
||||
"als_m1_cell_nbank_mc_allnum": "",
|
||||
"als_m1_cell_nbank_mc_orgnum": "",
|
||||
"als_m1_cell_nbank_night_allnum": "0",
|
||||
"als_m1_cell_nbank_night_orgnum": "0",
|
||||
"als_m1_cell_nbank_nsloan_allnum": "",
|
||||
"als_m1_cell_nbank_nsloan_orgnum": "",
|
||||
"als_m1_cell_nbank_orgnum": "3",
|
||||
"als_m1_cell_nbank_oth_allnum": "2",
|
||||
"als_m1_cell_nbank_oth_orgnum": "2",
|
||||
"als_m1_cell_nbank_p2p_allnum": "",
|
||||
"als_m1_cell_nbank_p2p_orgnum": "",
|
||||
"als_m1_cell_nbank_selfnum": "0",
|
||||
"als_m1_cell_nbank_sloan_allnum": "",
|
||||
"als_m1_cell_nbank_sloan_orgnum": "",
|
||||
"als_m1_cell_nbank_week_allnum": "0",
|
||||
"als_m1_cell_nbank_week_orgnum": "0",
|
||||
"als_m1_cell_oth_allnum": "",
|
||||
"als_m1_cell_oth_orgnum": "",
|
||||
"als_m1_cell_pdl_allnum": "",
|
||||
"als_m1_cell_pdl_orgnum": "",
|
||||
"als_m1_cell_rel_allnum": "",
|
||||
"als_m1_cell_rel_orgnum": "",
|
||||
"als_m1_id_af_allnum": "",
|
||||
"als_m1_id_af_orgnum": "",
|
||||
"als_m1_id_bank_allnum": "",
|
||||
"als_m1_id_bank_night_allnum": "",
|
||||
"als_m1_id_bank_night_orgnum": "",
|
||||
"als_m1_id_bank_orgnum": "",
|
||||
"als_m1_id_bank_ret_allnum": "",
|
||||
"als_m1_id_bank_ret_orgnum": "",
|
||||
"als_m1_id_bank_selfnum": "",
|
||||
"als_m1_id_bank_tra_allnum": "",
|
||||
"als_m1_id_bank_tra_orgnum": "",
|
||||
"als_m1_id_bank_week_allnum": "",
|
||||
"als_m1_id_bank_week_orgnum": "",
|
||||
"als_m1_id_caoff_allnum": "2",
|
||||
"als_m1_id_caoff_orgnum": "1",
|
||||
"als_m1_id_caon_allnum": "",
|
||||
"als_m1_id_caon_orgnum": "",
|
||||
"als_m1_id_cooff_allnum": "",
|
||||
"als_m1_id_cooff_orgnum": "",
|
||||
"als_m1_id_coon_allnum": "4",
|
||||
"als_m1_id_coon_orgnum": "3",
|
||||
"als_m1_id_nbank_allnum": "4",
|
||||
"als_m1_id_nbank_autofin_allnum": "",
|
||||
"als_m1_id_nbank_autofin_orgnum": "",
|
||||
"als_m1_id_nbank_ca_allnum": "2",
|
||||
"als_m1_id_nbank_ca_orgnum": "1",
|
||||
"als_m1_id_nbank_cf_allnum": "",
|
||||
"als_m1_id_nbank_cf_orgnum": "",
|
||||
"als_m1_id_nbank_com_allnum": "",
|
||||
"als_m1_id_nbank_com_orgnum": "",
|
||||
"als_m1_id_nbank_cons_allnum": "",
|
||||
"als_m1_id_nbank_cons_orgnum": "",
|
||||
"als_m1_id_nbank_else_allnum": "2",
|
||||
"als_m1_id_nbank_else_orgnum": "2",
|
||||
"als_m1_id_nbank_finlea_allnum": "2",
|
||||
"als_m1_id_nbank_finlea_orgnum": "1",
|
||||
"als_m1_id_nbank_mc_allnum": "",
|
||||
"als_m1_id_nbank_mc_orgnum": "",
|
||||
"als_m1_id_nbank_night_allnum": "0",
|
||||
"als_m1_id_nbank_night_orgnum": "0",
|
||||
"als_m1_id_nbank_nsloan_allnum": "",
|
||||
"als_m1_id_nbank_nsloan_orgnum": "",
|
||||
"als_m1_id_nbank_orgnum": "3",
|
||||
"als_m1_id_nbank_oth_allnum": "2",
|
||||
"als_m1_id_nbank_oth_orgnum": "2",
|
||||
"als_m1_id_nbank_p2p_allnum": "",
|
||||
"als_m1_id_nbank_p2p_orgnum": "",
|
||||
"als_m1_id_nbank_selfnum": "0",
|
||||
"als_m1_id_nbank_sloan_allnum": "",
|
||||
"als_m1_id_nbank_sloan_orgnum": "",
|
||||
"als_m1_id_nbank_week_allnum": "0",
|
||||
"als_m1_id_nbank_week_orgnum": "0",
|
||||
"als_m1_id_oth_allnum": "",
|
||||
"als_m1_id_oth_orgnum": "",
|
||||
"als_m1_id_pdl_allnum": "",
|
||||
"als_m1_id_pdl_orgnum": "",
|
||||
"als_m1_id_rel_allnum": "",
|
||||
"als_m1_id_rel_orgnum": "",
|
||||
"als_m3_cell_af_allnum": "",
|
||||
"als_m3_cell_af_orgnum": "",
|
||||
"als_m3_cell_avg_monnum": "4.00",
|
||||
"als_m3_cell_bank_allnum": "",
|
||||
"als_m3_cell_bank_avg_monnum": "",
|
||||
"als_m3_cell_bank_max_inteday": "",
|
||||
"als_m3_cell_bank_max_monnum": "",
|
||||
"als_m3_cell_bank_min_inteday": "",
|
||||
"als_m3_cell_bank_min_monnum": "",
|
||||
"als_m3_cell_bank_night_allnum": "",
|
||||
"als_m3_cell_bank_night_orgnum": "",
|
||||
"als_m3_cell_bank_orgnum": "",
|
||||
"als_m3_cell_bank_ret_allnum": "",
|
||||
"als_m3_cell_bank_ret_orgnum": "",
|
||||
"als_m3_cell_bank_selfnum": "",
|
||||
"als_m3_cell_bank_tot_mons": "",
|
||||
"als_m3_cell_bank_tra_allnum": "",
|
||||
"als_m3_cell_bank_tra_orgnum": "",
|
||||
"als_m3_cell_bank_week_allnum": "",
|
||||
"als_m3_cell_bank_week_orgnum": "",
|
||||
"als_m3_cell_caoff_allnum": "2",
|
||||
"als_m3_cell_caoff_orgnum": "1",
|
||||
"als_m3_cell_caon_allnum": "",
|
||||
"als_m3_cell_caon_orgnum": "",
|
||||
"als_m3_cell_cooff_allnum": "",
|
||||
"als_m3_cell_cooff_orgnum": "",
|
||||
"als_m3_cell_coon_allnum": "6",
|
||||
"als_m3_cell_coon_orgnum": "3",
|
||||
"als_m3_cell_max_inteday": "7",
|
||||
"als_m3_cell_max_monnum": "4",
|
||||
"als_m3_cell_min_inteday": "0",
|
||||
"als_m3_cell_min_monnum": "0",
|
||||
"als_m3_cell_nbank_allnum": "4",
|
||||
"als_m3_cell_nbank_autofin_allnum": "",
|
||||
"als_m3_cell_nbank_autofin_orgnum": "",
|
||||
"als_m3_cell_nbank_avg_monnum": "4.00",
|
||||
"als_m3_cell_nbank_ca_allnum": "2",
|
||||
"als_m3_cell_nbank_ca_orgnum": "1",
|
||||
"als_m3_cell_nbank_cf_allnum": "",
|
||||
"als_m3_cell_nbank_cf_orgnum": "",
|
||||
"als_m3_cell_nbank_com_allnum": "",
|
||||
"als_m3_cell_nbank_com_orgnum": "",
|
||||
"als_m3_cell_nbank_cons_allnum": "",
|
||||
"als_m3_cell_nbank_cons_orgnum": "",
|
||||
"als_m3_cell_nbank_else_allnum": "2",
|
||||
"als_m3_cell_nbank_else_orgnum": "2",
|
||||
"als_m3_cell_nbank_finlea_allnum": "2",
|
||||
"als_m3_cell_nbank_finlea_orgnum": "1",
|
||||
"als_m3_cell_nbank_max_inteday": "7",
|
||||
"als_m3_cell_nbank_max_monnum": "4",
|
||||
"als_m3_cell_nbank_mc_allnum": "",
|
||||
"als_m3_cell_nbank_mc_orgnum": "",
|
||||
"als_m3_cell_nbank_min_inteday": "0",
|
||||
"als_m3_cell_nbank_min_monnum": "0",
|
||||
"als_m3_cell_nbank_night_allnum": "0",
|
||||
"als_m3_cell_nbank_night_orgnum": "0",
|
||||
"als_m3_cell_nbank_nsloan_allnum": "",
|
||||
"als_m3_cell_nbank_nsloan_orgnum": "",
|
||||
"als_m3_cell_nbank_orgnum": "3",
|
||||
"als_m3_cell_nbank_oth_allnum": "2",
|
||||
"als_m3_cell_nbank_oth_orgnum": "2",
|
||||
"als_m3_cell_nbank_p2p_allnum": "",
|
||||
"als_m3_cell_nbank_p2p_orgnum": "",
|
||||
"als_m3_cell_nbank_selfnum": "0",
|
||||
"als_m3_cell_nbank_sloan_allnum": "",
|
||||
"als_m3_cell_nbank_sloan_orgnum": "",
|
||||
"als_m3_cell_nbank_tot_mons": "1",
|
||||
"als_m3_cell_nbank_week_allnum": "0",
|
||||
"als_m3_cell_nbank_week_orgnum": "0",
|
||||
"als_m3_cell_oth_allnum": "",
|
||||
"als_m3_cell_oth_orgnum": "",
|
||||
"als_m3_cell_pdl_allnum": "",
|
||||
"als_m3_cell_pdl_orgnum": "",
|
||||
"als_m3_cell_rel_allnum": "",
|
||||
"als_m3_cell_rel_orgnum": "",
|
||||
"als_m3_cell_tot_mons": "1",
|
||||
"als_m3_id_af_allnum": "",
|
||||
"als_m3_id_af_orgnum": "",
|
||||
"als_m3_id_avg_monnum": "4.00",
|
||||
"als_m3_id_bank_allnum": "",
|
||||
"als_m3_id_bank_avg_monnum": "",
|
||||
"als_m3_id_bank_max_inteday": "",
|
||||
"als_m3_id_bank_max_monnum": "",
|
||||
"als_m3_id_bank_min_inteday": "",
|
||||
"als_m3_id_bank_min_monnum": "",
|
||||
"als_m3_id_bank_night_allnum": "",
|
||||
"als_m3_id_bank_night_orgnum": "",
|
||||
"als_m3_id_bank_orgnum": "",
|
||||
"als_m3_id_bank_ret_allnum": "",
|
||||
"als_m3_id_bank_ret_orgnum": "",
|
||||
"als_m3_id_bank_selfnum": "",
|
||||
"als_m3_id_bank_tot_mons": "",
|
||||
"als_m3_id_bank_tra_allnum": "",
|
||||
"als_m3_id_bank_tra_orgnum": "",
|
||||
"als_m3_id_bank_week_allnum": "",
|
||||
"als_m3_id_bank_week_orgnum": "",
|
||||
"als_m3_id_caoff_allnum": "2",
|
||||
"als_m3_id_caoff_orgnum": "1",
|
||||
"als_m3_id_caon_allnum": "",
|
||||
"als_m3_id_caon_orgnum": "",
|
||||
"als_m3_id_cooff_allnum": "",
|
||||
"als_m3_id_cooff_orgnum": "",
|
||||
"als_m3_id_coon_allnum": "6",
|
||||
"als_m3_id_coon_orgnum": "3",
|
||||
"als_m3_id_max_inteday": "7",
|
||||
"als_m3_id_max_monnum": "4",
|
||||
"als_m3_id_min_inteday": "0",
|
||||
"als_m3_id_min_monnum": "0",
|
||||
"als_m3_id_nbank_allnum": "4",
|
||||
"als_m3_id_nbank_autofin_allnum": "",
|
||||
"als_m3_id_nbank_autofin_orgnum": "",
|
||||
"als_m3_id_nbank_avg_monnum": "4.00",
|
||||
"als_m3_id_nbank_ca_allnum": "2",
|
||||
"als_m3_id_nbank_ca_orgnum": "1",
|
||||
"als_m3_id_nbank_cf_allnum": "",
|
||||
"als_m3_id_nbank_cf_orgnum": "",
|
||||
"als_m3_id_nbank_com_allnum": "",
|
||||
"als_m3_id_nbank_com_orgnum": "",
|
||||
"als_m3_id_nbank_cons_allnum": "",
|
||||
"als_m3_id_nbank_cons_orgnum": "",
|
||||
"als_m3_id_nbank_else_allnum": "2",
|
||||
"als_m3_id_nbank_else_orgnum": "2",
|
||||
"als_m3_id_nbank_finlea_allnum": "2",
|
||||
"als_m3_id_nbank_finlea_orgnum": "1",
|
||||
"als_m3_id_nbank_max_inteday": "7",
|
||||
"als_m3_id_nbank_max_monnum": "4",
|
||||
"als_m3_id_nbank_mc_allnum": "",
|
||||
"als_m3_id_nbank_mc_orgnum": "",
|
||||
"als_m3_id_nbank_min_inteday": "0",
|
||||
"als_m3_id_nbank_min_monnum": "0",
|
||||
"als_m3_id_nbank_night_allnum": "0",
|
||||
"als_m3_id_nbank_night_orgnum": "0",
|
||||
"als_m3_id_nbank_nsloan_allnum": "",
|
||||
"als_m3_id_nbank_nsloan_orgnum": "",
|
||||
"als_m3_id_nbank_orgnum": "3",
|
||||
"als_m3_id_nbank_oth_allnum": "2",
|
||||
"als_m3_id_nbank_oth_orgnum": "2",
|
||||
"als_m3_id_nbank_p2p_allnum": "",
|
||||
"als_m3_id_nbank_p2p_orgnum": "",
|
||||
"als_m3_id_nbank_selfnum": "0",
|
||||
"als_m3_id_nbank_sloan_allnum": "",
|
||||
"als_m3_id_nbank_sloan_orgnum": "",
|
||||
"als_m3_id_nbank_tot_mons": "1",
|
||||
"als_m3_id_nbank_week_allnum": "0",
|
||||
"als_m3_id_nbank_week_orgnum": "0",
|
||||
"als_m3_id_oth_allnum": "",
|
||||
"als_m3_id_oth_orgnum": "",
|
||||
"als_m3_id_pdl_allnum": "",
|
||||
"als_m3_id_pdl_orgnum": "",
|
||||
"als_m3_id_rel_allnum": "",
|
||||
"als_m3_id_rel_orgnum": "",
|
||||
"als_m3_id_tot_mons": "1",
|
||||
"als_m6_cell_af_allnum": "",
|
||||
"als_m6_cell_af_orgnum": "",
|
||||
"als_m6_cell_avg_monnum": "4.00",
|
||||
"als_m6_cell_bank_allnum": "",
|
||||
"als_m6_cell_bank_avg_monnum": "",
|
||||
"als_m6_cell_bank_max_inteday": "",
|
||||
"als_m6_cell_bank_max_monnum": "",
|
||||
"als_m6_cell_bank_min_inteday": "",
|
||||
"als_m6_cell_bank_min_monnum": "",
|
||||
"als_m6_cell_bank_night_allnum": "",
|
||||
"als_m6_cell_bank_night_orgnum": "",
|
||||
"als_m6_cell_bank_orgnum": "",
|
||||
"als_m6_cell_bank_ret_allnum": "",
|
||||
"als_m6_cell_bank_ret_orgnum": "",
|
||||
"als_m6_cell_bank_selfnum": "",
|
||||
"als_m6_cell_bank_tot_mons": "",
|
||||
"als_m6_cell_bank_tra_allnum": "",
|
||||
"als_m6_cell_bank_tra_orgnum": "",
|
||||
"als_m6_cell_bank_week_allnum": "",
|
||||
"als_m6_cell_bank_week_orgnum": "",
|
||||
"als_m6_cell_caoff_allnum": "2",
|
||||
"als_m6_cell_caoff_orgnum": "1",
|
||||
"als_m6_cell_caon_allnum": "",
|
||||
"als_m6_cell_caon_orgnum": "",
|
||||
"als_m6_cell_cooff_allnum": "",
|
||||
"als_m6_cell_cooff_orgnum": "",
|
||||
"als_m6_cell_coon_allnum": "7",
|
||||
"als_m6_cell_coon_orgnum": "3",
|
||||
"als_m6_cell_max_inteday": "7",
|
||||
"als_m6_cell_max_monnum": "4",
|
||||
"als_m6_cell_min_inteday": "0",
|
||||
"als_m6_cell_min_monnum": "0",
|
||||
"als_m6_cell_nbank_allnum": "4",
|
||||
"als_m6_cell_nbank_autofin_allnum": "",
|
||||
"als_m6_cell_nbank_autofin_orgnum": "",
|
||||
"als_m6_cell_nbank_avg_monnum": "4.00",
|
||||
"als_m6_cell_nbank_ca_allnum": "2",
|
||||
"als_m6_cell_nbank_ca_orgnum": "1",
|
||||
"als_m6_cell_nbank_cf_allnum": "",
|
||||
"als_m6_cell_nbank_cf_orgnum": "",
|
||||
"als_m6_cell_nbank_com_allnum": "",
|
||||
"als_m6_cell_nbank_com_orgnum": "",
|
||||
"als_m6_cell_nbank_cons_allnum": "",
|
||||
"als_m6_cell_nbank_cons_orgnum": "",
|
||||
"als_m6_cell_nbank_else_allnum": "2",
|
||||
"als_m6_cell_nbank_else_orgnum": "2",
|
||||
"als_m6_cell_nbank_finlea_allnum": "2",
|
||||
"als_m6_cell_nbank_finlea_orgnum": "1",
|
||||
"als_m6_cell_nbank_max_inteday": "7",
|
||||
"als_m6_cell_nbank_max_monnum": "4",
|
||||
"als_m6_cell_nbank_mc_allnum": "",
|
||||
"als_m6_cell_nbank_mc_orgnum": "",
|
||||
"als_m6_cell_nbank_min_inteday": "0",
|
||||
"als_m6_cell_nbank_min_monnum": "0",
|
||||
"als_m6_cell_nbank_night_allnum": "0",
|
||||
"als_m6_cell_nbank_night_orgnum": "0",
|
||||
"als_m6_cell_nbank_nsloan_allnum": "",
|
||||
"als_m6_cell_nbank_nsloan_orgnum": "",
|
||||
"als_m6_cell_nbank_orgnum": "3",
|
||||
"als_m6_cell_nbank_oth_allnum": "2",
|
||||
"als_m6_cell_nbank_oth_orgnum": "2",
|
||||
"als_m6_cell_nbank_p2p_allnum": "",
|
||||
"als_m6_cell_nbank_p2p_orgnum": "",
|
||||
"als_m6_cell_nbank_selfnum": "0",
|
||||
"als_m6_cell_nbank_sloan_allnum": "",
|
||||
"als_m6_cell_nbank_sloan_orgnum": "",
|
||||
"als_m6_cell_nbank_tot_mons": "1",
|
||||
"als_m6_cell_nbank_week_allnum": "0",
|
||||
"als_m6_cell_nbank_week_orgnum": "0",
|
||||
"als_m6_cell_oth_allnum": "",
|
||||
"als_m6_cell_oth_orgnum": "",
|
||||
"als_m6_cell_pdl_allnum": "",
|
||||
"als_m6_cell_pdl_orgnum": "",
|
||||
"als_m6_cell_rel_allnum": "",
|
||||
"als_m6_cell_rel_orgnum": "",
|
||||
"als_m6_cell_tot_mons": "1",
|
||||
"als_m6_id_af_allnum": "",
|
||||
"als_m6_id_af_orgnum": "",
|
||||
"als_m6_id_avg_monnum": "4.00",
|
||||
"als_m6_id_bank_allnum": "",
|
||||
"als_m6_id_bank_avg_monnum": "",
|
||||
"als_m6_id_bank_max_inteday": "",
|
||||
"als_m6_id_bank_max_monnum": "",
|
||||
"als_m6_id_bank_min_inteday": "",
|
||||
"als_m6_id_bank_min_monnum": "",
|
||||
"als_m6_id_bank_night_allnum": "",
|
||||
"als_m6_id_bank_night_orgnum": "",
|
||||
"als_m6_id_bank_orgnum": "",
|
||||
"als_m6_id_bank_ret_allnum": "",
|
||||
"als_m6_id_bank_ret_orgnum": "",
|
||||
"als_m6_id_bank_selfnum": "",
|
||||
"als_m6_id_bank_tot_mons": "",
|
||||
"als_m6_id_bank_tra_allnum": "",
|
||||
"als_m6_id_bank_tra_orgnum": "",
|
||||
"als_m6_id_bank_week_allnum": "",
|
||||
"als_m6_id_bank_week_orgnum": "",
|
||||
"als_m6_id_caoff_allnum": "2",
|
||||
"als_m6_id_caoff_orgnum": "1",
|
||||
"als_m6_id_caon_allnum": "",
|
||||
"als_m6_id_caon_orgnum": "",
|
||||
"als_m6_id_cooff_allnum": "",
|
||||
"als_m6_id_cooff_orgnum": "",
|
||||
"als_m6_id_coon_allnum": "8",
|
||||
"als_m6_id_coon_orgnum": "3",
|
||||
"als_m6_id_max_inteday": "7",
|
||||
"als_m6_id_max_monnum": "4",
|
||||
"als_m6_id_min_inteday": "0",
|
||||
"als_m6_id_min_monnum": "0",
|
||||
"als_m6_id_nbank_allnum": "4",
|
||||
"als_m6_id_nbank_autofin_allnum": "",
|
||||
"als_m6_id_nbank_autofin_orgnum": "",
|
||||
"als_m6_id_nbank_avg_monnum": "4.00",
|
||||
"als_m6_id_nbank_ca_allnum": "2",
|
||||
"als_m6_id_nbank_ca_orgnum": "1",
|
||||
"als_m6_id_nbank_cf_allnum": "",
|
||||
"als_m6_id_nbank_cf_orgnum": "",
|
||||
"als_m6_id_nbank_com_allnum": "",
|
||||
"als_m6_id_nbank_com_orgnum": "",
|
||||
"als_m6_id_nbank_cons_allnum": "",
|
||||
"als_m6_id_nbank_cons_orgnum": "",
|
||||
"als_m6_id_nbank_else_allnum": "2",
|
||||
"als_m6_id_nbank_else_orgnum": "2",
|
||||
"als_m6_id_nbank_finlea_allnum": "2",
|
||||
"als_m6_id_nbank_finlea_orgnum": "1",
|
||||
"als_m6_id_nbank_max_inteday": "7",
|
||||
"als_m6_id_nbank_max_monnum": "4",
|
||||
"als_m6_id_nbank_mc_allnum": "",
|
||||
"als_m6_id_nbank_mc_orgnum": "",
|
||||
"als_m6_id_nbank_min_inteday": "0",
|
||||
"als_m6_id_nbank_min_monnum": "0",
|
||||
"als_m6_id_nbank_night_allnum": "0",
|
||||
"als_m6_id_nbank_night_orgnum": "0",
|
||||
"als_m6_id_nbank_nsloan_allnum": "",
|
||||
"als_m6_id_nbank_nsloan_orgnum": "",
|
||||
"als_m6_id_nbank_orgnum": "3",
|
||||
"als_m6_id_nbank_oth_allnum": "2",
|
||||
"als_m6_id_nbank_oth_orgnum": "2",
|
||||
"als_m6_id_nbank_p2p_allnum": "",
|
||||
"als_m6_id_nbank_p2p_orgnum": "",
|
||||
"als_m6_id_nbank_selfnum": "0",
|
||||
"als_m6_id_nbank_sloan_allnum": "",
|
||||
"als_m6_id_nbank_sloan_orgnum": "",
|
||||
"als_m6_id_nbank_tot_mons": "1",
|
||||
"als_m6_id_nbank_week_allnum": "0",
|
||||
"als_m6_id_nbank_week_orgnum": "0",
|
||||
"als_m6_id_oth_allnum": "",
|
||||
"als_m6_id_oth_orgnum": "",
|
||||
"als_m6_id_pdl_allnum": "",
|
||||
"als_m6_id_pdl_orgnum": "",
|
||||
"als_m6_id_rel_allnum": "",
|
||||
"als_m6_id_rel_orgnum": "",
|
||||
"als_m6_id_tot_mons": "1",
|
||||
"code": "00",
|
||||
"flag_applyloanstr": "1",
|
||||
"swift_number": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,32 +0,0 @@
|
||||
package processors
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestWhitelistShouldReturnEmpty_PerAPICode(t *testing.T) {
|
||||
ctx := WithWhitelistContext(context.Background(), []WhitelistMatch{
|
||||
{ID: "1", APICodes: []string{"FLXG0V4B"}},
|
||||
})
|
||||
|
||||
if !WhitelistShouldReturnEmpty(ctx, "FLXG0V4B") {
|
||||
t.Fatal("FLXG0V4B should hit")
|
||||
}
|
||||
if WhitelistShouldReturnEmpty(ctx, "JRZQ8A2D") {
|
||||
t.Fatal("JRZQ8A2D should not hit entry scoped to FLXG0V4B")
|
||||
}
|
||||
}
|
||||
|
||||
func TestWhitelistShouldReturnEmpty_WildcardMatchesAnyAPICode(t *testing.T) {
|
||||
ctx := WithWhitelistContext(context.Background(), []WhitelistMatch{
|
||||
{ID: "1", APICodes: []string{"*"}},
|
||||
})
|
||||
|
||||
if !WhitelistShouldReturnEmpty(ctx, "QYGL8261") {
|
||||
t.Fatal("wildcard should match any api_code in ctx")
|
||||
}
|
||||
if !WhitelistShouldReturnEmpty(ctx, "YYSY8B1C") {
|
||||
t.Fatal("wildcard should match mobile-only api_code when in ctx")
|
||||
}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"tyapi-server/internal/domains/api/entities"
|
||||
)
|
||||
|
||||
func TestNormalizeIDCard(t *testing.T) {
|
||||
if got := NormalizeIDCard("13032319930128263x"); got != "13032319930128263X" {
|
||||
t.Fatalf("expected uppercase X, got %s", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMaskIDCard(t *testing.T) {
|
||||
masked := MaskIDCard("350681198611130611")
|
||||
if masked != "350681********0611" {
|
||||
t.Fatalf("unexpected mask: %s", masked)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExtractIdentityParams(t *testing.T) {
|
||||
params := map[string]interface{}{
|
||||
"id_card": "350681198611130611",
|
||||
"name": "张三",
|
||||
}
|
||||
identity := ExtractIdentityParams(params)
|
||||
if !identity.OK || identity.Name != "张三" {
|
||||
t.Fatalf("unexpected identity: %+v", identity)
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueryWhitelistEntry_Matches(t *testing.T) {
|
||||
entry := &entities.QueryWhitelistEntry{
|
||||
UserID: entities.QueryWhitelistGlobalUserID,
|
||||
Name: entities.QueryWhitelistWildcardName,
|
||||
APICodes: entities.APICodeList{"FLXG0V4B"},
|
||||
Status: entities.QueryWhitelistStatusEnabled,
|
||||
}
|
||||
|
||||
if !entry.MatchesAPICode("FLXG0V4B") {
|
||||
t.Fatal("should match api code")
|
||||
}
|
||||
if entry.MatchesAPICode("JRZQ8A2D") {
|
||||
t.Fatal("should not match other api code")
|
||||
}
|
||||
if !entry.MatchesName("任意姓名") {
|
||||
t.Fatal("wildcard name should match any name")
|
||||
}
|
||||
|
||||
strict := &entities.QueryWhitelistEntry{
|
||||
Name: "李四",
|
||||
}
|
||||
if strict.MatchesName("李四") == false || strict.MatchesName("张三") {
|
||||
t.Fatal("strict name matching failed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueryWhitelistEntry_GlobalWildcardAPICodes(t *testing.T) {
|
||||
entry := &entities.QueryWhitelistEntry{
|
||||
APICodes: entities.APICodeList{"*"},
|
||||
}
|
||||
if !entry.MatchesAPICode("ANY_CODE") {
|
||||
t.Fatal("* should match any api code")
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"tyapi-server/internal/domains/api/entities"
|
||||
"tyapi-server/internal/domains/api/services/processors"
|
||||
)
|
||||
|
||||
func TestRequiresIdentityInput_FLXG0V4B(t *testing.T) {
|
||||
svc := NewFormConfigServiceWithoutDependencies()
|
||||
if !svc.RequiresIdentityInput(context.Background(), "FLXG0V4B") {
|
||||
t.Fatal("FLXG0V4B should require id_card")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequiresIdentityInput_EnterpriseAPI(t *testing.T) {
|
||||
svc := NewFormConfigServiceWithoutDependencies()
|
||||
// QYGL8261 等企业类接口通常不要求 id_card 必填
|
||||
if svc.RequiresIdentityInput(context.Background(), "QYGL8261") {
|
||||
t.Fatal("QYGL8261 should not require id_card")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRequiresIdentityInput_COMB(t *testing.T) {
|
||||
svc := NewFormConfigServiceWithoutDependencies()
|
||||
if !svc.RequiresIdentityInput(context.Background(), "COMBXXXX") {
|
||||
t.Fatal("COMB should be eligible when params contain id_card")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnrichContext_WildcardAppliesToConfiguredAPICodesInProcessor(t *testing.T) {
|
||||
idCard := "350681198611130611"
|
||||
hash := HashIDCard(idCard)
|
||||
svc := newTestQueryWhitelistService(&mockQueryWhitelistRepo{
|
||||
entries: []*entities.QueryWhitelistEntry{
|
||||
{
|
||||
ID: "1",
|
||||
UserID: entities.QueryWhitelistGlobalUserID,
|
||||
Name: entities.QueryWhitelistWildcardName,
|
||||
IDCardHash: hash,
|
||||
APICodes: entities.APICodeList{"*"},
|
||||
Status: entities.QueryWhitelistStatusEnabled,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
params := map[string]interface{}{"id_card": idCard, "name": "张三"}
|
||||
ctx := svc.EnrichContext(context.Background(), "user-a", params)
|
||||
if !processors.WhitelistShouldReturnEmpty(ctx, "YYSY8B1C") {
|
||||
t.Fatal("processor layer should honor wildcard api_codes from ctx")
|
||||
}
|
||||
}
|
||||
@@ -1,172 +0,0 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"tyapi-server/internal/domains/api/entities"
|
||||
"tyapi-server/internal/domains/api/repositories"
|
||||
"tyapi-server/internal/domains/api/services/processors"
|
||||
"tyapi-server/internal/shared/interfaces"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type mockQueryWhitelistRepo struct {
|
||||
entries []*entities.QueryWhitelistEntry
|
||||
}
|
||||
|
||||
func (m *mockQueryWhitelistRepo) Create(ctx context.Context, entry *entities.QueryWhitelistEntry) error {
|
||||
return nil
|
||||
}
|
||||
func (m *mockQueryWhitelistRepo) Update(ctx context.Context, entry *entities.QueryWhitelistEntry) error {
|
||||
return nil
|
||||
}
|
||||
func (m *mockQueryWhitelistRepo) Delete(ctx context.Context, id string) error { return nil }
|
||||
func (m *mockQueryWhitelistRepo) FindByID(ctx context.Context, id string) (*entities.QueryWhitelistEntry, error) {
|
||||
return nil, nil
|
||||
}
|
||||
func (m *mockQueryWhitelistRepo) List(ctx context.Context, filters map[string]interface{}, options interfaces.ListOptions) ([]*entities.QueryWhitelistEntry, int64, error) {
|
||||
return nil, 0, nil
|
||||
}
|
||||
func (m *mockQueryWhitelistRepo) ExistsByUserIDCardHashAndName(ctx context.Context, userID, idCardHash, name, excludeID string) (bool, error) {
|
||||
return false, nil
|
||||
}
|
||||
func (m *mockQueryWhitelistRepo) FindByUserIDCardHashAndName(ctx context.Context, userID, idCardHash, name string) (*entities.QueryWhitelistEntry, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (m *mockQueryWhitelistRepo) FindEnabledByUserIDsAndIDCardHash(ctx context.Context, userIDs []string, idCardHash string) ([]*entities.QueryWhitelistEntry, error) {
|
||||
var result []*entities.QueryWhitelistEntry
|
||||
for _, entry := range m.entries {
|
||||
if entry.IDCardHash != idCardHash || !entry.IsEnabled() {
|
||||
continue
|
||||
}
|
||||
for _, uid := range userIDs {
|
||||
if entry.UserID == uid {
|
||||
result = append(result, entry)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (m *mockQueryWhitelistRepo) FindAllEnabled(ctx context.Context) ([]*entities.QueryWhitelistEntry, error) {
|
||||
var result []*entities.QueryWhitelistEntry
|
||||
for _, entry := range m.entries {
|
||||
if entry.IsEnabled() {
|
||||
result = append(result, entry)
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func newTestQueryWhitelistService(repo repositories.QueryWhitelistRepository) QueryWhitelistService {
|
||||
return NewQueryWhitelistService(repo, nil, zap.NewNop())
|
||||
}
|
||||
|
||||
func whitelistShouldReturnEmpty(svc QueryWhitelistService, ctx context.Context, userID, apiCode string, params map[string]interface{}) bool {
|
||||
ctx = svc.EnrichContext(ctx, userID, params)
|
||||
return processors.WhitelistShouldReturnEmpty(ctx, apiCode)
|
||||
}
|
||||
|
||||
func TestShouldReturnEmpty_GlobalRule(t *testing.T) {
|
||||
idCard := "350681198611130611"
|
||||
hash := HashIDCard(idCard)
|
||||
svc := newTestQueryWhitelistService(&mockQueryWhitelistRepo{
|
||||
entries: []*entities.QueryWhitelistEntry{
|
||||
{
|
||||
ID: "1",
|
||||
UserID: entities.QueryWhitelistGlobalUserID,
|
||||
Name: entities.QueryWhitelistWildcardName,
|
||||
IDCardHash: hash,
|
||||
APICodes: entities.APICodeList{"*"},
|
||||
Status: entities.QueryWhitelistStatusEnabled,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
params := map[string]interface{}{"id_card": idCard, "name": "任意姓名"}
|
||||
if !whitelistShouldReturnEmpty(svc, context.Background(), "user-a", "FLXG0V4B", params) {
|
||||
t.Fatal("global rule should hit for any user")
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldReturnEmpty_UserSpecificRule(t *testing.T) {
|
||||
idCard := "350681198611130611"
|
||||
hash := HashIDCard(idCard)
|
||||
svc := newTestQueryWhitelistService(&mockQueryWhitelistRepo{
|
||||
entries: []*entities.QueryWhitelistEntry{
|
||||
{
|
||||
ID: "2",
|
||||
UserID: "user-a",
|
||||
Name: "张三",
|
||||
IDCardHash: hash,
|
||||
APICodes: entities.APICodeList{"FLXG0V4B"},
|
||||
Status: entities.QueryWhitelistStatusEnabled,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
params := map[string]interface{}{"id_card": idCard, "name": "张三"}
|
||||
if !whitelistShouldReturnEmpty(svc, context.Background(), "user-a", "FLXG0V4B", params) {
|
||||
t.Fatal("user-a should hit")
|
||||
}
|
||||
if whitelistShouldReturnEmpty(svc, context.Background(), "user-b", "FLXG0V4B", params) {
|
||||
t.Fatal("user-b should not hit user-a rule")
|
||||
}
|
||||
if whitelistShouldReturnEmpty(svc, context.Background(), "user-a", "JRZQ8A2D", params) {
|
||||
t.Fatal("wrong api code should not hit")
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldReturnEmpty_NameMismatch(t *testing.T) {
|
||||
idCard := "350681198611130611"
|
||||
hash := HashIDCard(idCard)
|
||||
svc := newTestQueryWhitelistService(&mockQueryWhitelistRepo{
|
||||
entries: []*entities.QueryWhitelistEntry{
|
||||
{
|
||||
ID: "3",
|
||||
UserID: "user-a",
|
||||
Name: "张三",
|
||||
IDCardHash: hash,
|
||||
APICodes: entities.APICodeList{"*"},
|
||||
Status: entities.QueryWhitelistStatusEnabled,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
params := map[string]interface{}{"id_card": idCard, "name": "李四"}
|
||||
ctx := svc.EnrichContext(context.Background(), "user-a", params)
|
||||
if processors.WhitelistFromContext(ctx) != nil {
|
||||
t.Fatal("name mismatch should not enrich context")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnrichContext_PartialAPICodeForComb(t *testing.T) {
|
||||
idCard := "350681198611130611"
|
||||
hash := HashIDCard(idCard)
|
||||
svc := newTestQueryWhitelistService(&mockQueryWhitelistRepo{
|
||||
entries: []*entities.QueryWhitelistEntry{
|
||||
{
|
||||
ID: "4",
|
||||
UserID: "user-a",
|
||||
Name: "张三",
|
||||
IDCardHash: hash,
|
||||
APICodes: entities.APICodeList{"FLXG0V4B"},
|
||||
Status: entities.QueryWhitelistStatusEnabled,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
params := map[string]interface{}{"id_card": idCard, "name": "张三"}
|
||||
ctx := svc.EnrichContext(context.Background(), "user-a", params)
|
||||
|
||||
if !processors.WhitelistShouldReturnEmpty(ctx, "FLXG0V4B") {
|
||||
t.Fatal("FLXG0V4B should return empty in comb sub-call")
|
||||
}
|
||||
if processors.WhitelistShouldReturnEmpty(ctx, "JRZQ8A2D") {
|
||||
t.Fatal("JRZQ8A2D should still call upstream in comb sub-call")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user