Skip to main content

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.

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.
# 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
ParameterTypeDefaultDescription
framework_slugstrNoneFilter to a specific framework
pageint1Page number
per_pageint20Items per page (1–100)
Returns Page[ComplianceDeadline]

iter_deadlines()

Iterate over all deadlines, optionally filtered by framework.
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

FieldTypeDescription
idintInternal numeric ID
framework_slugstrParent framework slug
article_numberint | NoneSource article number
paragraph_refstr | NoneSource paragraph label
deadline_datestrISO 8601 date, e.g. "2024-10-17"
deadline_typestr"transposition", "application", "notification", "review", or "other"
descriptionstrPlain-text description of the obligation

Examples

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

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

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

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

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}")
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.