fix(italy): fix e-invoice ScontoMaggiorazione structure and included_in_print_rate support (backport #53334) (#53568)

Co-authored-by: Arturo <tamburro92@users.noreply.github.com>
This commit is contained in:
mergify[bot]
2026-03-17 22:01:15 +05:30
committed by GitHub
parent 445aef7d17
commit fe85dc10cc

View File

@@ -18,25 +18,27 @@
<Nazione>{{ address.country_code }}</Nazione>
{%- endmacro %}
{%- macro render_discount_or_margin(item) -%}
{%- if (item.discount_percentage and item.discount_percentage > 0.0) or item.margin_type %}
{%- macro render_discount_or_margin(item, tax_divisor) -%}
{%- if item.discount_percentage and item.discount_percentage > 0.0 %}
<ScontoMaggiorazione>
{%- if item.discount_percentage > 0.0 %}
<Tipo>SC</Tipo>
<Percentuale>{{ format_float(item.discount_percentage) }}</Percentuale>
{%- endif %}
{%- if item.margin_rate_or_amount > 0.0 -%}
<Tipo>MG</Tipo>
{%- if item.margin_type == "Percentage" -%}
<Percentuale>{{ format_float(item.margin_rate_or_amount) }}</Percentuale>
{%- elif item.margin_type == "Amount" -%}
<Importo>{{ format_float(item.margin_rate_or_amount) }}</Importo>
{%- endif -%}
{%- endif %}
</ScontoMaggiorazione>
{%- endif -%}
{%- endif %}
{%- if item.margin_rate_or_amount and item.margin_rate_or_amount > 0.0 %}
<ScontoMaggiorazione>
<Tipo>MG</Tipo>
{%- if item.margin_type == "Percentage" -%}
<Percentuale>{{ format_float(item.margin_rate_or_amount) }}</Percentuale>
{%- elif item.margin_type == "Amount" -%}
<Importo>{{ format_float(item.margin_rate_or_amount / tax_divisor) }}</Importo>
{%- endif -%}
</ScontoMaggiorazione>
{%- endif %}
{%- endmacro -%}
{%- set has_inclusive_tax = doc.taxes | selectattr("included_in_print_rate") | list | length > 0 -%}
<?xml version='1.0' encoding='UTF-8'?>
<p:FatturaElettronica xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"
@@ -179,6 +181,7 @@
</DatiGenerali>
<DatiBeniServizi>
{%- for item in doc.e_invoice_items %}
{%- set tax_divisor = (1 + item.tax_rate / 100) if has_inclusive_tax and item.tax_rate else 1 %}
<DettaglioLinee>
<NumeroLinea>{{ item.idx }}</NumeroLinea>
<CodiceArticolo>
@@ -188,8 +191,9 @@
<Descrizione>{{ html2text(item.description or '') or item.item_name }}</Descrizione>
<Quantita>{{ format_float(item.qty) }}</Quantita>
<UnitaMisura>{{ item.stock_uom }}</UnitaMisura>
<PrezzoUnitario>{{ format_float(item.net_rate or item.price_list_rate or item.rate, item_meta.get_field("rate").precision) }}</PrezzoUnitario>
{{ render_discount_or_margin(item) }}
{%- set item_unit_net_price = (item.price_list_rate / tax_divisor) or (item.net_rate) or (item.rate / tax_divisor) %}
<PrezzoUnitario>{{ format_float(item_unit_net_price, item_meta.get_field("rate").precision) }}</PrezzoUnitario>
{{ render_discount_or_margin(item, tax_divisor) }}
<PrezzoTotale>{{ format_float(item.net_amount, item_meta.get_field("amount").precision) }}</PrezzoTotale>
<AliquotaIVA>{{ format_float(item.tax_rate, item_meta.get_field("tax_rate").precision) }}</AliquotaIVA>
{%- if item.tax_exemption_reason %}