This commit is contained in:
Mrx
2026-06-10 21:12:37 +08:00
parent 0cfcd6a7ee
commit d5fa2f0a15
15 changed files with 744 additions and 2827 deletions

View File

@@ -908,11 +908,24 @@ type QCXG9P1CReq struct {
IDCard string `json:"id_card" validate:"required,validIDCard"`
}
type DWBG3BF9Req struct {
IDCard string `json:"id_card" validate:"required,validIDCard"`
Name string `json:"name" validate:"required,min=1,validName"`
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
}
type DWBG9FB3Req struct {
IDCard string `json:"id_card" validate:"required,validIDCard"`
Name string `json:"name" validate:"required,min=1,validName"`
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
}
type DWBG9FB2Req struct {
IDCard string `json:"id_card" validate:"required,validIDCard"`
Name string `json:"name" validate:"required,min=1,validName"`
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
}
type QCXG8A3DReq struct {
PlateNo string `json:"plate_no" validate:"required"`
PlateType string `json:"plate_type" validate:"omitempty,oneof=01 02"`

View File

@@ -407,7 +407,9 @@ func registerAllProcessors(combService *comb.CombService) {
"DWBG8B4D": dwbg.ProcessDWBG8B4DRequest,
"DWBG7F3A": dwbg.ProcessDWBG7F3ARequest,
"DWBG5SAM": dwbg.ProcessDWBG5SAMRequest,
"DWBG9FB3": dwbg.ProcessDWBG9FB3Request, // 个人风险档案
"DWBG3BF9": dwbg.ProcessDWBG3BF9Request, // 个人风险档案max
"DWBG9FB3": dwbg.ProcessDWBG9FB3Request, // 个人风险档案1
"DWBG9FB2": dwbg.ProcessDWBG9FB2Request, // 个人风险档案2
// FLXG系列处理器 - 风险管控 (包含原FXHY功能)
"FLXG8B4D": flxg.ProcessFLXG8B4DRequest,

View File

@@ -299,7 +299,9 @@ func (s *FormConfigServiceImpl) getDTOStruct(ctx context.Context, apiCode string
"IVYZVJJ6": &dto.IVYZVJJ6Req{}, //收入等级tax_income_level_v8
"YYSYTJC4": &dto.YYSYTJC4Req{}, //运营商近三个月欠费次数脉
"YYSYP72D": &dto.YYSYP72DReq{}, //运营商近三个月欠费次数脉
"DWBG9FB3": &dto.DWBG9FB3Req{}, // 个人风险档案
"DWBG3BF9": &dto.DWBG3BF9Req{}, // 个人风险档案
"DWBG9FB3": &dto.DWBG9FB3Req{}, // 个人风险档案1
"DWBG9FB2": &dto.DWBG9FB2Req{}, // 个人风险档案2
}

View File

@@ -1,876 +0,0 @@
{
"behavior": {
"result": {
"black_list": "0",
"black_tag04": "0",
"black_tag05": "0",
"black_tag06": "0",
"black_tag07": "0",
"black_tag08": "0",
"black_tag09": "0",
"black_tag10": "0",
"black_tag11": "0",
"black_tag12": "0"
}
},
"complaint": {
"result": {
"dnc": 0,
"finance_times": {
"day_1": 0,
"day_14": 0,
"day_7": 0
},
"is_call": true,
"is_gp": false,
"is_lh": false,
"other_times": {
"day_1": 0,
"day_14": 8,
"day_7": 0
},
"score": 11
}
},
"duration": {
"channel": "cmcc",
"order_no": "101496411109944170",
"time": "[24,-1)"
},
"fraud": null,
"identity": {
"address": "广西壮族自治区玉林地区博白县",
"birthday": "19790713",
"desc": "一致",
"order_no": "fsxtvadtpcwky2qbkl",
"result": 0,
"sex": "男"
},
"intent": {
"Rule_final_decision": "Review",
"Rule_final_weight": "40",
"Rule_name_QJF040": "在非银机构多次申请-中度",
"Rule_weight_QJF040": "40",
"als_d15_cell_caoff_allnum": "2",
"als_d15_cell_caoff_orgnum": "1",
"als_d15_cell_coon_allnum": "3",
"als_d15_cell_coon_orgnum": "3",
"als_d15_cell_nbank_allnum": "4",
"als_d15_cell_nbank_ca_allnum": "2",
"als_d15_cell_nbank_ca_orgnum": "1",
"als_d15_cell_nbank_else_allnum": "2",
"als_d15_cell_nbank_else_orgnum": "2",
"als_d15_cell_nbank_finlea_allnum": "2",
"als_d15_cell_nbank_finlea_orgnum": "1",
"als_d15_cell_nbank_night_allnum": "0",
"als_d15_cell_nbank_night_orgnum": "0",
"als_d15_cell_nbank_orgnum": "3",
"als_d15_cell_nbank_oth_allnum": "2",
"als_d15_cell_nbank_oth_orgnum": "2",
"als_d15_cell_nbank_selfnum": "2",
"als_d15_cell_nbank_week_allnum": "0",
"als_d15_cell_nbank_week_orgnum": "0",
"als_d15_id_caoff_allnum": "2",
"als_d15_id_caoff_orgnum": "1",
"als_d15_id_coon_allnum": "3",
"als_d15_id_coon_orgnum": "3",
"als_d15_id_nbank_allnum": "4",
"als_d15_id_nbank_ca_allnum": "2",
"als_d15_id_nbank_ca_orgnum": "1",
"als_d15_id_nbank_else_allnum": "2",
"als_d15_id_nbank_else_orgnum": "2",
"als_d15_id_nbank_finlea_allnum": "2",
"als_d15_id_nbank_finlea_orgnum": "1",
"als_d15_id_nbank_night_allnum": "0",
"als_d15_id_nbank_night_orgnum": "0",
"als_d15_id_nbank_orgnum": "3",
"als_d15_id_nbank_oth_allnum": "2",
"als_d15_id_nbank_oth_orgnum": "2",
"als_d15_id_nbank_selfnum": "2",
"als_d15_id_nbank_week_allnum": "0",
"als_d15_id_nbank_week_orgnum": "0",
"als_d7_cell_caoff_allnum": "1",
"als_d7_cell_caoff_orgnum": "1",
"als_d7_cell_coon_allnum": "2",
"als_d7_cell_coon_orgnum": "2",
"als_d7_cell_nbank_allnum": "3",
"als_d7_cell_nbank_ca_allnum": "1",
"als_d7_cell_nbank_ca_orgnum": "1",
"als_d7_cell_nbank_else_allnum": "2",
"als_d7_cell_nbank_else_orgnum": "2",
"als_d7_cell_nbank_finlea_allnum": "1",
"als_d7_cell_nbank_finlea_orgnum": "1",
"als_d7_cell_nbank_night_allnum": "0",
"als_d7_cell_nbank_night_orgnum": "0",
"als_d7_cell_nbank_orgnum": "3",
"als_d7_cell_nbank_oth_allnum": "2",
"als_d7_cell_nbank_oth_orgnum": "2",
"als_d7_cell_nbank_selfnum": "1",
"als_d7_cell_nbank_week_allnum": "0",
"als_d7_cell_nbank_week_orgnum": "0",
"als_d7_id_caoff_allnum": "1",
"als_d7_id_caoff_orgnum": "1",
"als_d7_id_coon_allnum": "2",
"als_d7_id_coon_orgnum": "2",
"als_d7_id_nbank_allnum": "3",
"als_d7_id_nbank_ca_allnum": "1",
"als_d7_id_nbank_ca_orgnum": "1",
"als_d7_id_nbank_else_allnum": "2",
"als_d7_id_nbank_else_orgnum": "2",
"als_d7_id_nbank_finlea_allnum": "1",
"als_d7_id_nbank_finlea_orgnum": "1",
"als_d7_id_nbank_night_allnum": "0",
"als_d7_id_nbank_night_orgnum": "0",
"als_d7_id_nbank_orgnum": "3",
"als_d7_id_nbank_oth_allnum": "2",
"als_d7_id_nbank_oth_orgnum": "2",
"als_d7_id_nbank_selfnum": "1",
"als_d7_id_nbank_week_allnum": "0",
"als_d7_id_nbank_week_orgnum": "0",
"als_fst_cell_nbank_inteday": "210",
"als_fst_id_nbank_inteday": "210",
"als_lst_cell_nbank_consnum": "1",
"als_lst_cell_nbank_csinteday": "1",
"als_lst_cell_nbank_inteday": "5",
"als_lst_id_nbank_consnum": "1",
"als_lst_id_nbank_csinteday": "1",
"als_lst_id_nbank_inteday": "5",
"als_m12_cell_avg_monnum": "2.50",
"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_coon_allnum": "8",
"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_avg_monnum": "2.50",
"als_m12_cell_nbank_ca_allnum": "2",
"als_m12_cell_nbank_ca_orgnum": "1",
"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_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_orgnum": "4",
"als_m12_cell_nbank_oth_allnum": "3",
"als_m12_cell_nbank_oth_orgnum": "3",
"als_m12_cell_nbank_selfnum": "2",
"als_m12_cell_nbank_tot_mons": "2",
"als_m12_cell_nbank_week_allnum": "0",
"als_m12_cell_nbank_week_orgnum": "0",
"als_m12_cell_tot_mons": "2",
"als_m12_id_avg_monnum": "2.50",
"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_coon_allnum": "10",
"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_avg_monnum": "2.50",
"als_m12_id_nbank_ca_allnum": "2",
"als_m12_id_nbank_ca_orgnum": "1",
"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_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_orgnum": "4",
"als_m12_id_nbank_oth_allnum": "3",
"als_m12_id_nbank_oth_orgnum": "3",
"als_m12_id_nbank_selfnum": "2",
"als_m12_id_nbank_tot_mons": "2",
"als_m12_id_nbank_week_allnum": "0",
"als_m12_id_nbank_week_orgnum": "0",
"als_m12_id_tot_mons": "2",
"als_m1_cell_caoff_allnum": "2",
"als_m1_cell_caoff_orgnum": "1",
"als_m1_cell_coon_allnum": "4",
"als_m1_cell_coon_orgnum": "3",
"als_m1_cell_nbank_allnum": "4",
"als_m1_cell_nbank_ca_allnum": "2",
"als_m1_cell_nbank_ca_orgnum": "1",
"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_night_allnum": "0",
"als_m1_cell_nbank_night_orgnum": "0",
"als_m1_cell_nbank_orgnum": "3",
"als_m1_cell_nbank_oth_allnum": "2",
"als_m1_cell_nbank_oth_orgnum": "2",
"als_m1_cell_nbank_selfnum": "2",
"als_m1_cell_nbank_week_allnum": "0",
"als_m1_cell_nbank_week_orgnum": "0",
"als_m1_id_caoff_allnum": "2",
"als_m1_id_caoff_orgnum": "1",
"als_m1_id_coon_allnum": "4",
"als_m1_id_coon_orgnum": "3",
"als_m1_id_nbank_allnum": "4",
"als_m1_id_nbank_ca_allnum": "2",
"als_m1_id_nbank_ca_orgnum": "1",
"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_night_allnum": "0",
"als_m1_id_nbank_night_orgnum": "0",
"als_m1_id_nbank_orgnum": "3",
"als_m1_id_nbank_oth_allnum": "2",
"als_m1_id_nbank_oth_orgnum": "2",
"als_m1_id_nbank_selfnum": "2",
"als_m1_id_nbank_week_allnum": "0",
"als_m1_id_nbank_week_orgnum": "0",
"als_m3_cell_avg_monnum": "4.00",
"als_m3_cell_caoff_allnum": "2",
"als_m3_cell_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m3_cell_nbank_ca_allnum": "2",
"als_m3_cell_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m3_cell_nbank_oth_allnum": "2",
"als_m3_cell_nbank_oth_orgnum": "2",
"als_m3_cell_nbank_selfnum": "2",
"als_m3_cell_nbank_tot_mons": "1",
"als_m3_cell_nbank_week_allnum": "0",
"als_m3_cell_nbank_week_orgnum": "0",
"als_m3_cell_tot_mons": "1",
"als_m3_id_avg_monnum": "4.00",
"als_m3_id_caoff_allnum": "2",
"als_m3_id_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m3_id_nbank_ca_allnum": "2",
"als_m3_id_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m3_id_nbank_oth_allnum": "2",
"als_m3_id_nbank_oth_orgnum": "2",
"als_m3_id_nbank_selfnum": "2",
"als_m3_id_nbank_tot_mons": "1",
"als_m3_id_nbank_week_allnum": "0",
"als_m3_id_nbank_week_orgnum": "0",
"als_m3_id_tot_mons": "1",
"als_m6_cell_avg_monnum": "4.00",
"als_m6_cell_caoff_allnum": "2",
"als_m6_cell_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m6_cell_nbank_ca_allnum": "2",
"als_m6_cell_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m6_cell_nbank_oth_allnum": "2",
"als_m6_cell_nbank_oth_orgnum": "2",
"als_m6_cell_nbank_selfnum": "2",
"als_m6_cell_nbank_tot_mons": "1",
"als_m6_cell_nbank_week_allnum": "0",
"als_m6_cell_nbank_week_orgnum": "0",
"als_m6_cell_tot_mons": "1",
"als_m6_id_avg_monnum": "4.00",
"als_m6_id_caoff_allnum": "2",
"als_m6_id_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m6_id_nbank_ca_allnum": "2",
"als_m6_id_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m6_id_nbank_oth_allnum": "2",
"als_m6_id_nbank_oth_orgnum": "2",
"als_m6_id_nbank_selfnum": "2",
"als_m6_id_nbank_tot_mons": "1",
"als_m6_id_nbank_week_allnum": "0",
"als_m6_id_nbank_week_orgnum": "0",
"als_m6_id_tot_mons": "1"
},
"judicial": {
"judicial_data": {
"breachCaseList": [],
"consumptionRestrictionList": [],
"lawsuitStat": {
"administrative": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"bankrupt": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"cases_tree": {
"administrative": [],
"civil": [],
"criminal": [
{
"c_ah": "2016桂0923刑初90号",
"case_type": 200,
"n_ajbs": "b9a3062adcb707f23c7fe627642fe23c",
"stage_type": 1
},
{
"c_ah": "2016桂09刑终283号",
"case_type": 200,
"n_ajbs": "c511197ee4a8b29554c57adf0dd53f35",
"stage_type": 2
},
{
"c_ah": "2019桂0923刑初81号",
"case_type": 200,
"n_ajbs": "e90f9b13a9b0f102611e6b5a2ccf6a96",
"stage_type": 1
},
{
"c_ah": "2019桂09刑终146号",
"case_type": 200,
"n_ajbs": "80168c539c6ade4497706d0c32e4e229",
"stage_type": 2
}
]
},
"civil": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"count": {
"area_stat": "广西壮族自治区(4)",
"ay_stat": "妨害社会管理秩序罪(4)",
"count_beigao": 2,
"count_jie_beigao": 2,
"count_jie_other": 0,
"count_jie_total": 4,
"count_jie_yuangao": 2,
"count_other": 0,
"count_total": 4,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 2,
"jafs_stat": "判决(2),维持(1),改判(1)",
"larq_stat": "2016(2),2019(2)",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
},
"crc": 4070442485,
"criminal": {
"cases": [
{
"c_ah": "2016桂0923刑初90号",
"c_dsrxx": [
{
"c_mc": "何志勇",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "覃圣有",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "刘飞",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "陈波",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "覃小群",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "陈观海",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
}
],
"c_gkws_dsr": "公诉机关广西壮族自治区博白县人民检察院。被告人何志某,男,1979年7月13日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年9月13日被刑事拘留,同年10月20日被逮捕。被告人陈某波(曾用名:陈东东),男,1987年7月17日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年9月16日被刑事拘留,同年10月20日被逮捕。被告人覃小某,女,1979年4月15日出生于广西壮族自治区博白县,汉族,初中文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年11月4日被羁押,次日被刑事拘留,同月26日被逮捕。被告人覃某有,男,1972年9月21日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年9月17日被刑事拘留,同年10月20日被逮捕。被告人刘某飞,男,1991年4月3日出生于广西壮族自治区博白县,汉族,初中文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。被告人陈某观,男,1990年12月2日出生于广西壮族自治区博白县,汉族,初中文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。",
"c_gkws_id": "29130d17a43e448e84dc64e9cd203a99",
"c_gkws_pjjg": "一、被告人何志某犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月13日起至2017年3月12日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)二、被告人陈某波犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月16日起至2016年11月15日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)三、被告人覃小某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年11月4日起至2017年1月3日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)四、被告人覃某有犯开设赌场罪,判处有期徒刑八个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月17日起至2016年5月16日止。罚金已缴纳。)五、被告人刘某飞犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年10月28日起至2016年4月27日止。罚金已缴纳。)六、被告人陈某观犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年10月28日起至2016年4月27日止。罚金已缴纳。)如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向广西壮族自治区玉林市中级人民法院提出上诉。书面上诉的应提交上诉状正本一份,副本十三份。",
"c_id": "8917c0a3f0eab1ca1f294565be7f2dc5",
"c_slfsxx": "1,2016-01-25 09:00:00,第一审判庭,1",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2016-04-01",
"d_larq": "2016-01-04",
"n_ajbs": "b9a3062adcb707f23c7fe627642fe23c",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事一审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 390530581,
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "判决",
"n_jbfy": "博白县人民法院",
"n_jbfy_cj": "基层法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcpcje_level": 0,
"n_slcx": "一审",
"n_ssdw": "被告人",
"n_ssdw_ys": "被告人"
},
{
"c_ah": "2016桂09刑终283号",
"c_dsrxx": [
{
"c_mc": "刘飞",
"n_dsrlx": "自然人",
"n_ssdw": "其他"
},
{
"c_mc": "覃圣有",
"n_dsrlx": "自然人",
"n_ssdw": "其他"
},
{
"c_mc": "陈观海",
"n_dsrlx": "自然人",
"n_ssdw": "其他"
},
{
"c_mc": "何志勇",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
},
{
"c_mc": "覃小群",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
},
{
"c_mc": "陈波",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
}
],
"c_gkws_dsr": "原公诉机关广西壮族自治区博白县人民检察院。上诉人(原审被告人)何志勇,农民。因涉嫌犯开设赌场罪于2015年9月13日被刑事拘留,同年10月20日被逮捕。现羁押于博白县看守所。上诉人(原审被告人)陈波(曾用名陈东东),农民。因涉嫌犯开设赌场罪于2015年9月16日被刑事拘留,同年10月20日被逮捕。现羁押于博白县看守所。上诉人(原审被告人)覃小群,农民。因涉嫌犯开设赌场罪于2015年11月4日被羁押,次日被刑事拘留,同月26日被逮捕。现羁押于博白县看守所。原审被告人覃圣有,农民。因涉嫌犯开设赌场罪于2015年9月17日被刑事拘留,同年10月20日被逮捕。现羁押于博白县看守所。原审被告人刘飞,农民。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。现羁押于博白县看守所。原审被告人陈观海,农民。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。现羁押于博白县看守所。",
"c_gkws_glah": "2016桂0923刑初90号",
"c_gkws_id": "bc9c1a6ba2c24065af1ba58267623a4a",
"c_gkws_pjjg": "一、维持广西壮族自治区博白县人民法院(2016)桂0923刑初90号刑事判决的第四、第五、第六项,即:被告人覃圣有犯开设赌场罪,判处有期徒刑八个月,并处罚金人民币二万元。被告人刘飞犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。被告人陈观海犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。二、撤销广西壮族自治区博白县人民法院(2016)桂0923刑初90号刑事判决的第一、第二、第三项,即:被告人何志勇犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币二万元。被告人陈波犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。被告人覃小群犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。三、上诉人(原审被告人)何志勇犯开设赌场罪,判处有期徒刑一年,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年9月13日起至2016年9月12日止。罚金已缴纳。)四、上诉人(原审被告人)陈波犯开设赌场罪,判处有期徒刑十个月,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年9月16日起至2016年7月15日止;已缴纳罚金一万元,罚金余款自判决生效之次日起一个月内缴纳,逾期不缴纳的,强制缴纳。)五、上诉人(原审被告人)覃小群犯开设赌场罪,判处有期徒刑十个月,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年11月4日起至2016年9月3日止;已缴纳罚金一万元,罚金余款自判决生效之次日起一个月内缴纳,逾期不缴纳的,强制缴纳。)本判决为终审判决。",
"c_id": "84362df70b3678297431c3f97130e930",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2016-07-14",
"d_larq": "2016-05-16",
"n_ajbs": "c511197ee4a8b29554c57adf0dd53f35",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事二审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 2349048681,
"n_dzzm": "妨害社会管理秩序罪",
"n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "改判",
"n_jbfy": "广西壮族自治区玉林市中级人民法院",
"n_jbfy_cj": "中级人民法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcjg": "给予刑事处罚",
"n_pcpcje_level": 0,
"n_slcx": "二审",
"n_ssdw": "上诉人"
},
{
"c_ah": "2019桂0923刑初81号",
"c_dsrxx": [
{
"c_mc": "何志勇",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "刘国富",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
}
],
"c_gkws_dsr": "公诉机关广西壮族自治区博白县人民检察院。被告人何志勇。被告人刘国富。",
"c_gkws_id": "1ee2c6cd15b544a78f68aae10033e5bc",
"c_gkws_pjjg": "一、被告人何志勇犯开设赌场罪,判处有期徒刑二年,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2018年10月16日起至2020年10月15日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)%1、被告人刘国富犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2018年10月30日起至2020年4月29日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)三、扣押在案的赌具扑克牌、龙虎珠、骨牌及人民币八百三十五元依法予以没收,其中人民币八百三十五元上缴国库。如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向广西壮族自治区玉林市中级人民法院提出上诉。书面上诉的应当提交上诉状正本一份,副本九份。",
"c_id": "5f4d0aa69d456e5a4c1b025aec5d310d",
"c_slfsxx": "1,2019-03-01 09:20:00,KA6第一审判庭,1",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2019-03-07",
"d_larq": "2019-02-20",
"n_ajbs": "e90f9b13a9b0f102611e6b5a2ccf6a96",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事一审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 107350759,
"n_dzzm": "妨害社会管理秩序罪",
"n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "判决",
"n_jbfy": "博白县人民法院",
"n_jbfy_cj": "基层法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcjg": "给予刑事处罚",
"n_pcpcje_level": 0,
"n_slcx": "一审",
"n_ssdw": "被告人",
"n_ssdw_ys": "被告人"
},
{
"c_ah": "2019桂09刑终146号",
"c_dsrxx": [
{
"c_mc": "何志勇",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
},
{
"c_mc": "刘国富",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
}
],
"c_gkws_dsr": "原公诉机关广西壮族自治区博白县人民检察院。上诉人(原审被告人)何志勇,男,1979年7月13日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因本案于2018年10月16日被抓获,次日被行政拘留,因涉嫌犯开设赌场罪,于同月26日被刑事拘留,同年11月9日被逮捕。现羁押于博白县看守所。上诉人(原审被告人)刘国富(曾用名刘艺敏),男,1982年8月11日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪,于2018年10月30日被刑事拘留,同年11月15日被逮捕。现羁押于博白县看守所。",
"c_gkws_glah": "2019桂0923刑初81号",
"c_gkws_id": "ddba0d0c8c8f47d49c9faa6000321eb3",
"c_gkws_pjjg": "驳回上诉,维持原判。本裁定为终审裁定。",
"c_id": "695eeb122cdefc02173c5b0dbc10077c",
"c_slfsxx": "1,,,1",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2019-05-10",
"d_larq": "2019-03-20",
"n_ajbs": "80168c539c6ade4497706d0c32e4e229",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事二审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 1376027123,
"n_dzzm": "妨害社会管理秩序罪",
"n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "维持",
"n_jbfy": "广西壮族自治区玉林市中级人民法院",
"n_jbfy_cj": "中级人民法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcjg": "给予刑事处罚",
"n_pcpcje_level": 0,
"n_slcx": "二审",
"n_ssdw": "上诉人"
}
],
"count": {
"area_stat": "广西壮族自治区(4)",
"ay_stat": "妨害社会管理秩序罪(4)",
"count_beigao": 2,
"count_jie_beigao": 2,
"count_jie_other": 0,
"count_jie_total": 4,
"count_jie_yuangao": 2,
"count_other": 0,
"count_total": 4,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 2,
"jafs_stat": "判决(2),维持(1),改判(1)",
"larq_stat": "2016(2),2019(2)",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"has_case": "Y",
"implement": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"preservation": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
}
}
}
},
"presence": {
"channel": "移动",
"desc": "停机",
"order_no": "8givczqmonxzv8kube",
"status": 1
},
"probe": {
"acc_exc": "0",
"acc_sleep": "1",
"currently_overdue": "1",
"currently_performance": "0",
"latest_overdue_time": "2026-06",
"max_overdue_amt": "4000-6000",
"max_overdue_days": "1-15",
"result_code": "1"
},
"rating": null,
"special": {},
"triple": {
"state": "1"
}
}

View File

@@ -1,876 +0,0 @@
{
"behavior": {
"result": {
"black_list": "0",
"black_tag04": "0",
"black_tag05": "0",
"black_tag06": "0",
"black_tag07": "0",
"black_tag08": "0",
"black_tag09": "0",
"black_tag10": "0",
"black_tag11": "0",
"black_tag12": "0"
}
},
"complaint": {
"result": {
"dnc": 0,
"finance_times": {
"day_1": 0,
"day_14": 0,
"day_7": 0
},
"is_call": true,
"is_gp": false,
"is_lh": false,
"other_times": {
"day_1": 0,
"day_14": 8,
"day_7": 0
},
"score": 11
}
},
"duration": {
"channel": "cmcc",
"order_no": "101496411109944170",
"time": "[24,-1)"
},
"fraud": null,
"identity": {
"address": "广西壮族自治区玉林地区博白县",
"birthday": "19790713",
"desc": "一致",
"order_no": "fsxtvadtpcwky2qbkl",
"result": 0,
"sex": "男"
},
"intent": {
"Rule_final_decision": "Review",
"Rule_final_weight": "40",
"Rule_name_QJF040": "在非银机构多次申请-中度",
"Rule_weight_QJF040": "40",
"als_d15_cell_caoff_allnum": "2",
"als_d15_cell_caoff_orgnum": "1",
"als_d15_cell_coon_allnum": "3",
"als_d15_cell_coon_orgnum": "3",
"als_d15_cell_nbank_allnum": "4",
"als_d15_cell_nbank_ca_allnum": "2",
"als_d15_cell_nbank_ca_orgnum": "1",
"als_d15_cell_nbank_else_allnum": "2",
"als_d15_cell_nbank_else_orgnum": "2",
"als_d15_cell_nbank_finlea_allnum": "2",
"als_d15_cell_nbank_finlea_orgnum": "1",
"als_d15_cell_nbank_night_allnum": "0",
"als_d15_cell_nbank_night_orgnum": "0",
"als_d15_cell_nbank_orgnum": "3",
"als_d15_cell_nbank_oth_allnum": "2",
"als_d15_cell_nbank_oth_orgnum": "2",
"als_d15_cell_nbank_selfnum": "2",
"als_d15_cell_nbank_week_allnum": "0",
"als_d15_cell_nbank_week_orgnum": "0",
"als_d15_id_caoff_allnum": "2",
"als_d15_id_caoff_orgnum": "1",
"als_d15_id_coon_allnum": "3",
"als_d15_id_coon_orgnum": "3",
"als_d15_id_nbank_allnum": "4",
"als_d15_id_nbank_ca_allnum": "2",
"als_d15_id_nbank_ca_orgnum": "1",
"als_d15_id_nbank_else_allnum": "2",
"als_d15_id_nbank_else_orgnum": "2",
"als_d15_id_nbank_finlea_allnum": "2",
"als_d15_id_nbank_finlea_orgnum": "1",
"als_d15_id_nbank_night_allnum": "0",
"als_d15_id_nbank_night_orgnum": "0",
"als_d15_id_nbank_orgnum": "3",
"als_d15_id_nbank_oth_allnum": "2",
"als_d15_id_nbank_oth_orgnum": "2",
"als_d15_id_nbank_selfnum": "2",
"als_d15_id_nbank_week_allnum": "0",
"als_d15_id_nbank_week_orgnum": "0",
"als_d7_cell_caoff_allnum": "1",
"als_d7_cell_caoff_orgnum": "1",
"als_d7_cell_coon_allnum": "2",
"als_d7_cell_coon_orgnum": "2",
"als_d7_cell_nbank_allnum": "3",
"als_d7_cell_nbank_ca_allnum": "1",
"als_d7_cell_nbank_ca_orgnum": "1",
"als_d7_cell_nbank_else_allnum": "2",
"als_d7_cell_nbank_else_orgnum": "2",
"als_d7_cell_nbank_finlea_allnum": "1",
"als_d7_cell_nbank_finlea_orgnum": "1",
"als_d7_cell_nbank_night_allnum": "0",
"als_d7_cell_nbank_night_orgnum": "0",
"als_d7_cell_nbank_orgnum": "3",
"als_d7_cell_nbank_oth_allnum": "2",
"als_d7_cell_nbank_oth_orgnum": "2",
"als_d7_cell_nbank_selfnum": "1",
"als_d7_cell_nbank_week_allnum": "0",
"als_d7_cell_nbank_week_orgnum": "0",
"als_d7_id_caoff_allnum": "1",
"als_d7_id_caoff_orgnum": "1",
"als_d7_id_coon_allnum": "2",
"als_d7_id_coon_orgnum": "2",
"als_d7_id_nbank_allnum": "3",
"als_d7_id_nbank_ca_allnum": "1",
"als_d7_id_nbank_ca_orgnum": "1",
"als_d7_id_nbank_else_allnum": "2",
"als_d7_id_nbank_else_orgnum": "2",
"als_d7_id_nbank_finlea_allnum": "1",
"als_d7_id_nbank_finlea_orgnum": "1",
"als_d7_id_nbank_night_allnum": "0",
"als_d7_id_nbank_night_orgnum": "0",
"als_d7_id_nbank_orgnum": "3",
"als_d7_id_nbank_oth_allnum": "2",
"als_d7_id_nbank_oth_orgnum": "2",
"als_d7_id_nbank_selfnum": "1",
"als_d7_id_nbank_week_allnum": "0",
"als_d7_id_nbank_week_orgnum": "0",
"als_fst_cell_nbank_inteday": "210",
"als_fst_id_nbank_inteday": "210",
"als_lst_cell_nbank_consnum": "1",
"als_lst_cell_nbank_csinteday": "1",
"als_lst_cell_nbank_inteday": "5",
"als_lst_id_nbank_consnum": "1",
"als_lst_id_nbank_csinteday": "1",
"als_lst_id_nbank_inteday": "5",
"als_m12_cell_avg_monnum": "2.50",
"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_coon_allnum": "8",
"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_avg_monnum": "2.50",
"als_m12_cell_nbank_ca_allnum": "2",
"als_m12_cell_nbank_ca_orgnum": "1",
"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_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_orgnum": "4",
"als_m12_cell_nbank_oth_allnum": "3",
"als_m12_cell_nbank_oth_orgnum": "3",
"als_m12_cell_nbank_selfnum": "2",
"als_m12_cell_nbank_tot_mons": "2",
"als_m12_cell_nbank_week_allnum": "0",
"als_m12_cell_nbank_week_orgnum": "0",
"als_m12_cell_tot_mons": "2",
"als_m12_id_avg_monnum": "2.50",
"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_coon_allnum": "10",
"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_avg_monnum": "2.50",
"als_m12_id_nbank_ca_allnum": "2",
"als_m12_id_nbank_ca_orgnum": "1",
"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_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_orgnum": "4",
"als_m12_id_nbank_oth_allnum": "3",
"als_m12_id_nbank_oth_orgnum": "3",
"als_m12_id_nbank_selfnum": "2",
"als_m12_id_nbank_tot_mons": "2",
"als_m12_id_nbank_week_allnum": "0",
"als_m12_id_nbank_week_orgnum": "0",
"als_m12_id_tot_mons": "2",
"als_m1_cell_caoff_allnum": "2",
"als_m1_cell_caoff_orgnum": "1",
"als_m1_cell_coon_allnum": "4",
"als_m1_cell_coon_orgnum": "3",
"als_m1_cell_nbank_allnum": "4",
"als_m1_cell_nbank_ca_allnum": "2",
"als_m1_cell_nbank_ca_orgnum": "1",
"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_night_allnum": "0",
"als_m1_cell_nbank_night_orgnum": "0",
"als_m1_cell_nbank_orgnum": "3",
"als_m1_cell_nbank_oth_allnum": "2",
"als_m1_cell_nbank_oth_orgnum": "2",
"als_m1_cell_nbank_selfnum": "2",
"als_m1_cell_nbank_week_allnum": "0",
"als_m1_cell_nbank_week_orgnum": "0",
"als_m1_id_caoff_allnum": "2",
"als_m1_id_caoff_orgnum": "1",
"als_m1_id_coon_allnum": "4",
"als_m1_id_coon_orgnum": "3",
"als_m1_id_nbank_allnum": "4",
"als_m1_id_nbank_ca_allnum": "2",
"als_m1_id_nbank_ca_orgnum": "1",
"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_night_allnum": "0",
"als_m1_id_nbank_night_orgnum": "0",
"als_m1_id_nbank_orgnum": "3",
"als_m1_id_nbank_oth_allnum": "2",
"als_m1_id_nbank_oth_orgnum": "2",
"als_m1_id_nbank_selfnum": "2",
"als_m1_id_nbank_week_allnum": "0",
"als_m1_id_nbank_week_orgnum": "0",
"als_m3_cell_avg_monnum": "4.00",
"als_m3_cell_caoff_allnum": "2",
"als_m3_cell_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m3_cell_nbank_ca_allnum": "2",
"als_m3_cell_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m3_cell_nbank_oth_allnum": "2",
"als_m3_cell_nbank_oth_orgnum": "2",
"als_m3_cell_nbank_selfnum": "2",
"als_m3_cell_nbank_tot_mons": "1",
"als_m3_cell_nbank_week_allnum": "0",
"als_m3_cell_nbank_week_orgnum": "0",
"als_m3_cell_tot_mons": "1",
"als_m3_id_avg_monnum": "4.00",
"als_m3_id_caoff_allnum": "2",
"als_m3_id_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m3_id_nbank_ca_allnum": "2",
"als_m3_id_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m3_id_nbank_oth_allnum": "2",
"als_m3_id_nbank_oth_orgnum": "2",
"als_m3_id_nbank_selfnum": "2",
"als_m3_id_nbank_tot_mons": "1",
"als_m3_id_nbank_week_allnum": "0",
"als_m3_id_nbank_week_orgnum": "0",
"als_m3_id_tot_mons": "1",
"als_m6_cell_avg_monnum": "4.00",
"als_m6_cell_caoff_allnum": "2",
"als_m6_cell_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m6_cell_nbank_ca_allnum": "2",
"als_m6_cell_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m6_cell_nbank_oth_allnum": "2",
"als_m6_cell_nbank_oth_orgnum": "2",
"als_m6_cell_nbank_selfnum": "2",
"als_m6_cell_nbank_tot_mons": "1",
"als_m6_cell_nbank_week_allnum": "0",
"als_m6_cell_nbank_week_orgnum": "0",
"als_m6_cell_tot_mons": "1",
"als_m6_id_avg_monnum": "4.00",
"als_m6_id_caoff_allnum": "2",
"als_m6_id_caoff_orgnum": "1",
"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_avg_monnum": "4.00",
"als_m6_id_nbank_ca_allnum": "2",
"als_m6_id_nbank_ca_orgnum": "1",
"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_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_orgnum": "3",
"als_m6_id_nbank_oth_allnum": "2",
"als_m6_id_nbank_oth_orgnum": "2",
"als_m6_id_nbank_selfnum": "2",
"als_m6_id_nbank_tot_mons": "1",
"als_m6_id_nbank_week_allnum": "0",
"als_m6_id_nbank_week_orgnum": "0",
"als_m6_id_tot_mons": "1"
},
"judicial": {
"judicial_data": {
"breachCaseList": [],
"consumptionRestrictionList": [],
"lawsuitStat": {
"administrative": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"bankrupt": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"cases_tree": {
"administrative": [],
"civil": [],
"criminal": [
{
"c_ah": "2016桂0923刑初90号",
"case_type": 200,
"n_ajbs": "b9a3062adcb707f23c7fe627642fe23c",
"stage_type": 1
},
{
"c_ah": "2016桂09刑终283号",
"case_type": 200,
"n_ajbs": "c511197ee4a8b29554c57adf0dd53f35",
"stage_type": 2
},
{
"c_ah": "2019桂0923刑初81号",
"case_type": 200,
"n_ajbs": "e90f9b13a9b0f102611e6b5a2ccf6a96",
"stage_type": 1
},
{
"c_ah": "2019桂09刑终146号",
"case_type": 200,
"n_ajbs": "80168c539c6ade4497706d0c32e4e229",
"stage_type": 2
}
]
},
"civil": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"count": {
"area_stat": "广西壮族自治区(4)",
"ay_stat": "妨害社会管理秩序罪(4)",
"count_beigao": 2,
"count_jie_beigao": 2,
"count_jie_other": 0,
"count_jie_total": 4,
"count_jie_yuangao": 2,
"count_other": 0,
"count_total": 4,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 2,
"jafs_stat": "判决(2),维持(1),改判(1)",
"larq_stat": "2016(2),2019(2)",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
},
"crc": 4070442485,
"criminal": {
"cases": [
{
"c_ah": "2016桂0923刑初90号",
"c_dsrxx": [
{
"c_mc": "何某某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "覃某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "刘某某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "陈某某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "覃某某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "陈某某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
}
],
"c_gkws_dsr": "公诉机关广西壮族自治区博白县人民检察院。被告人何某某,男,1979年7月13日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年9月13日被刑事拘留,同年10月20日被逮捕。被告人陈某某波(曾用名:陈东东),男,1987年7月17日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年9月16日被刑事拘留,同年10月20日被逮捕。被告人覃某某,女,1979年4月15日出生于广西壮族自治区博白县,汉族,初中文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年11月4日被羁押,次日被刑事拘留,同月26日被逮捕。被告人覃某有,男,1972年9月21日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年9月17日被刑事拘留,同年10月20日被逮捕。被告人刘某某飞,男,1991年4月3日出生于广西壮族自治区博白县,汉族,初中文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。被告人陈某某观,男,1990年12月2日出生于广西壮族自治区博白县,汉族,初中文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。",
"c_gkws_id": "29130d17a43e448e84dc64e9cd203a99",
"c_gkws_pjjg": "一、被告人何某某犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月13日起至2017年3月12日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)二、被告人陈某某波犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月16日起至2016年11月15日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)三、被告人覃某某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年11月4日起至2017年1月3日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)四、被告人覃某有犯开设赌场罪,判处有期徒刑八个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月17日起至2016年5月16日止。罚金已缴纳。)五、被告人刘某某飞犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年10月28日起至2016年4月27日止。罚金已缴纳。)六、被告人陈某某观犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年10月28日起至2016年4月27日止。罚金已缴纳。)如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向广西壮族自治区玉林市中级人民法院提出上诉。书面上诉的应提交上诉状正本一份,副本十三份。",
"c_id": "8917c0a3f0eab1ca1f294565be7f2dc5",
"c_slfsxx": "1,2016-01-25 09:00:00,第一审判庭,1",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2016-04-01",
"d_larq": "2016-01-04",
"n_ajbs": "b9a3062adcb707f23c7fe627642fe23c",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事一审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 390530581,
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "判决",
"n_jbfy": "博白县人民法院",
"n_jbfy_cj": "基层法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcpcje_level": 0,
"n_slcx": "一审",
"n_ssdw": "被告人",
"n_ssdw_ys": "被告人"
},
{
"c_ah": "2016桂09刑终283号",
"c_dsrxx": [
{
"c_mc": "刘某某",
"n_dsrlx": "自然人",
"n_ssdw": "其他"
},
{
"c_mc": "覃某",
"n_dsrlx": "自然人",
"n_ssdw": "其他"
},
{
"c_mc": "陈某某",
"n_dsrlx": "自然人",
"n_ssdw": "其他"
},
{
"c_mc": "何某某",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
},
{
"c_mc": "覃某某",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
},
{
"c_mc": "陈某某",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
}
],
"c_gkws_dsr": "原公诉机关广西壮族自治区博白县人民检察院。上诉人(原审被告人)何某某,农民。因涉嫌犯开设赌场罪于2015年9月13日被刑事拘留,同年10月20日被逮捕。现羁押于博白县看守所。上诉人(原审被告人)陈某某某(曾用名陈东东),农民。因涉嫌犯开设赌场罪于2015年9月16日被刑事拘留,同年10月20日被逮捕。现羁押于博白县看守所。上诉人(原审被告人)覃某某,农民。因涉嫌犯开设赌场罪于2015年11月4日被羁押,次日被刑事拘留,同月26日被逮捕。现羁押于博白县看守所。原审被告人覃某,农民。因涉嫌犯开设赌场罪于2015年9月17日被刑事拘留,同年10月20日被逮捕。现羁押于博白县看守所。原审被告人刘某某某,农民。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。现羁押于博白县看守所。原审被告人陈某某,农民。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。现羁押于博白县看守所。",
"c_gkws_glah": "2016桂0923刑初90号",
"c_gkws_id": "bc9c1a6ba2c24065af1ba58267623a4a",
"c_gkws_pjjg": "一、维持广西壮族自治区博白县人民法院(2016)桂0923刑初90号刑事判决的第四、第五、第六项,即:被告人覃某犯开设赌场罪,判处有期徒刑八个月,并处罚金人民币二万元。被告人刘某某某犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。被告人陈某某犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。二、撤销广西壮族自治区博白县人民法院(2016)桂0923刑初90号刑事判决的第一、第二、第三项,即:被告人何某某犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币二万元。被告人陈某某某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。被告人覃某某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。三、上诉人(原审被告人)何某某犯开设赌场罪,判处有期徒刑一年,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年9月13日起至2016年9月12日止。罚金已缴纳。)四、上诉人(原审被告人)陈某某某犯开设赌场罪,判处有期徒刑十个月,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年9月16日起至2016年7月15日止;已缴纳罚金一万元,罚金余款自判决生效之次日起一个月内缴纳,逾期不缴纳的,强制缴纳。)五、上诉人(原审被告人)覃某某犯开设赌场罪,判处有期徒刑十个月,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年11月4日起至2016年9月3日止;已缴纳罚金一万元,罚金余款自判决生效之次日起一个月内缴纳,逾期不缴纳的,强制缴纳。)本判决为终审判决。",
"c_id": "84362df70b3678297431c3f97130e930",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2016-07-14",
"d_larq": "2016-05-16",
"n_ajbs": "c511197ee4a8b29554c57adf0dd53f35",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事二审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 2349048681,
"n_dzzm": "妨害社会管理秩序罪",
"n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "改判",
"n_jbfy": "广西壮族自治区玉林市中级人民法院",
"n_jbfy_cj": "中级人民法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcjg": "给予刑事处罚",
"n_pcpcje_level": 0,
"n_slcx": "二审",
"n_ssdw": "上诉人"
},
{
"c_ah": "2019桂0923刑初81号",
"c_dsrxx": [
{
"c_mc": "何某某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
},
{
"c_mc": "刘某某",
"n_dsrlx": "自然人",
"n_ssdw": "被告人"
}
],
"c_gkws_dsr": "公诉机关广西壮族自治区博白县人民检察院。被告人何某某。被告人刘某某。",
"c_gkws_id": "1ee2c6cd15b544a78f68aae10033e5bc",
"c_gkws_pjjg": "一、被告人何某某犯开设赌场罪,判处有期徒刑二年,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2018年10月16日起至2020年10月15日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)%1、被告人刘某某犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2018年10月30日起至2020年4月29日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)三、扣押在案的赌具扑克牌、龙虎珠、骨牌及人民币八百三十五元依法予以没收,其中人民币八百三十五元上缴国库。如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向广西壮族自治区玉林市中级人民法院提出上诉。书面上诉的应当提交上诉状正本一份,副本九份。",
"c_id": "5f4d0aa69d456e5a4c1b025aec5d310d",
"c_slfsxx": "1,2019-03-01 09:20:00,KA6第一审判庭,1",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2019-03-07",
"d_larq": "2019-02-20",
"n_ajbs": "e90f9b13a9b0f102611e6b5a2ccf6a96",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事一审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 107350759,
"n_dzzm": "妨害社会管理秩序罪",
"n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "判决",
"n_jbfy": "博白县人民法院",
"n_jbfy_cj": "基层法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcjg": "给予刑事处罚",
"n_pcpcje_level": 0,
"n_slcx": "一审",
"n_ssdw": "被告人",
"n_ssdw_ys": "被告人"
},
{
"c_ah": "2019桂09刑终146号",
"c_dsrxx": [
{
"c_mc": "何某某",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
},
{
"c_mc": "刘某某",
"n_dsrlx": "自然人",
"n_ssdw": "上诉人"
}
],
"c_gkws_dsr": "原公诉机关广西壮族自治区博白县人民检察院。上诉人(原审被告人)何某某,男,1979年7月13日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因本案于2018年10月16日被抓获,次日被行政拘留,因涉嫌犯开设赌场罪,于同月26日被刑事拘留,同年11月9日被逮捕。现羁押于博白县看守所。上诉人(原审被告人)刘某某(曾用名刘艺敏),男,1982年8月11日出生于广西壮族自治区博白县,汉族,小学文化,农民,住广西壮族自治区博白县。因涉嫌犯开设赌场罪,于2018年10月30日被刑事拘留,同年11月15日被逮捕。现羁押于博白县看守所。",
"c_gkws_glah": "2019桂0923刑初81号",
"c_gkws_id": "ddba0d0c8c8f47d49c9faa6000321eb3",
"c_gkws_pjjg": "驳回上诉,维持原判。本裁定为终审裁定。",
"c_id": "695eeb122cdefc02173c5b0dbc10077c",
"c_slfsxx": "1,,,1",
"c_ssdy": "广西壮族自治区",
"d_jarq": "2019-05-10",
"d_larq": "2019-03-20",
"n_ajbs": "80168c539c6ade4497706d0c32e4e229",
"n_ajjzjd": "已结案",
"n_ajlx": "刑事二审",
"n_bqqpcje_level": 0,
"n_ccxzxje_level": 0,
"n_crc": 1376027123,
"n_dzzm": "妨害社会管理秩序罪",
"n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_fzje_level": 0,
"n_jaay": "妨害社会管理秩序罪",
"n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_jafs": "维持",
"n_jbfy": "广西壮族自治区玉林市中级人民法院",
"n_jbfy_cj": "中级人民法院",
"n_laay": "妨害社会管理秩序罪",
"n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
"n_pcjg": "给予刑事处罚",
"n_pcpcje_level": 0,
"n_slcx": "二审",
"n_ssdw": "上诉人"
}
],
"count": {
"area_stat": "广西壮族自治区(4)",
"ay_stat": "妨害社会管理秩序罪(4)",
"count_beigao": 2,
"count_jie_beigao": 2,
"count_jie_other": 0,
"count_jie_total": 4,
"count_jie_yuangao": 2,
"count_other": 0,
"count_total": 4,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 2,
"jafs_stat": "判决(2),维持(1),改判(1)",
"larq_stat": "2016(2),2019(2)",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"has_case": "Y",
"implement": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
},
"preservation": {
"cases": [],
"count": {
"area_stat": "",
"ay_stat": "",
"count_beigao": 0,
"count_jie_beigao": 0,
"count_jie_other": 0,
"count_jie_total": 0,
"count_jie_yuangao": 0,
"count_other": 0,
"count_total": 0,
"count_wei_beigao": 0,
"count_wei_other": 0,
"count_wei_total": 0,
"count_wei_yuangao": 0,
"count_yuangao": 0,
"jafs_stat": "",
"larq_stat": "",
"money_beigao": 0,
"money_jie_beigao": 0,
"money_jie_other": 0,
"money_jie_total": 0,
"money_jie_yuangao": 0,
"money_other": 0,
"money_total": 0,
"money_wei_beigao": 0,
"money_wei_other": 0,
"money_wei_percent": 0,
"money_wei_total": 0,
"money_wei_yuangao": 0,
"money_yuangao": 0
}
}
}
}
},
"presence": {
"channel": "移动",
"desc": "停机",
"order_no": "8givczqmonxzv8kube",
"status": 1
},
"probe": {
"acc_exc": "0",
"acc_sleep": "1",
"currently_overdue": "1",
"currently_performance": "0",
"latest_overdue_time": "2026-06",
"max_overdue_amt": "4000-6000",
"max_overdue_days": "1-15",
"result_code": "1"
},
"rating": null,
"special": {},
"triple": {
"state": "1"
}
}

View File

@@ -7,7 +7,7 @@ const __dirname = path.dirname(__filename);
// 读取JSON文件
// 读取JSON文件
const inputFile = path.join(__dirname, 'DWBG9FB3.json');
const inputFile = path.join(__dirname, 'DWBG3BF9.json');
const data = JSON.parse(fs.readFileSync(inputFile, 'utf8'));
// 姓名映射表(保持同一姓名脱敏后一致)
@@ -102,7 +102,7 @@ function desensitizeObject(obj) {
const desensitizedData = desensitizeObject(data);
// 保存脱敏后的文件
const outputFile = path.join(__dirname, 'DWBG9FB3_desensitized.json');
const outputFile = path.join(__dirname, 'DWBG3BF9_desensitized.json');
fs.writeFileSync(outputFile, JSON.stringify(desensitizedData, null, 2), 'utf8');
console.log('脱敏完成!');

View File

@@ -0,0 +1,328 @@
package dwbg
import (
"context"
"encoding/json"
"errors"
"fmt"
"sync"
"tyapi-server/internal/domains/api/dto"
"tyapi-server/internal/domains/api/services/processors"
"tyapi-server/internal/shared/logger"
"go.uber.org/zap"
)
const dwbg3BF9FieldRA = "RA"
// dwbg3BF9OutputField 最终扁平结构中的单个顶层字段定义
type dwbg3BF9OutputField struct {
Key string // 顶层 JSON key
ApiCode string // 子产品编码RA 由聚合计算,无 ApiCode
Source string // 数据来源方法
}
// dwbg3BF9OutputSchema DWBG3BF9 最终返回扁平结构(顶层共 13 个 key
//
// {
// "RA": { ra_score, ra_level, ra_credit_score, ra_verify_score, ra_credit_risk_index, ra_performance_amt_index, ra_performance_cnt_index },
// "presence": { ... }, // YYSYE7V5
// "duration": { ... }, // YYSYP0T4
// "triple": { ... }, // YYSYK9R4
// "identity": { ... }, // IVYZN2P8
// "fraud": { ... }, // JRZQV3HM
// "probe": { ... }, // JRZQ4B6C
// "rating": { ... }, // JRZQ5E9F
// "intent": { ... }, // JRZQ3C7B
// "special": { ... }, // JRZQV7MD
// "complaint": { ... }, // JRZQVT43
// "behavior": { ... }, // JRZQV0MD
// "judicial": { ... }, // FLXG7E8F
// }
var dwbg3BF9OutputSchema = []dwbg3BF9OutputField{
{Key: dwbg3BF9FieldRA, Source: "buildDWBG3BF9RA"},
{Key: "presence", ApiCode: "YYSYE7V5", Source: "ProcessYYSYE7V5Request"},
{Key: "duration", ApiCode: "YYSYP0T4", Source: "ProcessYYSYP0T4Request"},
{Key: "triple", ApiCode: "YYSYK9R4", Source: "ProcessYYSYK9R4Request"},
{Key: "identity", ApiCode: "IVYZN2P8", Source: "ProcessIVYZN2P8Request"},
{Key: "fraud", ApiCode: "JRZQV3HM", Source: "ProcessJRZQV3HMRequest"},
{Key: "probe", ApiCode: "JRZQ4B6C", Source: "ProcessJRZQ4B6CRequest"},
{Key: "rating", ApiCode: "JRZQ5E9F", Source: "ProcessJRZQ5E9FRequest"},
{Key: "intent", ApiCode: "JRZQ3C7B", Source: "ProcessJRZQ3C7BRequest"},
{Key: "special", ApiCode: "JRZQV7MD", Source: "ProcessJRZQV7MDRequest"},
{Key: "complaint", ApiCode: "JRZQVT43", Source: "ProcessJRZQVT43Request"},
{Key: "behavior", ApiCode: "JRZQV0MD", Source: "ProcessJRZQV0MDRequest"},
{Key: "judicial", ApiCode: "FLXG7E8F", Source: "ProcessFLXG7E8FRequest"},
}
// dwbg3BF9OutputFieldOrder 最终 JSON 顶层字段顺序
var dwbg3BF9OutputFieldOrder = func() []string {
order := make([]string, len(dwbg3BF9OutputSchema))
for i, f := range dwbg3BF9OutputSchema {
order[i] = f.Key
}
return order
}()
// dwbg3BF9SubProductFieldNames 子产品编码 → 响应字段名
var dwbg3BF9SubProductFieldNames = func() map[string]string {
m := make(map[string]string, len(dwbg3BF9OutputSchema)-1)
for _, f := range dwbg3BF9OutputSchema {
if f.ApiCode == "" {
continue
}
m[f.ApiCode] = f.Key
}
return m
}()
// dwbg3BF9StripKeys 汇总报告中需剔除的上游流水号/追踪类字段
var dwbg3BF9StripKeys = map[string]struct{}{
"order_no": {},
"orderNo": {},
}
// stripDWBG3BF9MetaKeys 递归剔除子接口返回中的流水号等元数据字段
func stripDWBG3BF9MetaKeys(v interface{}) interface{} {
switch val := v.(type) {
case map[string]interface{}:
out := make(map[string]interface{}, len(val))
for k, item := range val {
if _, drop := dwbg3BF9StripKeys[k]; drop {
continue
}
out[k] = stripDWBG3BF9MetaKeys(item)
}
return out
case []interface{}:
out := make([]interface{}, len(val))
for i, item := range val {
out[i] = stripDWBG3BF9MetaKeys(item)
}
return out
default:
return v
}
}
// ProcessDWBG3BF9Request DWBG3BF9 API处理方法 - 个人风险档案
// 并发调用子产品处理器,将各子接口返回数据以大数据英文字段名拼接融合为一个对象
func ProcessDWBG3BF9Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
var paramsDto dto.DWBG3BF9Req
if err := json.Unmarshal(params, &paramsDto); err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
return nil, errors.Join(processors.ErrInvalidParam, err)
}
log := logger.GetGlobalLogger()
log.Info("开始处理个人风险档案请求",
zap.String("name", paramsDto.Name),
zap.String("id_card", maskIDCard(paramsDto.IDCard)),
zap.String("mobile_no", maskMobile(paramsDto.MobileNo)),
)
subProducts := collectDWBG3BF9SubProducts(ctx, paramsDto, deps, log)
result := buildDWBG3BF9Response(subProducts)
respBytes, err := json.Marshal(result)
if err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
log.Info("个人风险档案处理完成", zap.Int("field_count", len(result)))
return respBytes, nil
}
// buildDWBG3BF9Response 按 dwbg3BF9OutputSchema 构造最终扁平返回结构
func buildDWBG3BF9Response(subProducts map[string]interface{}) map[string]interface{} {
result := make(map[string]interface{}, len(dwbg3BF9OutputSchema))
for _, field := range dwbg3BF9OutputSchema {
if field.Key == dwbg3BF9FieldRA {
result[field.Key] = buildDWBG3BF9RA(subProducts)
continue
}
if v, ok := subProducts[field.Key]; ok {
result[field.Key] = v
} else {
result[field.Key] = nil
}
}
return result
}
type dwbg3bf9APICall struct {
apiCode string
fieldName string
params map[string]interface{}
}
func collectDWBG3BF9SubProducts(
ctx context.Context,
params dto.DWBG3BF9Req,
deps *processors.ProcessorDependencies,
log *zap.Logger,
) map[string]interface{} {
apiCalls := []dwbg3bf9APICall{
{apiCode: "YYSYE7V5", fieldName: dwbg3BF9SubProductFieldNames["YYSYE7V5"], params: map[string]interface{}{"mobile_no": params.MobileNo}},
{apiCode: "YYSYP0T4", fieldName: dwbg3BF9SubProductFieldNames["YYSYP0T4"], params: map[string]interface{}{"mobile_no": params.MobileNo}},
{
apiCode: "YYSYK9R4",
fieldName: dwbg3BF9SubProductFieldNames["YYSYK9R4"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
},
},
{
apiCode: "IVYZN2P8",
fieldName: dwbg3BF9SubProductFieldNames["IVYZN2P8"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
},
},
{
apiCode: "JRZQV3HM",
fieldName: dwbg3BF9SubProductFieldNames["JRZQV3HM"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "JRZQ4B6C",
fieldName: dwbg3BF9SubProductFieldNames["JRZQ4B6C"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
"authorized": "1",
},
},
{
apiCode: "JRZQ5E9F",
fieldName: dwbg3BF9SubProductFieldNames["JRZQ5E9F"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
"authorized": "1",
},
},
{
apiCode: "JRZQ3C7B",
fieldName: dwbg3BF9SubProductFieldNames["JRZQ3C7B"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
"authorized": "1",
},
},
{
apiCode: "JRZQV7MD",
fieldName: dwbg3BF9SubProductFieldNames["JRZQV7MD"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "JRZQVT43",
fieldName: dwbg3BF9SubProductFieldNames["JRZQVT43"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "JRZQV0MD",
fieldName: dwbg3BF9SubProductFieldNames["JRZQV0MD"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "FLXG7E8F",
fieldName: dwbg3BF9SubProductFieldNames["FLXG7E8F"],
params: map[string]interface{}{
"name": params.Name,
"id_card": params.IDCard,
"mobile_no": params.MobileNo,
},
},
}
type callResult struct {
fieldName string
data interface{}
err error
}
results := make(chan callResult, len(apiCalls))
var wg sync.WaitGroup
for _, apiCall := range apiCalls {
wg.Add(1)
go func(ac dwbg3bf9APICall) {
defer wg.Done()
defer func() {
if r := recover(); r != nil {
log.Error("调用子产品处理器时发生panic",
zap.String("api_code", ac.apiCode),
zap.String("field_name", ac.fieldName),
zap.Any("panic", r),
)
results <- callResult{ac.fieldName, nil, fmt.Errorf("处理器panic: %v", r)}
}
}()
paramsBytes, err := json.Marshal(ac.params)
if err != nil {
results <- callResult{ac.fieldName, nil, err}
return
}
data, err := callProcessor(ctx, ac.apiCode, paramsBytes, deps)
results <- callResult{ac.fieldName, data, err}
}(apiCall)
}
go func() {
wg.Wait()
close(results)
}()
output := make(map[string]interface{}, len(apiCalls))
successCount := 0
for result := range results {
if result.err != nil {
log.Warn("子产品调用失败,该字段置空",
zap.String("field_name", result.fieldName),
zap.Error(result.err),
)
output[result.fieldName] = nil
continue
}
output[result.fieldName] = stripDWBG3BF9MetaKeys(result.data)
successCount++
}
log.Info("子产品调用完成",
zap.Int("total", len(apiCalls)),
zap.Int("success", successCount),
zap.Int("failed", len(apiCalls)-successCount),
)
return output
}

View File

@@ -49,17 +49,17 @@ const (
xypModelScoreRiskCapPerField = 97 // 单项上限,三项合计最高 291
)
// buildDWBG9FB3RA 构建顶层 RA 总体安全评估(千分制,分值越高越安全)
// buildDWBG3BF9RA 构建顶层 RA 总体安全评估(千分制,分值越高越安全)
//
// 输出字段来源
// - ra_fraud_score → calcRAFraudScore辅助输出不参与 ra_score 加权)
// - ra_credit_score → calcRACreditScore
// - ra_judicial_score → calcRAJudicialScore
// - ra_verify_score → calcRAVerifyScore
// - ra_score → 本方法,身份 10% 固定 + 司法/借贷动态加权
// - ra_level → raLevelFromScore(ra_score),司法+借贷双高时强制 F 档(分数仍加权,上限 500
func buildDWBG9FB3RA(data map[string]interface{}) map[string]interface{} {
fraudScore := calcRAFraudScore(data)
// 输出字段(对外)
// - ra_score / ra_level → 综合安全分与等级
// - ra_credit_score → 借贷维度安全分(参与加权)
// - ra_verify_score → 个人身份区安全分(参与加权)
// - ra_credit_risk_index → 信用风险指数(越高风险越大,与 ra_score 同向)
// - ra_performance_amt_index → 履约金额综合指数(越高越好)
// - ra_performance_cnt_index → 履约笔数综合指数(越高越好
// 内部仍计算 fraud/judicial 分用于 ra_score 加权,但不对外返回。
func buildDWBG3BF9RA(data map[string]interface{}) map[string]interface{} {
creditScore := calcRACreditScore(data)
judicialScore := calcRAJudicialScore(data)
verifyScore := calcRAVerifyScore(data)
@@ -72,12 +72,13 @@ func buildDWBG9FB3RA(data map[string]interface{}) map[string]interface{} {
}
return map[string]interface{}{
"ra_score": total,
"ra_level": level,
"ra_fraud_score": fraudScore,
"ra_credit_score": creditScore,
"ra_judicial_score": judicialScore,
"ra_verify_score": verifyScore,
"ra_score": total,
"ra_level": level,
"ra_credit_score": creditScore,
"ra_verify_score": verifyScore,
"ra_credit_risk_index": calcRACreditRiskIndex(data, creditScore),
"ra_performance_amt_index": calcRAPerformanceAmtIndex(data),
"ra_performance_cnt_index": calcRAPerformanceCntIndex(data),
}
}
@@ -210,13 +211,13 @@ func toRASafetyScore(riskPoints int) int {
return clampRAInt(raScoreMax-riskPoints, 0, raScoreMax)
}
// calcRAFraudScore 欺诈/黑名单维度安全分来源calcRAFraudRiskPoints
// 统计方式:满分 1000根据 behavior/complaint/fraud/special 风险信号扣分后取补集
// calcRAFraudScore 欺诈/黑名单维度安全分来源calcRAFraudRiskPoints
// 统计方式:满分 1000根据 behavior/complaint/fraud/special 风险信号扣分后取补集;同时计入 ra_verify_score
func calcRAFraudScore(data map[string]interface{}) int {
return toRASafetyScore(calcRAFraudRiskPoints(data))
}
// calcRAFraudRiskPoints 统计欺诈维度风险扣分(仅内部使用,分值越高代表越不安全)
// calcRAFraudRiskPoints 统计欺诈维度风险扣分(计入个人身份区,分值越高代表越不安全)
// 每命中一项扣 raFraudPointsPerHit23多项独立累加
func calcRAFraudRiskPoints(data map[string]interface{}) int {
hits := 0
@@ -376,13 +377,13 @@ func calcRAJudicialRiskPoints(data map[string]interface{}) int {
return clampRAInt(risk, 0, raScoreMax)
}
// calcRAVerifyScore 身份/在网核验维度安全分来源calcRAVerifyRiskPoints
// 统计方式:满分 1000根据 triple/identity/presence 核验异常扣分后取补集
// calcRAVerifyScore 个人身份区安全分来源calcRAVerifyRiskPoints
// 统计方式:满分 1000核验异常 + 欺诈/黑名单信号扣分后取补集,参与 ra_score 10% 加权
func calcRAVerifyScore(data map[string]interface{}) int {
return toRASafetyScore(calcRAVerifyRiskPoints(data))
}
// calcRAVerifyRiskPoints 统计核验维度风险扣分
// calcRAVerifyRiskPoints 统计个人身份区风险扣分(核验 + 欺诈/黑名单)
func calcRAVerifyRiskPoints(data map[string]interface{}) int {
risk := 0
@@ -411,6 +412,9 @@ func calcRAVerifyRiskPoints(data map[string]interface{}) int {
}
}
// 来源子字段 behavior / complaint / fraud / special欺诈/黑名单,与 calcRAFraudRiskPoints 一致)
risk += calcRAFraudRiskPoints(data)
return clampRAInt(risk, 0, raScoreMax)
}

View File

@@ -0,0 +1,234 @@
package dwbg
import (
"math"
"regexp"
"strconv"
)
// raIndexField 借选指数区间桶加权项
type raIndexField struct {
key string
weight float64
failure bool // true 表示桶值越高表现越差(如失败次数、距上次成功天数)
}
// 履约金额:成功金额 + 历史还款总额,扣减失败金额
var raPerformanceAmtFields = []raIndexField{
{key: "xyp_t01aazzzc", weight: 0.30},
{key: "xyp_cpl0035", weight: 0.12},
{key: "xyp_cpl0037", weight: 0.14},
{key: "xyp_cpl0039", weight: 0.14},
{key: "xyp_cpl0041", weight: 0.12},
{key: "xyp_cpl0034", weight: 0.09, failure: true},
{key: "xyp_cpl0036", weight: 0.09, failure: true},
}
// 履约笔数:成功笔数,扣减失败笔数及距上次成功天数
var raPerformanceCntFields = []raIndexField{
{key: "xyp_cpl0019", weight: 0.12},
{key: "xyp_cpl0021", weight: 0.14},
{key: "xyp_cpl0023", weight: 0.14},
{key: "xyp_cpl0025", weight: 0.12},
{key: "xyp_cpl0027", weight: 0.10},
{key: "xyp_cpl0068", weight: 0.18, failure: true},
{key: "xyp_cpl0018", weight: 0.06, failure: true},
{key: "xyp_cpl0020", weight: 0.07, failure: true},
{key: "xyp_cpl0022", weight: 0.07, failure: true},
}
var raProbeOverdueAmtPattern = regexp.MustCompile(`(\d+)`)
// calcRACreditRiskIndex 信用风险指数0-1000越高信用风险越大与 ra_score 方向一致)
func calcRACreditRiskIndex(data map[string]interface{}, creditSafetyScore int) int {
riskFromModel := raScoreMax - creditSafetyScore
rating := raAsMap(data["rating"])
if rating == nil {
return riskFromModel
}
raw := raAsString(rating["xyp_cpl0081"])
if raw == "" || raw == "0" || raw == "-1" {
return riskFromModel
}
v, ok := raParseFloat(raw)
if !ok || v < 0 || v > 1 {
return riskFromModel
}
riskFromRating := int(math.Round(v * float64(raScoreMax)))
if riskFromRating > riskFromModel {
return riskFromRating
}
return riskFromModel
}
// calcRAPerformanceAmtIndex 履约金额综合指数0-1000越高履约金额表现越好
func calcRAPerformanceAmtIndex(data map[string]interface{}) int {
rating := raAsMap(data["rating"])
probe := raAsMap(data["probe"])
if rating != nil {
if idx, ok := calcRACompositeBucketIndex(rating, raPerformanceAmtFields); ok {
if probe != nil {
probeIdx := calcRAPerformanceAmtIndexFromProbe(probe)
return clampRAInt(int(math.Round(float64(idx)*0.75+float64(probeIdx)*0.25)), 0, raScoreMax)
}
return idx
}
}
if probe != nil {
return calcRAPerformanceAmtIndexFromProbe(probe)
}
return 500
}
// calcRAPerformanceCntIndex 履约笔数综合指数0-1000越高履约笔数表现越好
func calcRAPerformanceCntIndex(data map[string]interface{}) int {
rating := raAsMap(data["rating"])
probe := raAsMap(data["probe"])
if rating != nil {
if idx, ok := calcRACompositeBucketIndex(rating, raPerformanceCntFields); ok {
if probe != nil {
probeIdx := calcRAPerformanceCntIndexFromProbe(probe)
return clampRAInt(int(math.Round(float64(idx)*0.75+float64(probeIdx)*0.25)), 0, raScoreMax)
}
return idx
}
}
if probe != nil {
return calcRAPerformanceCntIndexFromProbe(probe)
}
return 500
}
func calcRACompositeBucketIndex(rating map[string]interface{}, fields []raIndexField) (int, bool) {
totalWeight := 0.0
totalScore := 0.0
for _, f := range fields {
bucket := raAsInt(rating[f.key])
if bucket <= 0 {
continue
}
tierScore := raBucketTierScore(bucket)
if f.failure {
tierScore = raScoreMax - tierScore
}
totalScore += float64(tierScore) * f.weight
totalWeight += f.weight
}
if totalWeight == 0 {
return 0, false
}
return clampRAInt(int(math.Round(totalScore/totalWeight)), 0, raScoreMax), true
}
func raBucketTierScore(bucket int) int {
switch {
case bucket <= 0:
return 0
case bucket == 1:
return 280
case bucket == 2:
return 530
case bucket == 3:
return 760
default:
return 920
}
}
func calcRAPerformanceAmtIndexFromProbe(probe map[string]interface{}) int {
score := 620
switch raAsString(probe["currently_performance"]) {
case "1":
score += 180
case "0":
score -= 280
}
if raAsString(probe["currently_overdue"]) == "1" {
score -= raProbeOverdueAmtPenalty(probe["max_overdue_amt"])
}
if raAsString(probe["acc_sleep"]) == "1" {
score -= 80
}
if raAsString(probe["acc_exc"]) == "1" {
score -= 60
}
return clampRAInt(score, 0, raScoreMax)
}
func calcRAPerformanceCntIndexFromProbe(probe map[string]interface{}) int {
score := 580
switch raAsString(probe["currently_performance"]) {
case "1":
score += 220
case "0":
score -= 260
}
if raAsString(probe["currently_overdue"]) == "1" {
score -= 150
}
if raAsString(probe["result_code"]) == "1" {
score -= 120
}
if raAsString(probe["acc_sleep"]) == "1" {
score -= 90
}
if raAsString(probe["acc_exc"]) == "1" {
score -= 70
}
return clampRAInt(score, 0, raScoreMax)
}
func raProbeOverdueAmtPenalty(v interface{}) int {
mid := raProbeAmtMidpoint(v)
switch {
case mid >= 10000:
return 280
case mid >= 4000:
return 200
case mid >= 1000:
return 120
case mid > 0:
return 60
default:
return 100
}
}
func raProbeAmtMidpoint(v interface{}) int {
s := raAsString(v)
if s == "" {
return 0
}
matches := raProbeOverdueAmtPattern.FindAllString(s, -1)
if len(matches) == 0 {
return 0
}
if len(matches) == 1 {
return raAsInt(matches[0])
}
low := raAsInt(matches[0])
high := raAsInt(matches[len(matches)-1])
if high <= 0 {
return low
}
return (low + high) / 2
}
func raParseFloat(raw string) (float64, bool) {
f, err := strconv.ParseFloat(raw, 64)
if err != nil || math.IsNaN(f) || math.IsInf(f, 0) {
return 0, false
}
return f, true
}

View File

@@ -8,10 +8,10 @@ import (
"testing"
)
func TestBuildDWBG9FB3RAFromSample(t *testing.T) {
raw, err := os.ReadFile(filepath.Join("DWBG9FB3.json"))
func TestBuildDWBG3BF9RAFromSample(t *testing.T) {
raw, err := os.ReadFile(filepath.Join("DWBG3BF9.json"))
if err != nil {
t.Skip("DWBG9FB3.json not found")
t.Skip("DWBG3BF9.json not found")
}
var data map[string]interface{}
@@ -19,15 +19,16 @@ func TestBuildDWBG9FB3RAFromSample(t *testing.T) {
t.Fatalf("unmarshal sample: %v", err)
}
ra := buildDWBG9FB3RA(data)
ra := buildDWBG3BF9RA(data)
required := []string{
"ra_score",
"ra_level",
"ra_fraud_score",
"ra_credit_score",
"ra_judicial_score",
"ra_verify_score",
"ra_credit_risk_index",
"ra_performance_amt_index",
"ra_performance_cnt_index",
}
for _, key := range required {
if _, ok := ra[key]; !ok {
@@ -35,6 +36,13 @@ func TestBuildDWBG9FB3RAFromSample(t *testing.T) {
}
}
hidden := []string{"ra_fraud_score", "ra_judicial_score"}
for _, key := range hidden {
if _, ok := ra[key]; ok {
t.Fatalf("RA should not expose %s", key)
}
}
score := raAsInt(ra["ra_score"])
if score < 0 || score > raScoreMax {
t.Fatalf("ra_score out of range: %d", score)
@@ -46,13 +54,27 @@ func TestBuildDWBG9FB3RAFromSample(t *testing.T) {
t.Fatalf("invalid ra_level: %s", level)
}
t.Logf("RA sample: score=%d level=%s fraud=%d credit=%d judicial=%d verify=%d",
if raAsString(ra["ra_level"]) != "D" {
t.Fatalf("sample ra_level want D, got %s", raAsString(ra["ra_level"]))
}
if raAsInt(ra["ra_credit_risk_index"]) != 1000 {
t.Fatalf("sample credit risk index want 1000, got %d", raAsInt(ra["ra_credit_risk_index"]))
}
if raAsInt(ra["ra_performance_amt_index"]) != 60 {
t.Fatalf("sample perf amt index want 60, got %d", raAsInt(ra["ra_performance_amt_index"]))
}
if raAsInt(ra["ra_performance_cnt_index"]) != 0 {
t.Fatalf("sample perf cnt index want 0, got %d", raAsInt(ra["ra_performance_cnt_index"]))
}
t.Logf("RA sample: score=%d level=%s credit=%d verify=%d creditRisk=%d perfAmt=%d perfCnt=%d",
raAsInt(ra["ra_score"]),
level,
raAsInt(ra["ra_fraud_score"]),
raAsInt(ra["ra_credit_score"]),
raAsInt(ra["ra_judicial_score"]),
raAsInt(ra["ra_verify_score"]),
raAsInt(ra["ra_credit_risk_index"]),
raAsInt(ra["ra_performance_amt_index"]),
raAsInt(ra["ra_performance_cnt_index"]),
)
}
@@ -92,7 +114,7 @@ func TestSafetyScoreHigherIsSafer(t *testing.T) {
"identity": map[string]interface{}{"result": 0},
"presence": map[string]interface{}{"desc": "正常", "status": 1},
}
ra := buildDWBG9FB3RA(clean)
ra := buildDWBG3BF9RA(clean)
if raAsInt(ra["ra_score"]) < 800 {
t.Fatalf("clean data should have safety score >= 800, got %d", raAsInt(ra["ra_score"]))
}
@@ -156,7 +178,7 @@ func TestRAForcedFGrade(t *testing.T) {
},
}
ra := buildDWBG9FB3RA(data)
ra := buildDWBG3BF9RA(data)
// 司法 197 + 借贷 0双风险权重 70%/20%,身份 1000 → 加权分 238强制 F 档保留分数
if raAsInt(ra["ra_score"]) != 238 {
t.Fatalf("forced F should keep weighted ra_score=238, got %d", raAsInt(ra["ra_score"]))
@@ -251,7 +273,7 @@ func TestRAForcedFGradeScoreCap(t *testing.T) {
},
},
}
ra := buildDWBG9FB3RA(data)
ra := buildDWBG3BF9RA(data)
score := raAsInt(ra["ra_score"])
if score > raForcedFScoreCap {
t.Fatalf("forced F score should be capped at %d, got %d", raForcedFScoreCap, score)
@@ -313,6 +335,39 @@ func TestCalcRARatingXypModelRiskPoints(t *testing.T) {
}
}
func TestRAVerifyScoreIncludesFraudSignals(t *testing.T) {
base := map[string]interface{}{
"triple": map[string]interface{}{"state": "1"},
"identity": map[string]interface{}{"result": 0},
"presence": map[string]interface{}{"desc": "正常", "status": 1},
"behavior": map[string]interface{}{"result": map[string]interface{}{"black_list": "0"}},
"fraud": nil,
"special": nil,
}
if got := calcRAVerifyScore(base); got != raScoreMax {
t.Fatalf("clean verify want %d, got %d", raScoreMax, got)
}
withComplaint := map[string]interface{}{
"triple": map[string]interface{}{"state": "1"},
"identity": map[string]interface{}{"result": 0},
"presence": map[string]interface{}{"desc": "正常", "status": 1},
"behavior": map[string]interface{}{"result": map[string]interface{}{"black_list": "0"}},
"complaint": map[string]interface{}{
"result": map[string]interface{}{"score": 11},
},
"fraud": nil,
"special": nil,
}
want := raScoreMax - raFraudPointsPerHit
if got := calcRAVerifyScore(withComplaint); got != want {
t.Fatalf("verify with fraud signal want %d, got %d", want, got)
}
if got := calcRAFraudScore(withComplaint); got != want {
t.Fatalf("fraud sub-score should match fraud-only deduction, want %d, got %d", want, got)
}
}
func TestRAScoreWeightedSum(t *testing.T) {
verify, judicial, credit := 920, 980, 760
wJ, wC := calcRADynamicWeights(judicial, credit)

View File

@@ -0,0 +1,48 @@
package dwbg
import (
"context"
"encoding/json"
"errors"
"tyapi-server/internal/domains/api/dto"
"tyapi-server/internal/domains/api/services/processors"
"tyapi-server/internal/infrastructure/external/nuoer"
)
// ProcessDWBG9FB2Request DWBG9FB2 API处理方法 - 个人风险档案2
func ProcessDWBG9FB2Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
var paramsDto dto.DWBG9FB2Req
if err := json.Unmarshal(params, &paramsDto); 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 := "gamaReportPageP02"
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)
}
respBytes, err := json.Marshal(resp.Data)
if err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
return respBytes, nil
}

View File

@@ -1,224 +0,0 @@
# DWBG9FB3 个人风险档案 — 响应结构说明
## 概述
`DWBG9FB3`(个人风险档案)本身是一个独立接口,接收三要素入参后,**并发**调用 12 个子产品处理器,将各子接口原始返回数据**直接拼接融合**为一个 JSON 对象返回。
- 不使用 `success` / `data` / `error` 等包装结构
- 顶层 key 为简短**英文单词**字段名
- 每个大字段的 value 即为对应子处理器的原始返回对象
- 子产品调用失败时,该字段值为 `null`,不影响其他字段
- 汇总时递归剔除上游流水号字段:`order_no``orderNo`
## 最终扁平结构dwbg9FB3OutputSchema
顶层共 **13 个 key**,由 `buildDWBG9FB3Response``dwbg9FB3OutputSchema` 构造:
| 序号 | 顶层 key | 产品编码 | 数据来源方法 | value 类型 |
| :--- | :--- | :--- | :--- | :--- |
| 1 | `RA` | — | `buildDWBG9FB3RA` | 对象6 个评分字段) |
| 2 | `presence` | YYSYE7V5 | `ProcessYYSYE7V5Request` | 对象 / null |
| 3 | `duration` | YYSYP0T4 | `ProcessYYSYP0T4Request` | 对象 / null |
| 4 | `triple` | YYSYK9R4 | `ProcessYYSYK9R4Request` | 对象 / null |
| 5 | `identity` | IVYZN2P8 | `ProcessIVYZN2P8Request` | 对象 / null |
| 6 | `fraud` | JRZQV3HM | `ProcessJRZQV3HMRequest` | 对象 / null |
| 7 | `probe` | JRZQ4B6C | `ProcessJRZQ4B6CRequest` | 对象 / null |
| 8 | `rating` | JRZQ5E9F | `ProcessJRZQ5E9FRequest` | 对象 / null |
| 9 | `intent` | JRZQ3C7B | `ProcessJRZQ3C7BRequest` | 对象 / null |
| 10 | `special` | JRZQV7MD | `ProcessJRZQV7MDRequest` | 对象 / null |
| 11 | `complaint` | JRZQVT43 | `ProcessJRZQVT43Request` | 对象 / null |
| 12 | `behavior` | JRZQV0MD | `ProcessJRZQV0MDRequest` | 对象 / null |
| 13 | `judicial` | FLXG7E8F | `ProcessFLXG7E8FRequest` | 对象 / null |
### RA 子结构
| key | 计算方法 | 说明 |
| :--- | :--- | :--- |
| `ra_score` | `buildDWBG9FB3RA` | 综合安全分(千分制) |
| `ra_level` | `raLevelFromScore` | A-F 等级(每档 100 分) |
| `ra_fraud_score` | `calcRAFraudScore` | 欺诈维度安全分 |
| `ra_credit_score` | `calcRACreditScore` | 借贷维度安全分 |
| `ra_judicial_score` | `calcRAJudicialScore` | 司法维度安全分 |
| `ra_verify_score` | `calcRAVerifyScore` | 核验维度安全分 |
## 请求参数
```json
{
"id_card": "110101199001011234",
"name": "张三",
"mobile_no": "13800138000"
}
```
## 响应结构
顶层为一个扁平对象,包含总体风险评估 `RA` 与 12 个子维度字段:
```json
{
"RA": {
"ra_score": 495,
"ra_level": "F",
"ra_fraud_score": 890,
"ra_credit_score": 0,
"ra_judicial_score": 580,
"ra_verify_score": 850
},
"presence": { },
"duration": { },
"triple": { },
"identity": { },
"fraud": { },
"probe": { },
"rating": { },
"intent": { },
"special": { },
"complaint": { },
"behavior": { },
"judicial": { }
}
```
## RA 总体安全评估(千分制,越高越安全)
| 字段 | 计算方法 | 说明 |
| :--- | :--- | :--- |
| `ra_fraud_score` | `calcRAFraudScore` | 欺诈/黑名单维度安全分 |
| `ra_credit_score` | `calcRACreditScore` | 借贷/逾期维度安全分 |
| `ra_judicial_score` | `calcRAJudicialScore` | 司法涉诉维度安全分 |
| `ra_verify_score` | `calcRAVerifyScore` | 身份/在网核验维度安全分 |
| `ra_score` | `buildDWBG9FB3RA` | 四维安全分加权汇总 |
| `ra_level` | `raLevelFromScore` | A 最安全F 最不安全 |
综合分权重:`fraud 25% + credit 35% + judicial 25% + verify 15%`
等级划分A(900-1000)、B(800-899)、C(700-799)、D(600-699)、E(500-599)、F(0-499)
各维度统计方式:先由 `*RiskPoints` 方法累计风险扣分,再 `安全分 = 1000 - 扣分`
详细规则见 [dwbg9fb3_ra.md](./dwbg9fb3_ra.md)
## 响应示例
```json
{
"RA": {
"ra_score": 495,
"ra_level": "F",
"ra_fraud_score": 890,
"ra_credit_score": 0,
"ra_judicial_score": 580,
"ra_verify_score": 850
},
"presence": {
"status": "1",
"operator": "1"
},
"duration": {
"result": "3",
"desc": "在网时长12-24个月"
},
"triple": {
"state": "1",
"operator": "1"
},
"identity": {
"result": 0,
"desc": "一致",
"sex": "男",
"birthday": "1990-01-01",
"address": "北京市东城区"
},
"fraud": {
"hit": 0
},
"probe": {
"score": 650,
"risk_level": "B"
},
"rating": {
"score": 720,
"level": "A"
},
"intent": {
"apply_loan": {
"d7": { "id": 0, "cell": 1 },
"m1": { "id": 1, "cell": 2 }
}
},
"special": {
"hit": 0
},
"complaint": {
"hit": 0
},
"behavior": {
"hit": 0
},
"judicial": {
"judicial_data": {
"lawsuitStat": {
"count_total": 0,
"count_jie_total": 0,
"count_wei_total": 0
},
"breachCaseList": [],
"consumptionRestrictionList": []
}
}
}
```
## 部分失败示例
某个子产品查无记录或异常时,对应字段为 `null`,其余字段正常返回:
```json
{
"presence": {
"status": "1",
"operator": "1"
},
"judicial": null
}
```
## 调用流程
```mermaid
flowchart LR
A[DWBG9FB3 请求] --> B[参数校验]
B --> C[并发调用 12 个子处理器]
C --> D1[presence]
C --> D2[duration]
C --> D3[triple]
C --> D4[identity]
C --> D5[fraud]
C --> D6[probe]
C --> D7[rating]
C --> D8[intent]
C --> D9[special]
C --> D10[complaint]
C --> D11[behavior]
C --> D12[judicial]
D1 --> E[拼接融合为一个对象]
D2 --> E
D3 --> E
D4 --> E
D5 --> E
D6 --> E
D7 --> E
D8 --> E
D9 --> E
D10 --> E
D11 --> E
D12 --> E
E --> F[返回 JSON]
```
## 实现说明
- 复用 `dwbg8b4d` 中的 `callProcessor`,通过 `CombService.GetProcessor` 按产品编码路由。
- 12 个 goroutine 并发执行,结果写入 `map[英文字段名]子处理器原始数据`
- 子产品数据保持各处理器原有返回结构,不做二次转换。

View File

@@ -4,110 +4,13 @@ import (
"context"
"encoding/json"
"errors"
"fmt"
"sync"
"tyapi-server/internal/domains/api/dto"
"tyapi-server/internal/domains/api/services/processors"
"tyapi-server/internal/shared/logger"
"go.uber.org/zap"
"tyapi-server/internal/infrastructure/external/nuoer"
)
const dwbg9FB3FieldRA = "RA"
// dwbg9FB3OutputField 最终扁平结构中的单个顶层字段定义
type dwbg9FB3OutputField struct {
Key string // 顶层 JSON key
ApiCode string // 子产品编码RA 由聚合计算,无 ApiCode
Source string // 数据来源方法
}
// dwbg9FB3OutputSchema DWBG9FB3 最终返回扁平结构(顶层共 13 个 key
//
// {
// "RA": { ra_score, ra_level, ra_fraud_score, ra_credit_score, ra_judicial_score, ra_verify_score },
// "presence": { ... }, // YYSYE7V5
// "duration": { ... }, // YYSYP0T4
// "triple": { ... }, // YYSYK9R4
// "identity": { ... }, // IVYZN2P8
// "fraud": { ... }, // JRZQV3HM
// "probe": { ... }, // JRZQ4B6C
// "rating": { ... }, // JRZQ5E9F
// "intent": { ... }, // JRZQ3C7B
// "special": { ... }, // JRZQV7MD
// "complaint": { ... }, // JRZQVT43
// "behavior": { ... }, // JRZQV0MD
// "judicial": { ... }, // FLXG7E8F
// }
var dwbg9FB3OutputSchema = []dwbg9FB3OutputField{
{Key: dwbg9FB3FieldRA, Source: "buildDWBG9FB3RA"},
{Key: "presence", ApiCode: "YYSYE7V5", Source: "ProcessYYSYE7V5Request"},
{Key: "duration", ApiCode: "YYSYP0T4", Source: "ProcessYYSYP0T4Request"},
{Key: "triple", ApiCode: "YYSYK9R4", Source: "ProcessYYSYK9R4Request"},
{Key: "identity", ApiCode: "IVYZN2P8", Source: "ProcessIVYZN2P8Request"},
{Key: "fraud", ApiCode: "JRZQV3HM", Source: "ProcessJRZQV3HMRequest"},
{Key: "probe", ApiCode: "JRZQ4B6C", Source: "ProcessJRZQ4B6CRequest"},
{Key: "rating", ApiCode: "JRZQ5E9F", Source: "ProcessJRZQ5E9FRequest"},
{Key: "intent", ApiCode: "JRZQ3C7B", Source: "ProcessJRZQ3C7BRequest"},
{Key: "special", ApiCode: "JRZQV7MD", Source: "ProcessJRZQV7MDRequest"},
{Key: "complaint", ApiCode: "JRZQVT43", Source: "ProcessJRZQVT43Request"},
{Key: "behavior", ApiCode: "JRZQV0MD", Source: "ProcessJRZQV0MDRequest"},
{Key: "judicial", ApiCode: "FLXG7E8F", Source: "ProcessFLXG7E8FRequest"},
}
// dwbg9FB3OutputFieldOrder 最终 JSON 顶层字段顺序
var dwbg9FB3OutputFieldOrder = func() []string {
order := make([]string, len(dwbg9FB3OutputSchema))
for i, f := range dwbg9FB3OutputSchema {
order[i] = f.Key
}
return order
}()
// dwbg9FB3SubProductFieldNames 子产品编码 → 响应字段名
var dwbg9FB3SubProductFieldNames = func() map[string]string {
m := make(map[string]string, len(dwbg9FB3OutputSchema)-1)
for _, f := range dwbg9FB3OutputSchema {
if f.ApiCode == "" {
continue
}
m[f.ApiCode] = f.Key
}
return m
}()
// dwbg9FB3StripKeys 汇总报告中需剔除的上游流水号/追踪类字段
var dwbg9FB3StripKeys = map[string]struct{}{
"order_no": {},
"orderNo": {},
}
// stripDWBG9FB3MetaKeys 递归剔除子接口返回中的流水号等元数据字段
func stripDWBG9FB3MetaKeys(v interface{}) interface{} {
switch val := v.(type) {
case map[string]interface{}:
out := make(map[string]interface{}, len(val))
for k, item := range val {
if _, drop := dwbg9FB3StripKeys[k]; drop {
continue
}
out[k] = stripDWBG9FB3MetaKeys(item)
}
return out
case []interface{}:
out := make([]interface{}, len(val))
for i, item := range val {
out[i] = stripDWBG9FB3MetaKeys(item)
}
return out
default:
return v
}
}
// ProcessDWBG9FB3Request DWBG9FB3 API处理方法 - 个人风险档案
// 并发调用子产品处理器,将各子接口返回数据以大数据英文字段名拼接融合为一个对象
// ProcessDWBG9FB3Request DWBG9FB3 API处理方法 - 个人风险档案1
func ProcessDWBG9FB3Request(ctx context.Context, params []byte, deps *processors.ProcessorDependencies) ([]byte, error) {
var paramsDto dto.DWBG9FB3Req
if err := json.Unmarshal(params, &paramsDto); err != nil {
@@ -118,211 +21,28 @@ func ProcessDWBG9FB3Request(ctx context.Context, params []byte, deps *processors
return nil, errors.Join(processors.ErrInvalidParam, err)
}
log := logger.GetGlobalLogger()
log.Info("开始处理个人风险档案请求",
zap.String("name", paramsDto.Name),
zap.String("id_card", maskIDCard(paramsDto.IDCard)),
zap.String("mobile_no", maskMobile(paramsDto.MobileNo)),
)
body := map[string]string{
"name": paramsDto.Name,
"idCard": paramsDto.IDCard,
"mobile": paramsDto.MobileNo,
}
subProducts := collectDWBG9FB3SubProducts(ctx, paramsDto, deps, log)
result := buildDWBG9FB3Response(subProducts)
respBytes, err := json.Marshal(result)
nuoerDoCheckAPIKey := "gamaReportPageP01"
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)
}
log.Info("个人风险档案处理完成", zap.Int("field_count", len(result)))
respBytes, err := json.Marshal(resp.Data)
if err != nil {
return nil, errors.Join(processors.ErrSystem, err)
}
return respBytes, nil
}
// buildDWBG9FB3Response 按 dwbg9FB3OutputSchema 构造最终扁平返回结构
func buildDWBG9FB3Response(subProducts map[string]interface{}) map[string]interface{} {
result := make(map[string]interface{}, len(dwbg9FB3OutputSchema))
for _, field := range dwbg9FB3OutputSchema {
if field.Key == dwbg9FB3FieldRA {
result[field.Key] = buildDWBG9FB3RA(subProducts)
continue
}
if v, ok := subProducts[field.Key]; ok {
result[field.Key] = v
} else {
result[field.Key] = nil
}
}
return result
}
type dwbg9fb3APICall struct {
apiCode string
fieldName string
params map[string]interface{}
}
func collectDWBG9FB3SubProducts(
ctx context.Context,
params dto.DWBG9FB3Req,
deps *processors.ProcessorDependencies,
log *zap.Logger,
) map[string]interface{} {
apiCalls := []dwbg9fb3APICall{
{apiCode: "YYSYE7V5", fieldName: dwbg9FB3SubProductFieldNames["YYSYE7V5"], params: map[string]interface{}{"mobile_no": params.MobileNo}},
{apiCode: "YYSYP0T4", fieldName: dwbg9FB3SubProductFieldNames["YYSYP0T4"], params: map[string]interface{}{"mobile_no": params.MobileNo}},
{
apiCode: "YYSYK9R4",
fieldName: dwbg9FB3SubProductFieldNames["YYSYK9R4"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
},
},
{
apiCode: "IVYZN2P8",
fieldName: dwbg9FB3SubProductFieldNames["IVYZN2P8"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
},
},
{
apiCode: "JRZQV3HM",
fieldName: dwbg9FB3SubProductFieldNames["JRZQV3HM"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "JRZQ4B6C",
fieldName: dwbg9FB3SubProductFieldNames["JRZQ4B6C"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
"authorized": "1",
},
},
{
apiCode: "JRZQ5E9F",
fieldName: dwbg9FB3SubProductFieldNames["JRZQ5E9F"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
"authorized": "1",
},
},
{
apiCode: "JRZQ3C7B",
fieldName: dwbg9FB3SubProductFieldNames["JRZQ3C7B"],
params: map[string]interface{}{
"mobile_no": params.MobileNo,
"id_card": params.IDCard,
"name": params.Name,
"authorized": "1",
},
},
{
apiCode: "JRZQV7MD",
fieldName: dwbg9FB3SubProductFieldNames["JRZQV7MD"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "JRZQVT43",
fieldName: dwbg9FB3SubProductFieldNames["JRZQVT43"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "JRZQV0MD",
fieldName: dwbg9FB3SubProductFieldNames["JRZQV0MD"],
params: map[string]interface{}{
"id_card": params.IDCard,
"name": params.Name,
"mobile_no": params.MobileNo,
},
},
{
apiCode: "FLXG7E8F",
fieldName: dwbg9FB3SubProductFieldNames["FLXG7E8F"],
params: map[string]interface{}{
"name": params.Name,
"id_card": params.IDCard,
"mobile_no": params.MobileNo,
},
},
}
type callResult struct {
fieldName string
data interface{}
err error
}
results := make(chan callResult, len(apiCalls))
var wg sync.WaitGroup
for _, apiCall := range apiCalls {
wg.Add(1)
go func(ac dwbg9fb3APICall) {
defer wg.Done()
defer func() {
if r := recover(); r != nil {
log.Error("调用子产品处理器时发生panic",
zap.String("api_code", ac.apiCode),
zap.String("field_name", ac.fieldName),
zap.Any("panic", r),
)
results <- callResult{ac.fieldName, nil, fmt.Errorf("处理器panic: %v", r)}
}
}()
paramsBytes, err := json.Marshal(ac.params)
if err != nil {
results <- callResult{ac.fieldName, nil, err}
return
}
data, err := callProcessor(ctx, ac.apiCode, paramsBytes, deps)
results <- callResult{ac.fieldName, data, err}
}(apiCall)
}
go func() {
wg.Wait()
close(results)
}()
output := make(map[string]interface{}, len(apiCalls))
successCount := 0
for result := range results {
if result.err != nil {
log.Warn("子产品调用失败,该字段置空",
zap.String("field_name", result.fieldName),
zap.Error(result.err),
)
output[result.fieldName] = nil
continue
}
output[result.fieldName] = stripDWBG9FB3MetaKeys(result.data)
successCount++
}
log.Info("子产品调用完成",
zap.Int("total", len(apiCalls)),
zap.Int("success", successCount),
zap.Int("failed", len(apiCalls)-successCount),
)
return output
}

View File

@@ -1,139 +0,0 @@
# DWBG9FB3 RA 安全评估 — 千分制计算说明
## 核心原则
- 所有分值为**千分制0-1000**
- **分值越高越安全**(与风险扣分相反)
- 各维度先统计**风险扣分**,再换算:**安全分 = 1000 - 风险扣分**
## 字段与方法对应关系
| 输出字段 | 计算方法 | 统计逻辑 |
| :--- | :--- | :--- |
| `ra_fraud_score` | `calcRAFraudScore` | `1000 - calcRAFraudRiskPoints` |
| `ra_credit_score` | `calcRACreditScore` | `1000 - calcRACreditRiskPoints` |
| `ra_judicial_score` | `calcRAJudicialScore` | `1000 - calcRAJudicialRiskPoints` |
| `ra_verify_score` | `calcRAVerifyScore` | `1000 - calcRAVerifyRiskPoints` |
| `ra_score` | `buildDWBG9FB3RA` | 四维安全分加权汇总 |
| `ra_level` | `raLevelFromScore` | 由 `ra_score` 映射 A-F |
## 等级划分(越高越安全,每档间隔 100
| 等级 | 分数区间 | 含义 |
| :--- | :--- | :--- |
| A | 900 - 1000 | 最安全 |
| B | 800 - 899 | 较安全 |
| C | 700 - 799 | 一般 |
| D | 600 - 699 | 较不安全 |
| E | 500 - 599 | 不安全 |
| F | 0 - 499 | 最不安全 |
## 综合分公式ra_score
```
ra_score = round(
ra_fraud_score × 25% +
ra_credit_score × 35% +
ra_judicial_score × 25% +
ra_verify_score × 15%
)
```
---
## 一、ra_fraud_score
- **方法链:** `calcRAFraudScore``calcRAFraudRiskPoints``toRASafetyScore`
- **数据来源:** `behavior``complaint``fraud``special`
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 |
| :--- | :--- | :--- | :--- |
| 行为黑名单 | `behavior.result.black_list` | `"1"` | 500 |
| 行为黑标签 | `behavior.result.black_tag**` | 任意 `"1"` | 每个 80 |
| 投诉风险 | `complaint.result.score` | 有值 | score×10上限 300 |
| 欺诈黑名单 | `fraud.hit` | `1` | 400 |
| 特殊名单 | `special.Rule_final_decision` | `Reject` / `Review` | 350 / 200 |
**安全分 = 1000 - 风险扣分(上限 1000**
### 样例DWBG9FB3.json
风险扣分 110 → **ra_fraud_score = 890**
---
## 二、ra_credit_score
- **方法链:** `calcRACreditScore``calcRACreditRiskPoints``toRASafetyScore`
- **数据来源:** `probe``intent``rating`
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 |
| :--- | :--- | :--- | :--- |
| 当前逾期 | `probe.currently_overdue` | `"1"` | 300 |
| 睡眠账户 | `probe.acc_sleep` | `"1"` | 150 |
| 未履约 | `probe.currently_performance` | `"0"` | 100 |
| 探针命中 | `probe.result_code` | `"1"` | 100 |
| 借贷意向 | `intent.Rule_final_decision` | `Reject` / `Review` | 400 / 250 |
| 规则权重 | `intent.Rule_final_weight` | 有值 | weight×5上限 250 |
| 借选指数低 | `rating.score` | 0<score<500 | 500-score上限 300 |
### 样例DWBG9FB3.json
风险扣分 1100截断 1000)→ **ra_credit_score = 0**
---
## 三、ra_judicial_score
- **方法链** `calcRAJudicialScore` `calcRAJudicialRiskPoints` `toRASafetyScore`
- **数据来源** `judicial.judicial_data`
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 |
| :--- | :--- | :--- | :--- |
| 涉诉总件数 | `lawsuitStat.*.count.count_total` | 各类型累加 | 每件 80单项上限 400 |
| 未结案数 | `lawsuitStat.*.count.count_wei_total` | 各类型累加 | 每件 60单项上限 300 |
| 被告件数 | `lawsuitStat.*.count.count_beigao` | 各类型累加 | 每件 50单项上限 250 |
| 失信案件 | `breachCaseList` 长度 | 每条 | 150上限 450 |
| 限高名单 | `consumptionRestrictionList` 长度 | 每条 | 200上限 400 |
### 样例DWBG9FB3.json
风险扣分 420 **ra_judicial_score = 580**
---
## 四、ra_verify_score
- **方法链** `calcRAVerifyScore` `calcRAVerifyRiskPoints` `toRASafetyScore`
- **数据来源** `triple``identity``presence`
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 |
| :--- | :--- | :--- | :--- |
| 三要素不一致 | `triple.state` | 有值且不为 `"1"` | 400 |
| 二要素不一致 | `identity.result` | 不为 `0` | 400 |
| 在网异常 | `presence.desc` | 含停机/销号/不在网 | 150 |
| 状态码异常 | `presence.status` | 大于 `1` | 100 |
### 样例DWBG9FB3.json
风险扣分 150 **ra_verify_score = 850**
---
## 五、综合分与等级(样例)
```
ra_score = round(890×0.25 + 0×0.35 + 580×0.25 + 850×0.15)
= round(222.5 + 0 + 145 + 127.5)
= 495
ra_level = "F"
```
## 代码位置
| 方法 | 文件 |
| :--- | :--- |
| `buildDWBG9FB3RA` | `dwbg9fb3_ra.go` |
| `calcRA*Score` / `calcRA*RiskPoints` | `dwbg9fb3_ra.go` |
| `toRASafetyScore` | `dwbg9fb3_ra.go` |
| `raLevelFromScore` | `dwbg9fb3_ra.go` |

View File

@@ -1,374 +0,0 @@
# DWBG9FB3 RA 安全评估 — 千分制计算说明(三维度动态权重版)
> **修订说明**
> 本版本采用 **「身份固定 10% + 司法 / 借贷动态 90%」** 的三维度加权模型,突出个人司法与信贷风险的主次关系;司法维度细分为 **涉诉统计、失信被执行人、限高被执行人** 三类独立计分。
---
## 一、核心原则
- 所有分值采用 **千分制01000**
- **分值越高表示越安全**
- 统一计算路径:
```text
安全分 = 1000 风险扣分(单维上限 1000
```
- **个人身份信息权重固定 10%,不参与动态调整**
- **个人司法信息与借贷信息合计 90%,根据风险场景动态分配**
- **司法 + 借贷同时高风险时,强制归入 F 档(仍参与加权,分数上限 500**
---
## 二、综合分三维度结构
| 业务维度 | 输出字段 | 计算方法 | 基准权重 | 是否动态 |
| :--- | :--- | :--- | :--- | :--- |
| 个人身份信息 | `ra_verify_score` | `calcRAVerifyScore` | **10%(固定)** | 否 |
| 个人司法信息 | `ra_judicial_score` | `calcRAJudicialScore` | **50%(基准)** | 是 |
| 借贷信息 | `ra_credit_score` | `calcRACreditScore` | **40%(基准)** | 是 |
> 基准权重合计:`10% + 50% + 40% = 100%`
### 辅助输出字段(不参与综合分加权)
| 输出字段 | 计算方法 | 说明 |
| :--- | :--- | :--- |
| `ra_fraud_score` | `calcRAFraudScore` | 欺诈 / 黑名单维度,单独输出供业务参考 |
| `ra_score` | `buildDWBG9FB3RA` | 三维度动态加权汇总 |
| `ra_level` | `raLevelFromScore` | 由 `ra_score` 映射 AF |
---
## 三、等级划分(含 F 级)
千分制下 **每档间隔 100 分**F 为 **500 分以下**
| 等级 | 分数区间 | 含义 |
| :--- | :--- | :--- |
| A | 900 1000 | 最安全 |
| B | 800 899 | 较安全 |
| C | 700 799 | 一般 |
| D | 600 699 | 较不安全 |
| E | 500 599 | 不安全 |
| **F** | **0 499** | **最不安全** |
> 另:司法 + 借贷双重高风险时 **强制 F 档**(仍按三维度加权计算 `ra_score`,封顶 **500 分**,不置 0
---
## 四、动态权重机制
### 1⃣ 风险标志位
```text
HAS_JUDICIAL_RISK =
ra_judicial_score < 1000
HAS_CREDIT_RISK =
ra_credit_score < 1000
HAS_SEVERE_JUDICIAL =
ra_judicial_score ≤ 400
OR breachCaseList 非空
OR consumptionRestrictionList 非空
HAS_SEVERE_CREDIT =
ra_credit_score ≤ 400
```
---
### 2⃣ 权重分配表
**固定项:个人身份信息始终占 10%**
| 场景 | 个人身份 | 个人司法 | 借贷 | 说明 |
| :--- | :--- | :--- | :--- | :--- |
| **基准(无显著风险)** | **10%** | **50%** | **40%** | 默认比例 |
| **有司法风险** | **10%** | **65%** | **25%** | 司法权重上调,借贷权重下调 |
| **有借贷风险、无司法风险** | **10%** | **40%** | **50%** | 借贷权重上调,司法权重下调 |
| **司法 + 借贷均有风险** | **10%** | **70%** | **20%** | 司法优先于借贷 |
> 动态权重仅调整 **司法 / 借贷** 两个维度,三者之和恒为 100%。
---
### 3⃣ 综合分计算公式
```text
// 第一步:确定司法 / 借贷权重(身份固定 0.10
IF HAS_JUDICIAL_RISK AND HAS_CREDIT_RISK:
w_judicial = 0.70, w_credit = 0.20
ELSE IF HAS_JUDICIAL_RISK:
w_judicial = 0.65, w_credit = 0.25
ELSE IF HAS_CREDIT_RISK:
w_judicial = 0.40, w_credit = 0.50
ELSE:
w_judicial = 0.50, w_credit = 0.40
w_verify = 0.10 // 固定
// 第二步:加权汇总
ra_score = round(
ra_verify_score × w_verify +
ra_judicial_score × w_judicial +
ra_credit_score × w_credit
)
```
---
## 五、F 档强判规则(最高优先级)
同时满足以下条件时,**强制归入 F 档**
| 条件 | 判定标准 |
| :--- | :--- |
| 司法高风险 | `ra_judicial_score ≤ 400` |
| 借贷高风险 | `ra_credit_score ≤ 400` |
| 命中总条数 | 司法 + 借贷 **合计命中 > 5 条** |
**命中条数统计:**
| 维度 | 计数方式 |
| :--- | :--- |
| 司法 | `lawsuitStat.*.count.count_total` 累加 + `breachCaseList` 条数 + `consumptionRestrictionList` 条数 |
| 借贷 | 探针命中项(逾期 / 睡眠 / 未履约 / 探针)+ 借贷意向Reject / Review+ 借选模型分低(`xyp_model_score_*` 各 1 条) |
```text
// 第一步:正常三维度动态加权(与常规定价路径相同)
ra_score_raw = round(
ra_verify_score × 0.10 +
ra_judicial_score × w_judicial +
ra_credit_score × w_credit
)
// 第二步:强制 F 档映射(保留分数,不置 0
ra_level = "F"
ra_score = min(ra_score_raw, 500)
```
> 双高风险场景 **仍参与加权**,仅覆盖等级为 F并将综合分 **封顶 500**F 档最高分)。
---
## 六、各维度风险扣分规则
### 1⃣ ra_verify_score个人身份信息权重 10% 固定)
- **方法链:** `calcRAVerifyScore → calcRAVerifyRiskPoints → toRASafetyScore`
- **数据来源:** `triple`、`identity`、`presence`
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 |
| :--- | :--- | :--- | :--- |
| 三要素不一致 | `triple.state` | 有值且不为 `"1"` | 387 |
| 二要素不一致 | `identity.result` | 不为 `0` | 387 |
| 在网异常 | `presence.desc` | 含停机 / 销号 / 不在网 | 73 |
| 状态码异常 | `presence.status` | 大于 `1` | 47 |
> 身份核验为 **基础准入项**,权重低但不可忽略;不一致时单项扣分仍可达 387774 分。
---
### 2⃣ ra_judicial_score个人司法信息基准权重 50%,可动态上调)
- **方法链:** `calcRAJudicialScore → calcRAJudicialRiskPoints → toRASafetyScore`
- **数据来源:** `judicial.judicial_data`FLXG7E8F 个人司法数据查询)
- **子维度结构:** 涉诉统计 + 失信被执行人 + 限高被执行人(三类独立累加)
- **计分方式:** 按 **命中条数 / 件数** 统计,遍历累加后换算安全分
| 子维度 | 命中统计方式 | 代码实现 |
| :--- | :--- | :--- |
| 涉诉统计 | 各类型 `*.count` 字段累加件数 | `lawsuitStat.*.count` 遍历求和 |
| 失信被执行人 | `breachCaseList` 数组长度 = 命中条数 | `len(breachCaseList)` |
| 限高被执行人 | `consumptionRestrictionList` 数组长度 = 命中条数 | `len(consumptionRestrictionList)` |
#### 2.1 涉诉统计lawsuitStat
遍历 `lawsuitStat` 下各类型节点(如 `civil`、`criminal`、`administrative`、`preservation`、`implement`、`bankrupt` 等),读取 `*.count` 累加。
扣分采用 **非整齐系数**(避免 50/80/100 等整齐倍数),例如涉诉总件数按 **件数 × 47** 折算:
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 | 单项上限 |
| :--- | :--- | :--- | :--- | :--- |
| 涉诉总件数 | `lawsuitStat.*.count.count_total` | 各类型累加 | **件数 × 47** | 387 |
| 未结案数 | `lawsuitStat.*.count.count_wei_total` | 各类型累加 | **件数 × 38** | 293 |
| 被告件数 | `lawsuitStat.*.count.count_beigao` | 各类型累加 | **件数 × 33** | 247 |
#### 2.2 失信被执行人breachCaseList
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 | 单项上限 |
| :--- | :--- | :--- | :--- | :--- |
| 失信执行人记录 | `breachCaseList` 长度 | 每条记录 | **条数 × 143** | **437** |
- 对应最高法 **失信被执行人名单**
- 命中即视为 **重度司法风险**,触发动态权重向司法倾斜(`HAS_JUDICIAL_RISK = true`
- 单条扣分高于普通涉诉件数,体现执行阶段信用惩戒的严重性
#### 2.3 限高被执行人consumptionRestrictionList
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 | 单项上限 |
| :--- | :--- | :--- | :--- | :--- |
| 限高执行人记录 | `consumptionRestrictionList` 长度 | 每条记录 | **条数 × 187** | **413** |
- 对应 **限制高消费被执行人名单**
- 单条扣分高于失信记录,体现对消费 / 出行能力的直接限制
- 与失信记录 **独立计分、互不替代**,可同时累加
#### 2.4 司法子维度扣分优先级(业务解释)
| 优先级 | 子维度 | 典型场景 | 相对严重度 |
| :--- | :--- | :--- | :--- |
| 1 | 限高被执行人 | 已被法院采取限高措施 | 最高 |
| 2 | 失信被执行人 | 已被列入失信名单 | 高 |
| 3 | 未结案涉诉 | 纠纷仍在审理 / 执行中 | 中 |
| 4 | 被告涉诉 | 作为被告被起诉 | 中 |
| 5 | 历史涉诉(已结案) | 仅 count_total 有值 | 相对较低 |
---
### 3⃣ ra_credit_score借贷信息基准权重 40%,可动态上调)
- **方法链:** `calcRACreditScore → calcRACreditRiskPoints → toRASafetyScore`
- **数据来源:** `probe`、`intent`、`rating`JRZQ5E9F / loanRiskTagV21
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 |
| :--- | :--- | :--- | :--- |
| 当前逾期 | `probe.currently_overdue` | `"1"` | 287 |
| 睡眠账户 | `probe.acc_sleep` | `"1"` | 143 |
| 未履约 | `probe.currently_performance` | `"0"` | 97 |
| 探针命中 | `probe.result_code` | `"1"` | 103 |
| 借贷意向 | `intent.Rule_final_decision` | `Reject` / `Review` | 387 / 237 |
| 规则权重 | `intent.Rule_final_weight` | 有值 | **weight × 4**,上限 243 |
| 小额网贷分低 | `rating.xyp_model_score_high` | 命中且 < 650 | 650score上限 97 |
| 小额分期分低 | `rating.xyp_model_score_mid` | 命中且 < 650 | 650score上限 97 |
| 中大额分期分低 | `rating.xyp_model_score_low` | 命中且 < 650 | 650score上限 97 |
**借选指数模型分说明JRZQ5E9F**
| 字段 | 含义 | 取值范围 |
| :--- | :--- | :--- |
| `xyp_model_score_high` | 星耀Pro 小额网贷分 V1 | [350, 950],越大逾期率越低 |
| `xyp_model_score_mid` | 星耀Pro 小额分期分 V1 | [350, 950],越大逾期率越低 |
| `xyp_model_score_low` | 星耀Pro 中大额分期分 V1 | [350, 950],越大逾期率越低 |
> 未命中为 `-1`,不参与扣分;三项独立计分,合计扣分上限 291。
---
### 4⃣ ra_fraud_score欺诈辅助输出不参与加权
- **方法链:** `calcRAFraudScore → calcRAFraudRiskPoints → toRASafetyScore`
- **数据来源:** `behavior`、`complaint`、`fraud`、`special`
| 风险扣分项 | 子字段路径 | 触发条件 | 扣分 |
| :--- | :--- | :--- | :--- |
| 行为黑名单 | `behavior.result.black_list` | `"1"` | 23 |
| 行为黑标签 | `behavior.result.black_tag**` | 任意 `"1"` | 23 / 项 |
| 投诉风险 | `complaint.result.score` | 有值且 > 0 | 23 |
| 欺诈黑名单 | `fraud.hit` | `1` | 23 |
| 特殊名单 | `special.Rule_final_decision` | `Reject` / `Review` | 23 |
> 欺诈维度采用 **「每命中一项扣 23 分」** 统一计分,多项独立累加,单维上限 1000。
> 欺诈信号仍单独计算并返回 `ra_fraud_score`,供风控人工复核;**不进入 `ra_score` 三维度加权**,避免与借贷维度重复计分。
---
## 七、综合分与等级计算样例
### ✅ 样例 1基准场景无显著风险 → A
| 维度 | 安全分 | 权重 |
| :--- | :--- | :--- |
| 个人身份 | 920 | 10% |
| 个人司法 | 980 | 50% |
| 借贷 | 760 | 40% |
```text
ra_score = 920×0.10 + 980×0.50 + 760×0.40
= 92 + 490 + 304
= 886 → A
```
---
### ⚠️ 样例 2命中失信 + 限高(司法权重上调 → C/D
| 维度 | 安全分 | 说明 |
| :--- | :--- | :--- |
| 个人身份 | 900 | 核验正常 |
| 个人司法 | 670 | 失信 1 条 + 限高 1 条,扣分 330143+187 |
| 借贷 | 680 | 轻度借贷风险 |
动态权重:身份 10% + 司法 65% + 借贷 25%
```text
ra_score = 900×0.10 + 670×0.65 + 680×0.25
= 90 + 435.5 + 170
= 696 → C
```
---
### ⚠️ 样例 3仅借贷风险借贷权重上调 → B/C
| 维度 | 安全分 |
| :--- | :--- |
| 个人身份 | 880 |
| 个人司法 | 1000 |
| 借贷 | 520 |
动态权重:身份 10% + 司法 40% + 借贷 50%
```text
ra_score = 880×0.10 + 1000×0.40 + 520×0.50
= 88 + 400 + 260
= 748 → B
```
---
### ❌ 样例 4司法 + 借贷双高(强制 F 档)
- `ra_judicial_score = 197`(失信 3 条 ×143 + 限高 2 条 ×187扣分 803司法命中 **5 条**
- `ra_credit_score = 0`(逾期 287 + 未履约 97 + 探针 103 + Reject 387 + 权重 40×4扣分超 1000借贷命中 **4 条**
- 合计命中 **9 条 > 5**,满足强制 F 条件
- `ra_verify_score = 1000`
动态权重:身份 10% + 司法 70% + 借贷 20%
```text
ra_score_raw = 1000×0.10 + 197×0.70 + 0×0.20
= 100 + 137.9 + 0
= 238
→ 强制 F 档ra_level = "F"ra_score = min(238, 500) = 238
```
---
## 八、代码位置
| 方法 | 文件 |
| :--- | :--- |
| `buildDWBG9FB3RA` | `dwbg9fb3_ra.go` |
| `calcRA*Score` / `calcRA*RiskPoints` | `dwbg9fb3_ra.go` |
| `toRASafetyScore` | `dwbg9fb3_ra.go` |
| `raLevelFromScore` | `dwbg9fb3_ra.go` |
---
## 九、变更总结
| 项目 | 原方案 | 新方案 |
| :--- | :--- | :--- |
| 加权维度 | 欺诈 + 借贷 + 司法 + 身份(四维) | **身份 + 司法 + 借贷(三维)** |
| 身份权重 | 15%20% 浮动 | **固定 10%** |
| 司法 / 借贷权重 | 各自独立浮动 | **基准 50% / 40%,动态互调** |
| 司法子维度 | 合并描述 | **涉诉统计 / 失信执行人 / 限高执行人 分项说明** |
| 限高 vs 失信 | 同表罗列 | **限高 ×187/条、失信 ×143/条,独立计分** |
| 欺诈维度 | 参与加权 | **单独输出,不参与 `ra_score`;每命中一项扣 23 分** |
| 扣分系数 | 整齐 5/10 倍数 | **47/38/33/143/187 等非整齐系数** |
| 双高风险 | 强制 0 分 | **加权计分 + 强制 F 档,封顶 500** |
| 等级区间 | A:800+ / B:600+ … | **每档 100 分F: 0499** |
| 借选指数 | `rating.score` | **`xyp_model_score_high/mid/low`JRZQ5E9F** |