SIGN IT lite is based on the Italian Tax Agency's "Documento Commerciale Online" (DCO) web procedure. This article describes how AdE calculates the values of the commercial document in this procedure.
The Italian Tax Agency relies on the following values to calculate everything else:
unit.quantityunit.price(VAT included)vat.percentagevalue.discountdetails.purpose, only for gift entries ("GIFT"). AdE excludes gift entries from the total amount due (Totale complessivo), but they still count towards the taxable amount and the VAT.
Entry-level values
unit.quantity: only 2 decimal places are allowed for this value.
vat.amountandvat.inclusiveare rounded to the 8th decimal place.
value.baseandvat.exclusiveare not mapped to the AdE portal, but we recommend computing them with the same rounding (8th decimal place).
| API Field | Definition | Formula |
value.base | Total amount of the entry (VAT excluded) before discounts, if any. | (unit.price.inclusive x unit.quantity) ÷ (1 + (vat.percentage ÷ 100))Note: if you're using a legacy version, unit.price is VAT included |
vat.inclusive | Total amount of the entry (VAT included) after discounts, if any. |
Note: if you're using a legacy version, |
vat.exclusive | Total amount of the entry (VAT excluded) after discounts, if any. This is the net taxable base on which VAT is calculated. | vat.inclusive ÷ (1 + (vat.percentage ÷ 100)) |
vat.amount | VAT amount | vat.inclusive - vat.exclusive |
Document totals level
total_vat.amount/totals.vat.amount(depending on the version used): AdE recalculates the value provided and overwrites it with the sum of the VAT amounts of all entries, gift entries included. AdE rounds this value (in the background) to the 8th decimal place.
total_vat.inclusive/totals.vat.inclusiveandtotal_vat.exclusive/totals.vat.exclusive(depending on the version used): these fields are not forwarded to AdE, which calculates its own document totals directly from the entry values listed at the beginning of this article.
payments[].details.amountandpayments[].details.discount: only 2 decimal places are allowed for these values.
Common warnings and errors
- Validation WARNING
"Validation checks failed.. Reasons: Received total VAT amount XXX is not equal to Tax Agency computed total VAT amount XXX"
What it means: the total VAT amount sent doesn't match the sum of the entry VAT amounts calculated by AdE. The warning is non-blocking: the commercial document is accepted with the value recalculated by AdE (shown in the PDF rounded to 2 decimal places).
- Record transmission failures with validation ERROR
"Validation checks failed.. Reasons: La somma delle tipologie di pagamento non risulta uguale al Totale complessivo"
What it means: AdE checks that the sum of all payments (Σ payments[].details.amount + Σ payments[].details.discount) matches the total amount due (Totale complessivo), which AdE calculates from the entries (Σ [(unit.price.inclusive × unit.quantity) − value.discount]), excluding gift entries.
Payload example
{
"content": {
"type": "TRANSACTION",
"record": {
"id": "{{intentionId}}"
},
"operation": {
"type": "RECEIPT",
"document": {
"number": "INV-12346"
},
"entries": [
{
"type": "SALE",
"details": {
"concept": "GOOD"
},
"data": {
"type": "ITEM",
"text": "Prod A",
"unit": {
"quantity": "1.00",
"price": {
"inclusive": "9.00",
"exclusive": "8.18181818"
}
},
"value": {
"base": "8.18181818",
"discount": "1.00"
},
"vat": {
"type": "VAT_RATE",
"code": "REDUCED_1",
"percentage": "10.00",
"exclusive": "7.27272727",
"inclusive": "8.00",
"amount": "0.72727273"
}
}
},
{
"type": "SALE",
"details": {
"concept": "GOOD"
},
"data": {
"type": "ITEM",
"text": "Prod B",
"unit": {
"quantity": "2.00",
"price": {
"inclusive": "1.20",
"exclusive": "0.98360656"
}
},
"value": {
"base": "1.96721311",
"discount": "0.05"
},
"vat": {
"type": "VAT_RATE",
"code": "STANDARD",
"percentage": "22.00",
"exclusive": "1.92622951",
"inclusive": "2.35",
"amount": "0.42377049"
}
}
}
],
"breakdown": [
{
"type": "VAT_RATE",
"code": "REDUCED_1",
"percentage": "10.00",
"exclusive": "7.27272727",
"inclusive": "8.00",
"amount": "0.72727273"
},
{
"type": "VAT_RATE",
"code": "STANDARD",
"percentage": "22.00",
"exclusive": "1.92622951",
"inclusive": "2.35",
"amount": "0.42377049"
}
],
"totals": {
"vat": {
"amount": "1.15104322",
"exclusive": "9.19895678",
"inclusive": "10.35"
}
},
"customer": {
"type": "EXTERNAL"
},
"payments": [
{
"type": "CASH",
"details": {
"amount": "10.35"
}
}
]
}
}
}Note: The payload above reflects the structure changes introduced with API version 2026-06-01. If you're integrating against a legacy version: replace totals.vat field (at operation level) with the old total_vat (at document level), remove the breakdown field, and use the flat unit.price string format (inclusive only, e.g. "price": "9.00") instead of the { inclusive, exclusive } object shown here.