> ## 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 across EU frameworks with the Law4Devs Python SDK.

## Overview

Compliance deadlines are specific dates by which organizations must satisfy a legal obligation. Each deadline is extracted from a framework article and classified by type (e.g. `"transposition"`, `"application"`, `"notification"`).

***

## Methods

### `deadlines()`

Returns a page of compliance deadlines. Without filters, returns deadlines across all frameworks.

```python theme={null}
# All deadlines
page = client.compliance.deadlines()
print(f"Total deadlines: {page.meta.total}")

# Filter by framework
page = client.compliance.deadlines(framework_slug="nis2")
for dl in page.data:
    print(f"{dl.deadline_date}  [{dl.deadline_type}]  {dl.description}")
```

**Parameters**

| Parameter        | Type  | Default | Description                    |
| ---------------- | ----- | ------- | ------------------------------ |
| `framework_slug` | `str` | `None`  | Filter to a specific framework |
| `page`           | `int` | `1`     | Page number                    |
| `per_page`       | `int` | `20`    | Items per page (1–100)         |

**Returns** `Page[ComplianceDeadline]`

***

### `iter_deadlines()`

Iterate over all deadlines, optionally filtered by framework.

```python theme={null}
for deadline in client.compliance.iter_deadlines(framework_slug="nis2"):
    print(f"{deadline.deadline_date}: {deadline.description}")
```

**Parameters** — same kwargs as `deadlines()` (except `page`).

**Returns** `Iterator[ComplianceDeadline]`

***

## Model

### `ComplianceDeadline`

| Field            | Type          | Description                                                                    |
| ---------------- | ------------- | ------------------------------------------------------------------------------ |
| `id`             | `int`         | Internal numeric ID                                                            |
| `framework_slug` | `str`         | Parent framework slug                                                          |
| `article_number` | `int \| None` | Source article number                                                          |
| `paragraph_ref`  | `str \| None` | Source paragraph label                                                         |
| `deadline_date`  | `str`         | ISO 8601 date, e.g. `"2024-10-17"`                                             |
| `deadline_type`  | `str`         | `"transposition"`, `"application"`, `"notification"`, `"review"`, or `"other"` |
| `description`    | `str`         | Plain-text description of the obligation                                       |

***

## Examples

### Print upcoming deadlines sorted by date

```python theme={null}
from law4devs import Law4DevsClient
from datetime import date

client = Law4DevsClient()
today = date.today().isoformat()

upcoming = sorted(
    [dl for dl in client.compliance.iter_deadlines() if dl.deadline_date >= today],
    key=lambda d: d.deadline_date,
)

print("Upcoming compliance deadlines:")
for dl in upcoming:
    print(f"  {dl.deadline_date}  [{dl.framework_slug}]  {dl.description[:60]}")
```

### Deadlines for a specific framework

```python theme={null}
print("NIS2 compliance deadlines:")
for dl in client.compliance.iter_deadlines(framework_slug="nis2"):
    source = f"Art. {dl.article_number}" if dl.article_number else "general"
    print(f"  {dl.deadline_date}  ({source})  {dl.description}")
```

### Group deadlines by type

```python theme={null}
from collections import defaultdict

by_type = defaultdict(list)
for dl in client.compliance.iter_deadlines():
    by_type[dl.deadline_type].append(dl)

for dtype, deadlines in sorted(by_type.items()):
    print(f"{dtype}: {len(deadlines)} deadlines")
```

### Export a deadline calendar to JSON

```python theme={null}
import json

calendar = []
for dl in client.compliance.iter_deadlines():
    calendar.append({
        "date": dl.deadline_date,
        "framework": dl.framework_slug,
        "type": dl.deadline_type,
        "description": dl.description,
        "source_article": dl.article_number,
    })

calendar.sort(key=lambda x: x["date"])

with open("compliance_calendar.json", "w") as f:
    json.dump(calendar, f, indent=2)

print(f"Exported {len(calendar)} deadlines")
```

### Check if a specific deadline has passed

```python theme={null}
from datetime import date

dl = client.compliance.deadlines(framework_slug="nis2").data[0]
deadline_date = date.fromisoformat(dl.deadline_date)

if deadline_date < date.today():
    print(f"OVERDUE: {dl.description}")
else:
    days_left = (deadline_date - date.today()).days
    print(f"{days_left} days until: {dl.description}")
```

<Warning>
  Deadline dates are extracted from the official legislative text and may not reflect national transposition extensions. Always verify against the official EUR-Lex publication for legal certainty.
</Warning>
