| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Purchase (purchase)
• Invoicing (account) • Discuss (mail) • Inventory (stock) |
| Lines of code | 1658 |
| Technical Name |
l10n_ro_edi_stock_extension |
| License | LGPL-3 |
| Website | https://www.nexterp.ro |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Purchase (purchase)
• Invoicing (account) • Discuss (mail) • Inventory (stock) |
| Lines of code | 1658 |
| Technical Name |
l10n_ro_edi_stock_extension |
| License | LGPL-3 |
| Website | https://www.nexterp.ro |
Romania - eTransport Extension
Fixes and extensions for l10n_ro_edi_stock per ANAF eTransport v2.0.2
Overview
Fixes and extensions for the official Odoo l10n_ro_edi_stock module to align it with the ANAF eTransport v2 specification (XSD 2023-01-26, Schematron v2.0.2 from 2024-08-12).
The official module ships with several calculation bugs and missing features required by the current ANAF eTransport schema. This module corrects those issues and adds the full set of operations mandated by eTransport v2.0.2.
Corrections to the official module
valoareLeiFaraTva(VAT-excluded value) is computed correctly per operation direction:- Incoming (operations 10, 12, 14, 30-transfer, 40, 60): cost price from the stock move or, when a Purchase Order exists,
purchase.order.line.price_unitconverted to RON. - Outgoing (operations 20, 22, 24, 30-sale, 50, 70): sale price from
sale.order.line.price_unitconverted to RON, orlist_priceas fallback.
- Incoming (operations 10, 12, 14, 30-transfer, 40, 60): cost price from the stock move or, when a Purchase Order exists,
- Quantity / UoM conversion between
move.product_uomand the declaredcodUnitateMasurais now consistent. - Gross weight no longer doubles
shipping_weightwhen a package has multiplemove_lines;greutateBruta >= greutateNetais always guaranteed. codTarifar(NC8/HS code) is required — the erroneous00000000fallback is removed.denumireStradais correctly split fromnumar / bloc / scara / etaj / apartamentper theLocatieTypeXSD definition.
What this module provides
- Flexible price source (
l10n_ro_edi_stock_price_sourceonstock.picking): Automatic, Cost price, Purchase order price, Sale order price, or Product list price — configurable per transfer or as a company-wide default. - Multiple transport documents per notification (
l10n.ro.edi.stock.document.line):tipDocumenttypes 10 CMR / 20 Invoice / 30 Delivery note / 9999 Other, with free-textremarksfor type 9999. - Previous notifications (
l10n.ro.edi.stock.previous.notification):notificareAnterioaraentries required for operations 60/70 (DIN/DIE). - Post-outage declaration (
l10n_ro_edi_stock_post_outage):declPostAvarieflag per OUG 41/2022 art. 8 par. 1³. - Full UIT lifecycle wizard (
l10n.ro.edi.stock.action.wizard): Delete (DEL), Confirm (CON — confirmed / partially confirmed / refused), and Vehicle Modification (MVH) actions sent directly to ANAF. - LIST service sync (
l10n.ro.edi.stock.list.wizard): fetch and reconcile the ANAF notifications list for any date range (1–60 days); automatic reconciliation logs matched UITs in the transfer chatter. A scheduled cron job (ir_cron_l10n_ro_edi_stock_list_sync) runs every 6 hours. - Transporter Info service (
l10n.ro.edi.stock.transporter.info.wizard): query ANAF for all notifications in which the company acts as transport operator, with full vehicle and location details. - Extended document state tracking:
l10n_ro_edi_stock_event_type(NOT / COR / DEL / CON / MVH) andl10n_ro_edi_stock_confirm_type(10 / 20 / 30) stored onl10n_ro_edi.document.
Built & supported by NextERP Romania
Romanian Odoo specialists, here for the long run — from implementation to localization and day-to-day production support.
What we do
Odoo Solutions
From quick-start rollouts to multi-company deployments and custom modules built for your processes.
Romanian Localization
SAF-T (D406), e-Factura, e-Transport, D300 / D390 / D394, ANAF integration, full chart of accounts and fiscal positions.
Our Services
Implementation, customization, migration, integration, support and consultancy — Romanian-speaking, SLA-backed.
Features
- Compliant with ANAF eTransport v2.0.2 — corrects value, weight, UoM, address and HS-code bugs in the official
l10n_ro_edi_stockmodule. - Flexible VAT-excluded value calculation — choose between Automatic, Cost, Purchase Order, Sale Order, or List price per transfer or as a company default.
- Multiple transport documents per notification — attach CMR, invoices, delivery notes or other documents to a single eTransport XML.
- Full UIT lifecycle — Delete, Confirm (confirmed / partially / refused), and Vehicle Modification actions sent directly to ANAF from the transfer.
- Previous notification support —
notificareAnterioaraentries for operations 60/70 (DIN/DIE). - Post-outage declaration flag —
declPostAvarieper OUG 41/2022 for submissions during ANAF system outages. - Automatic LIST sync cron — reconciles ANAF notification list with local transfers every 6 hours; manual wizard also available.
- Transporter Info service — query ANAF for all notifications where the company acts as transport operator, with full vehicle and route details.
Configuration
1. Company-wide default price source
- Go to Settings → Inventory (or Settings → Accounting) and search for the eTransport section.
- Set Default eTransport Price Source (
l10n_ro_edi_stock_default_price_source) to the strategy that matches your typical operations:- Automatic (by operation) is recommended for mixed-use companies.
- Override per transfer when needed using the field on
stock.picking.
2. Automatic LIST sync (cron)
- In the same settings page, tick Automatic List Sync (
l10n_ro_edi_stock_list_enabled). - Set List Sync Days (
l10n_ro_edi_stock_list_days, 1–60) — the number of days the cron looks back each run. - The scheduled action eTransport: ANAF notifications list sync (
ir_cron_l10n_ro_edi_stock_list_sync) runs every 6 hours automatically once enabled. To adjust the interval, go to Settings → Technical → Automation → Scheduled Actions and edit the cron record.
3. Verify NC8/HS codes on products
Because codTarifar is now mandatory (the 00000000 fallback has been removed), ensure every product that appears on eTransport-eligible transfers has a valid 4-, 6-, or 8-digit HS/NC8 code set on the product form before sending notifications.
4. Verify address structure
The module splits Romanian street addresses into denumireStrada + number/building details automatically via _l10n_ro_edi_stock_split_street. Confirm that partner addresses follow the format "Street name number" (e.g. "Calea Victoriei 12-14") to ensure correct splitting.
How it works
Configuring the price source for a transfer
- Open a validated or in-progress transfer in Inventory → Transfers.
- In the eTransport tab, locate the eTransport Price Source field (
l10n_ro_edi_stock_price_source). - Choose one of:
- Automatic (by operation) — cost on incoming/internal, sale price on outgoing.
- Cost price — always uses
standard_price. - Purchase order price — pulls from the linked PO line in RON.
- Sale order price — pulls from the linked SO line in RON.
- Product list price — uses
list_price.
- Continue with the normal eTransport notification flow.
Adding transport documents (CMR, Invoice, etc.)
- Open the transfer and go to the eTransport tab.
- Under Transport Documents, click Add a line.
- Set Document Type (10 CMR / 20 Invoice / 30 Delivery Note / 9999 Other), Document Number, and Document Date.
- If type is Other (9999), fill in the Remarks field (required by ANAF).
- Add as many documents as needed; all will be included in the XML notification.
Declaring previous notifications (operations 60/70)
- On the transfer, go to the eTransport tab → Previous Notifications section.
- Click Add a line and enter the Previous UIT, optional Remarks, and Declarant Reference.
- These entries are serialised as
notificareAnterioaraelements in the XML sent to ANAF.
Marking a post-outage declaration
- On the transfer eTransport tab, tick Post-Outage Declaration (
l10n_ro_edi_stock_post_outage). - This sets
declPostAvarie=1in the submitted XML, allowed until the end of the next working day after an ANAF system outage (OUG 41/2022 art. 8 par. 1³).
Performing UIT lifecycle actions (Delete / Confirm / Modify vehicle)
After a notification UIT has been obtained:
- Open the transfer and use the action buttons in the eTransport tab (or the action menu).
- Delete notification — opens
l10n.ro.edi.stock.action.wizardpre-set to DEL; confirm to send the deletion to ANAF. - Confirm transport — opens the wizard pre-set to CON; choose confirmation type (10 Confirmed / 20 Partially confirmed / 30 Refused) and submit.
- Modify vehicle — opens the wizard pre-set to MVH; enter the new vehicle number, optional trailer numbers, and modification date/time.
- The wizard calls
_upload_and_log, posts the ANAF response in the chatter, and updatesl10n_ro_edi_stock_event_typeon the relatedl10n_ro_edi.documentrecord.
Syncing the ANAF notifications list manually
- Go to Inventory → Operations → eTransport notifications list (
menu_l10n_ro_edi_stock_list_wizard). - Enter the Number of days (1–60) to look back.
- Click Fetch (
action_fetch). The wizard retrieves the ANAF LIST and displays all returned notifications asl10n.ro.edi.stock.list.linerecords. - Click Reconcile to automatically match UITs to local transfers and log the result in each transfer's chatter.
Querying transporter info (as transport operator)
- Go to Inventory → Operations → Notifications as transport operator (
menu_l10n_ro_edi_stock_transporter_info_wizard). - Fill in Transport operator VAT, and optionally Initial declarant VAT, Specific UIT, or Declarant reference.
- Click Fetch (
action_fetch). Each matching ANAF notification appears as anl10n.ro.edi.stock.transporter.info.linerow with UIT, vehicle numbers, start/end locations, and expiry date.
Versions
19.0.1.0.0 (2026-06-23)
- Changelog tracking starts at this release.
Discover the NextERP suite
Other modules from the same publisher, built to work together.
NextERP Romania
Odoo implementation, customization, Romanian localization and long-term support since 2018.
Please log in to comment on this module