# 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 %}
