TalentPerformer

Finance

Accountant Module
Accounting Controller Module
Analyst Financial Reporting & Ref Module
Asset-Liability Management Module
Consolidation Module
CSRD Consultant Module
Environmental, Social & Governance Module
Financial Reporting Module
Forward Looking Financial Actuarial Module
IFRS17 & Solvency2 Module
Inventory Actuary Module
ISR Consultant Module
Life & Health Module
Product Design Aging Module
Product Design Life Insurance Module
Structural Risk Analyst Module
Tax Specialist Module
Treasurer Module

Need a custom agent?

Build tailored AI solutions

Work with our team to develop custom AI agents for your business.

Contact us

Finance

Finance

Treasury ALM Risk Controller

The Treasury & ALM Risk Controller provides comprehensive oversight of treasury operations and ensures compliance with ALM policies and regulatory requirements. It monitors FX exposures, counterparty credit risk, and tracks key ALM metrics (liquidity ratios, interest rate exposure, capital ratios). The agent maintains financial equilibrium by balancing liquidity, interest rate, and capital considerations.

LIVE

Purpose

The Treasury & ALM Risk Controller provides comprehensive oversight of treasury operations and ensures compliance with ALM policies and regulatory requirements. It monitors FX exposures, counterparty credit risk, and tracks key ALM metrics (liquidity ratios, interest rate exposure, capital ratios). The agent maintains financial equilibrium by balancing liquidity, interest rate, and capital considerations.

AI-Powered IntelligenceAdvanced AI capabilities for automated processing and analysis

Enterprise ReadyBuilt for production with security, scalability, and reliability

Seamless IntegrationEasy to integrate with your existing systems and workflows

Agent Capabilities

This agent is equipped with the following advanced capabilities:

Available Tools

Calculate Fx Counterparty Risk

Calculate FX and counterparty credit risk exposures. Args: exposures: Cash placements, investments, and FX positions with counterparty details Returns: FX and counterparty risk assessment report

def calculate_fx_counterparty_risk(exposures: str) -> str:
    """
    Calculate FX and counterparty credit risk exposures.
    
    Args:
        exposures: Cash placements, investments, and FX positions with counterparty details
    
    Returns:
        FX and counterparty risk assessment report
    """
    try:
        import json
        
        if isinstance(exposures, str):
            try:
                data = json.loads(exposures)
            except json.JSONDecodeError:
                return "Error: Invalid JSON format for exposures"
        else:
            data = exposures
        
        positions = data.get('positions', [])
        
        "color: #6b7280;"># Aggregate by counterparty and currency
        counterparty_exposure = {}
        currency_exposure = {}
        
        for pos in positions:
            counterparty = pos.get('counterparty', 'Unknown')
            currency = pos.get('currency', 'USD')
            amount = pos.get('amount', 0)
            
            "color: #6b7280;"># Counterparty aggregation
            if counterparty not in counterparty_exposure:
                counterparty_exposure[counterparty] = 0
            counterparty_exposure[counterparty] += amount
            
            "color: #6b7280;"># Currency aggregation
            if currency not in currency_exposure:
                currency_exposure[currency] = 0
            currency_exposure[currency] += amount
        
        total_exposure = sum(counterparty_exposure.values())
        
        report = "=== FX & COUNTERPARTY RISK ASSESSMENT ===\n\n"
        
        "color: #6b7280;"># Counterparty concentration
        report += "COUNTERPARTY EXPOSURE:\n"
        report += f"{'Counterparty':<30} {'Exposure':>15} {'% of Total':>12} {'Status':>10}\n"
        report += "-" * 67 + "\n"
        
        for counterparty, exposure in sorted(counterparty_exposure.items(), key=lambda x: x[1], reverse=True):
            pct = exposure / total_exposure * 100 if total_exposure > 0 else 0
            status = "⚠️" if pct > 10 else "✓"
            report += f"{counterparty:<30} {exposure:>15,.2f} {pct:>11.1f}% {status:>10}\n"
        
        "color: #6b7280;"># Currency exposure
        report += "\nFX EXPOSURE BY CURRENCY:\n"
        report += f"{'Currency':<15} {'Net Position':>15} {'% of Total':>12}\n"
        report += "-" * 42 + "\n"
        
        for currency, position in sorted(currency_exposure.items(), key=lambda x: abs(x[1]), reverse=True):
            pct = abs(position) / total_exposure * 100 if total_exposure > 0 else 0
            report += f"{currency:<15} {position:>15,.2f} {pct:>11.1f}%\n"
        
        "color: #6b7280;"># Risk assessment
        report += "\n=== RISK ASSESSMENT ===\n"
        
        high_concentration = [cp for cp, exp in counterparty_exposure.items() if exp / total_exposure > 0.10]
        if high_concentration:
            report += f"\n⚠️ High counterparty concentration detected: {', '.join(high_concentration)}\n"
            report += "Recommendation: Diversify counterparty exposures to reduce concentration risk.\n"
        
        non_base_currency = sum(abs(exp) for curr, exp in currency_exposure.items() if curr != 'USD')
        fx_ratio = non_base_currency / total_exposure if total_exposure > 0 else 0
        
        if fx_ratio > 0.20:
            report += f"\n⚠️ Significant FX exposure: {fx_ratio*100:.1f}% in non-base currencies.\n"
            report += "Recommendation: Consider FX hedging strategies(forwards, options, natural hedges).\n"
        
        if not high_concentration and fx_ratio <= 0.20:
            report += "\n✓ Counterparty and FX risks within acceptable limits.\n"
            report += "Continue monitoring exposures regularly.\n"
        
        return report
        
    except Exception as e:
        return f"Error calculating FX counterparty risk: {str(e)}"

