What DIAN requires in 2026
Electronic invoicing in Colombia is not a signed PDF. It is a structured XML that passes DIAN's pre-clearance validation — before it ever reaches the customer. If the XML doesn't comply, DIAN returns a rejection code and the operation is in limbo: you didn't sell, you didn't report.
The three operational pillars in 2026:
- CUFE (Código Único de Factura Electrónica) — an SHA-384 hash generated from the document's critical fields (issuer NIT, buyer NIT, amount, date, software ID, DIAN authorization). Any later change invalidates the CUFE — and therefore the invoice.
- RADIAN (Registro de Facturas Electrónicas como Título Valor) — mandatory since 2024 if your invoice circulates as a negotiable instrument. Sync with DIAN on every event (acceptance, endorsement, payment). Skip the sync = invoice can't be discounted.
- Pre-clearance validation — DIAN no longer accepts batch uploads. Each document is validated online against its rule set (UBL 2.1 + Colombian addenda). Typical latency: 2–8 seconds. If your Odoo doesn't handle async retries, you'll have invoices stuck in limbo every week.
DIAN tightened payroll-XML validation and started cross-referencing it against invoices. If you issue an invoice to a supplier but didn't report their payroll (where applicable), DIAN flags the inconsistency and your expense deduction is at risk during audit.
Configuring the l10n_co
module step by step
The Colombian localization module ships with both Odoo Community and Enterprise. What doesn't ship is the certified DIAN connector — that comes from a third party (Vauxoo, Bistec, Tridian, Carvajal). Before choosing a vendor, verify three things:
- It's on DIAN's authorized-software list (DIAN Resolution 042 of 2020 + addenda).
- Ask for the software authorization number — it's not optional, it must appear on every emitted XML.
- Confirm it supports RADIAN bidirectional sync, not just emission.
#1. Company configuration
In Settings → Companies → Your company:
- NIT with verification digit in the correct field. Common mistake: stuffing NIT-DV together in the VAT field; Odoo then fails XML validation.
- Tax regime (Común / Simplificado / Responsable de IVA) — drives the tax structure on every document.
- CIIU economic activity code — without it, DIAN rejects the first invoice of the period.
- Active invoicing resolution (number, date, authorized range, expiration). If the resolution expires and you don't renew it 15 days ahead, you stop emitting.
#2. Taxes and withholdings
Enable Colombian taxes under Accounting → Configuration → Taxes. Critical ones:
- VAT 19%, 5%, 0%, Excluded (mapped to the right DIAN codes).
- Income withholding (Rete-fuente) — percentage varies by concept and supplier regime.
- VAT withholding (Rete-IVA) — applies only if you're a Gran Contribuyente or Agente de Retención.
- ICA withholding — municipal, depends on city and activity.
The typical mistake: leaving the demo install's tax codes. The invoice goes out but DIAN replies FAU01b — Tax code doesn't match regime.
#3. DIAN connector
Whichever you pick, the common steps:
- Load the digital signature certificate (P12, with password). Renewal lasts 1–2 years and is a separate process with your Chamber of Commerce.
- Load the DIAN resolution (PDF of the authorization), with numbering range and dates.
- Configure environment: test (habilitación) first, production after validating 50 invoices with DIAN OK.
- Enable async queues in Odoo (queue_job). Without this, every emission blocks the user's HTTP thread for 5–8 seconds.
50 invoices in habilitación with 100% DIAN acceptance. If you see any rejection, don't move forward — the same error reproduced in prod costs hours of remediation per document.
Typical rejections from DIAN — anonymous case
Recent audit at a distributor in Valle del Cauca, 1,200 invoices/month. 22% bounced back from DIAN.
Root causes, in order of frequency:
- FAU03b · CUFE hash mismatch — the connector was recalculating CUFE after applying the early-payment discount, but using the amount before the discount. Result: invalid hash. Fix: patch the connector to recalculate in the right order (discount → tax → CUFE).
- FAJ50 · Buyer not found in DIAN's RUT — newly created customer, NIT mistyped by the salesperson at the POS. Client-side pre-validation would catch 90% of these. Better: integrate with DIAN's NIT lookup service before saving the customer.
- FAB05 · Total doesn't match the sum — rounding. Odoo rounds per line, DIAN expects rounding at the total. Set the rounding rule: Round per line must be OFF for Colombia.
- FAB23 · Resolution expired — invoicing ran for two weeks on an expired resolution because nobody monitored the date. Implement automatic alerts at 30, 15 and 5 days.
"After the fix, the rejection rate dropped from 22% to 1.4%. The cost of NOT fixing it: 264 invoices/month that couldn't be collected until manual re-invoicing — roughly $48M COP in unnecessary aged AR."
Electronic payroll as the natural extension
If electronic invoicing is already running, electronic payroll (NE) is the next layer. DIAN requires reporting:
- Earnings: salary, commissions, overtime, bonuses.
- Deductions: healthcare, pension, income withholding, garnishments.
- Employer contributions: parafiscales, ARL, caja.
- Adjustment notes when there are prior-period errors.
NE's XMLs share infrastructure with invoicing (same digital certificate, same authorized connector), but the upload calendar is independent: within 10 calendar days after payroll payment.
Two errors DIAN punishes hardest in NE:
- Reporting payroll before it's been paid (trying to "front-load"). DIAN cross-checks against bank statements reported by the EPS.
- Omitting non-monetary earnings (vouchers, meals) — they're deductible for the employer, but only if they're in the XML.
DIAN electronic payroll: how much deductibility you lose if it's wrong — real case with exact figures of tax impact.
When self-served isn't enough and you need a Gold partner
The self-served setup with a certified connector works for SMBs with a single location, under 5,000 invoices/month, and no multi-currency operation. Where it breaks:
- Multi-company with separate NITs in the same Odoo — each company needs its own resolution, certificate, and isolated fiscal configuration. Without a partner who knows how, you end up with invoices signed under the wrong certificate, and DIAN doesn't forgive.
- High volume
(more than 10K docs/month) — you need queue_job tuning, partitioning of
account.movetables, and active monitoring of the validation queue. - Third-party POS integrations (Manhattan, NCR, Toast) — the CUFE must be generated in Odoo, not in the POS; orchestrating this without race conditions takes an architect with experience.
- Ongoing DIAN audit — if you've already received a requerimiento, this isn't the moment for self-served setup. A partner with documented experience defending against DIAN saves months.
Related resources:
- Colombia country page — l10n, tax, list of DIAN-experienced partners
- 5-day Odoo audit — identifies rejection points, required patches, remediation plan
- DIAN 2026 checklist (24 points) — before going to production
FAQ
The questions that come in every week from Colombian SMBs running Odoo + DIAN.
Can I use Odoo Community in Colombia or do I need Enterprise?
Community works. The l10n_co
module is open source and DIAN connectors run on both editions. Enterprise adds conveniences (Studio reports, better performance, official support), but it's not a legal requirement.
How much does a DIAN connector for Odoo cost?
Typical range: $300–800 USD/month per NIT, depending on vendor (Vauxoo, Bistec, Tridian, Carvajal) and volume. Some charge per document (~$0.05 USD/invoice) on elastic plans.
What happens if DIAN rejects an invoice?
The document stays in rejected state in Odoo. Your team gets the notification with the error code. You fix it (recalculating CUFE if needed), resend. If 48 hours have passed since the commercial event, you must issue a credit note and reissue.
Do I need to report to RADIAN if I don't trade my invoices?
If you only issue invoices for direct collection (no endorsement to factoring funds), RADIAN isn't mandatory. But if at some point you decide to factor, RADIAN must have been active from day 1 — without history there's no negotiable instrument.
Does electronic payroll apply to my 3-employee SMB?
Yes, no minimum threshold. Since 2022 any formal employer must report NE. Fine for not reporting: up to 50 UVT per month (≈$2.4M COP) per unreported employee.
Can I issue invoices in USD to foreign customers from Odoo Colombia?
Yes, but the XML sent to DIAN must carry the COP equivalent using the official TRM rate of the emission date. Set up rates under Accounting → Configuration → Currencies → TRM Banco de la República (daily sync).
How fast does DIAN respond to an electronic invoice?
Pre-clearance validation: 2–8 seconds under normal conditions. During peaks (month-end, tax deadline last business day) it can go to 30–60 seconds. That's why async processing isn't optional.
Is it worth migrating from SIIGO/World Office/Helisa to Odoo if I already emit DIAN?
Depends. If your current system has friction on other fronts (inventory, manufacturing, CRM, BI), Odoo unifies everything on a single platform with DIAN integrated. If all you do is invoice, migrating adds complexity without clear ROI.
What does an Odoo Gold partner do that a regular one doesn't?
Access to pre-release builds, priority bug-fixes from R&D Belgium, verified personnel certifications. In Colombia with DIAN, the biggest differentiator is documented experience
defending against DIAN requerimientos and connections to the l10n_co
module developers.
How long does a full DIAN setup in Odoo take?
Single-NIT SMB: 2–3 weeks (1 week certificates + setup, 1 week habilitación environment with 50 test invoices, 1 week production cutover + tuning). Multi-NIT or high volume: 6–10 weeks.
What documentation do I need before starting?
Up-to-date RUT, active DIAN invoicing resolution, P12 digital certificate + password, chart of accounts mapped to the Colombian PUC, and internal numbering policies (one series per NIT, or per branch/user?). Without these four, setup gets stuck on day 1.
If the answer isn't an immediate yes, a 5-day Odoo audit identifies the rejection points, required patches, and remediation plan with timeline and cost. Book a free 30-min audit →