# Portfolio Constraints

### Overview

Building on the validation and risk management principles outlined earlier, this section details additional mechanisms employed by Term Strategy Vaults to enforce key portfolio constraints. These mechanisms ensure compliance with the protocol’s risk framework, focusing on:

1. **Position Concentration Limits**
2. **Liquid Reserve Requirements**
3. **Weighted Average Duration Caps**
4. **RepoToken Collateral Requirements**

### Repo Token Validation

The `validateRepoToken` function operates within the validation framework previously described by performing checks specific to repoTokens before they are accepted into the portfolio.

```solidity
function validateRepoToken(
    RepoTokenListData storage listData,
    ITermRepoToken repoToken,
    address asset
) internal view returns (bool, uint256)
```

* Verifies contract against TermController
* Validates purchaseToken against baseAsset
* Ensures repoToken not already matured
* Checks collateral backing against collateralParams

### Concentration Limits

The `_validateRepoTokenConcentration` function operates to enforce position concentration limits, ensuring no single repoToken or group of positions disproportionately dominates the portfolio.

```solidity
function _validateRepoTokenConcentration(
    address repoToken,
    uint256 repoTokenAmountInBaseAssetPrecision,
    uint256 assetValue,
    uint256 liquidBalanceToRemove
) private view
```

* Maximum exposure per repo token
* Portfolio-wide concentration checks

### Reserve Requirements

The `_liquidReserveRatio` function operates to ensure the portfolio maintains adequate reserves for user withdrawals and ongoing operations.

```solidity
function _liquidReserveRatio(uint256 liquidBalance) internal view returns (uint256)
```

* Minimum liquidity maintenance
* Reserve ratio calculations
* Withdrawal availability checks

### Maturity Management

The `_calculateWeightedMaturity` function ensures that the portfolio’s weighted average duration complies with the protocol’s duration caps.

```solidity
function _calculateWeightedMaturity(
    address repoToken,
    uint256 repoTokenAmount,
    uint256 liquidBalance
) private view returns (uint256)
```

* Weighted average maturity tracking
* Maturity threshold enforcement
* Portfolio duration management

### Collateral Validation

Collateral requirements, previously introduced, are enforced through the `collateralTokenParams` field in the `RepoTokenListData` struct:

```solidity
struct RepoTokenListData {
    mapping(address => uint256) collateralTokenParams;
}
```

* Collateral type restrictions
* Minimum collateral ratios
* Collateral quality checks
