Source code for lalandre_core.models.acts
"""Pydantic model for top-level legal act records."""
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
from .types import ActType, LanguageCode
[docs]
class Acts(BaseModel):
"""Represent one legal act stored in the core domain model."""
model_config = ConfigDict(from_attributes=True)
id: Optional[int] = Field(default=None, description="Primary key")
celex: str = Field(..., max_length=50, description="CELEX identifier")
eli: Optional[str] = Field(default=None, max_length=255, description="European Legislation Identifier")
act_type: ActType = Field(..., description="Type of act")
title: str = Field(..., description="Title of the act")
language: LanguageCode = Field(..., description="Language code")
adoption_date: Optional[datetime] = Field(default=None, description="Date of adoption")
force_date: Optional[datetime] = Field(default=None, description="Date of entry into force")
end_date: Optional[datetime] = Field(default=None, description="End date")
official_journal_reference: Optional[str] = Field(
default=None, max_length=100, description="Official journal reference"
)
sector: Optional[int] = Field(default=None, description="Sector number")
level: Optional[int] = Field(
default=None, description="Lamfalussy level: 1=L1 framework, 2=L2 implementing, 3=L3 guidance", ge=1, le=3
)
form_number: Optional[str] = Field(default=None, max_length=50, description="Form number")
url_eurlex: Optional[str] = Field(default=None, description="EUR-Lex URL")
created_at: Optional[datetime] = Field(default=None, description="Creation timestamp")
updated_at: Optional[datetime] = Field(default=None, description="Last update timestamp")
# Sync tracking
last_synced_at: Optional[datetime] = Field(default=None, description="Last sync timestamp")
content_hash: Optional[str] = Field(default=None, max_length=64, description="Content hash")
sync_status: Optional[str] = Field("pending", max_length=20, description="Sync status")
# Extraction tracking
extracted_at: Optional[datetime] = Field(default=None, description="LLM extraction completion timestamp")
extraction_status: Optional[str] = Field("pending", max_length=20, description="Extraction status")