From d5fa2f0a152510ef468c9d45efe83bde2e39a967 Mon Sep 17 00:00:00 2001 From: Mrx <18278715334@163.com> Date: Wed, 10 Jun 2026 21:12:37 +0800 Subject: [PATCH] f --- internal/domains/api/dto/api_request_dto.go | 13 + .../api/services/api_request_service.go | 4 +- .../api/services/form_config_service.go | 4 +- .../services/processors/dwbg/DWBG9FB3.json | 876 ------------------ .../dwbg/DWBG9FB3_desensitized.json | 876 ------------------ .../services/processors/dwbg/desensitize.js | 4 +- .../processors/dwbg/dwbg3bf9_processor.go | 328 +++++++ .../dwbg/{dwbg9fb3_ra.go => dwbg3bf9_ra.go} | 48 +- .../processors/dwbg/dwbg3bf9_ra_indices.go | 234 +++++ ...wbg9fb3_ra_test.go => dwbg3bf9_ra_test.go} | 79 +- .../processors/dwbg/dwbg9fb2_processor.go | 48 + .../api/services/processors/dwbg/dwbg9fb3.md | 224 ----- .../processors/dwbg/dwbg9fb3_processor.go | 320 +------ .../services/processors/dwbg/dwbg9fb3_ra.md | 139 --- .../processors/dwbg/dwbg9fb3评分规则.md | 374 -------- 15 files changed, 744 insertions(+), 2827 deletions(-) delete mode 100644 internal/domains/api/services/processors/dwbg/DWBG9FB3.json delete mode 100644 internal/domains/api/services/processors/dwbg/DWBG9FB3_desensitized.json create mode 100644 internal/domains/api/services/processors/dwbg/dwbg3bf9_processor.go rename internal/domains/api/services/processors/dwbg/{dwbg9fb3_ra.go => dwbg3bf9_ra.go} (87%) create mode 100644 internal/domains/api/services/processors/dwbg/dwbg3bf9_ra_indices.go rename internal/domains/api/services/processors/dwbg/{dwbg9fb3_ra_test.go => dwbg3bf9_ra_test.go} (77%) create mode 100644 internal/domains/api/services/processors/dwbg/dwbg9fb2_processor.go delete mode 100644 internal/domains/api/services/processors/dwbg/dwbg9fb3.md delete mode 100644 internal/domains/api/services/processors/dwbg/dwbg9fb3_ra.md delete mode 100644 internal/domains/api/services/processors/dwbg/dwbg9fb3评分规则.md diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index b85d314..b2dcb6b 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -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"` diff --git a/internal/domains/api/services/api_request_service.go b/internal/domains/api/services/api_request_service.go index fe4cf51..9d480a2 100644 --- a/internal/domains/api/services/api_request_service.go +++ b/internal/domains/api/services/api_request_service.go @@ -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, diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index d7efa55..f278713 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -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 } diff --git a/internal/domains/api/services/processors/dwbg/DWBG9FB3.json b/internal/domains/api/services/processors/dwbg/DWBG9FB3.json deleted file mode 100644 index 5c0715e..0000000 --- a/internal/domains/api/services/processors/dwbg/DWBG9FB3.json +++ /dev/null @@ -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" - } - } \ No newline at end of file diff --git a/internal/domains/api/services/processors/dwbg/DWBG9FB3_desensitized.json b/internal/domains/api/services/processors/dwbg/DWBG9FB3_desensitized.json deleted file mode 100644 index d450c0e..0000000 --- a/internal/domains/api/services/processors/dwbg/DWBG9FB3_desensitized.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/internal/domains/api/services/processors/dwbg/desensitize.js b/internal/domains/api/services/processors/dwbg/desensitize.js index 233aae4..a2a35f3 100644 --- a/internal/domains/api/services/processors/dwbg/desensitize.js +++ b/internal/domains/api/services/processors/dwbg/desensitize.js @@ -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('脱敏完成!'); diff --git a/internal/domains/api/services/processors/dwbg/dwbg3bf9_processor.go b/internal/domains/api/services/processors/dwbg/dwbg3bf9_processor.go new file mode 100644 index 0000000..7f124cc --- /dev/null +++ b/internal/domains/api/services/processors/dwbg/dwbg3bf9_processor.go @@ -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, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + 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 +} diff --git a/internal/domains/api/services/processors/dwbg/dwbg9fb3_ra.go b/internal/domains/api/services/processors/dwbg/dwbg3bf9_ra.go similarity index 87% rename from internal/domains/api/services/processors/dwbg/dwbg9fb3_ra.go rename to internal/domains/api/services/processors/dwbg/dwbg3bf9_ra.go index 5b70b91..2f7e885 100644 --- a/internal/domains/api/services/processors/dwbg/dwbg9fb3_ra.go +++ b/internal/domains/api/services/processors/dwbg/dwbg3bf9_ra.go @@ -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 统计欺诈维度风险扣分(计入个人身份区,分值越高代表越不安全) // 每命中一项扣 raFraudPointsPerHit(23)分,多项独立累加 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) } diff --git a/internal/domains/api/services/processors/dwbg/dwbg3bf9_ra_indices.go b/internal/domains/api/services/processors/dwbg/dwbg3bf9_ra_indices.go new file mode 100644 index 0000000..3f3b048 --- /dev/null +++ b/internal/domains/api/services/processors/dwbg/dwbg3bf9_ra_indices.go @@ -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 +} diff --git a/internal/domains/api/services/processors/dwbg/dwbg9fb3_ra_test.go b/internal/domains/api/services/processors/dwbg/dwbg3bf9_ra_test.go similarity index 77% rename from internal/domains/api/services/processors/dwbg/dwbg9fb3_ra_test.go rename to internal/domains/api/services/processors/dwbg/dwbg3bf9_ra_test.go index be0e152..c829f68 100644 --- a/internal/domains/api/services/processors/dwbg/dwbg9fb3_ra_test.go +++ b/internal/domains/api/services/processors/dwbg/dwbg3bf9_ra_test.go @@ -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) diff --git a/internal/domains/api/services/processors/dwbg/dwbg9fb2_processor.go b/internal/domains/api/services/processors/dwbg/dwbg9fb2_processor.go new file mode 100644 index 0000000..2d0af1c --- /dev/null +++ b/internal/domains/api/services/processors/dwbg/dwbg9fb2_processor.go @@ -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, ¶msDto); err != nil { + return nil, errors.Join(processors.ErrSystem, err) + } + + if err := deps.Validator.ValidateStruct(paramsDto); err != nil { + return nil, errors.Join(processors.ErrInvalidParam, err) + } + + body := map[string]string{ + "name": paramsDto.Name, + "idCard": paramsDto.IDCard, + "mobile": paramsDto.MobileNo, + } + + nuoerDoCheckAPIKey := "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 +} diff --git a/internal/domains/api/services/processors/dwbg/dwbg9fb3.md b/internal/domains/api/services/processors/dwbg/dwbg9fb3.md deleted file mode 100644 index ab43201..0000000 --- a/internal/domains/api/services/processors/dwbg/dwbg9fb3.md +++ /dev/null @@ -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[英文字段名]子处理器原始数据`。 -- 子产品数据保持各处理器原有返回结构,不做二次转换。 diff --git a/internal/domains/api/services/processors/dwbg/dwbg9fb3_processor.go b/internal/domains/api/services/processors/dwbg/dwbg9fb3_processor.go index 2f467c6..da64038 100644 --- a/internal/domains/api/services/processors/dwbg/dwbg9fb3_processor.go +++ b/internal/domains/api/services/processors/dwbg/dwbg9fb3_processor.go @@ -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, ¶msDto); 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 -} diff --git a/internal/domains/api/services/processors/dwbg/dwbg9fb3_ra.md b/internal/domains/api/services/processors/dwbg/dwbg9fb3_ra.md deleted file mode 100644 index e8a5d23..0000000 --- a/internal/domains/api/services/processors/dwbg/dwbg9fb3_ra.md +++ /dev/null @@ -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 **修订说明** -> 本版本采用 **「身份固定 10% + 司法 / 借贷动态 90%」** 的三维度加权模型,突出个人司法与信贷风险的主次关系;司法维度细分为 **涉诉统计、失信被执行人、限高被执行人** 三类独立计分。 - ---- - -## 一、核心原则 - -- 所有分值采用 **千分制(0–1000)** -- **分值越高表示越安全** -- 统一计算路径: - - ```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` 映射 A–F | - ---- - -## 三、等级划分(含 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 | - -> 身份核验为 **基础准入项**,权重低但不可忽略;不一致时单项扣分仍可达 387–774 分。 - ---- - -### 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 | 650−score,上限 97 | -| 小额分期分低 | `rating.xyp_model_score_mid` | 命中且 < 650 | 650−score,上限 97 | -| 中大额分期分低 | `rating.xyp_model_score_low` | 命中且 < 650 | 650−score,上限 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 条,扣分 330(143+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: 0–499** | -| 借选指数 | `rating.score` | **`xyp_model_score_high/mid/low`(JRZQ5E9F)** |