Source code for cadrumo.adapters.persistence.profile.iva_compensation_history
"""Encrypted adapter for the IVA compensation-history application port.Core types::class:`~cadrumo.core.classification.policies.SensitivityClass`."""from__future__importannotationsfromcollections.abcimportCallablefromtypingimportClassVar,overridefrompydanticimportBaseModelfrom....application.calculations.errorsimportIvaCompensationModeloErrorfrom....application.calculations.iva_compensation_historyimport(iva_compensation_period_key,require_iva_compensation_period_coordinates_current,)from....application.calculations.iva_compensation_history_portsimport(IvaCompensationHistoryPersistenceError,IvaCompensationHistoryRepositoryProtocol,)from....application.calculations.observations_repositoryimportCalculationObservationStorageProtocolfrom....core.classification.policiesimportSensitivityClassfrom....core.periodimportPeriodfrom....core.secure_object_writeimportSecureObjectWritefrom....domain.calculations.registry.authorityimportbundled_indexed_authorityfrom....domain.iva_compensation.carry_forwardimportIvaCompensationPeriodState,iva_compensation_period_sort_keyfrom..storage.envelope.secure_bound_repositoryimportSecureBoundRepositoryfrom..storage.secure_object_namespacesimportIVA_COMPENSATION_HISTORY_NAMESPACEdef_call_storage[T](operation:str,callback:Callable[[],T])->T:"""Translate adapter failures into the application-owned error contract."""try:returncallback()except(IvaCompensationHistoryPersistenceError,IvaCompensationModeloError):raiseexceptExceptionasexc:raiseIvaCompensationHistoryPersistenceError(translated_message="application.calculations.iva_compensation.errors.persistence",context={"operation":operation,"cause_type":type(exc).__name__},)fromexc
[docs]classIvaCompensationHistoryRepository(SecureBoundRepository[IvaCompensationPeriodState],IvaCompensationHistoryRepositoryProtocol,):"""Bind IVA compensation period states to encrypted profile storage."""namespace:ClassVar[str]=IVA_COMPENSATION_HISTORY_NAMESPACE.namespacesensitivity:ClassVar[SensitivityClass]=IVA_COMPENSATION_HISTORY_NAMESPACE.sensitivityschema_version:ClassVar[int]=IVA_COMPENSATION_HISTORY_NAMESPACE.schema_versionpayload_type:ClassVar[type[BaseModel]]=IvaCompensationPeriodState
@property@overridedefsecure_object_repository(self)->CalculationObservationStorageProtocol:"""Expose the storage capability required for atomic co-commit."""returnself._objects
[docs]@overridedefload_period(self,period:Period)->IvaCompensationPeriodState|None:"""Load one period and re-confirm its registry coordinate."""return_call_storage("load",lambda:self._load_period(period))
def_load_period(self,period:Period)->IvaCompensationPeriodState|None:# A stored period validates its taxpayer identity against registry# vocabulary, so the decode itself needs the authority, not only the# coordinate check after it.withbundled_indexed_authority().operation()asoperation:state=self.load(iva_compensation_period_key(period))ifstateisnotNone:require_iva_compensation_period_coordinates_current(state,operation=operation)returnstate
[docs]@overridedefsave_period(self,state:IvaCompensationPeriodState)->None:"""Persist one validated period state."""_call_storage("save",lambda:self.save(state))
[docs]@overridedeflist_periods(self)->tuple[IvaCompensationPeriodState,...]:"""Load and sort all persisted period states."""def_list()->tuple[IvaCompensationPeriodState,...]:withbundled_indexed_authority().operation()asoperation:states=tuple(sorted(self.iter_records(),key=lambdaitem:(item.filing_year,iva_compensation_period_sort_key(item.period)),),)forstateinstates:require_iva_compensation_period_coordinates_current(state,operation=operation)returnstatesreturn_call_storage("list",_list)
[docs]@overridedefto_secure_object_write(self,payload:IvaCompensationPeriodState,*,expected_revision_id:str|None=None,)->SecureObjectWrite:"""Prepare one encrypted history write without committing it."""def_prepare()->SecureObjectWrite:returnsuper(IvaCompensationHistoryRepository,self).to_secure_object_write(payload,expected_revision_id=expected_revision_id,)return_call_storage("prepare",_prepare)