Odoo 19.4 redesigns SDI interface and adds reverse charge reset for Italian invoicing
Odoo 19.4 reorganizes the SDI tab for clearer invoice tracking, makes document reference always visible, and adds reverse charge reset so rejected invoices can be corrected without recreation.
Odoo has released updates to its Italian localization, with version 19.4 redesigning the SDI interface to improve invoice tracking and adding the ability to reset rejected reverse charge documents to draft state for correction.
Odoo has released a series of updates to its Italian localization, with version 19.4 introducing a redesigned SDI (Sistema di Interscambio) interface and new reverse charge features.
SDI interface improvements
The SDI tab has been reorganized with clearer section headings and a more intuitive layout. The Document Reference field now displays by default, whereas it was previously visible only under specific conditions.
SDI status now appears in the invoice list view by default when Italian localization is enabled. Status labels have been shortened and paired with colored badges and icons for faster identification. The SDI status no longer appears in the form view; instead, users can view and update it directly from the list view. If an invoice is rejected by the SDI or recipient, a “Rejected” ribbon automatically displays in the form view to flag documents needing action.
Electronic invoicing and reverse charge features
Starting with version 19.2, Odoo added the CodiceCommessaConvenzione XML field to electronic invoices. This field allows users to include project or agreement codes required by Italian Public Administration entities, simplifying invoicing for public-sector customers.
Version 19.4 introduces reverse charge integration reset. If an XML file is rejected by the SDI or recipient, users can now reset the fiscal integration document back to draft state. This allows correction and resubmission without recreating the document from scratch.
Since version 17.0, Odoo automatically validates the SIA Code. The system checks that the code contains exactly five characters and displays a blocking validation error if it does not, preventing the record from being saved.
Demo data for testing
Since version 19.1, Runbot instances created with Italian localization enabled automatically load demo data tailored to the Italian market. The demo data includes B2B, B2C, B2G, EU, and non-EU partners; bank accounts linked to partners; customer and vendor invoices covering common scenarios; and dynamically generated dates based on instance creation date. This allows users to test Italian localization workflows without manual configuration.