Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. Delivery
  3. EDI Hub v 19.0
  4. Sales Conditions FAQ

EDI Hub

by ERP Heritage https://www.erpheritage.com.au/
Odoo
v 19.0 Third Party 30
Download for v 19.0 Deploy on Odoo.sh
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Invoicing (account)
• Purchase (purchase)
• Sales (sale_management)
Community Apps Dependencies Show
• Freight Forwarding
• Logistics Suite Base
• Track and Trace
• Logistics Quotation
• Last Mile
• Road Transport
Lines of code 13897
Technical Name eh_log_edi
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • Discuss (mail)
• Invoicing (account)
• Purchase (purchase)
• Sales (sale_management)
Community Apps Dependencies Show
• Freight Forwarding
• Logistics Suite Base
• Track and Trace
• Logistics Quotation
• Last Mile
• Road Transport
Lines of code 13897
Technical Name eh_log_edi
LicenseLGPL-3
Websitehttps://www.erpheritage.com.au/
ERP Heritage · Logistics Suite
ERP Heritage Logistics Suite

EDI Hub for Freight and 3PL

Queue, translate, and dispatch EDIFACT freight messages with retry, dead-letter, and a full state machine.

Free · LGPL-3Odoo 19 Communityv19.0.1.0.0v19.0.1.0.0
IFTMIN OUT
IFTSTA IN
SFTP
SMTP
HTTP

Why this module

EDI Hub for Freight and 3PL

Queue

Nothing sends silently

Every dispatch is one row with a guarded state machine: draft, queued, sent, acked, closed, plus rejected and dead-letter. A cron walks the queued state every five minutes. You always know where each message is.

Resilience

Failures land in a known place

A send error increments the retry counter against a per-message budget. When the budget is spent the row moves to dead-letter, not into silence, carrying its last error and an operator resume button. Mass-resume handles a backlog in one click.

Integrity

Built once, sent the same twice

The wire payload is built by the translator, stored on the row, and never regenerated. A re-send uses the exact bytes. Inbound raw payloads are persisted before parse, so a parse failure never loses the evidence.

Day in the life

From freight job to carrier and back

An operator dispatches a freight job and clicks Queue IFTMIN. The hub creates one outbound row per EDI partner configured for that message type. The dispatch cron resolves the IFTMIN translator, builds the UN/EDIFACT D.96B forwarding instruction from the job (shipper and consignee NAD parties, gross weight, volume, envelope control numbers), and pushes it over the partner's transport. Later the carrier returns an IFTSTA status report. The receive entry point persists the raw bytes, the inbound cron parses the RFF reference, STS status code, DTM timestamp and LOC location, matches the freight job by name or tracking reference, and writes a normalised tracking event onto the job. An unknown status code falls through to in-transit with the original code preserved, so nothing is dropped on the floor.

Edge cases

The cases most modules quietly ignore.

In the shipped code today, each one a place where a cheaper module silently does the wrong thing.

Idempotent reference match

Inbound IFTSTA matches the freight job on either its name or its tracking reference. If no job matches, the parser returns cleanly without raising, so a stray status report for an unknown shipment is recorded and triaged rather than crashing the queue.

Unknown status fallthrough

IFTSTA carrier status codes are mapped to normalised tracking events (picked up, in transit, customs hold, customs cleared, delivered, exception, and more). Any code outside the map records an in-transit event and preserves the original numeric code in the description, so carrier-specific statuses are never silently lost.

EDIFACT reserved characters

Free-text party fields (name, street, city) are stripped of the EDIFACT reserved characters (apostrophe, plus, colon, question mark) before they reach the wire, so a consignee name with punctuation cannot corrupt the segment structure of an outbound IFTMIN.

Dead-letter resume

When a message exhausts its retry budget it moves to dead-letter with its last error and retry count intact. An operator resume button zeroes the counter, clears the error, and re-queues. The mass-action wizard does this across a whole selection at once.

Payload immutability on retry

The outbound payload is built once and stored as an attachment. Every retry re-uses the exact stored bytes rather than rebuilding, so the partner sees identical content across attempts even if the source record changed in between.

State changes are guarded

Outbound and inbound state can only change through the action buttons; a direct write to the state field is rejected. Illegal transitions (for example queued straight to closed) raise a state-conflict error rather than corrupting the workflow.

