Source code for aeat.application.filing._history_models
"""Strict filing-history records for encrypted filing-state persistence.:class:`ModeloHistory` groups :class:`ModeloHistoryEntry` rows by:class:`ModeloIdentifier` before :class:`ModeloHistoryRepository` stores theaggregate in encrypted AUDIT-class persistence.The payload is intentionally narrower than the modelo filing-record catalogue:it records local filing history rows by modelo and period, while:class:`domain.modelos.ModeloRecord` carries the richer current /superseded filing lifecycle for calculation revisions.See Also: :class:`application.filing.ModeloHistoryRepository` Encrypted AUDIT-class repository that stores these payloads. :mod:`domain.modelos` Work-unit filing records and supersession history for calculation revisions. :class:`domain.modelos.ModeloRecordCatalogue` Current/superseded filing-record catalogue that owns the authoritative work-unit filing lifecycle. :mod:`application.calculations` Past-filing casilla observations used by cross-period calculation resolvers."""from__future__importannotationsfromdatetimeimportdatetimefrompydanticimportBaseModel,Field,model_validatorfrom...coreimportSTRICT_FROZEN_CONFIGas_STRICT_FROZENfrom...coreimportPeriodfrom...domainimportModeloIdentifier
[docs]classModeloHistoryEntry(BaseModel):"""One local filing-history row for a :class:`ModeloIdentifier` and :class:`Period`."""model_config=_STRICT_FROZENmodelo:ModeloIdentifierperiod:Periodsubmitted_at:datetimestatus:str=Field(min_length=1,max_length=32)
[docs]classModeloHistory(BaseModel):"""Per-modelo tuple of :class:`ModeloHistoryEntry` rows for one :class:`ModeloIdentifier`."""model_config=_STRICT_FROZENmodelo:ModeloIdentifierentries:tuple[ModeloHistoryEntry,...]@model_validator(mode="after")def_entries_match_modelo(self)->ModeloHistory:forentryinself.entries:ifentry.modelo!=self.modelo:raiseValueError(f"ModeloHistory.modelo={self.modelo!r} disagrees with entry modelo={entry.modelo!r}",)returnself