> ## Documentation Index
> Fetch the complete documentation index at: https://thrackle.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# RulesEngineRuleFacet

[Git Source](https://github.com/forte-service-company-ltd/forte-rules-engine/blob/1f7450a94147e76e3930c235a18534779130abee/src/engine/facets/RulesEngineRuleFacet.sol)

**Inherits:**
[FacetCommonImports](/v2/reference/engine/facets/FacetCommonImports.sol/abstract.FacetCommonImports)

**Author:**
@mpetersoCode55, @ShaneDuncan602, @TJ-Everett, @VoR0220

This contract is a critical component of the Rules Engine, enabling secure and flexible policy management.

*This contract serves as the primary data facet for the Rules Engine rules. It is responsible for creating, updating,
retrieving, and managing rules. It enforces role-based access control and ensures that only authorized
users can modify or retrieve data. The contract also supports policy cementing to prevent further modifications.*

## Functions

### createRule

Creates a rule in storage.

*Adds a new rule to the specified policy. Only accessible by policy admins.*

```solidity
function createRule(uint256 policyId, Rule calldata rule)
    external
    policyAdminOnly(policyId, msg.sender)
    returns (uint256);
```

**Parameters**

| Name       | Type      | Description                                 |
| ---------- | --------- | ------------------------------------------- |
| `policyId` | `uint256` | ID of the policy the rule will be added to. |
| `rule`     | `Rule`    | The rule to create.                         |

**Returns**

| Name     | Type      | Description                   |
| -------- | --------- | ----------------------------- |
| `<none>` | `uint256` | ruleId The generated rule ID. |

### updateRule

Updates a rule in storage.

*Modifies an existing rule in the specified policy. Only accessible by policy admins.*

```solidity
function updateRule(uint256 policyId, uint256 ruleId, Rule calldata rule)
    external
    policyAdminOnly(policyId, msg.sender)
    returns (uint256);
```

**Parameters**

| Name       | Type      | Description                           |
| ---------- | --------- | ------------------------------------- |
| `policyId` | `uint256` | ID of the policy the rule belongs to. |
| `ruleId`   | `uint256` | The ID of the rule to update.         |
| `rule`     | `Rule`    | The updated rule data.                |

**Returns**

| Name     | Type      | Description                 |
| -------- | --------- | --------------------------- |
| `<none>` | `uint256` | ruleId The updated rule ID. |

### getAllRules

Retrieves all rules associated with a specific policy.

```solidity
function getAllRules(uint256 policyId) external view returns (Rule[][] memory);
```

**Parameters**

| Name       | Type      | Description           |
| ---------- | --------- | --------------------- |
| `policyId` | `uint256` | The ID of the policy. |

**Returns**

| Name     | Type       | Description                                                          |
| -------- | ---------- | -------------------------------------------------------------------- |
| `<none>` | `Rule[][]` | rules A two-dimensional array of rules grouped by calling functions. |

### deleteRule

Deletes a rule from storage.

```solidity
function deleteRule(uint256 policyId, uint256 ruleId) public policyAdminOnly(policyId, msg.sender);
```

**Parameters**

| Name       | Type      | Description                               |
| ---------- | --------- | ----------------------------------------- |
| `policyId` | `uint256` | The ID of the policy the rule belongs to. |
| `ruleId`   | `uint256` | The ID of the rule to delete.             |

### getRule

Retrieves a rule from storage.

```solidity
function getRule(uint256 policyId, uint256 ruleId) public view returns (RuleStorageSet memory);
```

**Parameters**

| Name       | Type      | Description                               |
| ---------- | --------- | ----------------------------------------- |
| `policyId` | `uint256` | The ID of the policy the rule belongs to. |
| `ruleId`   | `uint256` | The ID of the rule to retrieve.           |

**Returns**

| Name     | Type             | Description                    |
| -------- | ---------------- | ------------------------------ |
| `<none>` | `RuleStorageSet` | ruleStorageSets The rule data. |

### \_storeRule

Stores a rule in storage.

*Validates the policy existence before storing the rule.*

```solidity
function _storeRule(RuleStorage storage _data, uint256 _policyId, uint256 _ruleId, Rule calldata _rule)
    internal
    returns (uint256);
```

**Parameters**

| Name        | Type          | Description                               |
| ----------- | ------------- | ----------------------------------------- |
| `_data`     | `RuleStorage` | The rule storage structure.               |
| `_policyId` | `uint256`     | The ID of the policy the rule belongs to. |
| `_ruleId`   | `uint256`     | The ID of the rule to store.              |
| `_rule`     | `Rule`        | The rule to store.                        |

**Returns**

| Name     | Type      | Description                |
| -------- | --------- | -------------------------- |
| `<none>` | `uint256` | ruleId The stored rule ID. |