Single default per partner

A partner can hold several EDI configurations (production, staging, different contracts), but only one may be the default per partner per company. A constraint blocks a second default before it is saved.

Optional-library transports

SFTP requires paramiko and HTTP a reachable endpoint. If paramiko is absent or AS2 is selected, the transport raises a clear, coded error telling the operator exactly what to install, rather than failing obscurely mid-dispatch.

What is inside

Built to do the job, end to end.

  • EDI partner registry. eh.log.edi.partner pairs a res.partner with a transport, the message types it may exchange, a partner identifier (GLN, DUNS, EAN, or internal), a sender-identifier override, and a filename template. A partner can carry multiple configurations with a single enforced default.
  • Message type master. eh.log.edi.message.type lists the EDIFACT or X12 message identifiers you support, each with a direction and encoding. A save-time constraint blocks any active message type whose translator is not registered in code, so a typo or an un-built message surfaces immediately, not at dispatch.
  • Transport configuration. eh.log.edi.transport carries the endpoint and protocol for SFTP, SMTP, HTTP, or file drop, plus a mock transport for tests. Credentials resolve through the suite credentials helper. A constraint checks that host, target email, or URL is present for the chosen protocol.
  • Outbound queue and dispatch cron. eh.log.edi.outbound is one row per attempt with a guarded state machine, retry counter, max-retries budget, dead-letter, transport reference, and last-error capture. A cron walks the queued state every five minutes and advances each row.
  • Inbound queue and process cron. eh.log.edi.inbound mirrors outbound: received, parsed, processed, closed, plus rejected. The receive entry point persists raw bytes first; the cron parses then applies. Parse output is stored as JSON for operator review and replay.
  • Reference translators. Two translators ship end to end: an IFTMIN outbound builder driven by the freight job and an IFTSTA inbound parser that writes onto the tracking event log. A shared base class provides EDIFACT segment composition and tolerant segment-splitting helpers. Adding a message type is a translator file plus a data row.
  • Freight job integration. The freight job gains a Queue IFTMIN action, an EDI outbound count, and a smart-button view of its messages. Queuing creates one outbound row per active EDI partner subscribed to IFTMIN within the same company.
  • Multi-company isolation and audit. Global record rules scope partner configurations, transports, and both queues by company. Outbound and inbound records carry mail.thread chatter with state tracking, so every transition is logged on the record timeline.

Honest about the edges

What this does not do, so nothing surprises you.

  • The two translators that ship end to end are IFTMIN (outbound) and IFTSTA (inbound), both UN/EDIFACT D.96B. They implement a working subset of each spec, not the full message. Other message types and a full segment set are added by writing a translator class plus a data row.
  • EDIFACT is the only encoding with shipped translators. X12, XML, and JSON exist as selectable encodings on the message-type model, but no X12, XML, or JSON translator is included.
  • The IFTMIN builder uses a minimal UNB/UNH envelope and collapses goods to a single item. Per-partner schema variants, dangerous-goods, temperature, and customs-status segments are intended to be added in a translator subclass.
  • SFTP dispatch requires the optional paramiko library on the Odoo host. AS2 is a listed protocol but is not implemented and raises a clear error pointing at the optional dependency.
  • This is a B2B message hub. It is not a real-time carrier API client and not a customs regulator gateway; those belong to separate modules in the suite.
  • Inbound receipt assumes payloads are delivered to the receive entry point by a transport adapter or endpoint you wire up; no inbound SFTP poller or mailbox listener ships in this module.
Search

Odoo EDI, EDIFACT Odoo, IFTMIN, IFTSTA, freight EDI, logistics EDI hub, 3PL EDI integration, per-partner EDI mapping, SFTP EDI dispatch, EDI dead-letter retry, inbound outbound EDI queue, Odoo 19 freight forwarding, carrier status report integration, UN/EDIFACT D.96B, multi-company EDI

ERP Heritage

Production-grade Odoo accounting, built to an engineering bar and documented honestly. Support: info@erpheritage.com.au
Developed by ERP Heritage - Odoo Implementation

v19.0.1.0.0 · LGPL-3 · Odoo 19 Community

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with