UNPKG

ca-mfe-page-scoring-ui

Version:

This is a react shell for the SPGI Platform MFE implementation

304 lines (278 loc) 10.8 kB
import moment from 'moment'; const modelType = 'RG'; const ScoreModelObjName = { 'fn': 'funpdScoreModel', 'cm': 'cmScoreModel', 'epd': 'epdScoreModel' }; const modelIdentityObj = { 'fn': 'cmsWidget', 'cm': 'cmScoreModel', 'epd': 'expectedpdWidget' }; const RGRModalData = { isNewSUItoRGRFlow: true, rgLatest: true, modelType, EpdBucket: null, finalScores: null, selectedFinStatement: null, AdjustmentsForRollover: null, QAdjPDScore: {}, genSeriesSUI: [], SUICompanyInfo: {}, currScoringData: null, middleScoringData: { overallScoreModel: {} }, rgModel: { overallScoreModel: {} }, generatedRgScore : null, macroInputs: { scoringData: { request: null, data: { outputs: [], modelDataFN: null, modelDataCM: null, userInputs: {} } } }, isLatestDateArray: [], Period: {} }; function transformBenchmarkScore(score) { const { oneToHundred, letterGrade, rawPd, observationCount } = score; const onetoNineScale = -1; // change in case of 1-9 scale const calculatedRawPd = rawPd * 100; const riskCategory = ''; return [ oneToHundred, onetoNineScale, letterGrade, calculatedRawPd, rawPd, riskCategory, observationCount ]; } const updateRgData = (scoredTrackerData, isEpd, loadCurrScoreData) => { if (RGRModalData?.middleScoringData?.overallScoreModel) { RGRModalData.middleScoringData.overallScoreModel = scoredTrackerData?.riskGaugeData || null; } if(loadCurrScoreData){ RGRModalData.currScoringData = { overallScoreModel: scoredTrackerData?.riskGaugeData || null }; } if (RGRModalData?.rgModel?.overallScoreModel) { const data = scoredTrackerData?.riskGaugeData; const lastValidScore = data?.scoreAnalysis?.slice().reverse() .find(item => item.benchmarkScore && Object.keys(item.benchmarkScore).length > 0); const transformedScoreAnalysis = lastValidScore ? [{ ...lastValidScore, benchmarkScore: transformBenchmarkScore(lastValidScore.benchmarkScore) }] : []; const rgScore = data?.riskGaugeScore?.rgScore || {}; const rgAdjustedScore = data?.rgAdjustedScore || {}; const creditScore = rgScore.oneToHundred && !Number.isNaN(rgScore.oneToHundred) ? rgScore.oneToHundred : 0; const pd = rgScore.rawPd && !Number.isNaN(rgScore.rawPd) ? rgScore.rawPd * 100 : 0; const pdAdjRawPd = rgAdjustedScore.rawPd && !Number.isNaN(rgAdjustedScore.rawPd) ? rgAdjustedScore.rawPd * 100 : 0; RGRModalData.rgModel.overallScoreModel = { noData: false, creditRating: rgScore.letterGrade || '', creditScore, pd, isEpd, isPropData: false, pdAdjRawPd, isLowerModelVersion: false, rgLowerModelVersion: null, creditScoreOneToNine: 0, scoreAnalysis: transformedScoreAnalysis }; } }; const loadMacroInputs = (scoredTrackerData, userInfo) => { const scoringData = scoredTrackerData?.generatedScore?.scoringData || []; if (RGRModalData?.macroInputs?.scoringData?.data) { RGRModalData.macroInputs.scoringData.data.outputs = scoringData; RGRModalData.macroInputs.scoringData.data.userInputs = { userId: userInfo?.userId, userName: userInfo?.userName }; } if (RGRModalData?.macroInputs?.scoringData) { RGRModalData.macroInputs.scoringData.request = { ...scoredTrackerData?.generateScorePayload }; if (RGRModalData.macroInputs.scoringData.request.loadInputsRequest) { RGRModalData.macroInputs.scoringData.request.loadInputsRequest = { ...RGRModalData.macroInputs.scoringData.request.loadInputsRequest, caModel: 'RG' }; } } }; const updateCompanyInfo = (companyData, selectedValues, companySelectedData) => { const countryCode = companySelectedData?.country?.value; const industryCode = companySelectedData?.industry?.value?.toString(); const companyType = companySelectedData?.type?.label; RGRModalData.SUICompanyInfo = { ...companyData, countryCode, industryCode, companyType }; RGRModalData.selectedFinStatement = moment(selectedValues?.financialStatement?.value).format('YYYY-MM-DD'); RGRModalData.Period = { FiscalQuarter: selectedValues?.financialStatement?.fiscalQuarter, FiscalYear: selectedValues?.financialStatement?.fiscalYear, PeriodDate: selectedValues?.financialStatement?.periodDate, PeriodType: selectedValues?.financialStatement?.periodType }; }; const updateLatestDateArray = isAsOfDateToday => { const RIModelIdentity = { modelIdentity: 'overallRiskIdentity', model: modelType, isLatest: isAsOfDateToday }; RGRModalData.isLatestDateArray = [RIModelIdentity]; }; const updateGeneratedScoreData = ({ scoredTrackerData, isPitAdjSelected, loadPitAdj, isAsOfDateToday, companyData, selectedValues, companySelectedData, isLatestFinStmt, sizeAdjustmentData, models, isEpd }) => { const [scoringData] = scoredTrackerData?.generatedScore?.scoringData || []; const scoredData = scoredTrackerData?.riskGaugeData || []; const rgScore = scoredData?.riskGaugeScore?.rgScore || {}; const rgAdjustedScore = scoredData?.rgAdjustedScore || {}; if(scoringData){ const updatedInputsRequest = { countryIsoCode: companySelectedData?.country?.value, industryCode: companySelectedData?.industry?.value?.toString(), companyType: companyData?.companyType, publicPrivate: companyData?.companyType, name: companyData?.companyName, companyId: Number(companyData?.companyId), asOfDate: selectedValues?.asOfDate, periodType: selectedValues?.financialStatement?.periodType, currencyIso: selectedValues?.financialStatement?.currencyCode, restatementType: selectedValues?.financialStatement?.restatementType, periodQuarter: { quarter: selectedValues?.financialStatement?.fiscalQuarter, calendarYear: selectedValues?.financialStatement?.fiscalYear, year: selectedValues?.financialStatement?.fiscalYear, fiscalQuarter: selectedValues?.financialStatement?.fiscalQuarter, fiscalYear: selectedValues?.financialStatement?.fiscalYear, currencyIso: selectedValues?.financialStatement?.currencyCode, restatementType: selectedValues?.financialStatement?.restatementType, statementDate: moment( selectedValues[isEpd ? 'selectPeriod' : 'financialStatement']?.periodDate || null ).format('YYYY-MM-DD') } }; const ScoreModelData = {}; Object.keys(ScoreModelObjName).forEach( mf => { if(mf in scoringData){ const inpReq = { inputsRequest: { ...updatedInputsRequest, caModel: mf.toUpperCase(), modelId : models[mf.toUpperCase()] } }; const isEpdFamily = Boolean(mf === 'epd'); const data = { modelFamily: mf.toUpperCase(), metrics: scoringData[mf], ...(isEpdFamily ? { widgetModelRequest: inpReq, ...sizeAdjustmentData }: inpReq), pitAdjustments: { creditCycle: isPitAdjSelected, pitAdjustmentDate: loadPitAdj?.currentResp?.pitAdjustmentDate }, isSui: true, isLatest: isAsOfDateToday }; ScoreModelData[ScoreModelObjName[mf]] = { reqPayload: { ...data, ...(isEpdFamily ? sizeAdjustmentData : {}) } }; if(isEpdFamily && sizeAdjustmentData?.epdBucket){ RGRModalData.EpdBucket = sizeAdjustmentData?.epdBucket; } const getValRGScore = score => (score !== undefined && score !== null && !Number.isNaN(score)) ? score : null; RGRModalData.generatedRgScore = getValRGScore(rgAdjustedScore.rawPd) || getValRGScore(rgScore.rawPd); RGRModalData.isLatestDateArray = [ { isLatest: isAsOfDateToday, model: mf.toUpperCase(), modelIdentity: modelIdentityObj[mf] }, ...RGRModalData.isLatestDateArray ]; } }); RGRModalData.middleScoringData = { ...RGRModalData.middleScoringData, ...ScoreModelData }; if(isLatestFinStmt){ RGRModalData.currScoringData = { ...RGRModalData.currScoringData, ...ScoreModelData }; } } }; const updateRGRModalData = ({ scoredTrackerData, selectedValues, companyData, companySelectedData, userInfo, isEpd, isPitAdjSelected, loadPitAdj, isAsOfDateToday, isLatestFinStmt, sizeAdjustmentData, scoringFinInputs, models }) => { updateRgData(scoredTrackerData, isEpd, isLatestFinStmt); loadMacroInputs(scoredTrackerData, userInfo); updateCompanyInfo(companyData, selectedValues, companySelectedData); updateLatestDateArray(isAsOfDateToday); updateGeneratedScoreData({ scoredTrackerData, isPitAdjSelected, loadPitAdj, isAsOfDateToday, companyData, selectedValues, companySelectedData, isLatestFinStmt, sizeAdjustmentData, scoringFinInputs, models, isEpd }); RGRModalData.rgLatest = isLatestFinStmt; return { ...RGRModalData }; }; export default updateRGRModalData;