Browse Source

福州农商银行提交代码

master
chengjie 2 months ago
parent
commit
a268015d13
  1. 11
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/RWACalculator.java
  2. 26
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceCredit.java
  3. 60
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceCustomer.java
  4. 64
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceDebt.java
  5. 45
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceSecurityPosition.java
  6. 30
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/AccordRiskToolParam.java
  7. 328
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/AccordRiskToolParamSorted.java
  8. 308
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/BnfxqzParam2.java
  9. 33
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/CustomerParam.java
  10. 163
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/DebtRiskParam.java
  11. 21
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/ParamRuleMain.java
  12. 111
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductCls.java
  13. 307
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductMappingRule.java
  14. 103
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductRuleDtl.java
  15. 77
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductRuleMain.java
  16. 168
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/ParamCache.java
  17. 203
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step01.java
  18. 326
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step02.java
  19. 26
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step1.java
  20. 18
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step2.java
  21. 38
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step4.java
  22. 2
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/support/TableMappingColumns.java
  23. 12
      io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/utils/DateUtil.java
  24. 38
      io.sc.engine.rwa.calculator/src/main/resources/data/RWA_P_REGULATE_CUSTOMER_RULE.csv
  25. 1253
      io.sc.engine.rwa.calculator/src/main/resources/data/RWA_P_REGULATE_PROD_RULE.csv

11
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/RWACalculator.java

