# Core Integration

### Overview

Term Strategy integrates seamlessly with Yearn V3's vault mechanics by implementing the three required **BaseStrategy** hooks: `_deployFunds`, `_freeFunds`, and `_harvestAndReport`. These hooks enable Term Strategy Vaults to manage deposits, withdrawals, and portfolio valuation while aligning with Yearn's operational framework.

**Required BaseStrategy Hooks**

1. **`_deployFunds`**: Handles deposit management.
2. **`_freeFunds`**: Manages withdrawals.
3. **`_harvestAndReport`**: Calculates total portfolio value for profit and share accounting.

### Deposit Management (\_deployFunds)

The `_deployFunds` function sweeps idle assets and redeems matured loans for deployment into fixed-rate loans on Term. The implementation ensures efficient use of capital while maintaining compatibility with Yearn's vault mechanics.

```solidity
function _deployFunds(uint256 _amount) internal override whenNotPaused {
    if (depositLock) {
        revert DepositPaused();
    }
    _redeemRepoTokens(0);
}
```

**Term Strategy Vault Implementation**:

* **Redeem Matured Loans**: Automatically redeems any matured loans first.
* **Sweep Idle Assets**: Deposited and idle assets are swept into the idle liquidity vault pending deployment.

{% hint style="info" %}
`_redeemRepoTokens()` is a helper method that redeems matured loans and sweeps idle assets (if any) into the idle asset vault pending deployment into fixed rate loans on Term.&#x20;
{% endhint %}

### Withdrawal Management (\_freeFunds)

The `_freeFunds` function facilitates withdrawals by redeeming matured loans and withdrawing the requested funds from the idle liquidity vault. Like `_deployFunds`, it leverages `_redeemRepoTokens()` to automate portfolio adjustments.

```solidity
function _freeFunds(uint256 _amount) internal override whenNotPaused {
    _redeemRepoTokens(_amount);
}
```

**Term Strategy Vault Implementation**:

* **Redeem Matured Loans**: Withdrawals prioritize the redemption of matured loans.
* **Withdraw Requested Funds**: Required amounts are withdrawn from the idle liquidity vault.

{% hint style="info" %}
`_redeemRepoTokens()` is a helper method that redeems matured loans, withdraws requested funds and sweeps idle assets (if any) into the idle asset vault pending deployment into fixed rate loans on Term. This implementation:
{% endhint %}

### Portfolio Reporting and Valuation (\_harvestAndReport)

The `_harvestAndReport` function calculates the total portfolio value, which is critical for vault profit and share accounting. It redeems matured loans and sweeps assets for comprehensive portfolio valuation.

```solidity
function _harvestAndReport() internal override whenNotPaused returns (uint256) {
    _redeemRepoTokens(0);
    return _totalAssetValue(_totalLiquidBalance());
}
```

**Term Strategy Vault Implementation**:

* **Redeem Matured Positions**: Sweeps and redeems matured loans.
* **Calculate Total Value**: Returns `_totalAssetValue`, which includes:
  * Present value of all Term repoTokens.
  * Present value of open auction offers.
* **Liquidity Management**: Tends to the portfolio during valuation by leveraging `_redeemRepoTokens()`.

{% hint style="info" %}
`_redeemRepoTokens()` is a helper method that redeems matured loans and sweeps idle assets (if any) into the idle asset vault pending deployment into fixed rate loans on Term. This implementation of \_harvestAndReport():
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.term.finance/periphery-contracts/curated-vaults/core-functionality/term-protocol-operations/core-integration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
