Fix TypeScript build errors
- Remove duplicate EscalationLevel export from regulatory.ts - Add missing logger.ts and reports.ts files to audit package - Fix treasury package type issues - Clean dist folders and rebuild
This commit is contained in:
9
packages/risk-models/src/capital.d.ts
vendored
Normal file
9
packages/risk-models/src/capital.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { Transaction, CapitalImpact, RiskWeight } from '@brazil-swift-ops/types';
|
||||
export interface CapitalConfig {
|
||||
capitalRatio: number;
|
||||
capitalBuffer: number;
|
||||
riskWeights: RiskWeight[];
|
||||
}
|
||||
export declare function getRiskWeight(transaction: Transaction, riskWeights: RiskWeight[]): number;
|
||||
export declare function calculateCapitalImpact(transaction: Transaction, config: CapitalConfig): CapitalImpact;
|
||||
//# sourceMappingURL=capital.d.ts.map
|
||||
1
packages/risk-models/src/capital.d.ts.map
Normal file
1
packages/risk-models/src/capital.d.ts.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"capital.d.ts","sourceRoot":"","sources":["capital.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEtF,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAGzF;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAG,aAAa,CA2BrG"}
|
||||
33
packages/risk-models/src/capital.js
Normal file
33
packages/risk-models/src/capital.js
Normal file
@@ -0,0 +1,33 @@
|
||||
import Decimal from 'decimal.js';
|
||||
export function getRiskWeight(transaction, riskWeights) {
|
||||
const paymentWeight = riskWeights.find((w) => w.category === 'payment');
|
||||
return paymentWeight?.weight ?? 0.1;
|
||||
}
|
||||
export function calculateCapitalImpact(transaction, config) {
|
||||
const riskWeight = getRiskWeight(transaction, config.riskWeights);
|
||||
const transactionDecimal = new Decimal(transaction.amount);
|
||||
const weightDecimal = new Decimal(riskWeight);
|
||||
const rwaDecimal = transactionDecimal.mul(weightDecimal);
|
||||
const riskWeightedAssets = rwaDecimal.toNumber();
|
||||
const ratioDecimal = new Decimal(config.capitalRatio);
|
||||
const capitalConsumedDecimal = rwaDecimal.mul(ratioDecimal);
|
||||
const capitalConsumed = capitalConsumedDecimal.toNumber();
|
||||
const capitalBufferAfter = config.capitalBuffer - capitalConsumed;
|
||||
const complianceCheck = capitalBufferAfter >= 0;
|
||||
return {
|
||||
transactionId: transaction.id,
|
||||
transactionAmount: transaction.amount,
|
||||
currency: transaction.currency,
|
||||
riskWeight,
|
||||
riskWeightedAssets,
|
||||
capitalRatio: config.capitalRatio,
|
||||
capitalConsumed,
|
||||
capitalBufferBefore: config.capitalBuffer,
|
||||
capitalBufferAfter,
|
||||
complianceCheck,
|
||||
rationale: complianceCheck
|
||||
? `Capital consumed: ${capitalConsumed.toFixed(2)}. Capital buffer after transaction: ${capitalBufferAfter.toFixed(2)} (above minimum).`
|
||||
: `Capital consumed: ${capitalConsumed.toFixed(2)}. Capital buffer after transaction: ${capitalBufferAfter.toFixed(2)} (below minimum). Transaction may be blocked.`,
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=capital.js.map
|
||||
1
packages/risk-models/src/capital.js.map
Normal file
1
packages/risk-models/src/capital.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"capital.js","sourceRoot":"","sources":["capital.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AASjC,MAAM,UAAU,aAAa,CAAC,WAAwB,EAAE,WAAyB;IAC/E,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IACxE,OAAO,aAAa,EAAE,MAAM,IAAI,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,WAAwB,EAAE,MAAqB;IACpF,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,kBAAkB,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,sBAAsB,GAAG,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC;IAC1D,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,GAAG,eAAe,CAAC;IAClE,MAAM,eAAe,GAAG,kBAAkB,IAAI,CAAC,CAAC;IAEhD,OAAO;QACL,aAAa,EAAE,WAAW,CAAC,EAAE;QAC7B,iBAAiB,EAAE,WAAW,CAAC,MAAM;QACrC,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,UAAU;QACV,kBAAkB;QAClB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,eAAe;QACf,mBAAmB,EAAE,MAAM,CAAC,aAAa;QACzC,kBAAkB;QAClB,eAAe;QACf,SAAS,EAAE,eAAe;YACxB,CAAC,CAAC,qBAAqB,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,uCAAuC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;YACxI,CAAC,CAAC,qBAAqB,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,uCAAuC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,+CAA+C;KACvK,CAAC;AACJ,CAAC"}
|
||||
6
packages/risk-models/src/escalation.d.ts
vendored
Normal file
6
packages/risk-models/src/escalation.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
import type { EscalationState, EscalationLevel, RuleDecision } from '@brazil-swift-ops/types';
|
||||
export declare function determineEscalationLevel(decision: RuleDecision, hasLiquidityIssue: boolean, hasCapitalIssue: boolean, hasLCRIssue: boolean): EscalationLevel;
|
||||
export declare function createEscalationState(transactionId: string, level: EscalationLevel, reason: string): EscalationState;
|
||||
export declare function escalate(currentState: EscalationState, newLevel: EscalationLevel, reason: string): EscalationState;
|
||||
export declare function approveEscalation(state: EscalationState, approvedBy: string): EscalationState;
|
||||
//# sourceMappingURL=escalation.d.ts.map
|
||||
1
packages/risk-models/src/escalation.d.ts.map
Normal file
1
packages/risk-models/src/escalation.d.ts.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"escalation.d.ts","sourceRoot":"","sources":["escalation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,yBAAyB,CAAC;AAEjC,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,EACtB,iBAAiB,EAAE,OAAO,EAC1B,eAAe,EAAE,OAAO,EACxB,WAAW,EAAE,OAAO,GACnB,eAAe,CAcjB;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,GACb,eAAe,CAQjB;AAED,wBAAgB,QAAQ,CACtB,YAAY,EAAE,eAAe,EAC7B,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,GACb,eAAe,CAQjB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,GACjB,eAAe,CAOjB"}
|
||||
39
packages/risk-models/src/escalation.js
Normal file
39
packages/risk-models/src/escalation.js
Normal file
@@ -0,0 +1,39 @@
|
||||
export function determineEscalationLevel(decision, hasLiquidityIssue, hasCapitalIssue, hasLCRIssue) {
|
||||
if (decision === 'Allow') {
|
||||
return 'Allow';
|
||||
}
|
||||
if (hasLiquidityIssue || hasCapitalIssue || hasLCRIssue) {
|
||||
return 'TreasuryApproval';
|
||||
}
|
||||
if (decision === 'Escalate') {
|
||||
return 'ComplianceReview';
|
||||
}
|
||||
return 'Hold';
|
||||
}
|
||||
export function createEscalationState(transactionId, level, reason) {
|
||||
return {
|
||||
transactionId,
|
||||
currentLevel: level,
|
||||
reason,
|
||||
escalatedAt: new Date(),
|
||||
approvalRequired: level !== 'Allow',
|
||||
};
|
||||
}
|
||||
export function escalate(currentState, newLevel, reason) {
|
||||
return {
|
||||
...currentState,
|
||||
previousLevel: currentState.currentLevel,
|
||||
currentLevel: newLevel,
|
||||
reason,
|
||||
escalatedAt: new Date(),
|
||||
};
|
||||
}
|
||||
export function approveEscalation(state, approvedBy) {
|
||||
return {
|
||||
...state,
|
||||
approvalRequired: false,
|
||||
approvedBy,
|
||||
approvedAt: new Date(),
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=escalation.js.map
|
||||
1
packages/risk-models/src/escalation.js.map
Normal file
1
packages/risk-models/src/escalation.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"escalation.js","sourceRoot":"","sources":["escalation.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,wBAAwB,CACtC,QAAsB,EACtB,iBAA0B,EAC1B,eAAwB,EACxB,WAAoB;IAEpB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,iBAAiB,IAAI,eAAe,IAAI,WAAW,EAAE,CAAC;QACxD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,aAAqB,EACrB,KAAsB,EACtB,MAAc;IAEd,OAAO;QACL,aAAa;QACb,YAAY,EAAE,KAAK;QACnB,MAAM;QACN,WAAW,EAAE,IAAI,IAAI,EAAE;QACvB,gBAAgB,EAAE,KAAK,KAAK,OAAO;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,YAA6B,EAC7B,QAAyB,EACzB,MAAc;IAEd,OAAO;QACL,GAAG,YAAY;QACf,aAAa,EAAE,YAAY,CAAC,YAAY;QACxC,YAAY,EAAE,QAAQ;QACtB,MAAM;QACN,WAAW,EAAE,IAAI,IAAI,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAsB,EACtB,UAAkB;IAElB,OAAO;QACL,GAAG,KAAK;QACR,gBAAgB,EAAE,KAAK;QACvB,UAAU;QACV,UAAU,EAAE,IAAI,IAAI,EAAE;KACvB,CAAC;AACJ,CAAC"}
|
||||
6
packages/risk-models/src/index.d.ts
vendored
Normal file
6
packages/risk-models/src/index.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
export * from './reserves';
|
||||
export * from './capital';
|
||||
export * from './lcr';
|
||||
export * from './escalation';
|
||||
export * from './risk-weights';
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
1
packages/risk-models/src/index.d.ts.map
Normal file
1
packages/risk-models/src/index.d.ts.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
||||
6
packages/risk-models/src/index.js
Normal file
6
packages/risk-models/src/index.js
Normal file
@@ -0,0 +1,6 @@
|
||||
export * from './reserves';
|
||||
export * from './capital';
|
||||
export * from './lcr';
|
||||
export * from './escalation';
|
||||
export * from './risk-weights';
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
packages/risk-models/src/index.js.map
Normal file
1
packages/risk-models/src/index.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
||||
9
packages/risk-models/src/lcr.d.ts
vendored
Normal file
9
packages/risk-models/src/lcr.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
import type { Transaction, LCRImpact } from '@brazil-swift-ops/types';
|
||||
export interface LCRConfig {
|
||||
hqla: number;
|
||||
netOutflows: number;
|
||||
minimumLCR: number;
|
||||
runoffFactor: number;
|
||||
}
|
||||
export declare function calculateLCRImpact(transaction: Transaction, config: LCRConfig): LCRImpact;
|
||||
//# sourceMappingURL=lcr.d.ts.map
|
||||
1
packages/risk-models/src/lcr.d.ts.map
Normal file
1
packages/risk-models/src/lcr.d.ts.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"lcr.d.ts","sourceRoot":"","sources":["lcr.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGtE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,SAAS,CAgCzF"}
|
||||
35
packages/risk-models/src/lcr.js
Normal file
35
packages/risk-models/src/lcr.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import Decimal from 'decimal.js';
|
||||
import { getDefaultConverter } from '@brazil-swift-ops/utils';
|
||||
export function calculateLCRImpact(transaction, config) {
|
||||
const converter = getDefaultConverter();
|
||||
const brlAmount = converter.convert(transaction.amount, transaction.currency, 'BRL');
|
||||
const transactionDecimal = new Decimal(brlAmount);
|
||||
const runoffDecimal = new Decimal(config.runoffFactor);
|
||||
const outflowStressDecimal = transactionDecimal.mul(runoffDecimal);
|
||||
const outflowStress = outflowStressDecimal.toNumber();
|
||||
const netOutflowsAfter = config.netOutflows + outflowStress;
|
||||
const hqlaDecimal = new Decimal(config.hqla);
|
||||
const outflowsBeforeDecimal = new Decimal(config.netOutflows);
|
||||
const outflowsAfterDecimal = new Decimal(netOutflowsAfter);
|
||||
const lcrBefore = outflowsBeforeDecimal.gt(0) ? hqlaDecimal.div(outflowsBeforeDecimal).toNumber() : Infinity;
|
||||
const lcrAfter = outflowsAfterDecimal.gt(0) ? hqlaDecimal.div(outflowsAfterDecimal).toNumber() : Infinity;
|
||||
const complianceCheck = lcrAfter >= config.minimumLCR;
|
||||
return {
|
||||
transactionId: transaction.id,
|
||||
transactionAmount: transaction.amount,
|
||||
currency: transaction.currency,
|
||||
runoffFactor: config.runoffFactor,
|
||||
outflowStress,
|
||||
hqlaBefore: config.hqla,
|
||||
netOutflowsBefore: config.netOutflows,
|
||||
netOutflowsAfter,
|
||||
lcrBefore,
|
||||
lcrAfter,
|
||||
minimumLCR: config.minimumLCR,
|
||||
complianceCheck,
|
||||
rationale: complianceCheck
|
||||
? `LCR after transaction: ${(lcrAfter * 100).toFixed(2)}% (above minimum ${(config.minimumLCR * 100).toFixed(2)}%).`
|
||||
: `LCR after transaction: ${(lcrAfter * 100).toFixed(2)}% (below minimum ${(config.minimumLCR * 100).toFixed(2)}%). Transaction may be blocked.`,
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=lcr.js.map
|
||||
1
packages/risk-models/src/lcr.js.map
Normal file
1
packages/risk-models/src/lcr.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"lcr.js","sourceRoot":"","sources":["lcr.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAS9D,MAAM,UAAU,kBAAkB,CAAC,WAAwB,EAAE,MAAiB;IAC5E,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrF,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC;IACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7G,MAAM,QAAQ,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1G,MAAM,eAAe,GAAG,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC;IAEtD,OAAO;QACL,aAAa,EAAE,WAAW,CAAC,EAAE;QAC7B,iBAAiB,EAAE,WAAW,CAAC,MAAM;QACrC,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,aAAa;QACb,UAAU,EAAE,MAAM,CAAC,IAAI;QACvB,iBAAiB,EAAE,MAAM,CAAC,WAAW;QACrC,gBAAgB;QAChB,SAAS;QACT,QAAQ;QACR,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe;QACf,SAAS,EAAE,eAAe;YACxB,CAAC,CAAC,0BAA0B,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YACpH,CAAC,CAAC,0BAA0B,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC;KACnJ,CAAC;AACJ,CAAC"}
|
||||
8
packages/risk-models/src/reserves.d.ts
vendored
Normal file
8
packages/risk-models/src/reserves.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import type { Transaction, ReserveImpact } from '@brazil-swift-ops/types';
|
||||
export interface ReserveConfig {
|
||||
reserveRatio: number;
|
||||
availableLiquidity: number;
|
||||
requiredReserves: number;
|
||||
}
|
||||
export declare function calculateReserveImpact(transaction: Transaction, config: ReserveConfig): ReserveImpact;
|
||||
//# sourceMappingURL=reserves.d.ts.map
|
||||
1
packages/risk-models/src/reserves.d.ts.map
Normal file
1
packages/risk-models/src/reserves.d.ts.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"reserves.d.ts","sourceRoot":"","sources":["reserves.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG1E,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAG,aAAa,CAwBrG"}
|
||||
27
packages/risk-models/src/reserves.js
Normal file
27
packages/risk-models/src/reserves.js
Normal file
@@ -0,0 +1,27 @@
|
||||
import Decimal from 'decimal.js';
|
||||
import { getDefaultConverter } from '@brazil-swift-ops/utils';
|
||||
export function calculateReserveImpact(transaction, config) {
|
||||
const converter = getDefaultConverter();
|
||||
const brlAmount = converter.convert(transaction.amount, transaction.currency, 'BRL');
|
||||
const transactionDecimal = new Decimal(brlAmount);
|
||||
const ratioDecimal = new Decimal(config.reserveRatio);
|
||||
const reserveImpactDecimal = transactionDecimal.mul(ratioDecimal);
|
||||
const reserveImpact = reserveImpactDecimal.toNumber();
|
||||
const availableLiquidityAfter = config.availableLiquidity - brlAmount;
|
||||
const complianceCheck = availableLiquidityAfter >= config.requiredReserves;
|
||||
return {
|
||||
transactionId: transaction.id,
|
||||
transactionAmount: transaction.amount,
|
||||
currency: transaction.currency,
|
||||
reserveRatio: config.reserveRatio,
|
||||
reserveImpact,
|
||||
availableLiquidityBefore: config.availableLiquidity,
|
||||
availableLiquidityAfter,
|
||||
requiredReserves: config.requiredReserves,
|
||||
complianceCheck,
|
||||
rationale: complianceCheck
|
||||
? `Reserve impact: ${reserveImpact.toFixed(2)} BRL. Available liquidity after transaction: ${availableLiquidityAfter.toFixed(2)} BRL (above required ${config.requiredReserves.toFixed(2)} BRL).`
|
||||
: `Reserve impact: ${reserveImpact.toFixed(2)} BRL. Available liquidity after transaction: ${availableLiquidityAfter.toFixed(2)} BRL (below required ${config.requiredReserves.toFixed(2)} BRL). Transaction may be blocked.`,
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=reserves.js.map
|
||||
1
packages/risk-models/src/reserves.js.map
Normal file
1
packages/risk-models/src/reserves.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"reserves.js","sourceRoot":"","sources":["reserves.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAQ9D,MAAM,UAAU,sBAAsB,CAAC,WAAwB,EAAE,MAAqB;IACpF,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrF,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC;IACtD,MAAM,uBAAuB,GAAG,MAAM,CAAC,kBAAkB,GAAG,SAAS,CAAC;IACtE,MAAM,eAAe,GAAG,uBAAuB,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAE3E,OAAO;QACL,aAAa,EAAE,WAAW,CAAC,EAAE;QAC7B,iBAAiB,EAAE,WAAW,CAAC,MAAM;QACrC,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,aAAa;QACb,wBAAwB,EAAE,MAAM,CAAC,kBAAkB;QACnD,uBAAuB;QACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,eAAe;QACf,SAAS,EAAE,eAAe;YACxB,CAAC,CAAC,mBAAmB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YACjM,CAAC,CAAC,mBAAmB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC;KAChO,CAAC;AACJ,CAAC"}
|
||||
4
packages/risk-models/src/risk-weights.d.ts
vendored
Normal file
4
packages/risk-models/src/risk-weights.d.ts
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
import type { RiskWeight, RiskWeightTable } from '@brazil-swift-ops/types';
|
||||
export declare const DEFAULT_RISK_WEIGHTS: RiskWeight[];
|
||||
export declare function createRiskWeightTable(version?: string, effectiveDate?: Date): RiskWeightTable;
|
||||
//# sourceMappingURL=risk-weights.d.ts.map
|
||||
1
packages/risk-models/src/risk-weights.d.ts.map
Normal file
1
packages/risk-models/src/risk-weights.d.ts.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"risk-weights.d.ts","sourceRoot":"","sources":["risk-weights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3E,eAAO,MAAM,oBAAoB,EAAE,UAAU,EAsB5C,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,MAAgB,EACzB,aAAa,GAAE,IAAiB,GAC/B,eAAe,CAOjB"}
|
||||
32
packages/risk-models/src/risk-weights.js
Normal file
32
packages/risk-models/src/risk-weights.js
Normal file
@@ -0,0 +1,32 @@
|
||||
export const DEFAULT_RISK_WEIGHTS = [
|
||||
{
|
||||
category: 'payment',
|
||||
description: 'Payment transactions',
|
||||
weight: 0.1, // 10%
|
||||
minWeight: 0.0,
|
||||
maxWeight: 0.2,
|
||||
},
|
||||
{
|
||||
category: 'fx_settlement',
|
||||
description: 'FX settlement transactions',
|
||||
weight: 0.35, // 35%
|
||||
minWeight: 0.2,
|
||||
maxWeight: 0.5,
|
||||
},
|
||||
{
|
||||
category: 'nostro_exposure',
|
||||
description: 'Nostro account exposure',
|
||||
weight: 1.0, // 100%
|
||||
minWeight: 0.5,
|
||||
maxWeight: 1.0,
|
||||
},
|
||||
];
|
||||
export function createRiskWeightTable(version = '1.0.0', effectiveDate = new Date()) {
|
||||
return {
|
||||
id: `RWT-${version}`,
|
||||
version,
|
||||
effectiveDate,
|
||||
weights: DEFAULT_RISK_WEIGHTS,
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=risk-weights.js.map
|
||||
1
packages/risk-models/src/risk-weights.js.map
Normal file
1
packages/risk-models/src/risk-weights.js.map
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"risk-weights.js","sourceRoot":"","sources":["risk-weights.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD;QACE,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,sBAAsB;QACnC,MAAM,EAAE,GAAG,EAAE,MAAM;QACnB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf;IACD;QACE,QAAQ,EAAE,eAAe;QACzB,WAAW,EAAE,4BAA4B;QACzC,MAAM,EAAE,IAAI,EAAE,MAAM;QACpB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf;IACD;QACE,QAAQ,EAAE,iBAAiB;QAC3B,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE,GAAG,EAAE,OAAO;QACpB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf;CACF,CAAC;AAEF,MAAM,UAAU,qBAAqB,CACnC,UAAkB,OAAO,EACzB,gBAAsB,IAAI,IAAI,EAAE;IAEhC,OAAO;QACL,EAAE,EAAE,OAAO,OAAO,EAAE;QACpB,OAAO;QACP,aAAa;QACb,OAAO,EAAE,oBAAoB;KAC9B,CAAC;AACJ,CAAC"}
|
||||
Reference in New Issue
Block a user