> ## 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.

# Compliance Deadlines

> Query compliance deadlines and enforcement dates with the Law4Devs Java SDK.

## Overview

Compliance deadlines track the key enforcement dates, transition periods, and application dates for each regulation. Use `client.compliance()` to access them.

***

## Methods

### `deadlines()`

Returns the first page of compliance deadlines across all frameworks.

```java theme={null}
Page<ComplianceDeadline> page = client.compliance().deadlines();

for (ComplianceDeadline d : page.data()) {
    System.out.printf("[%s] %s — %s%n",
        d.frameworkSlug(), d.date(), d.description());
}
```

**Returns** `Page<ComplianceDeadline>`

***

### `deadlines(String frameworkSlug)`

Returns the first page of deadlines scoped to one framework.

```java theme={null}
Page<ComplianceDeadline> page = client.compliance().deadlines("nis2");
```

**Returns** `Page<ComplianceDeadline>`

***

### `deadlines(String frameworkSlug, int page, int perPage)`

Fetch a specific page with custom page size.

```java theme={null}
Page<ComplianceDeadline> page = client.compliance().deadlines("dora", 1, 50);
```

**Parameters**

| Parameter       | Type     | Default | Description                       |
| --------------- | -------- | ------- | --------------------------------- |
| `frameworkSlug` | `String` | `null`  | Scope to one framework (optional) |
| `page`          | `int`    | `1`     | Page number (1-indexed)           |
| `perPage`       | `int`    | `20`    | Items per page (max 100)          |

**Returns** `Page<ComplianceDeadline>`

***

### `iterDeadlines()`

Lazily iterate all compliance deadlines across all frameworks.

```java theme={null}
for (ComplianceDeadline d : client.compliance().iterDeadlines()) {
    System.out.println(d.frameworkSlug() + " — " + d.date() + ": " + d.description());
}
```

**Returns** `Iterable<ComplianceDeadline>`

***

### `iterDeadlines(String frameworkSlug)`

Lazily iterate all deadlines for a specific framework.

```java theme={null}
for (ComplianceDeadline d : client.compliance().iterDeadlines("cra")) {
    System.out.println(d.date() + ": " + d.description());
}
```

**Returns** `Iterable<ComplianceDeadline>`

***

## Model

### `ComplianceDeadline`

| Field                | Type     | Description                                           |
| -------------------- | -------- | ----------------------------------------------------- |
| `id()`               | `int`    | Internal numeric ID                                   |
| `frameworkSlug()`    | `String` | Parent framework slug                                 |
| `frameworkName()`    | `String` | Human-readable framework name                         |
| `date()`             | `String` | ISO 8601 deadline date                                |
| `description()`      | `String` | What must be complied with by this date               |
| `deadlineType()`     | `String` | e.g. `"enforcement"`, `"transition"`, `"application"` |
| `articleReference()` | `String` | Source article or recital reference                   |

***

## Examples

### Print upcoming CRA deadlines in order

```java theme={null}
var deadlines = new java.util.ArrayList<ComplianceDeadline>();
for (ComplianceDeadline d : client.compliance().iterDeadlines("cra")) {
    deadlines.add(d);
}
deadlines.sort(java.util.Comparator.comparing(ComplianceDeadline::date));
for (ComplianceDeadline d : deadlines) {
    System.out.printf("%s  %s%n", d.date(), d.description());
}
```

### List all enforcement deadlines across frameworks

```java theme={null}
for (ComplianceDeadline d : client.compliance().iterDeadlines()) {
    if ("enforcement".equals(d.deadlineType())) {
        System.out.printf("[%-6s] %s — %s%n",
            d.frameworkSlug(), d.date(), d.description());
    }
}
```

### Build a timeline report

```java theme={null}
var byFramework = new java.util.TreeMap<String, java.util.List<ComplianceDeadline>>();
for (ComplianceDeadline d : client.compliance().iterDeadlines()) {
    byFramework.computeIfAbsent(d.frameworkSlug(),
        k -> new java.util.ArrayList<>()).add(d);
}
byFramework.forEach((fw, list) -> {
    System.out.println("\n## " + fw.toUpperCase());
    list.forEach(d -> System.out.println("  " + d.date() + " — " + d.description()));
});
```
