Source code for cadrumo.domain.iva_compensation.filed_derivation
"""Registry-backed filed-compensation mechanics.This module keeps the typed evidence/result shapes and the pure carry-forwardoperation. Model-specific coordinates are obtained through the selectedregistry query boundary; this module does not declare a second vocabulary."""from__future__importannotationsfromcollections.abcimportMappingfromdataclassesimportdataclassfromdecimalimportDecimalfromenumimportStrEnumfromtypingimportLiteralfrom...core.casilla_idimportCasillaIdfrom...core.decimal.constantsimportZEROfrom.carry_forwardimportderive_303_compensation_available
[docs]@dataclass(frozen=True,slots=True)classCompensationCasillaDeclarations:"""Selected registry coordinates needed by the carry-forward mechanic."""posterior:CasillaIdgenerated:CasillaIdresult:CasillaId
[docs]classM303CompensationBasis(StrEnum):"""Which evidence branch produced a filed-compensation observation."""GENERATED="generated"RESULTADO="resultado"REFUNDED="refunded"
[docs]@dataclass(frozen=True,slots=True)classM303CompensationAvailableDerivation:"""Typed history/evidence result retained for reconciliation consumers."""available:Decimalgenerated:Decimalbasis:M303CompensationBasisValueoperand_refs:tuple[CasillaId,...]operand_values:tuple[Decimal,...]
[docs]defderive_m303_compensation_available_from_casillas(casilla_values:Mapping[CasillaId,Decimal],*,declarations:CompensationCasillaDeclarations,refunded:bool,)->M303CompensationAvailableDerivation|None:"""Apply the generic carry-forward operation to selected registry coordinates."""posterior=casilla_values.get(declarations.posterior)ifposteriorisNone:returnNonegenerated=casilla_values.get(declarations.generated)ifgeneratedisnotNone:ifrefunded:returnM303CompensationAvailableDerivation(available=posterior,generated=ZERO,basis=M303CompensationBasis.REFUNDED,operand_refs=(),operand_values=(),)returnM303CompensationAvailableDerivation(available=posterior+generated,generated=generated,basis=M303CompensationBasis.GENERATED,operand_refs=(declarations.posterior,declarations.generated),operand_values=(posterior,generated),)resultado=casilla_values.get(declarations.result)ifresultadoisNone:returnNoneavailable=derive_303_compensation_available(posterior=posterior,resultado=resultado,refunded=refunded,)returnM303CompensationAvailableDerivation(available=available,generated=available-posterior,basis=M303CompensationBasis.REFUNDEDifrefundedelseM303CompensationBasis.RESULTADO,operand_refs=(),operand_values=(),)