@ -47,10 +47,15 @@ public class RWACalculator {
Step1 step1 = new Step1(cache, paramCache);
step1.exec();
tm.info("标准数据模型映射,成功。");
//第二步:识别表内风险暴露分类
//第二步:识别监管产品类型
tm.info("识别监管产品类型,启动......");
Step01 step01 = new Step01(cache, paramCache);
step01.exec();
tm.info("识别监管产品类型,成功。");
//第三步:识别表内风险暴露分类
tm.info("债项表内风险暴露分类,启动......");
Step2 step2 = new Step2(cache, paramCache);
step2.exec();
Step02 step02 = new Step02(cache, paramCache);
step02.exec();
tm.info("债项表内风险暴露分类,成功。");
//第四步:识别合格缓释工具,并进行缓释分配
tm.info("合格缓释工具识别及缓释分配,启动......");

26
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceCredit.java

@ -41,6 +41,8 @@ public class SourceCredit extends BaseEntity {
colMap.put("ORIGINAL_TERM_TYPE",21);
colMap.put("LGD",22);
colMap.put("BELONG_ORG",23);
colMap.put("SELF_OPEN_CREDIT_FLAG",24);
colMap.put("IN_CREDIT_FLAG",25);
}
@Override
public void setColumnValue(String[] row){
@ -69,6 +71,8 @@ public class SourceCredit extends BaseEntity {
setORIGINAL_TERM_TYPE(row[21]); //原始期限类型
setLGD(toEmptyDouble(Double.valueOf(row[22])));
setBELONG_ORG(row[23]);
setSELF_OPEN_CREDIT_FLAG(row[24]); //自开信用证标志
setIN_CREDIT_FLAG(row[25]); //国内信用证标志
}
}
@ -105,6 +109,24 @@ public class SourceCredit extends BaseEntity {
private String ORIGINAL_TERM_TYPE; //原始期限类型
private Double LGD; //违约损失率
private String BELONG_ORG; //业务所属机构
private String SELF_OPEN_CREDIT_FLAG; //自开信用证标志
private String IN_CREDIT_FLAG; //国内信用证标志
public String getIN_CREDIT_FLAG() {
return IN_CREDIT_FLAG;
}
public void setIN_CREDIT_FLAG(String IN_CREDIT_FLAG) {
this.IN_CREDIT_FLAG = IN_CREDIT_FLAG;
}
public String getSELF_OPEN_CREDIT_FLAG() {
return SELF_OPEN_CREDIT_FLAG;
}
public void setSELF_OPEN_CREDIT_FLAG(String SELF_OPEN_CREDIT_FLAG) {
this.SELF_OPEN_CREDIT_FLAG = SELF_OPEN_CREDIT_FLAG;
}
public Double getLGD() {
return LGD;
@ -144,12 +166,12 @@ public class SourceCredit extends BaseEntity {
@Override
public Integer getColumnCount() {
return 30;
return 32;
}
@Override
public String[] getColumnDataType() {
return new String[]{
"String","String","String","String","String","String","String","String","String","String","String","String","String","Double","String","String","String","Double","Double","Integer","String","String","Double","String"
"String","String","String","String","String","String","String","String","String","String","String","String","String","Double","String","String","String","Double","Double","Integer","String","String","Double","String","String","String"
};
}

60
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceCustomer.java

@ -81,6 +81,11 @@ public class SourceCustomer extends BaseEntity {
setPD(row[59]); //违约概率
setL3_INCOME_AVG(row[60]); //近3年营业收入平均值
setTOTAL_ASSET(row[61]); //总资产
setCORE_MARKET_PARTY_FLAG(row[62]);
setCENTRE_CUST_FLAG(row[63]);
setLOWEST_ASSET_REQ_FLAG(row[64]);
setREGULATE_ASSET_REQ_FLAG(row[65]);
setCORE_CAPITAL_ADEQUACY_RATIO_REQ(row[66]);
}
}
private String ID; //ID
@ -156,6 +161,52 @@ public class SourceCustomer extends BaseEntity {
private String PD; //违约概率
private String L3_INCOME_AVG; //近三年营业收入平均值
private String TOTAL_ASSET; //总资产
/***add 2024-12-16 begin***/
private String CORE_MARKET_PARTY_FLAG; //核心市场交易者标识
private String CENTRE_CUST_FLAG; //合格中央交易对手标识
private String LOWEST_ASSET_REQ_FLAG; //是否满足当地监管最低资本要求
private String REGULATE_ASSET_REQ_FLAG; //是否满足当地监管资本要求
private String CORE_CAPITAL_ADEQUACY_RATIO_REQ; //当地监管核心一级资本充足率要求
/***add 2024-12-16 end***/
public String getLOWEST_ASSET_REQ_FLAG() {
return LOWEST_ASSET_REQ_FLAG;
}
public void setLOWEST_ASSET_REQ_FLAG(String LOWEST_ASSET_REQ_FLAG) {
this.LOWEST_ASSET_REQ_FLAG = LOWEST_ASSET_REQ_FLAG;
}
public String getREGULATE_ASSET_REQ_FLAG() {
return REGULATE_ASSET_REQ_FLAG;
}
public void setREGULATE_ASSET_REQ_FLAG(String REGULATE_ASSET_REQ_FLAG) {
this.REGULATE_ASSET_REQ_FLAG = REGULATE_ASSET_REQ_FLAG;
}
public String getCORE_CAPITAL_ADEQUACY_RATIO_REQ() {
return CORE_CAPITAL_ADEQUACY_RATIO_REQ;
}
public void setCORE_CAPITAL_ADEQUACY_RATIO_REQ(String CORE_CAPITAL_ADEQUACY_RATIO_REQ) {
this.CORE_CAPITAL_ADEQUACY_RATIO_REQ = CORE_CAPITAL_ADEQUACY_RATIO_REQ;
}
public String getCORE_MARKET_PARTY_FLAG() {
return CORE_MARKET_PARTY_FLAG;
}
public void setCORE_MARKET_PARTY_FLAG(String CORE_MARKET_PARTY_FLAG) {
this.CORE_MARKET_PARTY_FLAG = CORE_MARKET_PARTY_FLAG;
}
public String getCENTRE_CUST_FLAG() {
return CENTRE_CUST_FLAG;
}
public void setCENTRE_CUST_FLAG(String CENTRE_CUST_FLAG) {
this.CENTRE_CUST_FLAG = CENTRE_CUST_FLAG;
}
public String getTOTAL_ASSET() {
return TOTAL_ASSET;
@ -235,12 +286,12 @@ public class SourceCustomer extends BaseEntity {
@Override
public Integer getColumnCount() {
return 68;
return 73;
}
@Override
public String[] getColumnDataType() {
return new String[]{
"String","String","String","String","String","String","String","String","String","String","String","String","String","String","String","Double","Double","Double","String","String","String","String","String","String","String","String","String","String","Double","Double","Double","Double","Double","Double","String","String","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","String","String","String","String","String","Double","Double","Double"
"String","String","String","String","String","String","String","String","String","String","String","String","String","String","String","Double","Double","Double","String","String","String","String","String","String","String","String","String","String","Double","Double","Double","Double","Double","Double","String","String","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","Double","String","String","String","String","String","Double","Double","Double","String","String","String","String","String"
};
}
@ -317,6 +368,11 @@ public class SourceCustomer extends BaseEntity {
colMap.put("PD" ,59);
colMap.put("L3_INCOME_AVG" ,60);
colMap.put("TOTAL_ASSET" ,61);
colMap.put("CORE_MARKET_PARTY_FLAG" ,62);
colMap.put("CENTRE_CUST_FLAG" ,63);
colMap.put("LOWEST_ASSET_REQ_FLAG" ,64);
colMap.put("REGULATE_ASSET_REQ_FLAG" ,65);
colMap.put("CORE_CAPITAL_ADEQUACY_RATIO_REQ" ,66);
}
public String getDATA_DT() {

64
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceDebt.java

@ -55,7 +55,7 @@ public class SourceDebt extends BaseEntity {
setDEPEND_ON_CASHFLOW(row[31]); //实质依赖房地产所产生的的现金流标志
setSAME_PLED_TOTAL_BALANCE(toEmptyDouble(Double.valueOf(row[32]))); //被同一房地产担保且无其他银行中间抵押权的多笔债项合计贷款余额
setTOGETHER_MORTGAGE_FLAG(row[33]); //被商用房和居住用房共同抵押标识
setTOGETHER_MORT_VALUE(toEmptyDouble(Double.valueOf(row[34]))); //被商用房和居住用房共同抵押的合计房地产价值
setTOGETHER_MORT_VALUE(toEmptyDouble(Double.valueOf(row[34]))); //被商用房和居住用房共同抵押的商用房地产价值
setTOGETHER_MORT_HOUSE_VALUE(toEmptyDouble(Double.valueOf(row[35]))); //被商用房和居住用房共同抵押的居住用房地产价值
setMORT_ESTATE_VALUE(toEmptyDouble(Double.valueOf(row[36]))); //房地产抵押物价值
setIS_OVERDUE(row[37]); //是否逾期标志
@ -68,6 +68,11 @@ public class SourceDebt extends BaseEntity {
setLGD(toEmptyDouble(Double.valueOf(row[44]))); //违约损失率
setBELONG_ORG(row[45]); //业务所属机构
setFLUCTUATION_FLAG(row[46]); //波动性较大标识
setREAL_ESTATE_FLAG(row[47]); //是否为不动产
setREAL_ESTATE_SELF_USE_FLAG(row[48]); //不动产是否自用
setLEGAL_DISPOSAL_UNSELF_RE_FLAG(row[49]); //是否为因行使抵押权等方式而持有并在法律规定处分期限内的非自用不动产
setORIGINAL_TERM(row[50]);
setORIGINAL_TERM_TYPE(row[51]);
}
}
private String ID; //ID
@ -118,7 +123,7 @@ public class SourceDebt extends BaseEntity {
private String DEPEND_ON_CASHFLOW; //实质依赖房地产所产生的的现金流标志
private Double SAME_PLED_TOTAL_BALANCE; //被同一房地产担保且无其他银行中间抵押权的多笔债项合计贷款余额
private String TOGETHER_MORTGAGE_FLAG; //被商用房和居住用房共同抵押标识
private Double TOGETHER_MORT_VALUE; //被商用房和居住用房共同抵押的合计房地产价值
private Double TOGETHER_MORT_VALUE; //被商用房和居住用房共同抵押的商用房地产价值
private Double TOGETHER_MORT_HOUSE_VALUE; //被商用房和居住用房共同抵押的居住用房地产价值
private Double MORT_ESTATE_VALUE; //房地产抵押物价值
private String IS_OVERDUE; //是否逾期标志
@ -131,6 +136,52 @@ public class SourceDebt extends BaseEntity {
private Double LGD; //违约损失率
private String BELONG_ORG; //业务所属机构
private String FLUCTUATION_FLAG; //产生收入的房地产贷款的未来房地产出租收入、销售收入或土地出让收入的波动性较大标识
/***add 2024-12-16 begin***/
private String REAL_ESTATE_FLAG; //是否为不动产
private String REAL_ESTATE_SELF_USE_FLAG; //不动产是否自用
private String LEGAL_DISPOSAL_UNSELF_RE_FLAG; //是否为因行使抵押权等方式而持有并在法律规定处分期限内的非自用不动产
private String ORIGINAL_TERM; //原始期限
private String ORIGINAL_TERM_TYPE; //原始期限类型
/***add 2024-12-16 end***/
public String getORIGINAL_TERM() {
return ORIGINAL_TERM;
}
public void setORIGINAL_TERM(String ORIGINAL_TERM) {
this.ORIGINAL_TERM = ORIGINAL_TERM;
}
public String getORIGINAL_TERM_TYPE() {
return ORIGINAL_TERM_TYPE;
}
public void setORIGINAL_TERM_TYPE(String ORIGINAL_TERM_TYPE) {
this.ORIGINAL_TERM_TYPE = ORIGINAL_TERM_TYPE;
}
public String getLEGAL_DISPOSAL_UNSELF_RE_FLAG() {
return LEGAL_DISPOSAL_UNSELF_RE_FLAG;
}
public void setLEGAL_DISPOSAL_UNSELF_RE_FLAG(String LEGAL_DISPOSAL_UNSELF_RE_FLAG) {
this.LEGAL_DISPOSAL_UNSELF_RE_FLAG = LEGAL_DISPOSAL_UNSELF_RE_FLAG;
}
public String getREAL_ESTATE_FLAG() {
return REAL_ESTATE_FLAG;
}
public void setREAL_ESTATE_FLAG(String REAL_ESTATE_FLAG) {
this.REAL_ESTATE_FLAG = REAL_ESTATE_FLAG;
}
public String getREAL_ESTATE_SELF_USE_FLAG() {
return REAL_ESTATE_SELF_USE_FLAG;
}
public void setREAL_ESTATE_SELF_USE_FLAG(String REAL_ESTATE_SELF_USE_FLAG) {
this.REAL_ESTATE_SELF_USE_FLAG = REAL_ESTATE_SELF_USE_FLAG;
}
public String getFLUCTUATION_FLAG() {
return FLUCTUATION_FLAG;
@ -202,11 +253,11 @@ public class SourceDebt extends BaseEntity {
@Override
public Integer getColumnCount() {
return 53;
return 58;
}
public String[] getColumnDataType(){
return new String[]{
"String","String","String","String","String","String","String","String","String","String","String","String","String","String","Double","Double","String","String","String","String","String","String","Double","Double","String","String","String","String","String","String","String","String","Double","String","Double","Double","Double","String","String","String","String","String","String","Double","Double","String","String"
"String","String","String","String","String","String","String","String","String","String","String","String","String","String","Double","Double","String","String","String","String","String","String","Double","Double","String","String","String","String","String","String","String","String","Double","String","Double","Double","Double","String","String","String","String","String","String","Double","Double","String","String","String","String","String","String","String"
};
}
@ -590,5 +641,10 @@ public class SourceDebt extends BaseEntity {
colMap.put("LGD",44);
colMap.put("BELONG_ORG",45);
colMap.put("FLUCTUATION_FLAG",46);
colMap.put("REAL_ESTATE_FLAG",47);
colMap.put("REAL_ESTATE_SELF_USE_FLAG",48);
colMap.put("LEGAL_DISPOSAL_UNSELF_RE_FLAG",49);
colMap.put("ORIGINAL_TERM",50);
colMap.put("ORIGINAL_TERM_TYPE",51);
}
}

45
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/data/SourceSecurityPosition.java

@ -42,8 +42,10 @@ public class SourceSecurityPosition extends BaseEntity {
colMap.put("OVERDUE_DTS",22);
colMap.put("DEFAULT_FLAG",23);
colMap.put("SPE_ITEM_BOND_FLAG",24);
colMap.put("LGD",26);
colMap.put("BELONG_ORG",27);
colMap.put("LGD",25);
colMap.put("BELONG_ORG",26);
colMap.put("BUY_BAD_LOAN_BOND_FLA",27);
colMap.put("ENQUITY_INVESTMENT_ATTR",28);
}
@Override
public void setColumnValue(String[] row){
@ -73,8 +75,10 @@ public class SourceSecurityPosition extends BaseEntity {
setOVERDUE_DTS(toEmptyInteger(Integer.valueOf(row[22]))); //逾期天数
setDEFAULT_FLAG(row[23]); //违约标志
setSPE_ITEM_BOND_FLAG(row[24]); //专项债券标识
setLGD(toEmptyDouble(Double.valueOf(row[25])));
setBELONG_ORG(row[26]);
setLGD(toEmptyDouble(Double.valueOf(row[25]))); //违约损失率
setBELONG_ORG(row[26]); //所属机构
setBUY_BAD_LOAN_BOND_FLA(row[27]); //为收购国有银行不良贷款而定向发行的债券标识
setENQUITY_INVESTMENT_ATTR(row[28]); //股权投资属性
}
}
@ -114,6 +118,35 @@ public class SourceSecurityPosition extends BaseEntity {
private String SPE_ITEM_BOND_FLAG; //专项债券标识
private Double LGD; //违约损失率
private String BELONG_ORG; //业务所属机构
private String BUY_BAD_LOAN_BOND_FLA; //为收购国有银行不良贷款而定向发行的债券标识
/**
* 1-对金融机构股权投资
* 2-被动持有的对工商企业股权投资
* 3-因政策性原因并经国务院特别批准的对工商企业股权投资
* 4-因参与市场化债转股而持有的上市工商企业股权投资
* 5-因参与市场化债转股而持有的非上市工商企业股权投资
* 6-对获得国家重大补贴并受到政府监督的中央财政持股30%以上的股权投资
* 7-对获得国家重大补贴并受到政府监督的中央财政持股30%以下的股权投资
* 8-对工商企业的其他股权投资
* 9-对有控制权但不并表的金融机构的核心一级资本投资
*/
private String ENQUITY_INVESTMENT_ATTR; //股权投资属性
public String getENQUITY_INVESTMENT_ATTR() {
return ENQUITY_INVESTMENT_ATTR;
}
public void setENQUITY_INVESTMENT_ATTR(String ENQUITY_INVESTMENT_ATTR) {
this.ENQUITY_INVESTMENT_ATTR = ENQUITY_INVESTMENT_ATTR;
}
public String getBUY_BAD_LOAN_BOND_FLA() {
return BUY_BAD_LOAN_BOND_FLA;
}
public void setBUY_BAD_LOAN_BOND_FLA(String BUY_BAD_LOAN_BOND_FLA) {
this.BUY_BAD_LOAN_BOND_FLA = BUY_BAD_LOAN_BOND_FLA;
}
public Double getLGD() {
return LGD;
@ -153,13 +186,13 @@ public class SourceSecurityPosition extends BaseEntity {
@Override
public Integer getColumnCount() {
return 33;
return 35;
}
@Override
public String[] getColumnDataType() {
return new String[]{
"String","String","String","String","String","String","String","String","String","String","String","String","String","String","Double","Double","String","String","String","String","String","String","Integer","String","String","Double","String"
"String","String","String","String","String","String","String","String","String","String","String","String","String","String","Double","Double","String","String","String","String","String","String","Integer","String","String","Double","String","String","String"
};
}

30
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/AccordRiskToolParam.java

@ -80,6 +80,36 @@ public class AccordRiskToolParam extends BaseEntity {
colMap.put("EXCH_RATE",24);
colMap.put("LIQUIDITY_RATE",25);
}
public String pass2String(){
StringBuffer sf = new StringBuffer();
sf.append(this.ID).append(",");
sf.append(this.DATA_DT).append(",");
sf.append(this.COLL_ID).append(",");
sf.append(this.COLL_VALUE).append(",");
sf.append(this.GUAR_CLS).append(",");
sf.append(this.CRBC_CUST_TYPE_CD).append(",");
sf.append(this.CRBC_CUST_TYPE_NM).append(",");
sf.append(this.POSITIVE_CORRELATION_FLAG).append(",");
sf.append(this.PRUDENT_VALUATION_FLAG).append(",");
sf.append(this.RE_EVALUAT_FREQUENCY).append(",");
sf.append(this.RECORD_CURR).append(",");
sf.append(this.IS_TERM_MORE_DEBT_TERM).append(",");
sf.append(this.IS_GUAR_TERM_MORE_DEBT_TERM).append(",");
sf.append(this.REG_COUNTRY_CHINA_FLAG).append(",");
sf.append(this.BOND_TYPE).append(",");
sf.append(this.CUST_BELG_COUNTRY_RATING).append(",");
sf.append(this.CUST_BANK_STANDARD_RATING).append(",");
sf.append(this.TRADE_TERM).append(",");
sf.append(this.TRADE_TYPE).append(",");
sf.append(this.CREDIT_PROTECT_TYPE).append(",");
sf.append(this.DEBT_ID).append(",");
sf.append(this.CRBC_RISK_TOOL_TYPE_CD).append(",");
sf.append(this.CRBC_RISK_TOOL_TYPE_NM).append(",");
sf.append(this.PLEDGE_CLASS).append(",");
sf.append(this.EXCH_RATE).append(",");
sf.append(this.LIQUIDITY_RATE);
return sf.toString();
}
private String ID; //ID
private String DATA_DT; //数据日期
private String COLL_ID; //风险缓释工具编号

328
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/AccordRiskToolParamSorted.java

@ -0,0 +1,328 @@
package io.sc.engine.rwa.calculator.domain;
import io.sc.engine.rwa.calculator.support.BaseEntity;
import java.util.HashMap;
import static io.sc.engine.rwa.calculator.utils.RwaCalcStringUtils.toEmptyDouble;
public class AccordRiskToolParamSorted extends BaseEntity {
public AccordRiskToolParamSorted(){ setColMap(); }
public AccordRiskToolParamSorted(String[] row){
setColumnValue(row);
}
@Override
public void setColumnValue(String[] row){
if(row != null){
setID(row[0]); //ID
setDATA_DT(row[1]); //数据日期
setCOLL_ID(row[2]); //风险缓释工具编号
setCOLL_VALUE(toEmptyDouble(row[3])); //风险缓释工具我行认定价值
setGUAR_CLS(row[4]); //缓释工具分类
setCRBC_CUST_TYPE_CD(row[5]); //监管交易对手类型代码
setCRBC_CUST_TYPE_NM(row[6]); //监管交易对手类别名称
setPOSITIVE_CORRELATION_FLAG(row[7]); //债务人与缓释工具实质正相关性标识
setPRUDENT_VALUATION_FLAG(row[8]); //审慎估值标识
setRE_EVALUAT_FREQUENCY(row[9]); //重估频率
setRECORD_CURR(row[10]); //币种错配标识
setIS_TERM_MORE_DEBT_TERM(row[11]); //缓释物到期日是否大于等于债项到期日
setIS_GUAR_TERM_MORE_DEBT_TERM(row[12]); //担保到期日是否大于等于债项到期日
setREG_COUNTRY_CHINA_FLAG(row[13]); //注册国是否中国
setBOND_TYPE(row[14]); //债券类型
setCUST_BELG_COUNTRY_RATING(row[15]); //注册国外部评级
setCUST_BANK_STANDARD_RATING(row[16]); //交易对手的商业银行标准信用评级
setTRADE_TERM(row[17]); //交易期限
setTRADE_TYPE(row[18]); //交易类型
setCREDIT_PROTECT_TYPE(row[19]); //信用保护
setDEBT_ID(row[20]); //债项编号
setCRBC_RISK_TOOL_TYPE_CD(row[21]); //监管缓释工具类型代码
setCRBC_RISK_TOOL_TYPE_NM(row[22]); //监管缓释工具类型名称
setPLEDGE_CLASS(row[23]); //内评法下缓释品风险分类
setEXCH_RATE(row[24]); //汇率
setLIQUIDITY_RATE(row[25]); //变现率
}
}
@Override
public String getFieldVal(String column) {
return null;
}
@Override
public int getIndex(String column) {
return 0;
}
private void setColMap(){
colMap = new HashMap<>();
colMap.put("ID",0);
colMap.put("DATA_DT",1);
colMap.put("COLL_ID",2);
colMap.put("COLL_VALUE",3);
colMap.put("GUAR_CLS",4);
colMap.put("CRBC_CUST_TYPE_CD",5);
colMap.put("CRBC_CUST_TYPE_NM",6);
colMap.put("POSITIVE_CORRELATION_FLAG",7);
colMap.put("PRUDENT_VALUATION_FLAG",8);
colMap.put("RE_EVALUAT_FREQUENCY",9);
colMap.put("RECORD_CURR",10);
colMap.put("IS_TERM_MORE_DEBT_TERM",11);
colMap.put("IS_GUAR_TERM_MORE_DEBT_TERM",12);
colMap.put("REG_COUNTRY_CHINA_FLAG",13);
colMap.put("BOND_TYPE",14);
colMap.put("CUST_BELG_COUNTRY_RATING",15);
colMap.put("CUST_BANK_STANDARD_RATING",16);
colMap.put("TRADE_TERM",17);
colMap.put("TRADE_TYPE",18);
colMap.put("CREDIT_PROTECT_TYPE",19);
colMap.put("DEBT_ID",20);
colMap.put("CRBC_RISK_TOOL_TYPE_CD",21);
colMap.put("CRBC_RISK_TOOL_TYPE_NM",22);
colMap.put("PLEDGE_CLASS",23);
colMap.put("EXCH_RATE",24);
colMap.put("LIQUIDITY_RATE",25);
}
private String ID; //ID
private String DATA_DT; //数据日期
private String COLL_ID; //风险缓释工具编号
private Double COLL_VALUE; //风险缓释工具我行认定价值
private String GUAR_CLS; //缓释工具分类
private String CRBC_CUST_TYPE_CD; //监管交易对手类型代码
private String CRBC_CUST_TYPE_NM; //监管交易对手类别名称
private String POSITIVE_CORRELATION_FLAG; //债务人与缓释工具实质正相关性标识
private String PRUDENT_VALUATION_FLAG; //审慎估值标识
private String RE_EVALUAT_FREQUENCY; //重估频率
private String RECORD_CURR; //币种错配标识
private String IS_TERM_MORE_DEBT_TERM; //缓释物到期日是否大于等于债项到期日
private String IS_GUAR_TERM_MORE_DEBT_TERM; //担保到期日是否大于等于债项到期日
private String REG_COUNTRY_CHINA_FLAG; //注册国是否中国
private String BOND_TYPE; //债券类型
private String CUST_BELG_COUNTRY_RATING; //注册国外部评级
private String CUST_BANK_STANDARD_RATING; //交易对手的商业银行标准信用评级
private String TRADE_TERM; //交易期限
private String TRADE_TYPE; //交易类型
private String CREDIT_PROTECT_TYPE; //信用保护
private String DEBT_ID; //债项编号
private String CRBC_RISK_TOOL_TYPE_CD; //监管缓释工具类型代码
private String CRBC_RISK_TOOL_TYPE_NM; //监管缓释工具类型名称
private String PLEDGE_CLASS; //内评法下缓释品风险分类
private String EXCH_RATE; //汇率
private String LIQUIDITY_RATE; //变现率
public String getPLEDGE_CLASS() {
return PLEDGE_CLASS;
}
public void setPLEDGE_CLASS(String PLEDGE_CLASS) {
this.PLEDGE_CLASS = PLEDGE_CLASS;
}
public String getEXCH_RATE() {
return EXCH_RATE;
}
public void setEXCH_RATE(String EXCH_RATE) {
this.EXCH_RATE = EXCH_RATE;
}
public String getLIQUIDITY_RATE() {
return LIQUIDITY_RATE;
}
public void setLIQUIDITY_RATE(String LIQUIDITY_RATE) {
this.LIQUIDITY_RATE = LIQUIDITY_RATE;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getDATA_DT() {
return DATA_DT;
}
public void setDATA_DT(String DATA_DT) {
this.DATA_DT = DATA_DT;
}
public String getCOLL_ID() {
return COLL_ID;
}
public void setCOLL_ID(String COLL_ID) {
this.COLL_ID = COLL_ID;
}
public Double getCOLL_VALUE() {
return COLL_VALUE;
}
public void setCOLL_VALUE(Double COLL_VALUE) {
this.COLL_VALUE = COLL_VALUE;
}
public String getGUAR_CLS() {
return GUAR_CLS;
}
public void setGUAR_CLS(String GUAR_CLS) {
this.GUAR_CLS = GUAR_CLS;
}
public String getCRBC_CUST_TYPE_CD() {
return CRBC_CUST_TYPE_CD;
}
public void setCRBC_CUST_TYPE_CD(String CRBC_CUST_TYPE_CD) {
this.CRBC_CUST_TYPE_CD = CRBC_CUST_TYPE_CD;
}
public String getCRBC_CUST_TYPE_NM() {
return CRBC_CUST_TYPE_NM;
}
public void setCRBC_CUST_TYPE_NM(String CRBC_CUST_TYPE_NM) {
this.CRBC_CUST_TYPE_NM = CRBC_CUST_TYPE_NM;
}
public String getPOSITIVE_CORRELATION_FLAG() {
return POSITIVE_CORRELATION_FLAG;
}
public void setPOSITIVE_CORRELATION_FLAG(String POSITIVE_CORRELATION_FLAG) {
this.POSITIVE_CORRELATION_FLAG = POSITIVE_CORRELATION_FLAG;
}
public String getPRUDENT_VALUATION_FLAG() {
return PRUDENT_VALUATION_FLAG;
}
public void setPRUDENT_VALUATION_FLAG(String PRUDENT_VALUATION_FLAG) {
this.PRUDENT_VALUATION_FLAG = PRUDENT_VALUATION_FLAG;
}
public String getRE_EVALUAT_FREQUENCY() {
return RE_EVALUAT_FREQUENCY;
}
public void setRE_EVALUAT_FREQUENCY(String RE_EVALUAT_FREQUENCY) {
this.RE_EVALUAT_FREQUENCY = RE_EVALUAT_FREQUENCY;
}
public String getRECORD_CURR() {
return RECORD_CURR;
}
public void setRECORD_CURR(String RECORD_CURR) {
this.RECORD_CURR = RECORD_CURR;
}
public String getIS_TERM_MORE_DEBT_TERM() {
return IS_TERM_MORE_DEBT_TERM;
}
public void setIS_TERM_MORE_DEBT_TERM(String IS_TERM_MORE_DEBT_TERM) {
this.IS_TERM_MORE_DEBT_TERM = IS_TERM_MORE_DEBT_TERM;
}
public String getIS_GUAR_TERM_MORE_DEBT_TERM() {
return IS_GUAR_TERM_MORE_DEBT_TERM;
}
public void setIS_GUAR_TERM_MORE_DEBT_TERM(String IS_GUAR_TERM_MORE_DEBT_TERM) {
this.IS_GUAR_TERM_MORE_DEBT_TERM = IS_GUAR_TERM_MORE_DEBT_TERM;
}
public String getREG_COUNTRY_CHINA_FLAG() {
return REG_COUNTRY_CHINA_FLAG;
}
public void setREG_COUNTRY_CHINA_FLAG(String REG_COUNTRY_CHINA_FLAG) {
this.REG_COUNTRY_CHINA_FLAG = REG_COUNTRY_CHINA_FLAG;
}
public String getBOND_TYPE() {
return BOND_TYPE;
}
public void setBOND_TYPE(String BOND_TYPE) {
this.BOND_TYPE = BOND_TYPE;
}
public String getCUST_BELG_COUNTRY_RATING() {
return CUST_BELG_COUNTRY_RATING;
}
public void setCUST_BELG_COUNTRY_RATING(String CUST_BELG_COUNTRY_RATING) {
this.CUST_BELG_COUNTRY_RATING = CUST_BELG_COUNTRY_RATING;
}
public String getCUST_BANK_STANDARD_RATING() {
return CUST_BANK_STANDARD_RATING;
}
public void setCUST_BANK_STANDARD_RATING(String CUST_BANK_STANDARD_RATING) {
this.CUST_BANK_STANDARD_RATING = CUST_BANK_STANDARD_RATING;
}
public String getTRADE_TERM() {
return TRADE_TERM;
}
public void setTRADE_TERM(String TRADE_TERM) {
this.TRADE_TERM = TRADE_TERM;
}
public String getTRADE_TYPE() {
return TRADE_TYPE;
}
public void setTRADE_TYPE(String TRADE_TYPE) {
this.TRADE_TYPE = TRADE_TYPE;
}
public String getCREDIT_PROTECT_TYPE() {
return CREDIT_PROTECT_TYPE;
}
public void setCREDIT_PROTECT_TYPE(String CREDIT_PROTECT_TYPE) {
this.CREDIT_PROTECT_TYPE = CREDIT_PROTECT_TYPE;
}
public String getDEBT_ID() {
return DEBT_ID;
}
public void setDEBT_ID(String DEBT_ID) {
this.DEBT_ID = DEBT_ID;
}
public String getCRBC_RISK_TOOL_TYPE_CD() {
return CRBC_RISK_TOOL_TYPE_CD;
}
public void setCRBC_RISK_TOOL_TYPE_CD(String CRBC_RISK_TOOL_TYPE_CD) {
this.CRBC_RISK_TOOL_TYPE_CD = CRBC_RISK_TOOL_TYPE_CD;
}
public String getCRBC_RISK_TOOL_TYPE_NM() {
return CRBC_RISK_TOOL_TYPE_NM;
}
public void setCRBC_RISK_TOOL_TYPE_NM(String CRBC_RISK_TOOL_TYPE_NM) {
this.CRBC_RISK_TOOL_TYPE_NM = CRBC_RISK_TOOL_TYPE_NM;
}
public String getTable() {
return "RWA_C_ACCORD_RISK_TOOL_PARAM_SORTED";
}
@Override
public Integer getColumnCount() {
return 32;
}
}

308
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/BnfxqzParam2.java

@ -0,0 +1,308 @@
package io.sc.engine.rwa.calculator.domain;
import io.sc.engine.rwa.calculator.support.BaseEntity;
public class BnfxqzParam2 extends BaseEntity {
public BnfxqzParam2(){ }
public BnfxqzParam2(String[] row){
setColumnValue(row);
}
@Override
public void setColumnValue(String[] row){
if(row != null){
setID(row[0]); //主键ID
setEAD_TYPE_PRIORITY(row[1]); //风险暴露划分顺序
setEAD_TYPE_CODE(row[2]); //风险暴露分类代码
setEAD_TYPE_NAME(row[3]); //风险暴露分类名称
setEAD_REPT_TYPE_NAME(row[4]); //风险暴露分类报表细分类名称
setRISK_WEIGHT(row[5].equals("")?null:Double.valueOf(row[5])); //风险权重
setC_PRODUCT_ID(row[6]); //产品类型判断条件(0-不等于,1-等于)
setREGULATE_PROD_TYPE(row[7]); //监管产品类型代码
setREGULATE_CUST_TYPE(row[8]); //监管交易对手类型代码
setOUT_GRADE(row[9]); //外部评级
setTERM_MIN(row[10].equals("")?null:Double.valueOf(row[10])); //期限下限
setTERM_MAX(row[11].equals("")?null:Double.valueOf(row[11])); //期限上限
setTERM(row[12]); //期限
setCROSS_BORDER_TRADE_FLAG(row[13]); //跨境商品贸易标识
setIN_STAND_GRADE(row[14]); //商业银行标准信用评估结果
setCURRENCY_MISMATCH_FLAG(row[15]); //是否存在币种错配情形
setLTV_MIN(row[16].equals("")?null:Double.valueOf(row[16])); //LTV下限
setLTV_MAX(row[17].equals("")?null:Double.valueOf(row[17])); //LTV上限
setLTV(row[18]); //LTV
setDEFAULT_FLAG(row[19]); //违约标识
setRESERVE_ASSET_BAL_RATE_MIN(row[20].equals("")?null:Double.valueOf(row[20])); //减值准备/资产余额下限
setRESERVE_ASSET_BAL_RATE_MAX(row[21].equals("")?null:Double.valueOf(row[21])); //减值准备/资产余额上限
setRESERVE_ASSET_BAL_RATE(row[22]); //减值准备/资产余额
}
}
public String[] toArray(){
return new String[]{
getID(),
getEAD_TYPE_PRIORITY(),
getEAD_TYPE_CODE(),
getEAD_TYPE_NAME(),
getEAD_REPT_TYPE_NAME(),
getRISK_WEIGHT()==null?"":String.valueOf(getRISK_WEIGHT()),
getC_PRODUCT_ID(),
getREGULATE_PROD_TYPE(),
getREGULATE_CUST_TYPE(),
getOUT_GRADE(),
getTERM_MIN()==null?"":String.valueOf(getTERM_MIN()),
getTERM_MAX()==null?"":String.valueOf(getTERM_MAX()),
getTERM(),
getCROSS_BORDER_TRADE_FLAG(),
getIN_STAND_GRADE(),
getCURRENCY_MISMATCH_FLAG(),
getLTV_MIN()==null?"":String.valueOf(getLTV_MIN()),
getLTV_MAX()==null?"":String.valueOf(getLTV_MAX()),
getLTV(),
getLTV_MIN()==null?"":String.valueOf(getLTV_MIN()),
getLTV_MAX()==null?"":String.valueOf(getLTV_MAX()),
getLTV(),
getDEFAULT_FLAG(),
getRESERVE_ASSET_BAL_RATE_MIN()==null?"":String.valueOf(getRESERVE_ASSET_BAL_RATE_MIN()),
getRESERVE_ASSET_BAL_RATE_MAX()==null?"":String.valueOf(getRESERVE_ASSET_BAL_RATE_MAX()),
getRESERVE_ASSET_BAL_RATE()
};
}
private String ID; //主键ID
private String EAD_TYPE_PRIORITY; //风险暴露划分顺序
private String EAD_TYPE_CODE; //风险暴露分类代码
private String EAD_TYPE_NAME; //风险暴露分类名称
private String EAD_REPT_TYPE_NAME; //风险暴露分类报表细分类名称
private Double RISK_WEIGHT; //风险权重
private String C_PRODUCT_ID; //产品类型判断条件(0-不等于,1-等于)
private String REGULATE_PROD_TYPE; //监管产品类型代码
private String REGULATE_CUST_TYPE; //监管交易对手类型代码
private String OUT_GRADE; //外部评级
private Double TERM_MIN; //期限下限
private Double TERM_MAX; //期限上限
private String TERM; //期限
private String CROSS_BORDER_TRADE_FLAG; //跨境商品贸易标识
private String IN_STAND_GRADE; //商业银行标准信用评估结果
private String CURRENCY_MISMATCH_FLAG; //是否存在币种错配情形
private Double LTV_MIN; //LTV下限
private Double LTV_MAX; //LTV上限
private String LTV; //LTV
private String DEFAULT_FLAG; //违约标识
private Double RESERVE_ASSET_BAL_RATE_MIN; //减值准备/资产余额下限
private Double RESERVE_ASSET_BAL_RATE_MAX; //减值准备/资产余额上限
private String RESERVE_ASSET_BAL_RATE; //减值准备/资产余额
public String getID() {
return ID;
}
public String getC_PRODUCT_ID() {
return C_PRODUCT_ID;
}
public void setC_PRODUCT_ID(String c_PRODUCT_ID) {
C_PRODUCT_ID = c_PRODUCT_ID;
}
public String getEAD_TYPE_PRIORITY() {
return EAD_TYPE_PRIORITY;
}
public String getEAD_TYPE_CODE() {
return EAD_TYPE_CODE;
}
public String getEAD_TYPE_NAME() {
return EAD_TYPE_NAME;
}
public Double getRISK_WEIGHT() {
return RISK_WEIGHT;
}
public String getOUT_GRADE() {
return OUT_GRADE;
}
public String getIN_STAND_GRADE() {
return IN_STAND_GRADE;
}
public Double getLTV_MIN() {
return LTV_MIN;
}
public Double getLTV_MAX() {
return LTV_MAX;
}
public String getLTV() {
return LTV;
}
public String getCURRENCY_MISMATCH_FLAG() {
return CURRENCY_MISMATCH_FLAG;
}
public String getCROSS_BORDER_TRADE_FLAG() {
return CROSS_BORDER_TRADE_FLAG;
}
public String getTERM() {
return TERM;
}
public Double getRESERVE_ASSET_BAL_RATE_MIN() {
return RESERVE_ASSET_BAL_RATE_MIN;
}
public Double getRESERVE_ASSET_BAL_RATE_MAX() {
return RESERVE_ASSET_BAL_RATE_MAX;
}
public String getRESERVE_ASSET_BAL_RATE() {
return RESERVE_ASSET_BAL_RATE;
}
public String getDEFAULT_FLAG() {
return DEFAULT_FLAG;
}
public void setID(String ID) {
this.ID = ID;
}
public void setEAD_TYPE_PRIORITY(String EAD_TYPE_PRIORITY) {
this.EAD_TYPE_PRIORITY = EAD_TYPE_PRIORITY;
}
public void setEAD_TYPE_CODE(String EAD_TYPE_CODE) {
this.EAD_TYPE_CODE = EAD_TYPE_CODE;
}
public void setEAD_TYPE_NAME(String EAD_TYPE_NAME) {
this.EAD_TYPE_NAME = EAD_TYPE_NAME;
}
public void setRISK_WEIGHT(Double RISK_WEIGHT) {
this.RISK_WEIGHT = RISK_WEIGHT;
}
public void setOUT_GRADE(String OUT_GRADE) {
this.OUT_GRADE = OUT_GRADE;
}
public void setIN_STAND_GRADE(String IN_STAND_GRADE) {
this.IN_STAND_GRADE = IN_STAND_GRADE;
}
public void setLTV_MIN(Double LTV_MIN) {
this.LTV_MIN = LTV_MIN;
}
public void setLTV_MAX(Double LTV_MAX) {
this.LTV_MAX = LTV_MAX;
}
public void setLTV(String LTV) {
this.LTV = LTV;
}
public void setCURRENCY_MISMATCH_FLAG(String CURRENCY_MISMATCH_FLAG) {
this.CURRENCY_MISMATCH_FLAG = CURRENCY_MISMATCH_FLAG;
}
public void setCROSS_BORDER_TRADE_FLAG(String CROSS_BORDER_TRADE_FLAG) {
this.CROSS_BORDER_TRADE_FLAG = CROSS_BORDER_TRADE_FLAG;
}
public void setTERM(String TERM) {
this.TERM = TERM;
}
public void setRESERVE_ASSET_BAL_RATE_MIN(Double RESERVE_ASSET_BAL_RATE_MIN) {
this.RESERVE_ASSET_BAL_RATE_MIN = RESERVE_ASSET_BAL_RATE_MIN;
}
public void setRESERVE_ASSET_BAL_RATE_MAX(Double RESERVE_ASSET_BAL_RATE_MAX) {
this.RESERVE_ASSET_BAL_RATE_MAX = RESERVE_ASSET_BAL_RATE_MAX;
}
public void setRESERVE_ASSET_BAL_RATE(String RESERVE_ASSET_BAL_RATE) {
this.RESERVE_ASSET_BAL_RATE = RESERVE_ASSET_BAL_RATE;
}
public String getEAD_REPT_TYPE_NAME() {
return EAD_REPT_TYPE_NAME;
}
public void setEAD_REPT_TYPE_NAME(String EAD_REPT_TYPE_NAME) {
this.EAD_REPT_TYPE_NAME = EAD_REPT_TYPE_NAME;
}
public String getREGULATE_PROD_TYPE() {
return REGULATE_PROD_TYPE;
}
public void setREGULATE_PROD_TYPE(String REGULATE_PROD_TYPE) {
this.REGULATE_PROD_TYPE = REGULATE_PROD_TYPE;
}
public String getREGULATE_CUST_TYPE() {
return REGULATE_CUST_TYPE;
}
public void setREGULATE_CUST_TYPE(String REGULATE_CUST_TYPE) {
this.REGULATE_CUST_TYPE = REGULATE_CUST_TYPE;
}
public Double getTERM_MIN() {
return TERM_MIN;
}
public void setTERM_MIN(Double TERM_MIN) {
this.TERM_MIN = TERM_MIN;
}
public Double getTERM_MAX() {
return TERM_MAX;
}
public void setTERM_MAX(Double TERM_MAX) {
this.TERM_MAX = TERM_MAX;
}
public void setDEFAULT_FLAG(String DEFAULT_FLAG) {
this.DEFAULT_FLAG = DEFAULT_FLAG;
}
public String getTable() {
return "RWA_P_BNFXQZ_CTL2";
}
@Override
public Integer getColumnCount() {
return 43;
}
@Override
public String getFieldVal(String column) {
return null;
}
@Override
public int getIndex(String column) {
return 0;
}
}

33
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/CustomerParam.java

@ -32,6 +32,8 @@ public class CustomerParam extends BaseEntity {
setACCORD_TRADE_FLAG(row[17]);
setPUBLIC_ENTITY_FLAG(row[18]);
setINVESTMENT_FLAG(row[19]);
setCORE_MARKET_PARTY_FLAG(row[20]);
setCENTRE_CUST_FLAG(row[21]);
}
}
private String ID; //ID
@ -54,6 +56,27 @@ public class CustomerParam extends BaseEntity {
private String ACCORD_TRADE_FLAG; //合格交易者标识
private String PUBLIC_ENTITY_FLAG; //公共部门实体标识
private String INVESTMENT_FLAG; //投资级判定
/***add 2024-12-16 begin***/
private String CORE_MARKET_PARTY_FLAG; //核心市场交易者标识
private String CENTRE_CUST_FLAG; //合格中央交易对手标识
/***add 2024-12-16 end***/
public String getCORE_MARKET_PARTY_FLAG() {
return CORE_MARKET_PARTY_FLAG;
}
public void setCORE_MARKET_PARTY_FLAG(String CORE_MARKET_PARTY_FLAG) {
this.CORE_MARKET_PARTY_FLAG = CORE_MARKET_PARTY_FLAG;
}
public String getCENTRE_CUST_FLAG() {
return CENTRE_CUST_FLAG;
}
public void setCENTRE_CUST_FLAG(String CENTRE_CUST_FLAG) {
this.CENTRE_CUST_FLAG = CENTRE_CUST_FLAG;
}
/***add 2024-12-16 begin***/
private void setColMap(){
colMap = new HashMap();
colMap.put("ID",0);
@ -76,6 +99,8 @@ public class CustomerParam extends BaseEntity {
colMap.put("ACCORD_TRADE_FLAG",17);
colMap.put("PUBLIC_ENTITY_FLAG",18);
colMap.put("INVESTMENT_FLAG",19);
colMap.put("CORE_MARKET_PARTY_FLAG",20);
colMap.put("CENTRE_CUST_FLAG",21);
}
public String getTable() {
return "RWA_C_CUST_PARAM";
@ -83,7 +108,7 @@ public class CustomerParam extends BaseEntity {
@Override
public Integer getColumnCount() {
return 26;
return 28;
}
public String getID() {
@ -303,6 +328,12 @@ public class CustomerParam extends BaseEntity {
if(column.equals("INVESTMENT_FLAG")){
val = INVESTMENT_FLAG;
}
if(column.equals("CORE_MARKET_PARTY_FLAG")){
val = CORE_MARKET_PARTY_FLAG;
}
if(column.equals("CENTRE_CUST_FLAG")){
val = CENTRE_CUST_FLAG;
}
return val;
}

163
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/DebtRiskParam.java

@ -15,6 +15,64 @@ public class DebtRiskParam extends BaseEntity {
public DebtRiskParam(String[] row){
setColumnValue(row);
}
public String[] parse2Array(){
return new String[]{
this.ID
,this.getDATA_DT()
,this.getDEBT_ID()
,this.getON_OFF_FLAG()
,this.getEXPO_AS_DEF()==null?"":String.valueOf(this.getEXPO_AS_DEF())
,this.getPROVISION()==null?"":String.valueOf(this.getPROVISION())
,this.getCRBC_CUST_TYPE_CD()
,this.getCRBC_CUST_TYPE_NM()
,this.getCOUNTRY_RATING()
,this.getBOND_TYPE()
,this.getSPE_LOAN_CLS()
,this.getREAL_ESTATE_RISK_TYPE()
,this.getREAL_ESTATE_MORT_RISK_TYPE()
,this.getRISK_RATING()
,this.getBANK_STANDARD_RATING()
,this.getCRBC_RETAIL_FLAG()
,this.getACCORD_TRADER_FLAG()
,this.getPRUD_REAL_ESTATE_DEVP_FLAG()
,this.getPRUD_REAL_ESTATE_MORT_FLAG()
,this.getDEPEND_ON_CASHFLOW()
,this.getLTV()==null?"":String.valueOf(this.getLTV())
,this.getCURR_MISMATCH_FLAG()
,this.getSPE_ITEM_BOND_FLAG()
,this.getJUNIOR_DEBT_FLAG()
,this.getCROSS_BORDER_TRADE_FLAG()
,this.getORIGINAL_TERM()==null?"":String.valueOf(this.getORIGINAL_TERM())
,this.getOPER_STG()
,this.getPROVISION_EXPO_RATIO()==null?"":String.valueOf(this.getPROVISION_EXPO_RATIO())
,this.getINVESTMENT_FLAG()
,this.getDEFAULT_FLAG()
,this.getSUBJ_CD()
,this.getSUBJ_NM()
,this.getPRODUCT_CD()
,this.getPRODUCT_NM()
,this.getORIGINAL_TERM_TYPE()
,this.getCRED_LETTER_TYPE_CD()
,this.getTRADE_TYPE_CD()
,this.getCAN_MOMNT_RECALL_PROMS_IND()
,this.getIS_LOAN_ALLOW_PROMS()
,this.getCBRC_UNUSED_CRED_LMT_FLAG()
,this.getCORP_CRED_CARD_FLAG()
,this.getCURRENCY()
,this.getDUE_DT()
,this.getCUST_NO()
,this.getCUST_NAME()
,this.getREAL_ESTATE_FLAG()
,this.getREAL_ESTATE_SELF_USE_FLAG()
,this.getLEGAL_DISPOSAL_UNSELF_RE_FLAG()
,this.getBUY_BAD_LOAN_BOND_FLA()
,this.getENQUITY_INVESTMENT_ATTR()
,this.getSELF_OPEN_CREDIT_FLAG()
,this.getIN_CREDIT_FLAG()
,this.getCOVER_BOND_FLG()
,this.getACCEPT_DISCOUNT_SELF_FLAG()
};
}
@Override
public void setColumnValue(String[] row){
if(row != null){
@ -62,7 +120,17 @@ public class DebtRiskParam extends BaseEntity {
setCURRENCY(row[41]); //债项币种
setDUE_DT(row[42]); //债项到期日
setCUST_NO(row[43]); //客户编号
setCUST_NAME(row[44]); //客户名称
setCUST_NAME(row[44]);
setREAL_ESTATE_FLAG(row[45]);
setREAL_ESTATE_SELF_USE_FLAG(row[46]);
setLEGAL_DISPOSAL_UNSELF_RE_FLAG(row[47]);
setBUY_BAD_LOAN_BOND_FLA(row[48]);
setENQUITY_INVESTMENT_ATTR(row[49]);
setSELF_OPEN_CREDIT_FLAG(row[50]);
setIN_CREDIT_FLAG(row[51]);
setCOVER_BOND_FLG(row[52]);
setACCEPT_DISCOUNT_SELF_FLAG(row[53]);
}
}
@ -128,6 +196,88 @@ public class DebtRiskParam extends BaseEntity {
private String DUE_DT; //债项到期日
private String CUST_NO; //客户名称
private String CUST_NAME; //客户名称
/***add 2024-12-16 begin***/
private String REAL_ESTATE_FLAG; //是否为不动产
private String REAL_ESTATE_SELF_USE_FLAG; //不动产是否自用
private String LEGAL_DISPOSAL_UNSELF_RE_FLAG; //是否为因行使抵押权等方式而持有并在法律规定处分期限内的非自用不动产
private String BUY_BAD_LOAN_BOND_FLA; //为收购国有银行不良贷款而定向发行的债券标识
private String ENQUITY_INVESTMENT_ATTR; //股权投资属性
private String SELF_OPEN_CREDIT_FLAG; //自开信用证标志
private String IN_CREDIT_FLAG; //国内信用证标志
private String COVER_BOND_FLG; //合格资产担保债券标识
private String ACCEPT_DISCOUNT_SELF_FLAG; //自承自贴标识
/***add 2024-12-16 end***/
public String getCOVER_BOND_FLG() {
return COVER_BOND_FLG;
}
public void setCOVER_BOND_FLG(String COVER_BOND_FLG) {
this.COVER_BOND_FLG = COVER_BOND_FLG;
}
public String getACCEPT_DISCOUNT_SELF_FLAG() {
return ACCEPT_DISCOUNT_SELF_FLAG;
}
public void setACCEPT_DISCOUNT_SELF_FLAG(String ACCEPT_DISCOUNT_SELF_FLAG) {
this.ACCEPT_DISCOUNT_SELF_FLAG = ACCEPT_DISCOUNT_SELF_FLAG;
}
public String getREAL_ESTATE_FLAG() {
return REAL_ESTATE_FLAG;
}
public void setREAL_ESTATE_FLAG(String REAL_ESTATE_FLAG) {
this.REAL_ESTATE_FLAG = REAL_ESTATE_FLAG;
}
public String getREAL_ESTATE_SELF_USE_FLAG() {
return REAL_ESTATE_SELF_USE_FLAG;
}
public void setREAL_ESTATE_SELF_USE_FLAG(String REAL_ESTATE_SELF_USE_FLAG) {
this.REAL_ESTATE_SELF_USE_FLAG = REAL_ESTATE_SELF_USE_FLAG;
}
public String getLEGAL_DISPOSAL_UNSELF_RE_FLAG() {
return LEGAL_DISPOSAL_UNSELF_RE_FLAG;
}
public void setLEGAL_DISPOSAL_UNSELF_RE_FLAG(String LEGAL_DISPOSAL_UNSELF_RE_FLAG) {
this.LEGAL_DISPOSAL_UNSELF_RE_FLAG = LEGAL_DISPOSAL_UNSELF_RE_FLAG;
}
public String getBUY_BAD_LOAN_BOND_FLA() {
return BUY_BAD_LOAN_BOND_FLA;
}
public void setBUY_BAD_LOAN_BOND_FLA(String BUY_BAD_LOAN_BOND_FLA) {
this.BUY_BAD_LOAN_BOND_FLA = BUY_BAD_LOAN_BOND_FLA;
}
public String getENQUITY_INVESTMENT_ATTR() {
return ENQUITY_INVESTMENT_ATTR;
}
public void setENQUITY_INVESTMENT_ATTR(String ENQUITY_INVESTMENT_ATTR) {
this.ENQUITY_INVESTMENT_ATTR = ENQUITY_INVESTMENT_ATTR;
}
public String getSELF_OPEN_CREDIT_FLAG() {
return SELF_OPEN_CREDIT_FLAG;
}
public void setSELF_OPEN_CREDIT_FLAG(String SELF_OPEN_CREDIT_FLAG) {
this.SELF_OPEN_CREDIT_FLAG = SELF_OPEN_CREDIT_FLAG;
}
public String getIN_CREDIT_FLAG() {
return IN_CREDIT_FLAG;
}
public void setIN_CREDIT_FLAG(String IN_CREDIT_FLAG) {
this.IN_CREDIT_FLAG = IN_CREDIT_FLAG;
}
public String getCUST_NO() {
return CUST_NO;
@ -192,6 +342,15 @@ public class DebtRiskParam extends BaseEntity {
colMap.put("DUE_DT",42);
colMap.put("CUST_NO",43);
colMap.put("CUST_NAME",44);
colMap.put("REAL_ESTATE_FLAG",45);
colMap.put("REAL_ESTATE_SELF_USE_FLAG",46);
colMap.put("LEGAL_DISPOSAL_UNSELF_RE_FLAG",47);
colMap.put("BUY_BAD_LOAN_BOND_FLA",48);
colMap.put("ENQUITY_INVESTMENT_ATTR",49);
colMap.put("SELF_OPEN_CREDIT_FLAG",50);
colMap.put("IN_CREDIT_FLAG",51);
colMap.put("COVER_BOND_FLG",52);
colMap.put("ACCEPT_DISCOUNT_SELF_FLAG",53);
}
public String getID() {
@ -208,7 +367,7 @@ public class DebtRiskParam extends BaseEntity {
@Override
public Integer getColumnCount() {
return 51;
return 60;
}
public String getDATA_DT() {

21
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/ParamRuleMain.java

@ -16,6 +16,8 @@ public class ParamRuleMain extends BaseEntity {
setEXPO_NAME(row[4]);
setEXPO_WEIGHT(row[5]);
setIS_VALID(row[6]);
setEXPO_TP_CODE(row[7]);
setEXPO_TP_NAME(row[8]);
}
}
@ -36,6 +38,25 @@ public class ParamRuleMain extends BaseEntity {
private String EXPO_NAME; //风险暴露分类名称
private String EXPO_WEIGHT; //风险暴露分类权重
private String IS_VALID; //是否有效
private String EXPO_TP_CODE; //风险暴露分类
private String EXPO_TP_NAME; //风险暴露分类名称
public String getEXPO_TP_CODE() {
return EXPO_TP_CODE;
}
public void setEXPO_TP_CODE(String EXPO_TP_CODE) {
this.EXPO_TP_CODE = EXPO_TP_CODE;
}
public String getEXPO_TP_NAME() {
return EXPO_TP_NAME;
}
public void setEXPO_TP_NAME(String EXPO_TP_NAME) {
this.EXPO_TP_NAME = EXPO_TP_NAME;
}
public String getID() {
return ID;
}

111
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductCls.java

@ -0,0 +1,111 @@
package io.sc.engine.rwa.calculator.domain;
import io.sc.engine.rwa.calculator.support.BaseEntity;
import java.util.HashMap;
import static io.sc.engine.rwa.calculator.utils.RwaCalcStringUtils.toEmptyDouble;
/**
* 债项产品的监管产品类型
* @author chengjie
* @time 2023-07-05
*/
public class RegulateProductCls extends BaseEntity {
public RegulateProductCls(){ setColMap(); }
public RegulateProductCls(String[] row){
setColumnValue(row);
}
@Override
public void setColumnValue(String[] row){
if(row != null){
setID(row[0]); //ID
setDATA_DT(row[1]); //数据日期
setDEBT_ID(row[2]); //债项编号
setREGULATE_PRODUCT_CD(row[3]); //产品代码
setREGULATE_PRODUCT_NM(row[4]); //产品名称
}
}
@Override
public String getFieldVal(String column) {
return null;
}
@Override
public int getIndex(String column) {
int index = 0;
String columns = "DATA_DT#0,DEBT_ID#1,ON_OFF_FLAG#2,CURRENCY#3,EXPO_AS_DEF#4,PROVISION#5,CRBC_CUST_TYPE_CD#6,CRBC_CUST_TYPE_NM#7,COUNTRY_RATING#8,BOND_TYPE#9,SPE_LOAN_CLS#10,REAL_ESTATE_RISK_TYPE#11,REAL_ESTATE_MORT_RISK_TYPE#12,RISK_RATING#13,BANK_STANDARD_RATING#14,CRBC_RETAIL_FLAG#15,ACCORD_TRADER_FLAG#16,PRUD_REAL_ESTATE_DEVP_FLAG#17,PRUD_REAL_ESTATE_MORT_FLAG#18,DEPEND_ON_CASHFLOW#19,LTV#20,CURR_MISMATCH_FLAG#21,SPE_ITEM_BOND_FLAG#22,JUNIOR_DEBT_FLAG#23,CROSS_BORDER_TRADE_FLAG#24,ORIGINAL_TERM#25,OPER_STG#26,PROVISION_EXPO_RATIO#27,INVESTMENT_FLAG#28,DEFAULT_FLAG#29,SUBJ_CD#30,SUBJ_NM#31,PRODUCT_CD#32,PRODUCT_NM#33,ORIGINAL_TERM_TYPE#34,CRED_LETTER_TYPE_CD#35,TRADE_TYPE_CD#36,CAN_MOMNT_RECALL_PROMS_IND#37,IS_LOAN_ALLOW_PROMS#38,CBRC_UNUSED_CRED_LMT_FLAG#39,CORP_CRED_CARD_FLAG#40,DUE_DT#41";
String[] arr = columns.split(",");
for(String s : arr){
if(s.substring(0, s.indexOf("#")).equals(column)){
index = Integer.valueOf(s.substring(s.indexOf("#")+1));
}
}
return index;
}
private String ID; //ID
private String DATA_DT; //数据日期
private String DEBT_ID; //债项编号
private String REGULATE_PRODUCT_CD; //产品代码
private String REGULATE_PRODUCT_NM; //产品名称
public String getDEBT_ID() {
return DEBT_ID;
}
public void setDEBT_ID(String DEBT_ID) {
this.DEBT_ID = DEBT_ID;
}
public String getREGULATE_PRODUCT_CD() {
return REGULATE_PRODUCT_CD;
}
public void setREGULATE_PRODUCT_CD(String REGULATE_PRODUCT_CD) {
this.REGULATE_PRODUCT_CD = REGULATE_PRODUCT_CD;
}
public String getREGULATE_PRODUCT_NM() {
return REGULATE_PRODUCT_NM;
}
public void setREGULATE_PRODUCT_NM(String REGULATE_PRODUCT_NM) {
this.REGULATE_PRODUCT_NM = REGULATE_PRODUCT_NM;
}
private void setColMap(){
colMap = new HashMap();
colMap.put("ID",0);
colMap.put("DATA_DT",1);
colMap.put("DEBT_ID",2);
colMap.put("REGULATE_PRODUCT_CD",3);
colMap.put("REGULATE_PRODUCT_NM",4);
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getTable() {
return "RWA_C_REGULATE_PRODUCT";
}
@Override
public Integer getColumnCount() {
return 51;
}
public String getDATA_DT() {
return DATA_DT;
}
public void setDATA_DT(String DATA_DT) {
this.DATA_DT = DATA_DT;
}
}

307
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductMappingRule.java

@ -0,0 +1,307 @@
package io.sc.engine.rwa.calculator.domain;
import io.sc.engine.rwa.calculator.support.BaseEntity;
/**
* 监管产品映射规则
*/
public class RegulateProductMappingRule extends BaseEntity {
public RegulateProductMappingRule(){ }
public RegulateProductMappingRule(String[] row){
setColumnValue(row);
}
@Override
public void setColumnValue(String[] row){
if(row != null){
setID(row[0]);
setRP_CODE(row[1]);
setRP_NAME(row[2]);
setPRODUCT_CODE(row[3]);
setPRODUCT_NAME(row[4]);
setBUY_BAD_LOAN_BOND_FLA(row[5]);
setLOCAL_GOV_BOND_TYPE(row[6]);
setREAL_ESTATE_DEP_TYPE(row[7]);
setDOC_REQUIR(row[8]);
setREAL_ESTATE_INIT_TYPE(row[9]);
setREAL_ESTATE_FINAL_TYPE(row[10]);
setHOUSE_CASH_FLAG(row[11]);
setIS_PRU_APPR_STAN(row[12]);
setREAL_ESTATE_FLAG(row[13]);
setREAL_ESTATE_SELF_USE_FLAG(row[14]);
setLEGAL_DISPOSAL_UNSELF_RE_FLAG(row[15]);
setENQUITY_INVESTMENT_ATTR(row[16]);
setJUNIOR_DEBT_FLAG(row[17]);
setCOVER_BOND_FLG(row[18]);
setACCEPT_DISCOUNT_SELF_FLAG(row[19]);
setNO_USED_LMT_FLAG(row[20]);
setOFF_BALANCE_RWA(row[21]);
setCANCEL_FLAG(row[22]);
setSELF_OPEN_CREDIT_FLAG(row[23]);
setSPE_LENDING_TYPE(row[24]);
setOPERATION_PF_FLAG(row[25]);
setIN_CREDIT_FLAG(row[26]);
}
}
private String ID; //主键ID
private String RP_CODE; //监管产品代码
private String RP_NAME; //监管产品名称
private String PRODUCT_CODE; //产品代码
private String PRODUCT_NAME; //产品名称
private String BUY_BAD_LOAN_BOND_FLA; //为收购国有银行不良贷款而定向发行的债券
private String LOCAL_GOV_BOND_TYPE; //地方政府债债券类型
private String REAL_ESTATE_DEP_TYPE; //房地产风险暴露类型
private String DOC_REQUIR; //房地产开发贷款符合监管条件
private String REAL_ESTATE_INIT_TYPE; //房地产抵押贷款属性初分类
private String REAL_ESTATE_FINAL_TYPE; //房地产抵押贷款属性终分类(经LTV计算后分类结果)
private String HOUSE_CASH_FLAG; //还款实质是否依赖于房地产所产生的现金流
private String IS_PRU_APPR_STAN; //是否审慎的房地产贷款审批标准
private String REAL_ESTATE_FLAG; //是否为不动产
private String REAL_ESTATE_SELF_USE_FLAG; //不动产是否自用
private String LEGAL_DISPOSAL_UNSELF_RE_FLAG; //是否为因行使抵押权等方式而持有并在法律规定处分期限内的非自用不动产
private String ENQUITY_INVESTMENT_ATTR; //股权投资属性
private String JUNIOR_DEBT_FLAG; //次级债标识
private String COVER_BOND_FLG; //合格资产担保债券标识
private String ACCEPT_DISCOUNT_SELF_FLAG; //自承自贴标识
private String NO_USED_LMT_FLAG; //符合标准的未使用额度标识
private String OFF_BALANCE_RWA; //可免于计量表外项目风险加权资产
private String CANCEL_FLAG; //可随时无条件撤销的贷款承诺
private String SELF_OPEN_CREDIT_FLAG; //自开信用证标志
private String SPE_LENDING_TYPE; //专业贷款分类
private String OPERATION_PF_FLAG; //项目融资运营阶段标识
private String IN_CREDIT_FLAG; //国内信用证标志
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getRP_CODE() {
return RP_CODE;
}
public void setRP_CODE(String RP_CODE) {
this.RP_CODE = RP_CODE;
}
public String getRP_NAME() {
return RP_NAME;
}
public void setRP_NAME(String RP_NAME) {
this.RP_NAME = RP_NAME;
}
public String getPRODUCT_CODE() {
return PRODUCT_CODE;
}
public void setPRODUCT_CODE(String PRODUCT_CODE) {
this.PRODUCT_CODE = PRODUCT_CODE;
}
public String getPRODUCT_NAME() {
return PRODUCT_NAME;
}
public void setPRODUCT_NAME(String PRODUCT_NAME) {
this.PRODUCT_NAME = PRODUCT_NAME;
}
public String getBUY_BAD_LOAN_BOND_FLA() {
return BUY_BAD_LOAN_BOND_FLA;
}
public void setBUY_BAD_LOAN_BOND_FLA(String BUY_BAD_LOAN_BOND_FLA) {
this.BUY_BAD_LOAN_BOND_FLA = BUY_BAD_LOAN_BOND_FLA;
}
public String getLOCAL_GOV_BOND_TYPE() {
return LOCAL_GOV_BOND_TYPE;
}
public void setLOCAL_GOV_BOND_TYPE(String LOCAL_GOV_BOND_TYPE) {
this.LOCAL_GOV_BOND_TYPE = LOCAL_GOV_BOND_TYPE;
}
public String getREAL_ESTATE_DEP_TYPE() {
return REAL_ESTATE_DEP_TYPE;
}
public void setREAL_ESTATE_DEP_TYPE(String REAL_ESTATE_DEP_TYPE) {
this.REAL_ESTATE_DEP_TYPE = REAL_ESTATE_DEP_TYPE;
}
public String getDOC_REQUIR() {
return DOC_REQUIR;
}
public void setDOC_REQUIR(String DOC_REQUIR) {
this.DOC_REQUIR = DOC_REQUIR;
}
public String getREAL_ESTATE_INIT_TYPE() {
return REAL_ESTATE_INIT_TYPE;
}
public void setREAL_ESTATE_INIT_TYPE(String REAL_ESTATE_INIT_TYPE) {
this.REAL_ESTATE_INIT_TYPE = REAL_ESTATE_INIT_TYPE;
}
public String getREAL_ESTATE_FINAL_TYPE() {
return REAL_ESTATE_FINAL_TYPE;
}
public void setREAL_ESTATE_FINAL_TYPE(String REAL_ESTATE_FINAL_TYPE) {
this.REAL_ESTATE_FINAL_TYPE = REAL_ESTATE_FINAL_TYPE;
}
public String getHOUSE_CASH_FLAG() {
return HOUSE_CASH_FLAG;
}
public void setHOUSE_CASH_FLAG(String HOUSE_CASH_FLAG) {
this.HOUSE_CASH_FLAG = HOUSE_CASH_FLAG;
}
public String getIS_PRU_APPR_STAN() {
return IS_PRU_APPR_STAN;
}
public void setIS_PRU_APPR_STAN(String IS_PRU_APPR_STAN) {
this.IS_PRU_APPR_STAN = IS_PRU_APPR_STAN;
}
public String getREAL_ESTATE_FLAG() {
return REAL_ESTATE_FLAG;
}
public void setREAL_ESTATE_FLAG(String REAL_ESTATE_FLAG) {
this.REAL_ESTATE_FLAG = REAL_ESTATE_FLAG;
}
public String getREAL_ESTATE_SELF_USE_FLAG() {
return REAL_ESTATE_SELF_USE_FLAG;
}
public void setREAL_ESTATE_SELF_USE_FLAG(String REAL_ESTATE_SELF_USE_FLAG) {
this.REAL_ESTATE_SELF_USE_FLAG = REAL_ESTATE_SELF_USE_FLAG;
}
public String getLEGAL_DISPOSAL_UNSELF_RE_FLAG() {
return LEGAL_DISPOSAL_UNSELF_RE_FLAG;
}
public void setLEGAL_DISPOSAL_UNSELF_RE_FLAG(String LEGAL_DISPOSAL_UNSELF_RE_FLAG) {
this.LEGAL_DISPOSAL_UNSELF_RE_FLAG = LEGAL_DISPOSAL_UNSELF_RE_FLAG;
}
public String getENQUITY_INVESTMENT_ATTR() {
return ENQUITY_INVESTMENT_ATTR;
}
public void setENQUITY_INVESTMENT_ATTR(String ENQUITY_INVESTMENT_ATTR) {
this.ENQUITY_INVESTMENT_ATTR = ENQUITY_INVESTMENT_ATTR;
}
public String getJUNIOR_DEBT_FLAG() {
return JUNIOR_DEBT_FLAG;
}
public void setJUNIOR_DEBT_FLAG(String JUNIOR_DEBT_FLAG) {
this.JUNIOR_DEBT_FLAG = JUNIOR_DEBT_FLAG;
}
public String getCOVER_BOND_FLG() {
return COVER_BOND_FLG;
}
public void setCOVER_BOND_FLG(String COVER_BOND_FLG) {
this.COVER_BOND_FLG = COVER_BOND_FLG;
}
public String getACCEPT_DISCOUNT_SELF_FLAG() {
return ACCEPT_DISCOUNT_SELF_FLAG;
}
public void setACCEPT_DISCOUNT_SELF_FLAG(String ACCEPT_DISCOUNT_SELF_FLAG) {
this.ACCEPT_DISCOUNT_SELF_FLAG = ACCEPT_DISCOUNT_SELF_FLAG;
}
public String getNO_USED_LMT_FLAG() {
return NO_USED_LMT_FLAG;
}
public void setNO_USED_LMT_FLAG(String NO_USED_LMT_FLAG) {
this.NO_USED_LMT_FLAG = NO_USED_LMT_FLAG;
}
public String getOFF_BALANCE_RWA() {
return OFF_BALANCE_RWA;
}
public void setOFF_BALANCE_RWA(String OFF_BALANCE_RWA) {
this.OFF_BALANCE_RWA = OFF_BALANCE_RWA;
}
public String getCANCEL_FLAG() {
return CANCEL_FLAG;
}
public void setCANCEL_FLAG(String CANCEL_FLAG) {
this.CANCEL_FLAG = CANCEL_FLAG;
}
public String getSELF_OPEN_CREDIT_FLAG() {
return SELF_OPEN_CREDIT_FLAG;
}
public void setSELF_OPEN_CREDIT_FLAG(String SELF_OPEN_CREDIT_FLAG) {
this.SELF_OPEN_CREDIT_FLAG = SELF_OPEN_CREDIT_FLAG;
}
public String getSPE_LENDING_TYPE() {
return SPE_LENDING_TYPE;
}
public void setSPE_LENDING_TYPE(String SPE_LENDING_TYPE) {
this.SPE_LENDING_TYPE = SPE_LENDING_TYPE;
}
public String getOPERATION_PF_FLAG() {
return OPERATION_PF_FLAG;
}
public void setOPERATION_PF_FLAG(String OPERATION_PF_FLAG) {
this.OPERATION_PF_FLAG = OPERATION_PF_FLAG;
}
public String getIN_CREDIT_FLAG() {
return IN_CREDIT_FLAG;
}
public void setIN_CREDIT_FLAG(String IN_CREDIT_FLAG) {
this.IN_CREDIT_FLAG = IN_CREDIT_FLAG;
}
public String getTable() {
return "RWA_P_REGULATE_PROD_RULE";
}
@Override
public Integer getColumnCount() {
return 33;
}
@Override
public String getFieldVal(String column) {
return null;
}
@Override
public int getIndex(String column) {
return 0;
}
}

103
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductRuleDtl.java

@ -0,0 +1,103 @@
package io.sc.engine.rwa.calculator.domain;
import io.sc.engine.rwa.calculator.support.BaseEntity;
public class RegulateProductRuleDtl extends BaseEntity {
public RegulateProductRuleDtl(){ }
public RegulateProductRuleDtl(String[] row){
setColumnValue(row);
}
public void setColumnValue(String[] row) {
if (row != null) {
setID(row[0]);
setMAIN_ID(row[1]);
setRULE_NAME(row[2]);
setRULE_DATA(row[3]);
setRULE_DATA_TP(row[4]);
setMATCH_TP(row[5]);
setIS_EMPTY_RULE(row[6]);
}
}
@Override
public String getFieldVal(String column) {
return null;
}
@Override
public int getIndex(String column) {
return 0;
}
private String ID; //主键
private String MAIN_ID; //规则主表ID
private String RULE_NAME; //规则名称
private String RULE_DATA; //规则值
private String RULE_DATA_TP; //规则值数据类型
private String MATCH_TP; //值匹配方式
private String IS_EMPTY_RULE; //是否空规则
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getMAIN_ID() {
return MAIN_ID;
}
public void setMAIN_ID(String MAIN_ID) {
this.MAIN_ID = MAIN_ID;
}
public String getRULE_NAME() {
return RULE_NAME;
}
public void setRULE_NAME(String RULE_NAME) {
this.RULE_NAME = RULE_NAME;
}
public String getRULE_DATA() {
return RULE_DATA;
}
public void setRULE_DATA(String RULE_DATA) {
this.RULE_DATA = RULE_DATA;
}
public String getRULE_DATA_TP() {
return RULE_DATA_TP;
}
public void setRULE_DATA_TP(String RULE_DATA_TP) {
this.RULE_DATA_TP = RULE_DATA_TP;
}
public String getMATCH_TP() {
return MATCH_TP;
}
public void setMATCH_TP(String MATCH_TP) {
this.MATCH_TP = MATCH_TP;
}
public String getIS_EMPTY_RULE() {
return IS_EMPTY_RULE;
}
public void setIS_EMPTY_RULE(String IS_EMPTY_RULE) {
this.IS_EMPTY_RULE = IS_EMPTY_RULE;
}
public String getTable() {
return "RWA_P_REGULATE_PRODUCT_RULE_DTL";
}
@Override
public Integer getColumnCount() {
return 13;
}
}

77
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/domain/RegulateProductRuleMain.java

@ -0,0 +1,77 @@
package io.sc.engine.rwa.calculator.domain;
import io.sc.engine.rwa.calculator.support.BaseEntity;
import java.util.HashMap;
public class RegulateProductRuleMain extends BaseEntity {
public RegulateProductRuleMain(){ setColMap(); }
public RegulateProductRuleMain(String[] row){
setColumnValue(row);
}
public void setColumnValue(String[] row) {
if (row != null) {
setID(row[0]);
setREGULATE_PRODUCT_CODE(row[1]);
setREGULATE_PRODUCT_NAME(row[2]);
}
}
public String pass2String(){
StringBuffer sf = new StringBuffer();
sf.append(this.ID).append(",");
sf.append(this.REGULATE_PRODUCT_CODE).append(",");
sf.append(this.REGULATE_PRODUCT_NAME);
return sf.toString();
}
private void setColMap() {
colMap = new HashMap();
colMap.put("ID", 0);
colMap.put("REGULATE_PRODUCT_CODE", 1);
colMap.put("REGULATE_PRODUCT_NAME", 2);
}
@Override
public String getFieldVal(String column) {
return null;
}
@Override
public int getIndex(String column) {
return 0;
}
private String ID; //主键
private String REGULATE_PRODUCT_CODE; //监管产品类型
private String REGULATE_PRODUCT_NAME; //监管产品类型名称
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getREGULATE_PRODUCT_CODE() {
return REGULATE_PRODUCT_CODE;
}
public void setREGULATE_PRODUCT_CODE(String REGULATE_PRODUCT_CODE) {
this.REGULATE_PRODUCT_CODE = REGULATE_PRODUCT_CODE;
}
public String getREGULATE_PRODUCT_NAME() {
return REGULATE_PRODUCT_NAME;
}
public void setREGULATE_PRODUCT_NAME(String REGULATE_PRODUCT_NAME) {
this.REGULATE_PRODUCT_NAME = REGULATE_PRODUCT_NAME;
}
public String getTable() {
return "RWA_P_REGULATE_PRODUCT_RULE_MAIN";
}
@Override
public Integer getColumnCount() {
return 13;
}
}

168
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/ParamCache.java

@ -1,21 +1,13 @@
package io.sc.engine.rwa.calculator.step;
import io.sc.engine.rwa.calculator.data.*;
import io.sc.engine.rwa.calculator.domain.*;
import io.sc.engine.rwa.calculator.support.BaseEntity;
import io.sc.engine.rwa.calculator.utils.CsvUtil;
import io.sc.engine.rwa.calculator.utils.DateUtil;
import io.sc.engine.rwa.calculator.utils.FuncUtil;
import io.sc.platform.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -38,6 +30,16 @@ public class ParamCache {
private Map<String, Map<String, BaseEntity>> paramEntityMap = new HashMap<>();
private List<AccordRiskToolMain> accordRiskToolMainList = new ArrayList<>();
private Map<String, List<AccordRiskToolDtl>> accordRiskToolDtlMap = new HashMap<>();
private List<RegulateProductRuleMain> regulateProductTypeList = new ArrayList<>();
private Map<String, List<RegulateProductRuleDtl>> regulateProductRuleDtlMap = new HashMap<>();
public List<RegulateProductRuleMain> getRegulateProductTypeList() {
return regulateProductTypeList;
}
public Map<String, List<RegulateProductRuleDtl>> getRegulateProductRuleDtlMap() {
return regulateProductRuleDtlMap;
}
public List<ParamRuleMain> getExpoRuleMainList() {
return expoRuleMainList;
@ -93,25 +95,94 @@ public class ParamCache {
*/
public void cache() throws Exception {
getInTableExpoRule();//表内风险暴露分类规则配置
// getOutTableExpoRule();//表外风险暴露分类规则配置
getInTableExpoRule2();
getOutTableExpoRule();//表外风险暴露分类规则配置
getAccordRiskToolRecognRule();//合格缓释工具识别规则配置
getTableMappingList();//标准数据模型映射清单
getTableMappingRuleMain();//标准数据模型映射主表
getTableMappingRuleDtl();//标准数据模型映射明细表
parseMappingDtl2Expr();//解析标准数据模型映射明细为表达式
//标准映射明细表中只保留最终返回的节点
Iterator<String> it = tableMappingDtlMap.keySet().iterator();
while(it.hasNext()){
String mainId = it.next();
List<TableMappingRuleDtl> list = tableMappingDtlMap.get(mainId);
list = list.stream().filter(d->"1".equals(d.getIS_RETURN())).collect(Collectors.toList());
tableMappingDtlMap.put(mainId, list);
}
// Iterator<String> it = tableMappingDtlMap.keySet().iterator();
// while(it.hasNext()){
// String mainId = it.next();
// List<TableMappingRuleDtl> list = tableMappingDtlMap.get(mainId);
// list = list.stream().filter(d->"1".equals(d.getIS_RETURN())).collect(Collectors.toList());
// tableMappingDtlMap.put(mainId, list);
// }
getTableMappingParams();//标准数据模型映射辅助参数
getDataCheckRuleMain();//数据质量校验规则
getCircCounterpartyParams();//监管交易对手映射参数
getRwaRequireParams();//资本要求参数
getCrbcRiskToolMappingParams();//监管缓释工具类型映射参数
getRegulateProductRule();
}
/**
* 将表内风险暴露分类参数表解析成表内风险暴露分类规则主表
* @throws Exception
*/
private RegulateProductRuleMain newRegulateProductType(RegulateProductMappingRule bn) {
return new RegulateProductRuleMain(new String[]{
bn.getID()
, bn.getRP_CODE()
, bn.getRP_NAME()
});
}
/**
* 将表内风险暴露分类参数表解析成表内风险暴露分类规则明细表
* @throws Exception
*/
private List<RegulateProductRuleDtl> newRegulateProductRuleDtl(RegulateProductMappingRule bfp){
List<RegulateProductRuleDtl> list = new ArrayList<>();
String[][] dtlRows = new String[][]{
new String[]{nextId(), bfp.getID(), "PRODUCT_CD", bfp.getPRODUCT_CODE(), "1", "10", getEmptyType(bfp.getPRODUCT_CODE())},
new String[]{nextId(), bfp.getID(), "BUY_BAD_LOAN_BOND_FLA", bfp.getBUY_BAD_LOAN_BOND_FLA(), "1", "10", getEmptyType(bfp.getBUY_BAD_LOAN_BOND_FLA())},
new String[]{nextId(), bfp.getID(), "BOND_TYPE", bfp.getLOCAL_GOV_BOND_TYPE(), "1", "10", getEmptyType(bfp.getLOCAL_GOV_BOND_TYPE())},
new String[]{nextId(), bfp.getID(), "REAL_ESTATE_RISK_TYPE", bfp.getREAL_ESTATE_DEP_TYPE(), "1", "10", getEmptyType(bfp.getREAL_ESTATE_DEP_TYPE())},
new String[]{nextId(), bfp.getID(), "PRUD_REAL_ESTATE_DEVP_FLAG", bfp.getDOC_REQUIR(), "1", "10", getEmptyType(bfp.getDOC_REQUIR())},
new String[]{nextId(), bfp.getID(), "REAL_ESTATE_MORT_RISK_TYPE", bfp.getREAL_ESTATE_INIT_TYPE(), "1", "10", getEmptyType(bfp.getREAL_ESTATE_INIT_TYPE())},
new String[]{nextId(), bfp.getID(), "DEPEND_ON_CASHFLOW", bfp.getHOUSE_CASH_FLAG(), "1", "10", getEmptyType(bfp.getHOUSE_CASH_FLAG())},
new String[]{nextId(), bfp.getID(), "PRUD_REAL_ESTATE_MORT_FLAG", bfp.getIS_PRU_APPR_STAN(), "1", "10", getEmptyType(bfp.getIS_PRU_APPR_STAN())},
new String[]{nextId(), bfp.getID(), "REAL_ESTATE_FLAG", bfp.getREAL_ESTATE_FLAG(), "1", "10", getEmptyType(bfp.getREAL_ESTATE_FLAG())},
new String[]{nextId(), bfp.getID(), "REAL_ESTATE_SELF_USE_FLAG", bfp.getREAL_ESTATE_SELF_USE_FLAG(), "1", "10", getEmptyType(bfp.getREAL_ESTATE_SELF_USE_FLAG())},
new String[]{nextId(), bfp.getID(), "LEGAL_DISPOSAL_UNSELF_RE_FLAG", bfp.getLEGAL_DISPOSAL_UNSELF_RE_FLAG(), "1", "10", getEmptyType(bfp.getLEGAL_DISPOSAL_UNSELF_RE_FLAG())},
new String[]{nextId(), bfp.getID(), "ENQUITY_INVESTMENT_ATTR", bfp.getENQUITY_INVESTMENT_ATTR(), "1", "10", getEmptyType(bfp.getENQUITY_INVESTMENT_ATTR())},
new String[]{nextId(), bfp.getID(), "JUNIOR_DEBT_FLAG", bfp.getJUNIOR_DEBT_FLAG(), "1", "10", getEmptyType(bfp.getJUNIOR_DEBT_FLAG())},
new String[]{nextId(), bfp.getID(), "COVER_BOND_FLG", bfp.getCOVER_BOND_FLG(), "1", "10", getEmptyType(bfp.getCOVER_BOND_FLG())},
new String[]{nextId(), bfp.getID(), "ACCEPT_DISCOUNT_SELF_FLAG", bfp.getACCEPT_DISCOUNT_SELF_FLAG(), "1", "10", getEmptyType(bfp.getACCEPT_DISCOUNT_SELF_FLAG())},
new String[]{nextId(), bfp.getID(), "CBRC_UNUSED_CRED_LMT_FLAG", bfp.getNO_USED_LMT_FLAG(), "1", "10", getEmptyType(bfp.getNO_USED_LMT_FLAG())},
new String[]{nextId(), bfp.getID(), "IS_LOAN_ALLOW_PROMS", bfp.getOFF_BALANCE_RWA(), "1", "10", getEmptyType(bfp.getOFF_BALANCE_RWA())},
new String[]{nextId(), bfp.getID(), "CAN_MOMNT_RECALL_PROMS_IND", bfp.getCANCEL_FLAG(), "1", "10", getEmptyType(bfp.getCANCEL_FLAG())},
new String[]{nextId(), bfp.getID(), "SELF_OPEN_CREDIT_FLAG", bfp.getSELF_OPEN_CREDIT_FLAG(), "1", "10", getEmptyType(bfp.getSELF_OPEN_CREDIT_FLAG())},
new String[]{nextId(), bfp.getID(), "SPE_LOAN_CLS", bfp.getSPE_LENDING_TYPE(), "1", "10", getEmptyType(bfp.getSPE_LENDING_TYPE())},
new String[]{nextId(), bfp.getID(), "OPER_STG", bfp.getOPERATION_PF_FLAG(), "1", "10", getEmptyType(bfp.getOPERATION_PF_FLAG())},
new String[]{nextId(), bfp.getID(), "IN_CREDIT_FLAG", bfp.getIN_CREDIT_FLAG(), "1", "10", getEmptyType(bfp.getIN_CREDIT_FLAG())},
};
for(int i = 0; i < dtlRows.length; i ++){
list.add(new RegulateProductRuleDtl(dtlRows[i]));
}
return list;
}
/**
* 生成监管产品映射规则配置信息
* @throws Exception
*/
private void getRegulateProductRule() throws Exception {
RegulateProductMappingRule t = new RegulateProductMappingRule();
Iterator<String[]> iterator = CsvUtil.readParamData(t.getTable());
if(iterator != null) {
while (iterator.hasNext()) {
String[] row = iterator.next();
RegulateProductMappingRule rule = new RegulateProductMappingRule(row);
RegulateProductRuleMain pt = newRegulateProductType(rule);
regulateProductTypeList.add(pt);
regulateProductRuleDtlMap.put(pt.getID(), newRegulateProductRuleDtl(rule));
}
}
}
/**
@ -131,6 +202,23 @@ public class ParamCache {
}
}
}
/**
* 生成表内风险暴露分类规则配置信息
* @throws Exception
*/
private void getInTableExpoRule2() throws Exception {
BnfxqzParam2 t = new BnfxqzParam2();
Iterator<String[]> iterator = CsvUtil.readParamData(t.getTable());
if(iterator != null) {
while (iterator.hasNext()) {
String[] row = iterator.next();
BnfxqzParam2 bnp = new BnfxqzParam2(row);
ParamRuleMain prm = newBnParamRuleMain2(bnp);
expoRuleMainList.add(prm);
expoRuleDtlMap.put(prm.getID(), newBnParamRuleDtlRow2(bnp));
}
}
}
/**
* 将表内风险暴露分类参数表解析成表内风险暴露分类规则主表
* @throws Exception
@ -144,6 +232,25 @@ public class ParamCache {
, bn.getEAD_TYPE_NAME()
, bn.getRISK_WEIGHT()==null?"9999":String.valueOf(bn.getRISK_WEIGHT())
, bn.getIS_VALID()
, ""
, ""
});
}
/**
* 将表内风险暴露分类参数表解析成表内风险暴露分类规则主表
* @throws Exception
*/
private ParamRuleMain newBnParamRuleMain2(BnfxqzParam2 bn) {
return new ParamRuleMain(new String[]{
bn.getID()
, "1001"
, bn.getEAD_TYPE_PRIORITY()
, ""
, bn.getEAD_REPT_TYPE_NAME()
, bn.getRISK_WEIGHT()==null?"9999":String.valueOf(bn.getRISK_WEIGHT())
, "1"
, bn.getEAD_TYPE_CODE()
, bn.getEAD_TYPE_NAME()
});
}
/**
@ -185,6 +292,33 @@ public class ParamCache {
return list;
}
/**
* 将表内风险暴露分类参数表解析成表内风险暴露分类规则明细表
* @throws Exception
*/
private List<ParamRuleDtl> newBnParamRuleDtlRow2(BnfxqzParam2 bfp){
List<ParamRuleDtl> list = new ArrayList<>();
String[][] dtlRows = new String[][]{
new String[]{nextId(),bfp.getID(),"PRODUCT_CD",bfp.getREGULATE_PROD_TYPE(),"1",getMatchType(bfp.getC_PRODUCT_ID()),getEmptyType(bfp.getREGULATE_PROD_TYPE())},
new String[]{nextId(), bfp.getID(), "CRBC_CUST_TYPE_CD", bfp.getREGULATE_CUST_TYPE(), "1", "10", getEmptyType(bfp.getREGULATE_CUST_TYPE())},
new String[]{nextId(), bfp.getID(), "RISK_RATING", bfp.getOUT_GRADE(), "1", "10", getEmptyType(bfp.getOUT_GRADE())},
new String[]{nextId(), bfp.getID(), "ORIGINAL_TERM", bfp.getTERM_MIN()==null?null:String.valueOf(bfp.getTERM_MIN()), "2", getStartType(bfp.getTERM()), getEmptyType(bfp.getTERM())},
new String[]{nextId(), bfp.getID(), "ORIGINAL_TERM", bfp.getTERM_MAX()==null?null:String.valueOf(bfp.getTERM_MAX()), "2", getEndType(bfp.getTERM()), getEmptyType(bfp.getTERM())},
new String[]{nextId(), bfp.getID(), "CROSS_BORDER_TRADE_FLAG", bfp.getCROSS_BORDER_TRADE_FLAG(), "1", "10", getEmptyType(bfp.getCROSS_BORDER_TRADE_FLAG())},
new String[]{nextId(), bfp.getID(), "BANK_STANDARD_RATING", bfp.getIN_STAND_GRADE(), "1", "10", getEmptyType(bfp.getIN_STAND_GRADE())},
new String[]{nextId(), bfp.getID(), "CURR_MISMATCH_FLAG", bfp.getCURRENCY_MISMATCH_FLAG(), "1", "10", getEmptyType(bfp.getCURRENCY_MISMATCH_FLAG())},
new String[]{nextId(), bfp.getID(), "LTV", bfp.getLTV_MIN()==null?null:String.valueOf(bfp.getLTV_MIN()), "2", getStartType(bfp.getLTV()), getEmptyType(bfp.getLTV())},
new String[]{nextId(), bfp.getID(), "LTV", bfp.getLTV_MAX()==null?null:String.valueOf(bfp.getLTV_MAX()), "2", getEndType(bfp.getLTV()), getEmptyType(bfp.getLTV())},
new String[]{nextId(), bfp.getID(), "DEFAULT_FLAG", bfp.getDEFAULT_FLAG(), "1", "10", getEmptyType(bfp.getDEFAULT_FLAG())},
new String[]{nextId(), bfp.getID(), "PROVISION_EXPO_RATIO", bfp.getRESERVE_ASSET_BAL_RATE_MIN()==null?null:String.valueOf(bfp.getRESERVE_ASSET_BAL_RATE_MIN()), "2", getStartType(bfp.getRESERVE_ASSET_BAL_RATE()), getEmptyType(bfp.getRESERVE_ASSET_BAL_RATE())},
new String[]{nextId(), bfp.getID(), "PROVISION_EXPO_RATIO", bfp.getRESERVE_ASSET_BAL_RATE_MAX()==null?null:String.valueOf(bfp.getRESERVE_ASSET_BAL_RATE_MAX()), "2", getEndType(bfp.getRESERVE_ASSET_BAL_RATE()), getEmptyType(bfp.getRESERVE_ASSET_BAL_RATE())},
};
for(int i = 0; i < dtlRows.length; i ++){
list.add(new ParamRuleDtl(dtlRows[i]));
}
return list;
}
/**
* 将表外风险暴露分类规则配置信息写入内存
* @throws Exception
@ -215,6 +349,8 @@ public class ParamCache {
,bw.getEAD_TYPE_NAME()
,bw.getEAD_WEIGHT()==null?"9999":String.valueOf(bw.getEAD_WEIGHT())
,bw.getIS_VALID()
,""
,""
});
}
/**

203
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step01.java

@ -0,0 +1,203 @@
package io.sc.engine.rwa.calculator.step;
import io.sc.engine.rwa.calculator.cache.impl.RocksDbCache;
import io.sc.engine.rwa.calculator.domain.*;
import io.sc.engine.rwa.calculator.enums.IntervalType;
import io.sc.engine.rwa.calculator.support.BaseEntity;
import io.sc.engine.rwa.calculator.support.TableMappingColumns;
import io.sc.engine.rwa.calculator.utils.ArrayUtil;
import io.sc.engine.rwa.calculator.utils.CsvUtil;
import io.sc.engine.rwa.calculator.utils.DateUtil;
import io.sc.engine.rwa.calculator.utils.FuncUtil;
import io.sc.platform.util.StringUtil;
import io.sc.platform.util.TimeMonitor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedWriter;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 判断监管产品类型
*/
public class Step01 {
private static final Logger log = LoggerFactory.getLogger(Step01.class);
private ParamCache paramCache;
private RocksDbCache cache;
private BufferedWriter writer;
private Map<String, String[]> mappingTableCache = new HashMap<>();
public Map<String, String[]> getMappingTableCache() {
return mappingTableCache;
}
public void setCache(RocksDbCache cache) {
this.cache = cache;
}
public void setParamCache(ParamCache paramCache) {
this.paramCache = paramCache;
}
public RocksDbCache getCache() {
return cache;
}
public Step01(RocksDbCache cache, ParamCache paramCache){
this.cache = cache;
this.paramCache = paramCache;
}
public void exec() throws Exception {
long start = System.currentTimeMillis();
TimeMonitor tm = new TimeMonitor();
int count = 1;
//从csv逐行读取债项信息
DebtRiskParam t = new DebtRiskParam();
Iterator<String[]> iterator = CsvUtil.readData(t.getTable());
writer = CsvUtil.getWriter("RWA_R_REGULATE_PRODUCT_RES", false);
while (iterator.hasNext()) {
String[] row = iterator.next();
DebtRiskParam drp = new DebtRiskParam(row);
RegulateProductRuleMain ruleMain = regRegulateProduct(drp.getTable(), row);
if(count%100000 == 0){
tm.info("监管产品类型识别:------");
}
count ++;
if(ruleMain != null) {
cache.put("RegulateProd_" + drp.getDEBT_ID(), ruleMain.pass2String());
writer.write(ruleMain.pass2String() + "\n");
writer.flush();
}
}
long end = System.currentTimeMillis();
long posttime = (end-start)/1000;
log.info(MessageFormat.format("监管产品类型识别完成,总耗时{0}秒", posttime));
}
/**
* 识别监管产品类型
* @param row
* @return
*/
private RegulateProductRuleMain regRegulateProduct(String table, String[] row) throws Exception {
//从内存中查询识别规则
List<RegulateProductRuleMain> list = paramCache.getRegulateProductTypeList();
for(RegulateProductRuleMain m : list){
//取规则明细
List<RegulateProductRuleDtl> ruleDtls = paramCache.getRegulateProductRuleDtlMap().get(m.getID());
if(ruleDtls != null){
Boolean bol = true;
for(RegulateProductRuleDtl d : ruleDtls){
if("1".equals(d.getIS_EMPTY_RULE())){
continue;
}
String ruleval = TableMappingColumns.getByRowColumn(row, table, d.getRULE_NAME());
String matchval = d.getRULE_DATA();
if(StringUtil.isNullOrEmpty(ruleval)){//若字段值为空,则默认不匹配
bol = false;
break;
}
if("1".equals(d.getRULE_DATA_TP())){//字符串
if("10".equals(d.getMATCH_TP())){//等于
if(ruleval != null && matchval!= null && !ruleval.equals(matchval)){
bol = false;
break;
}
}else if("20".equals(d.getMATCH_TP())){//不等于
if(ruleval != null && matchval!= null && ruleval.equals(matchval)){
bol = false;
break;
}
}else if("11".equals(d.getMATCH_TP())){//以..开头
if(ruleval != null && matchval!= null && !ruleval.startsWith(matchval)){
bol = false;
break;
}
}else if("21".equals(d.getMATCH_TP())){//不以..开头
if(ruleval != null && matchval!= null && ruleval.startsWith(matchval)){
bol = false;
break;
}
}
}else if("2".equals(d.getRULE_DATA_TP())){//数值
if("10".equals(d.getMATCH_TP())){//等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) != Double.valueOf(matchval)){
bol = false;
break;
}
}else if("20".equals(d.getMATCH_TP())){//不等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) == Double.valueOf(matchval)){
bol = false;
break;
}
}else if("30".equals(d.getMATCH_TP())){//大于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) <= Double.valueOf(matchval)){
bol = false;
break;
}
}else if("31".equals(d.getMATCH_TP())){//大于等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) < Double.valueOf(matchval)){
bol = false;
break;
}
}else if("40".equals(d.getMATCH_TP())){//小于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) > Double.valueOf(matchval)){
bol = false;
break;
}
}else if("41".equals(d.getMATCH_TP())){//小于等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) >= Double.valueOf(matchval)){
bol = false;
break;
}
}
}else if("3".equals(d.getRULE_DATA_TP())){//日期值
if("10".equals(d.getMATCH_TP())){//等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) != Double.valueOf(matchval)){
bol = false;
break;
}
}else if("20".equals(d.getMATCH_TP())){//不等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) == Double.valueOf(matchval)){
bol = false;
break;
}
}else if("30".equals(d.getMATCH_TP())){//大于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare <= 0){
bol = false;
break;
}
}else if("31".equals(d.getMATCH_TP())){//大于等于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare < 0){
bol = false;
break;
}
}else if("40".equals(d.getMATCH_TP())){//小于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare >= 0){
bol = false;
break;
}
}else if("41".equals(d.getMATCH_TP())){//小于等于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare > 0){
bol = false;
break;
}
}
}
}
if(bol){
return m;
}
}
}
return null;
}
}

326
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step02.java

@ -0,0 +1,326 @@
package io.sc.engine.rwa.calculator.step;
import io.sc.engine.rwa.calculator.RWATestDataGenerator;
import io.sc.engine.rwa.calculator.cache.impl.RocksDbCache;
import io.sc.engine.rwa.calculator.domain.DebtRiskClsResult;
import io.sc.engine.rwa.calculator.domain.DebtRiskParam;
import io.sc.engine.rwa.calculator.domain.ParamRuleDtl;
import io.sc.engine.rwa.calculator.domain.ParamRuleMain;
import io.sc.engine.rwa.calculator.support.TableMappingColumns;
import io.sc.engine.rwa.calculator.utils.CsvUtil;
import io.sc.engine.rwa.calculator.utils.DateUtil;
import io.sc.platform.util.StringUtil;
import io.sc.platform.util.TimeMonitor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedWriter;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
/**
* 所有债项匹配表内风险暴露参数表标记债项的风险暴露类型和权重
*/
public class Step02 extends RWATestDataGenerator {
private static final Logger log = LoggerFactory.getLogger(Step02.class);
private ParamCache paramCache;
private RocksDbCache cache;
private BufferedWriter writer;
public RocksDbCache getCache() {
return cache;
}
public void setCache(RocksDbCache cache) {
this.cache = cache;
}
public void setParamCache(ParamCache paramCache) {
this.paramCache = paramCache;
}
public Step02(RocksDbCache cache, ParamCache paramCache){
this.cache = cache;
this.paramCache = paramCache;
}
public void exec() throws Exception {
long start = System.currentTimeMillis();
TimeMonitor tm =new TimeMonitor();
int count = 1;
writer = CsvUtil.getWriter("RWA_R_RISK_EXPO_CLS_RES", false);
//从csv逐行读取债项信息
DebtRiskParam t = new DebtRiskParam();
Iterator<String[]> iterator = CsvUtil.readData(t.getTable());
while(iterator.hasNext()) {
String[] row = iterator.next();
DebtRiskParam drp = new DebtRiskParam(row);
String[] cacheRow = ((String) cache.get("RegulateProd_" + drp.getDEBT_ID())).split(",");
String regulate_prod = TableMappingColumns.getByRowColumn(cacheRow, "RWA_P_REGULATE_PRODUCT_RULE_MAIN", "REGULATE_PRODUCT_CODE");
drp.setPRODUCT_CD(regulate_prod);
ParamRuleMain ruleMain = regRiskExpo("1001", drp.getTable(), drp.parse2Array());//表内业务
DebtRiskClsResult drcr = null;
if(ruleMain != null) {
drcr = newDebtRiskClsResult(ruleMain, drp);
}else{
drcr = newDebtRiskClsResultDefault(drp);
}
//识别表外业务的风险暴露
if("O".equals(drp.getON_OFF_FLAG())) {//表外业务
ruleMain = regRiskExpo("2", drp.getTable(), row);
if(ruleMain != null) {
drcr = updateDebtRiskClsResult(ruleMain, drcr);
}else {
drcr = updateDebtRiskClsResultDefault(drcr);
}
}
if(count%100000 == 0){
tm.info("表内业务和表外业务风险暴露分类识别:------");
}
count ++;
//保存债项的金额
cache.put("riskcls_" + drp.getDEBT_ID(), drcr.pass2String());
cache.put("relatoolids_" + drp.getDEBT_ID(), "");
writer.write(drcr.pass2String() + "\n");
writer.flush();
}
// writer.close();
long end = System.currentTimeMillis();
long posttime = (end-start)/1000;
log.info(MessageFormat.format("表内业务和表外业务风险暴露分类识别完成,总耗时{0}秒", posttime));
}
/**
* 识别债项风险暴露类型
* @param riskType
* @param row
* @return
*/
private ParamRuleMain regRiskExpo(String riskType, String table, String[] row) throws Exception {
//从内存中查询表内风险暴露分类规则
List<ParamRuleMain> list = paramCache.getExpoRuleMainList().stream().filter(m->m.getEXPO_TP().equals(riskType)).collect(Collectors.toList());
for(ParamRuleMain m : list){
//取规则明细
List<ParamRuleDtl> ruleDtls = paramCache.getExpoRuleDtlMap().get(m.getID());
if(ruleDtls != null){
Boolean bol = true;
for(ParamRuleDtl d : ruleDtls){
if("1".equals(d.getIS_EMPTY_RULE())){
continue;
}
String ruleval = TableMappingColumns.getByRowColumn(row, table, d.getRULE_NAME());
String matchval = d.getRULE_DATA();
if(StringUtil.isNullOrEmpty(ruleval)){//若字段值为空,则默认不匹配
bol = false;
break;
}
if("1".equals(d.getRULE_DATA_TP())){//字符串
if("10".equals(d.getMATCH_TP())){//等于
if(ruleval != null && matchval!= null && !ruleval.equals(matchval)){
bol = false;
break;
}
}else if("20".equals(d.getMATCH_TP())){//不等于
if(ruleval != null && matchval!= null && ruleval.equals(matchval)){
bol = false;
break;
}
}else if("11".equals(d.getMATCH_TP())){//以..开头
if(ruleval != null && matchval!= null && !ruleval.startsWith(matchval)){
bol = false;
break;
}
}else if("21".equals(d.getMATCH_TP())){//不以..开头
if(ruleval != null && matchval!= null && ruleval.startsWith(matchval)){
bol = false;
break;
}
}
}else if("2".equals(d.getRULE_DATA_TP())){//数值
if("10".equals(d.getMATCH_TP())){//等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) != Double.valueOf(matchval)){
bol = false;
break;
}
}else if("20".equals(d.getMATCH_TP())){//不等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) == Double.valueOf(matchval)){
bol = false;
break;
}
}else if("30".equals(d.getMATCH_TP())){//大于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) <= Double.valueOf(matchval)){
bol = false;
break;
}
}else if("31".equals(d.getMATCH_TP())){//大于等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) < Double.valueOf(matchval)){
bol = false;
break;
}
}else if("40".equals(d.getMATCH_TP())){//小于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) > Double.valueOf(matchval)){
bol = false;
break;
}
}else if("41".equals(d.getMATCH_TP())){//小于等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) >= Double.valueOf(matchval)){
bol = false;
break;
}
}
}else if("3".equals(d.getRULE_DATA_TP())){//日期值
if("10".equals(d.getMATCH_TP())){//等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) != Double.valueOf(matchval)){
bol = false;
break;
}
}else if("20".equals(d.getMATCH_TP())){//不等于
if(ruleval != null && matchval!= null && Double.valueOf(ruleval) == Double.valueOf(matchval)){
bol = false;
break;
}
}else if("30".equals(d.getMATCH_TP())){//大于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare <= 0){
bol = false;
break;
}
}else if("31".equals(d.getMATCH_TP())){//大于等于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare < 0){
bol = false;
break;
}
}else if("40".equals(d.getMATCH_TP())){//小于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare >= 0){
bol = false;
break;
}
}else if("41".equals(d.getMATCH_TP())){//小于等于
int compare = DateUtil.compareDate(ruleval, matchval);
if(compare > 0){
bol = false;
break;
}
}
}
}
if(bol){
return m;
}
}
}
return null;
}
private String[] getDebtRiskCls(ParamRuleMain ruleMain, DebtRiskParam drp){
return new String[]{
drp.getDATA_DT(),
drp.getDEBT_ID(),
drp.getON_OFF_FLAG(),
ruleMain.getEXPO_CODE(),
ruleMain.getEXPO_NAME(),
ruleMain.getSORT_NO(),
ruleMain.getEXPO_WEIGHT(),
String.valueOf(drp.getEXPO_AS_DEF()),
String.valueOf(drp.getPROVISION()),
"",
String.valueOf(drp.getEXPO_AS_DEF() - drp.getPROVISION()),
"",
String.valueOf(drp.getEXPO_AS_DEF())
};
}
private String[] getDebtRiskClsDef(ParamRuleMain ruleMain, DebtRiskParam drp){
return new String[]{
drp.getDATA_DT(),
drp.getDEBT_ID(),
drp.getON_OFF_FLAG(),
"OTHER_ASSETS",
"其他",
"19.2其他表内资产",
"1.0",
String.valueOf(drp.getEXPO_AS_DEF()),
String.valueOf(drp.getPROVISION()),
"",
String.valueOf(drp.getEXPO_AS_DEF() - drp.getPROVISION()),
"",
String.valueOf(drp.getEXPO_AS_DEF())
};
}
private DebtRiskClsResult newDebtRiskClsResult(ParamRuleMain ruleMain, DebtRiskParam drp){
DebtRiskClsResult domain = new DebtRiskClsResult();
domain.setID(drp.getID());
domain.setDATA_DT(drp.getDATA_DT());
domain.setDEBT_ID(drp.getDEBT_ID());
domain.setON_OFF_FLAG(drp.getON_OFF_FLAG());
domain.setEAD_TYPE_CODE(ruleMain.getEXPO_TP_CODE());
domain.setEAD_TYPE_NAME(ruleMain.getEXPO_TP_NAME());
domain.setEAD_TYPE_NUMBER(ruleMain.getEXPO_NAME());
domain.setRISK_WEIGHT(Double.valueOf(ruleMain.getEXPO_WEIGHT()));
domain.setASSET_AMT(drp.getEXPO_AS_DEF());
domain.setRESERVE(drp.getPROVISION());
domain.setCCF(null);
domain.setEAD_WEIGHT(drp.getEXPO_AS_DEF() - drp.getPROVISION());
domain.setEAD0_WEIGHT(null);
domain.setSURPLUS_VALUE(drp.getEXPO_AS_DEF());
domain.setCUST_NO(drp.getCUST_NO());
domain.setCUST_NAME(drp.getCUST_NAME());
return domain;
}
/**
* 对未匹配到风险暴露类型的债项指定兜底的风险暴露类型19.3.12适用100%风险权重的资产
* @param drp
* @return
*/
private DebtRiskClsResult newDebtRiskClsResultDefault(DebtRiskParam drp){
DebtRiskClsResult domain = new DebtRiskClsResult();
domain.setID(drp.getID());
domain.setDATA_DT(drp.getDATA_DT());
domain.setDEBT_ID(drp.getDEBT_ID());
domain.setON_OFF_FLAG(drp.getON_OFF_FLAG());
domain.setEAD_TYPE_CODE("OTHER_ASSETS");
domain.setEAD_TYPE_NAME("其他");
domain.setEAD_TYPE_NUMBER("19.2其他表内资产");
domain.setRISK_WEIGHT(1.0);
domain.setASSET_AMT(drp.getEXPO_AS_DEF());
domain.setRESERVE(drp.getPROVISION());
domain.setCCF(null);
domain.setEAD_WEIGHT(drp.getEXPO_AS_DEF() - drp.getPROVISION());
domain.setEAD0_WEIGHT(null);
domain.setSURPLUS_VALUE(drp.getEXPO_AS_DEF());
domain.setCUST_NO(drp.getCUST_NO());
domain.setCUST_NAME(drp.getCUST_NAME());
return domain;
}
/**
* 更新表外风险暴露分类类型
* @param ruleMain
* @param drcs
* @return
*/
private DebtRiskClsResult updateDebtRiskClsResult(ParamRuleMain ruleMain, DebtRiskClsResult drcs){
drcs.setEAD_TYPE_CODE(ruleMain.getEXPO_CODE());
drcs.setEAD_TYPE_NAME(ruleMain.getEXPO_NAME());
drcs.setEAD_TYPE_NUMBER(ruleMain.getSORT_NO());
drcs.setCCF(Double.valueOf(ruleMain.getEXPO_WEIGHT()));
return drcs;
}
/**
* 更新表外风险暴露分类类型
* @param drcs
* @return
*/
private DebtRiskClsResult updateDebtRiskClsResultDefault(DebtRiskClsResult drcs){
drcs.setEAD_TYPE_CODE("10.02.00.00.00.00");
drcs.setEAD_TYPE_NAME("10.2其他");
drcs.setEAD_TYPE_NUMBER("10.2");
drcs.setCCF(1.0);
return drcs;
}
}

26
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step1.java

@ -3,6 +3,7 @@ package io.sc.engine.rwa.calculator.step;
import io.sc.engine.rwa.calculator.RWACalculator;
import io.sc.engine.rwa.calculator.cache.impl.RocksDbCache;
import io.sc.engine.rwa.calculator.domain.*;
import io.sc.engine.rwa.calculator.enums.IntervalType;
import io.sc.engine.rwa.calculator.exceptions.CacheNotFoundException;
import io.sc.engine.rwa.calculator.exceptions.ExpressionErrorException;
import io.sc.engine.rwa.calculator.exceptions.FieldNotFoundException;
@ -124,10 +125,17 @@ public class Step1 {
for(int i = 0; i < arr.length; i ++){
valArr[i] = TableMappingColumns.getByRowColumn(row, ruleMain.getFROM_TABLE(), arr[i]);
}
if(ruleMain.getEXPRESSION().indexOf("DATADIFF") >= 0){//对于日期类型的数据需要特殊处理
String _m = ruleMain.getEXPRESSION().substring(9);
String interval = _m.equals("年") ? IntervalType..code() : (_m.equals("月") ? IntervalType..code() : (_m.equals("日") ? IntervalType..code() : IntervalType..code()));
Double _r = DateUtil.dateDiff(valArr[0], valArr[1], interval);
val = _r != null ? String.valueOf(_r) : "";
}else {
Double d = FuncUtil.jepExpr(ruleMain.getEXPRESSION(), valArr);
if (d != null) {
val = String.valueOf(d);
}
}
}else if("3".equals(ruleMain.getMAPPING_TP())){//多条件匹配后再映射
//耗时:10000笔0.5-0.7秒
//获取条件配置
@ -232,13 +240,13 @@ public class Step1 {
}
feildval = getDtlFeildVal(d, row);
matchval = parseVal(d.getMATCH_VAL(), row);
returnval = parseVal(d.getRETURN_VAL(), row);
// expr += FuncUtil.parse2Expr(feildval, d.getFROM_DATA_TP(), d.getMATCH_TP(), matchval);
bol = FuncUtil.parseExprBoolean(feildval, d.getFROM_DATA_TP(), d.getMATCH_TP(), matchval);
expr += FuncUtil.spellCond(d.getSTART_SIGN(), String.valueOf(bol), d.getEND_SIGN());
if("1".equals(d.getIS_RETURN())){
bol = FuncUtil.spelExpr(expr);
if(bol){
returnval = parseVal(d.getRETURN_VAL(), row, d.getFROM_TABLE());
val = returnval;
break;
}else {
@ -262,7 +270,7 @@ public class Step1 {
if(StringUtil.isNullOrEmpty(dtl.getFROM_TABLE()) && StringUtil.isNullOrEmpty(dtl.getFROM_FEILD())){
val = "";
}else {
if(StringUtil.isNullOrEmpty(dtl.getVAL_GET_TYPE()) || dtl.getVAL_GET_TYPE().equals("10")){//直接通过from_field取值
if(dtl.getVAL_GET_TYPE().equals("10")){//直接通过from_field取值
if (dtl.getFROM_FEILD().contains("#")) {//通过自定义函数取值
val = parseVal(dtl.getFROM_FEILD(), row);
} else {
@ -270,10 +278,16 @@ public class Step1 {
val = TableMappingColumns.getByRowColumn(row, dtl.getFROM_TABLE(), dtl.getFROM_FEILD());
}
}
}else if(dtl.getVAL_GET_TYPE().equals("20")){
}else if(dtl.getVAL_GET_TYPE().equals("20")) {//匹配缓存
String keyval = TableMappingColumns.getByRowColumn(row, dtl.getFROM_TABLE(), dtl.getFROM_FEILD());
try{
String[] cacheRow = ((String) cache.get(keyval)).split(",");
val = TableMappingColumns.getByRowColumn(cacheRow, dtl.getCACHE_TABLE(), dtl.getCACHE_FEILD());
}catch(Exception e){
System.out.println(keyval);
val = "";
}
}
}
return val;
@ -295,14 +309,18 @@ public class Step1 {
String table = func[1];
String column = func[2];
ret = TableMappingColumns.getByRowColumn(row, table, column);
} else if (field.contains("FROMCACHE") && rowTable != null) {//从缓存中取值,表现形式为:FROMCACHE#表名称#KEY字段#VAL字段
} else if (field.contains("FROMCACHE") && rowTable.length > 0) {//从缓存中取值,表现形式为:FROMCACHE#表名称#KEY字段#VAL字段
String[] func = field.split("#");
String table = func[1];
String keycol = func[2];
String keyval = TableMappingColumns.getByRowColumn(row, rowTable[0], keycol);
String valcol = func[3];
try {
String[] cacheRow = ((String) cache.get(keyval)).split(",");
ret = TableMappingColumns.getByRowColumn(cacheRow, table, valcol);
}catch(Exception e){
ret = "";
}
}
}
return ret;

18
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step2.java

@ -66,14 +66,14 @@ public class Step2 extends RWATestDataGenerator {
drcr = newDebtRiskClsResultDefault(drp);
}
//识别表外业务的风险暴露
// if("O".equals(drp.getON_OFF_FLAG())) {//表外业务
// ruleMain = regRiskExpo("2", drp.getTable(), row);
// if(ruleMain != null) {
// drcr = updateDebtRiskClsResult(ruleMain, drcr);
// }else {
// drcr = updateDebtRiskClsResultDefault(drcr);
// }
// }
if("O".equals(drp.getON_OFF_FLAG())) {//表外业务
ruleMain = regRiskExpo("2", drp.getTable(), row);
if(ruleMain != null) {
drcr = updateDebtRiskClsResult(ruleMain, drcr);
}else {
drcr = updateDebtRiskClsResultDefault(drcr);
}
}
if(count%100000 == 0){
tm.info("表内业务和表外业务风险暴露分类识别:------");
}
@ -276,7 +276,7 @@ public class Step2 extends RWATestDataGenerator {
*/
private DebtRiskClsResult newDebtRiskClsResultDefault(DebtRiskParam drp){
DebtRiskClsResult domain = new DebtRiskClsResult();
domain.setDATA_DT(drp.getID());
domain.setID(drp.getID());
domain.setDATA_DT(drp.getDATA_DT());
domain.setDEBT_ID(drp.getDEBT_ID());
domain.setON_OFF_FLAG(drp.getON_OFF_FLAG());

38
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/step/Step4.java

@ -13,10 +13,7 @@ import org.slf4j.LoggerFactory;
import java.io.BufferedWriter;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 识别合格缓释工具并对债项进行缓释金额分配
@ -41,16 +38,43 @@ public class Step4 extends RWATestDataGenerator {
long start = System.currentTimeMillis();
TimeMonitor tm =new TimeMonitor();
int count = 1;
writer = CsvUtil.getWriter("RWA_R_ACCORD_RISK_TOOL_RESULT", false);
writer = CsvUtil.getWriter("RWA_C_ACCORD_RISK_TOOL_PARAM_SORTED", false);
//从csv逐行读取缓释工具信息
AccordRiskToolParam t = new AccordRiskToolParam();
Iterator<String[]> iterator = CsvUtil.readData(t.getTable());
List<AccordRiskToolParam> list = new ArrayList<>();
while(iterator.hasNext()) {
String[] row = iterator.next();
AccordRiskToolParam artp = new AccordRiskToolParam(row);
list.add(artp);
}
for(int i = 0; i < list.size(); i ++){
AccordRiskToolParam artp_i = list.get(i);
for(int j = i + 1; j < list.size(); j ++){
AccordRiskToolParam artp_j = list.get(j);
if(!artp_j.getDEBT_ID().equals(artp_i.getDEBT_ID())){
continue;
}
AccordRiskToolParam temp = list.get(i + 1);
list.set(i + 1, artp_j);
list.set(j, temp);
break;
}
}
for(AccordRiskToolParam artp : list) {
writer.write(artp.pass2String() + "\n");
writer.flush();
}
writer = CsvUtil.getWriter("RWA_R_ACCORD_RISK_TOOL_RESULT", false);
Double toolSurplusVal = 0d; //记录缓释品剩余价值
Double debtSurplusVal = 0d; //记录债项剩余风险暴露
String[] lastArtr = null;
while(iterator.hasNext()) {
String[] row = iterator.next();
AccordRiskToolParamSorted tt = new AccordRiskToolParamSorted();
Iterator<String[]> iter = CsvUtil.readData(tt.getTable());
while(iter.hasNext()) {
String[] row = iter.next();
AccordRiskToolParam artp = new AccordRiskToolParam(row);
String[] artr = null;
//在csv文件中,按照缓释工具编号进行了分组
if(lastArtr != null && lastArtr[1].equals(artp.getCOLL_ID())){

2
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/support/TableMappingColumns.java

@ -43,6 +43,7 @@ public class TableMappingColumns {
RwaMIrsCustomer rwaMIrsCustomer = new RwaMIrsCustomer();
RwaMIrsDebt rwaMIrsDebt = new RwaMIrsDebt();
RwaMWeightResult rwaMWeightResult = new RwaMWeightResult();
RegulateProductRuleMain regulateProductRuleMain = new RegulateProductRuleMain();
fromTableColumnMap.put(sourceCustomer.getTable(), sourceCustomer);
fromTableColumnMap.put(sourceDebt.getTable(), sourceDebt);
fromTableColumnMap.put(sourceBh.getTable(), sourceBh);
@ -71,6 +72,7 @@ public class TableMappingColumns {
fromTableColumnMap.put(rwaMIrsCustomer.getTable(), rwaMIrsCustomer);
fromTableColumnMap.put(rwaMIrsDebt.getTable(), rwaMIrsDebt);
fromTableColumnMap.put(rwaMWeightResult.getTable(), rwaMWeightResult);
fromTableColumnMap.put(regulateProductRuleMain.getTable(), regulateProductRuleMain);
}
public static String getByRowColumn(String[] row, String table, String column) throws Exception{

12
io.sc.engine.rwa.calculator/src/main/java/io/sc/engine/rwa/calculator/utils/DateUtil.java

@ -91,9 +91,17 @@ public class DateUtil {
if(StringUtil.isNotEmpty(dt1) && StringUtil.isNotEmpty(dt2)){
dt1 = dt1.replaceAll("[-./年月日]","");
dt2 = dt2.replaceAll("[-./年月日]","");
Date d1 = null;
Date d2 = null;
try {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date d1 = format.parse(dt1);
Date d2 = format.parse(dt2);
d1 = format.parse(dt1);
d2 = format.parse(dt2);
}catch(Exception e){
SimpleDateFormat format = new SimpleDateFormat("yyyyMd");
d1 = format.parse(dt1);
d2 = format.parse(dt2);
}
long dif = d2.getTime() - d1.getTime();
Long ret = null;
if(IntervalType..code().equalsIgnoreCase(interval)){

38
io.sc.engine.rwa.calculator/src/main/resources/data/RWA_P_REGULATE_CUSTOMER_RULE.csv

@ -0,0 +1,38 @@
1,GOV,我国中央政府,1,RWA_P_CIRC_COUNTERPARTY,1,
2,PBC,中国人民银行,1,RWA_P_CIRC_COUNTERPARTY,1,
3,SOV,主权国家或经济实体区域,1,RWA_P_CIRC_COUNTERPARTY,1,
4,CEN_BANK,中央银行,1,RWA_P_CIRC_COUNTERPARTY,1,
5,INO,风险权重为零的国际组织,1,RWA_P_CIRC_COUNTERPARTY,1,
6,RGLA,省级(直辖市、自治区)及计划单列市人民政府,1,RWA_P_CIRC_COUNTERPARTY,1,
7,PSE,除财政部和中国人民银行外,其他收入主要源于中央财政的公共部门(不含国家融资担保基金),1,RWA_P_CIRC_COUNTERPARTY,1,
8,NFGF,国家融资担保基金,1,RWA_P_CIRC_COUNTERPARTY,1,
9,DPI_DOF,各省级政府确认的政府性融资担保机构,1,RWA_P_CIRC_COUNTERPARTY,1,
10,CENTRAL_HUIJIN,中央汇金投资有限责任公司,0,,1,
11,QUA_MDB,合格多边开发银行,1,RWA_P_CIRC_COUNTERPARTY,0,
12,OTH_MDB,其他多边开发银行,0,,0,
13,NDB,新开发银行,1,RWA_P_CIRC_COUNTERPARTY,0,
14,IFI,我国开发性金融机构,1,RWA_P_CIRC_COUNTERPARTY,1,
15,POLICY_BANK,我国政策性银行,1,RWA_P_CIRC_COUNTERPARTY,1,
16,CECIC,中国出口信用保险公司,1,RWA_P_CIRC_COUNTERPARTY,0,
17,AMC,中央政府投资的资产管理公司,1,RWA_P_CIRC_COUNTERPARTY,1,
18,BANK,商业银行,1,RWA_P_CIRC_COUNTERPARTY,1,
19,NBFC,非银行金融机构,0,,0,
20,CEN_CCP,合格中央交易对手,1,RWA_P_CIRC_COUNTERPARTY,1,1
21,D_SIB,境内系统重要性银行,1,RWA_P_CIRC_COUNTERPARTY,0,
22,G_SIB,全球系统重要性银行,1,RWA_P_CIRC_COUNTERPARTY,0,
23,NGDF,国家绿色发展基金,1,RWA_P_CIRC_COUNTERPARTY,0,
24,FOREIGN,境外公共部门实体,0,,1,
25,SME_SMALL,小微企业,0,,0,
26,SME,中小企业,0,,0,
27,CORP,一般公司,0,,0,
28,INDIV,个人,0,,0,
29,VIRTUAL,虚拟交易对手,0,,0,
30,INVESTMENT_NBFC,投资级_非银行金融机构,0,,0,
31,NONINVESTMENT_NBFC,非投资级_非银行金融机构,0,,0,
32,INVESTMENT_CORP,投资级公司,0,,0,
33,OTHER_CORP,其他一般公司,0,,0,
34,TRANSACTORS,个人_合格交易者,0,,0,
35,REGULATORY_RETAIL_INDIV,其他监管零售个人,0,,0,
36,OTHER_INDIV,其他个人,0,,0,
37,SUPERVISORY_FUND,受监管的开放式公募基金,0,,1,
38,SUPERVISORY_PENSION,受监管的养老基金,1,RWA_P_CIRC_COUNTERPARTY,1,
1 1 GOV 我国中央政府 1 RWA_P_CIRC_COUNTERPARTY 1
2 2 PBC 中国人民银行 1 RWA_P_CIRC_COUNTERPARTY 1
3 3 SOV 主权国家或经济实体区域 1 RWA_P_CIRC_COUNTERPARTY 1
4 4 CEN_BANK 中央银行 1 RWA_P_CIRC_COUNTERPARTY 1
5 5 INO 风险权重为零的国际组织 1 RWA_P_CIRC_COUNTERPARTY 1
6 6 RGLA 省级(直辖市、自治区)及计划单列市人民政府 1 RWA_P_CIRC_COUNTERPARTY 1
7 7 PSE 除财政部和中国人民银行外,其他收入主要源于中央财政的公共部门(不含国家融资担保基金) 1 RWA_P_CIRC_COUNTERPARTY 1
8 8 NFGF 国家融资担保基金 1 RWA_P_CIRC_COUNTERPARTY 1
9 9 DPI_DOF 各省级政府确认的政府性融资担保机构 1 RWA_P_CIRC_COUNTERPARTY 1
10 10 CENTRAL_HUIJIN 中央汇金投资有限责任公司 0 1
11 11 QUA_MDB 合格多边开发银行 1 RWA_P_CIRC_COUNTERPARTY 0
12 12 OTH_MDB 其他多边开发银行 0 0
13 13 NDB 新开发银行 1 RWA_P_CIRC_COUNTERPARTY 0
14 14 IFI 我国开发性金融机构 1 RWA_P_CIRC_COUNTERPARTY 1
15 15 POLICY_BANK 我国政策性银行 1 RWA_P_CIRC_COUNTERPARTY 1
16 16 CECIC 中国出口信用保险公司 1 RWA_P_CIRC_COUNTERPARTY 0
17 17 AMC 中央政府投资的资产管理公司 1 RWA_P_CIRC_COUNTERPARTY 1
18 18 BANK 商业银行 1 RWA_P_CIRC_COUNTERPARTY 1
19 19 NBFC 非银行金融机构 0 0
20 20 CEN_CCP 合格中央交易对手 1 RWA_P_CIRC_COUNTERPARTY 1 1
21 21 D_SIB 境内系统重要性银行 1 RWA_P_CIRC_COUNTERPARTY 0
22 22 G_SIB 全球系统重要性银行 1 RWA_P_CIRC_COUNTERPARTY 0
23 23 NGDF 国家绿色发展基金 1 RWA_P_CIRC_COUNTERPARTY 0
24 24 FOREIGN 境外公共部门实体 0 1
25 25 SME_SMALL 小微企业 0 0
26 26 SME 中小企业 0 0
27 27 CORP 一般公司 0 0
28 28 INDIV 个人 0 0
29 29 VIRTUAL 虚拟交易对手 0 0
30 30 INVESTMENT_NBFC 投资级_非银行金融机构 0 0
31 31 NONINVESTMENT_NBFC 非投资级_非银行金融机构 0 0
32 32 INVESTMENT_CORP 投资级公司 0 0
33 33 OTHER_CORP 其他一般公司 0 0
34 34 TRANSACTORS 个人_合格交易者 0 0
35 35 REGULATORY_RETAIL_INDIV 其他监管零售个人 0 0
36 36 OTHER_INDIV 其他个人 0 0
37 37 SUPERVISORY_FUND 受监管的开放式公募基金 0 1
38 38 SUPERVISORY_PENSION 受监管的养老基金 1 RWA_P_CIRC_COUNTERPARTY 1

1253
io.sc.engine.rwa.calculator/src/main/resources/data/RWA_P_REGULATE_PROD_RULE.csv

File diff suppressed because it is too large
Loading…
Cancel
Save