Source code for aeat.application.aggregation._business_proportion
"""Shared BUSINESS / MIXED business-proportion dispatch.Centralises business proportion dispatch: four aggregation sites(:mod:`~._iva_ledger`, :mod:`~._renta_ledger`, :mod:`~._renta_income_ledger`,and :mod:`~._renta_gasto_ledger`) each carry thesame dispatch shape:: if classification is BusinessClassification.BUSINESS: return Decimal("1") # or the unit-scaled amount if classification is BusinessClassification.MIXED: assert business_pct is not None return business_pct # or amount * business_pct return NoneThis module centralises the proportion lookup so every call site usesone canonical mapping; the per-site multiplication into an amount stayslocal because the unit semantics differ (IVA ledger returns a bareproportion; renta sites return amount * proportion)."""from__future__importannotationsfromdecimalimportDecimalfrom...domain.transactionsimportBusinessClassification
[docs]defbusiness_proportion(classification:BusinessClassification,business_pct:Decimal|None,)->Decimal|None:"""Return the BUSINESS / MIXED dispatch proportion, or ``None``. * ``BUSINESS`` → ``Decimal("1")`` (the whole row is deductible / business-attributable). * ``MIXED`` with a ``business_pct`` set → ``business_pct``. * ``MIXED`` with ``business_pct=None`` → ``None`` (caller treats as not-yet-classified; ``preflight`` surfaces the gap separately via ``MISSING_PROPORTIONALITY_REFERENCE``). * Any other classification (e.g. ``PERSONAL``, ``NOT_YET_PROCESSED``) → ``None``. """ifclassificationisBusinessClassification.BUSINESS:returnDecimal("1")ifclassificationisBusinessClassification.MIXEDandbusiness_pctisnotNone:returnbusiness_pctreturnNone