[docs]classDeclaracion(BaseModel):"""One row from *Consultar declaraciones presentadas*."""model_config=_STRICT_FROZENmodelo:str=Field(min_length=1,max_length=8)ejercicio:FilingYearperiod:Periodexpediente_id:AeatExpedienteIdestado:str=Field(min_length=1,max_length=16)tipo_solicitud:str|None=Field(default=None,max_length=128)observaciones:str|None=Field(default=None,max_length=512)presented_at:datetimejustificante_link_text:str|None=Field(default=None,max_length=32)archive_link_text:str|None=Field(default=None,max_length=32)declaration_copy_link_text:str|None=Field(default=None,max_length=32)justificante_cell_index:int=Field(default=7,ge=0)archive_cell_index:int|None=Field(default=8,ge=0)declaration_copy_cell_index:int|None=Field(default=None,ge=0)mode:Literal["read"]="read"@model_validator(mode="after")@pydantic_validation_boundarydef_period_year_matches_ejercicio(self)->Self:ifself.period.filing_year!=self.ejercicio:raiseValueError("period.filing_year must match ejercicio")returnself