fix(istruttoria): amount_basis configurabile + totali dual-track + use_taxable_only flag
Gate check (_compute_gate_check) esteso: - amount_basis legge dal gate_rules dello schema bando: 'imponibile_always' | 'imponibile_only_ordinario' | 'totale_always' - Backward compat con vecchio flag iva_ordinario_imponibile_only - Totali retrocompatibili: grand_total resta dichiarato, aggiunti grand_total_declared, grand_total_verified, per_category_verified, any_verified, all_verified, amount_basis, use_taxable_only Il FE ora riceve use_taxable_only e sceglie dinamicamente le label delle colonne (Imponibile/Totale dichiarato/ammesso). Parte del refactor istruttore a tabelle inline.
This commit is contained in:
@@ -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
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user