TalentPerformer

Liquidity Interest Rate Risk Assessor

The Liquidity & Interest Rate Risk Assessor is responsible for evaluating the institution's liquidity position and interest rate risk exposure. It monitors short-term and long-term liquidity, identifies gaps in cash flow maturities, and measures sensitivity of the balance sheet to interest rate shocks. The agent produces actionable insights and metrics such as LCR, NSFR, liquidity gaps, EVE, and NII changes under different scenarios.

LIVE

Instructions

Step 1: Liquidity Gap Analysis
    - Input: Balance sheet data with Assets and Liabilities, including amount and maturity.
    - Tool: calculate_liquidity_gaps
    - Action: Compute liquidity gaps across defined time buckets to identify potential shortfalls.

    Step 2: Interest Rate Risk - EVE Sensitivity
    - Input: Asset and liability cash flow data including Amount, Rate, and Maturity.
    - Tool: calculate_eve_sensitivity
    - Action: Apply interest rate shock scenarios to compute the change in Economic Value of Equity (EVE).

    Step 3: Interest Rate Risk - NII Sensitivity
    - Input: Asset and liability cash flow data including Amount and Rate.
    - Tool: calculate_nii_sensitivity
    - Action: Apply interest rate shock scenarios to calculate projected changes in Net Interest Income (NII) over the next period.

    Step 4: Reporting & Recommendations
    - Input: Results from liquidity gaps, EVE, and NII calculations.
    - Action: Summarize findings, highlight vulnerabilities, and provide recommendations for liquidity management and interest rate risk mitigation.

Knowledge Base (.md)

Business reference guide

Drag & Drop or Click

.md, .txt, .pdf

Data Files

Upload data for analysis (CSV, JSON, Excel, PDF)

Drag & Drop or Click

Multiple files: .json, .csv, .xlsx, .xls, .pdf, .docx, .pptx, .txt

Tools 4

calculate_nii_sensitivity

Calculates the change in Net Interest Income (NII) for the next year. Parameters: - asset_cf: JSON string — list of objects with keys Amount (float), Rate (float). Example: '[{"Amount":500000,"Rate":0.03}]' - liability_cf: JSON string — same format as asset_cf. - delta_rate: Shock in decimal (e.g. 0.01 for +100bps). Returns: - JSON string with NII change value.

def calculate_nii_sensitivity(asset_cf: str, liability_cf: str, delta_rate: float) -> str:
    """
    Calculates the change in Net Interest Income(NII) for the next year.

    Parameters:
    - asset_cf: JSON string — list of objects with keys Amount(float), Rate(float).
                Example: '[{"Amount":500000,"Rate":0.03}]'
    - liability_cf: JSON string — same format as asset_cf.
    - delta_rate: Shock in decimal(e.g. 0.01 for +100bps).

    Returns:
    - JSON string with NII change value.
    """
    try:
        a_data = json.loads(asset_cf) if isinstance(asset_cf, str) else asset_cf
        l_data = json.loads(liability_cf) if isinstance(liability_cf, str) else liability_cf

        a_df = pd.DataFrame(a_data)
        l_df = pd.DataFrame(l_data)

        asset_impact = float((a_df['Amount'] * (a_df['Rate'] + delta_rate)).sum())
        liability_impact = float((l_df['Amount'] * (l_df['Rate'] + delta_rate)).sum())
        nii_change = asset_impact - liability_impact

        return json.dumps({'nii_change': round(nii_change, 2), 'delta_rate': delta_rate})

    except Exception as e:
        return json.dumps({'error': str(e)})

calculate_eve_sensitivity

Calculates the change in Economic Value of Equity (EVE) due to interest rate shock. Parameters: - asset_cf: JSON string — list of objects with keys Maturity (int, days), Amount (float), Rate (float). Example: '[{"Maturity":30,"Amount":500000,"Rate":0.03}]' - liability_cf: JSON string — same format as asset_cf. - delta_rate: Shock in decimal (e.g. 0.01 for +100bps). Returns: - JSON string with EVE change value.

def calculate_eve_sensitivity(asset_cf: str, liability_cf: str, delta_rate: float) -> str:
    """
    Calculates the change in Economic Value of Equity(EVE) due to interest rate shock.

    Parameters:
    - asset_cf: JSON string — list of objects with keys Maturity(int, days), Amount(float), Rate(float).
                Example: '[{"Maturity":30,"Amount":500000,"Rate":0.03}]'
    - liability_cf: JSON string — same format as asset_cf.
    - delta_rate: Shock in decimal(e.g. 0.01 for +100bps).

    Returns:
    - JSON string with EVE change value.
    """
    try:
        a_data = json.loads(asset_cf) if isinstance(asset_cf, str) else asset_cf
        l_data = json.loads(liability_cf) if isinstance(liability_cf, str) else liability_cf

        a_df = pd.DataFrame(a_data)
        l_df = pd.DataFrame(l_data)

        asset_change = float((a_df['Amount'] * delta_rate * a_df['Maturity'] / 365).sum())
        liability_change = float((l_df['Amount'] * delta_rate * l_df['Maturity'] / 365).sum())
        eve_change = asset_change - liability_change

        return json.dumps({'eve_change': round(eve_change, 2), 'delta_rate': delta_rate})

    except Exception as e:
        return json.dumps({'error': str(e)})

calculate_liquidity_gaps

Calculates cumulative liquidity gaps across different time buckets. Args: balance_sheet: JSON string — list of objects with keys Category ('Assets' or 'Liabilities'), Amount (float), Maturity (int, days). Example: '[{"Category":"Assets","Amount":500,"Maturity":150}, {"Category":"Liabilities","Amount":2500,"Maturity":7}]' time_buckets: List of day boundaries defining the buckets, e.g. [0, 30, 180, 365]. Returns: JSON string with liquidity gap per bucket.

def calculate_liquidity_gaps(balance_sheet: str, time_buckets: List[int]) -> str:
    """
    Calculates cumulative liquidity gaps across different time buckets.

    Args:
        balance_sheet: JSON string — list of objects with keys Category('Assets' or 'Liabilities'), Amount(float), Maturity(int, days).
                       Example: '[{"Category":"Assets","Amount":500,"Maturity":150}, {"Category":"Liabilities","Amount":2500,"Maturity":7}]'
        time_buckets: List of day boundaries defining the buckets, e.g. [0, 30, 180, 365].

    Returns:
        JSON string with liquidity gap per bucket.
    """
    try:
        data = json.loads(balance_sheet) if isinstance(balance_sheet, str) else balance_sheet
        df = pd.DataFrame(data)

        gaps = []
        for i in range(len(time_buckets) - 1):
            start, end = time_buckets[i], time_buckets[i + 1]
            inflows = df[(df['Category'] == 'Assets') &
                         (df['Maturity'] >= start) &
                         (df['Maturity'] < end)]['Amount'].sum()
            outflows = df[(df['Category'] == 'Liabilities') &
                          (df['Maturity'] >= start) &
                          (df['Maturity'] < end)]['Amount'].sum()
            gap = inflows - outflows
            gaps.append({'Bucket': f'{start}-{end} days', 'Inflows': round(float(inflows), 2),
                         'Outflows': round(float(outflows), 2), 'LiquidityGap': round(float(gap), 2)})

        return json.dumps(gaps, indent=2)

    except Exception as e:
        return json.dumps({'error': str(e)})

file_tools

FileTools from agno framework

Test Agent

Configure model settings at the top, then test the agent below

Enter your question or instruction for the agent