diff --git a/app/routers/practices.py b/app/routers/practices.py index 1baa2b7..6706b33 100644 --- a/app/routers/practices.py +++ b/app/routers/practices.py @@ -62,8 +62,25 @@ def _compute_gate_check(practice: RemissionPractice) -> GateCheckResult: rules = practice.schema_snapshot.get("gate_rules", {}) or {} sections = practice.schema_snapshot.get("sections", []) or [] - iva_ordinario_only_taxable = rules.get("iva_ordinario_imponibile_only", True) - use_taxable_only = (practice.iva_regime == "ORDINARIO" and iva_ordinario_only_taxable) + # Base di calcolo ammissibile configurata per il bando: + # - "imponibile_always" -> sempre imponibile + # - "imponibile_only_ordinario" -> imponibile se regime ordinario, totale altrimenti + # - "totale_always" -> sempre totale + # Default: imponibile_only_ordinario (comportamento foglio excel originale) + amount_basis = rules.get("amount_basis") + if not amount_basis: + # backward compat: se c'era il vecchio flag booleano + if rules.get("iva_ordinario_imponibile_only", True): + amount_basis = "imponibile_only_ordinario" + else: + amount_basis = "totale_always" + + if amount_basis == "imponibile_always": + use_taxable_only = True + elif amount_basis == "totale_always": + use_taxable_only = False + else: # imponibile_only_ordinario + use_taxable_only = (practice.iva_regime == "ORDINARIO") per_category_declared = {} per_category_verified = {} @@ -192,7 +209,9 @@ def _compute_gate_check(practice: RemissionPractice) -> GateCheckResult: "amount_erogato": float(amt_erogato), "any_verified": any_verified, "all_verified": all_verified, - "residuo_da_restituire": float(max(amt_erogato - Decimal(str(remission_due)), Decimal("0"))) + "residuo_da_restituire": float(max(amt_erogato - Decimal(str(remission_due)), Decimal("0"))), + "amount_basis": amount_basis, + "use_taxable_only": use_taxable_only } )