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