Calculate Alm Metrics

Calculate comprehensive ALM metrics. Args: balance_sheet_data: Complete balance sheet with all required data Returns: Comprehensive ALM metrics report

def calculate_alm_metrics(balance_sheet_data: str) -> str:
    """
    Calculate comprehensive ALM metrics.
    
    Args:
        balance_sheet_data: Complete balance sheet with all required data
    
    Returns:
        Comprehensive ALM metrics report
    """
    try:
        import json
        
        if isinstance(balance_sheet_data, str):
            try:
                data = json.loads(balance_sheet_data)
            except json.JSONDecodeError:
                return "Error: Invalid JSON format"
        else:
            data = balance_sheet_data
        
        "color: #6b7280;"># Extract data
        assets = data.get('assets', [])
        liabilities = data.get('liabilities', [])
        capital = data.get('capital', {})
        
        total_assets = sum(a.get('amount', 0) for a in assets)
        total_liabilities = sum(l.get('amount', 0) for l in liabilities)
        
        "color: #6b7280;"># Liquidity metrics
        liquid_assets = sum(a.get('amount', 0) for a in assets if a.get('liquid', False))
        stable_funding = sum(l.get('amount', 0) for l in liabilities if l.get('stable', True))
        
        lcr = liquid_assets / (total_liabilities * 0.30) if total_liabilities > 0 else 0  "color: #6b7280;"># Simplified LCR
        nsfr = stable_funding / total_assets if total_assets > 0 else 0  "color: #6b7280;"># Simplified NSFR
        
        "color: #6b7280;"># Capital metrics
        rwa = sum(a.get('amount', 0) * a.get('risk_weight', 1.0) for a in assets)
        total_capital = sum(capital.values()) if isinstance(capital, dict) else capital
        
        cet1_ratio = (capital.get('cet1', 0) / rwa * 100) if rwa > 0 else 0
        tier1_ratio = ((capital.get('cet1', 0) + capital.get('at1', 0)) / rwa * 100) if rwa > 0 else 0
        total_capital_ratio = (total_capital / rwa * 100) if rwa > 0 else 0
        leverage_ratio = (total_capital / total_assets * 100) if total_assets > 0 else 0
        
        "color: #6b7280;"># Interest rate metrics
        asset_duration = sum(a.get('amount', 0) * a.get('duration', 3) for a in assets) / total_assets if total_assets > 0 else 0
        liability_duration = sum(l.get('amount', 0) * l.get('duration', 2) for l in liabilities) / total_liabilities if total_liabilities > 0 else 0
        duration_gap = asset_duration - liability_duration
        
        report = "=== COMPREHENSIVE ALM METRICS ===\n\n"
        
        "color: #6b7280;"># Liquidity Metrics
        report += "LIQUIDITY METRICS:\n"
        report += f"  Liquidity Coverage Ratio(LCR): {lcr*100:.1f}% (Minimum: 100%)\n"
        report += f"  Net Stable Funding Ratio(NSFR): {nsfr*100:.1f}% (Minimum: 100%)\n"
        report += f"  Liquid Assets: {liquid_assets:,.2f}\n\n"
        
        "color: #6b7280;"># Capital Metrics
        report += "CAPITAL METRICS:\n"
        report += f"  CET1 Ratio: {cet1_ratio:.2f}% (Minimum: 8%)\n"
        report += f"  Tier 1 Ratio: {tier1_ratio:.2f}% (Minimum: 10%)\n"
        report += f"  Total Capital Ratio: {total_capital_ratio:.2f}% (Minimum: 12%)\n"
        report += f"  Leverage Ratio: {leverage_ratio:.2f}% (Minimum: 3%)\n\n"
        
        "color: #6b7280;"># Interest Rate Risk
        report += "INTEREST RATE RISK METRICS:\n"
        report += f"  Asset Duration: {asset_duration:.2f} years\n"
        report += f"  Liability Duration: {liability_duration:.2f} years\n"
        report += f"  Duration Gap: {duration_gap:.2f} years\n\n"
        
        "color: #6b7280;"># Compliance assessment
        report += "=== COMPLIANCE STATUS ===\n"
        
        issues = []
        if lcr < 1.0:
            issues.append("⚠️ LCR below 100% minimum")
        if nsfr < 1.0:
            issues.append("⚠️ NSFR below 100% minimum")
        if cet1_ratio < 8:
            issues.append("⚠️ CET1 ratio below 8% minimum")
        if tier1_ratio < 10:
            issues.append("⚠️ Tier 1 ratio below 10% minimum")
        if leverage_ratio < 3:
            issues.append("⚠️ Leverage ratio below 3% minimum")
        
        if issues:
            report += "\nREGULATORY ISSUES DETECTED:\n"
            for issue in issues:
                report += f"{issue}\n"
            report += "\nRecommendation: Immediate action required to restore compliance.\n"
        else:
            report += "✓ All regulatory metrics within required thresholds.\n"
            report += "ALM position is compliant with current regulations.\n"
        
        "color: #6b7280;"># Duration gap assessment
        report += "\n=== INTEREST RATE POSITIONING ===\n"
        if abs(duration_gap) > 2:
            report += f"⚠️ Significant duration gap: {duration_gap:.2f} years\n"
            report += "Recommendation: Consider duration matching or hedging strategies.\n"
        else:
            report += f"✓ Duration gap within acceptable range: {duration_gap:.2f} years\n"
        
        return report
        
    except Exception as e:
        return f"Error calculating ALM metrics: {str(e)}"

