import type { Transaction, ThresholdCheckResult, RuleResult, RuleSeverity, RuleDecision, } from '@brazil-swift-ops/types'; import { getDefaultConverter } from '@brazil-swift-ops/utils'; import { getConfig } from './config'; export function evaluateThreshold( transaction: Transaction ): ThresholdCheckResult { const config = getConfig(); const converter = getDefaultConverter(); const usdEquivalent = converter.getUSDEquivalent( transaction.amount, transaction.currency ); const threshold = config.threshold.usdReportingThreshold; const requiresReporting = usdEquivalent >= threshold; return { passed: true, transactionAmount: transaction.amount, currency: transaction.currency, usdEquivalent, threshold, requiresReporting, rationale: requiresReporting ? `Transaction amount (${transaction.amount} ${transaction.currency} = ${usdEquivalent.toFixed(2)} USD) exceeds reporting threshold of ${threshold} USD. Reporting to Banco Central required.` : `Transaction amount (${transaction.amount} ${transaction.currency} = ${usdEquivalent.toFixed(2)} USD) is below reporting threshold of ${threshold} USD.`, }; } export function createThresholdRuleResult( check: ThresholdCheckResult ): RuleResult { const severity: RuleSeverity = check.requiresReporting ? 'Warning' : 'Info'; const decision: RuleDecision = check.requiresReporting ? 'Hold' : 'Allow'; return { ruleId: 'threshold-check', ruleName: 'USD Equivalent Threshold Check', passed: true, severity, decision, rationale: check.rationale, details: { transactionAmount: check.transactionAmount, currency: check.currency, usdEquivalent: check.usdEquivalent, threshold: check.threshold, requiresReporting: check.requiresReporting, }, }; }