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

# Frameworks

> List, retrieve, and iterate EU regulatory frameworks with the Flutter SDK.

## Overview

The `frameworks` resource provides access to all 19 EU regulatory frameworks — GDPR, CRA, NIS2, AI Act, DORA, and more.

***

## Methods

### `list()`

```dart theme={null}
Future<Page<Framework>> list({int? page, int? perPage})
```

**Parameters**

| Parameter | Type   | Default | Description    |
| --------- | ------ | ------- | -------------- |
| `page`    | `int?` | `1`     | Page number    |
| `perPage` | `int?` | `20`    | Items per page |

### `get()`

```dart theme={null}
Future<FrameworkDetail> get(String slug)
```

### `iter()`

```dart theme={null}
Stream<Framework> iter({int perPage = 20})
```

Lazy stream — fetches the next page only when the current page is exhausted.

***

## Models

### `Framework`

| Field          | Type      | Description                       |
| -------------- | --------- | --------------------------------- |
| `id`           | `int`     | Internal ID                       |
| `slug`         | `String`  | URL-safe identifier (e.g. `gdpr`) |
| `name`         | `String`  | Full regulation name              |
| `shortName`    | `String`  | Abbreviation (e.g. `GDPR`)        |
| `celexNumber`  | `String`  | EUR-Lex CELEX identifier          |
| `description`  | `String?` | Short description                 |
| `isActive`     | `bool`    | Whether actively maintained       |
| `status`       | `String`  | `active` or `superseded`          |
| `articleCount` | `int`     | Number of scraped articles        |
| `recitalCount` | `int`     | Number of scraped recitals        |
| `createdAt`    | `String`  | ISO 8601 timestamp                |

### `FrameworkDetail`

Extends `Framework` with:

| Field              | Type     | Description               |
| ------------------ | -------- | ------------------------- |
| `eurLexUrl`        | `String` | Link to EUR-Lex source    |
| `requirementCount` | `int`    | Number of requirements    |
| `annexCount`       | `int`    | Number of annexes         |
| `tagCount`         | `int`    | Number of associated tags |
| `coverage`         | `Map?`   | Coverage statistics       |

***

## Examples

### List all frameworks

```dart theme={null}
final page = await client.frameworks.list();
print('${page.meta.total} frameworks');

for (final fw in page.data) {
  print('${fw.slug} — ${fw.name} (${fw.articleCount} articles)');
}
```

### Get framework detail

```dart theme={null}
final gdpr = await client.frameworks.get('gdpr');
print('GDPR: ${gdpr.articleCount} articles, ${gdpr.recitalCount} recitals');
print('EUR-Lex: ${gdpr.eurLexUrl}');
```

### Auto-paginate all frameworks

```dart theme={null}
await for (final fw in client.frameworks.iter()) {
  if (fw.status == 'active') {
    print(fw.name);
  }
}
```

### Filter active frameworks

```dart theme={null}
final page = await client.frameworks.list();
final active = page.data.where((fw) => fw.isActive).toList();
print('${active.length} active frameworks');
```