File Tools

FileTools from agno framework

Websearch

DuckDuckGoTools is a convenience wrapper around WebSearchTools with the backend defaulting to "duckduckgo". Args: enable_search (bool): Enable web search function. enable_news (bool): Enable news search function. modifier (Optional[str]): A modifier to be prepended to search queries. fixed_max_results (Optional[int]): A fixed number of maximum results. proxy (Optional[str]): Proxy to be used for requests. timeout (Optional[int]): The maximum number of seconds to wait for a response. verify_ssl (bool): Whether to verify SSL certificates. timelimit (Optional[str]): Time limit for search results. Valid values: "d" (day), "w" (week), "m" (month), "y" (year). region (Optional[str]): Region for search results (e.g., "us-en", "uk-en", "ru-ru"). backend (Optional[str]): Backend to use for searching (e.g., "api", "html", "lite"). Defaults to "duckduckgo".

Required Inputs

Cash placements, investments, FX exposures, and counterparty data.

Balance sheet data, liquidity ratios, interest rate exposure, and capital ratios.

Current ALM metrics, risk limits, and regulatory requirements.

Integrated view of liquidity, interest rate, and capital positions.

Generated Outputs

Business Value

Automated processing reduces manual effort and improves accuracy

Consistent validation logic ensures compliance and audit readiness

Early detection of issues minimizes downstream risks and costs

Graph

Treasury ALM Risk Controller preview

Pricing

Get in touch for a tailored pricing

Contact us to discuss your specific needs and requirements and get a personalized plan.

Custom Deployment

Tailored to your organization's specific workflows and requirements.

Enterprise Support

Dedicated support team and onboarding assistance.

Continuous Updates

Regular updates and improvements based on latest AI advancements.

Contact Us

For enterprise deployments.

Custom

one time payment

plus local taxes

Contact Sales

Tailored solutionsCustom pricing based on your organization's size and usage requirements.

)}