Skip to main content
Product details are displayed in English. Translations coming soon.
Spain Veri*factu & SII — A build-to-order Odoo module that turns every posted customer invoice into a Veri*factu-compliant re — 1/1مثالی پیش منظر

A build-to-order Odoo module that turns every posted customer invoice into a Veri*factu-compliant record and

keeps your SII ledgers submitted, acknowledged and reconciled from inside Odoo. ECOSIRE scopes, builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database.

Spain Veri*factu & SII کیا ہے؟

A build-to-order Odoo module that turns every posted customer invoice into a Veri*factu-compliant record and keeps your SII ledgers submitted, acknowledged and reconciled from inside Odoo. ECOSIRE scopes, builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

اہم خصوصیات

New `ecosire.es.verifactu.record` model created on `account.move._post()`, storing an immutable snapshot of issuer, recipient, series, number, date, taxable base and quota per rate
Hash-chained records linked through `previous_record_id`, with the chain value computed by a stored compute so it cannot be silently recalculated after the fact
Veri*factu QR payload generated from the stored record and rendered into the customer invoice QWeb report, not recomputed at print time
Tax key and régimen clave mapping driven from `account.tax` master data rather than hardcoded, so new tax rows inherit correct classification
Partner-driven ledger classification using NIF / VAT type on `res.partner` to separate national, intra-community and third-country operations
Asynchronous submission via `ir.cron` plus an automated action, so AEAT latency never blocks a user posting an invoice
Full request/response persistence per submission attempt, including AEAT acknowledgement or CSV, retained on the record for audit
Explicit `rejected` state with AEAT error code and message surfaced in a notebook page on the invoice form view
Automatic `mail.activity` raised on the responsible accountant when a submission is rejected or only partially accepted
Rectification workflow extending Odoo's credit note flow so a `factura rectificativa` carries the correct rectification type, reason and chain reference
Received-invoice ledger support for vendor bills where in scope, mapped from `account.move` supplier documents
Security via `ir.model.access.csv` plus record rules, keeping compliance records isolated per company in multi-company groups
Submission state and record data readable over XML-RPC/JSON-RPC for consolidation, BI or external reconciliation tooling
Reconciliation view comparing submitted ledger totals against the posted general ledger for a period, so divergence is visible before the filing deadline
Built for your exact series — Odoo 17.0, 18.0 or 19.0, Community or Enterprise, with Enterprise builds reusing existing SII plumbing where it makes sense

آرڈر پر تیار، مکمل طور پر آپ کے لیے

خود سیٹ اپ کی ضرورت نہیں — ایک کام کرنے والی ایپ جو ECOSIRE بناتا، انسٹال اور سپورٹ کرتا ہے۔

  1. 1

    آپ آرڈر دیتے ہیں

    ایک بار کی تعمیر کی قیمت سے آغاز کریں۔ آغاز پر ہم آپ کے ساتھ مل کر دائرہ کار طے کرتے ہیں۔

  2. 2

    ہم بناتے اور انسٹال کرتے ہیں

    ECOSIRE اسے آپ کے Odoo پر بناتا، ترتیب دیتا اور انسٹال کرتا ہے۔

  3. 3

    لائیو + معاونت

    آپ تقریباً ایک کاروباری ہفتے میں لائیو ہو جاتے ہیں، گو لائیو کے بعد دو ہفتوں کی معاونت کے ساتھ۔ ہمارے فراہم کردہ کوڈ کی خرابیاں مفت درست کی جاتی ہیں۔

تکنیکی تفصیلات

Odoo ہم آہنگی
Odoo 17, Odoo 18, Odoo 19
ایڈیشنز
Enterprise اور Community
لائسنس
لائسنس کی تصدیق درکار ہے
Python کی ضرورت
Python 3.10+
ڈیٹابیس
PostgreSQL 12+

اس مصنوع کے بارے میں

Spanish invoicing has moved from "print a PDF and file the VAT return" to "your software must prove what it did". Veri*factu requires that invoicing software produce a tamper-evident record for each invoice — chained to the previous one, hashed, timestamped, carrying the issuer and recipient tax identifiers, the taxable base and quota by rate, and a QR the recipient can verify. Separately, SII requires near-real-time submission of the issued and received invoice ledgers to the AEAT. Two obligations, one posting event, and finance teams end up bridging them with spreadsheets, a third-party portal, and a monthly panic when the ledgers do not agree with the general ledger.

Odoo core does not close this gap. l10n_es gives you a Spanish chart of accounts and tax codes; l10n_es_edi_sii (Enterprise) covers a slice of SII, and neither ships a Veri*factu record chain, the hash/QR generation, or a rejection-and-correction workflow that an auditor can follow. Community editions have no SII path at all. The practical failure mode is not "it does not work" — it is that a rejection from the AEAT lands in a log nobody reads, the invoice stays posted in Odoo, and the ledger silently diverges from what the tax authority believes you issued.

What we build is a l10n_es-dependent module that hangs off account.move and treats the compliance record as a first-class Odoo object rather than a side effect. Posting an invoice fires an override on _post() that snapshots the fiscally relevant fields into a new ecosire.es.verifactu.record model — chained via a previous_record_id and a stored hash computed by a @api.depends-guarded compute so the chain cannot be silently rebuilt, with the QR payload rendered into the QWeb invoice report from that same stored record. Tax mapping is driven from your master data, not hardcoded: account.tax rows carry a mapping field resolving to the correct SII/Veri*factu tax key and régimen clave, and res.partner supplies the NIF/VAT type discrimination (national, intra-community, third country) so the ledger classification is derived from what your accountants already maintain. Submission runs through a queued outbound job driven by an ir.cron and an automated action, so a slow AEAT endpoint never blocks a user posting an invoice; every request and response is persisted on the record with its CSV/acknowledgement, and the whole model is secured with ir.model.access.csv plus record rules so multi-company groups only see their own establishment's records.

Rejections are where most implementations quietly fail, so the correction workflow is explicit. A rejected or partially accepted submission moves the record to a rejected state, raises an activity on the responsible accountant, and exposes the AEAT error code and message in a dedicated notebook page on the invoice form. From there you either resubmit after fixing master data, or issue a factura rectificativa that inherits the original's chain reference — Odoo's credit note flow is extended so the rectification carries the correct rectification type and reason rather than being posted as an unrelated document. Everything remains queryable over XML-RPC/JSON-RPC, so a group consolidation tool or a Power BI model can read submission state without touching the database. We build for whichever of Odoo 17.0, 18.0 or 19.0 you actually run, and we handle the Community versus Enterprise difference explicitly during scoping — on Enterprise we can extend and reuse the existing SII plumbing; on Community we implement the transport layer ourselves.

This is a build-to-order product, not an instant download. You request a quotation, we run a scoping call to confirm your Odoo version and edition, your establishments, invoice volume, whether you are already in SII, your certificate arrangements, and any existing localisation customisations. We then quote a fixed scope, build the module against a copy of your database, and deliver it with UAT on a staging instance before anything touches production. Typical delivery is one working week from confirmed scope — the range moves with how much of your master data needs remediation, which is usually the real work. You receive the full source, the git repository, documentation, a training session, and a post-go-live support window.

What you get

  • Installable module source code built for your specific Odoo version (17.0, 18.0 or 19.0) and edition
  • Installation and configuration on your staging instance, including tax mapping and partner data configuration
  • Technical documentation covering models, fields, cron jobs, security rules and extension points
  • End-user guide for the finance team plus a live training session covering posting, rejection handling and rectifications
  • UAT on staging against a copy of your production database, with a documented rollback plan before go-live
  • Post-go-live support window for defect fixes on the delivered scope
  • Handover of the private git repository containing the full commit history
  • Configuration handover notes covering certificate placement, environment settings and cron scheduling

Who this is for

Finance Manager / Controller, Spanish entity

Owns the VAT filings and answers to the auditor. Needs the Veri*factu record and the SII ledger to be a by-product of posting an invoice in Odoo, not a separate reconciliation exercise, and needs rejections to reach a human before the filing deadline rather than sitting in a log.

Group CFO with a Spanish subsidiary

Runs Odoo across several countries and cannot accept a bolt-on portal that lives outside the ERP. Wants submission state queryable alongside every other entity's data, with per-company record rules so the Spanish establishment's compliance data stays isolated.

Odoo functional consultant or internal ERP lead

Has already customised the Spanish localisation and knows a generic module will collide with it. Wants source code, a git repository, documented extension points, and a build that respects the existing `l10n_es` configuration instead of overwriting tax mappings.

Accounting firm managing Spanish clients on Odoo

Files on behalf of multiple companies and needs a repeatable, auditable workflow — same rejection handling, same rectification path, same evidence trail on every database they touch.

How Spain Veri*factu & SII Compares

CriterionECOSIRECustom BuildCompetitorOdoo نیٹو
Veri*factu record chain and QRDedicated hash-chained record model created on posting; QR rendered from the stored recordAchievable, but the chain design is the hard part and is usually got wrong on the first attemptVaries widely; some cover SII only and add QR as an afterthoughtNot provided in Odoo core or `l10n_es`
SII ledger submissionQueued cron-driven submission with full request/response persistence per attemptBuilt from scratch including retry and idempotency handlingUsually present; retry and acknowledgement storage often thinPartial via `l10n_es_edi_sii` on Enterprise only; nothing on Community
Rejection and correction workflowExplicit rejected state, error surfaced on the invoice, activity raised, rectificativa flow extendedFrequently deferred to phase two and never builtOften a log entry with no assignment to a humanNo workflow; errors surface as raw traces if at all
Tax mapping approachDriven from your `account.tax` and `res.partner` master data, no hardcoded catalogueDepends entirely on the developer's disciplineCommonly a fixed internal mapping that drifts from your chartTax codes exist in `l10n_es` but carry no Veri*factu classification
Fit to your existing localisationBuilt against a copy of your database after scoping your actual configurationPerfect fit possible, at full discovery and build costGeneric by design; conflicts with customised `l10n_es` setups are commonIs the baseline, so no conflict — and no coverage
Source code and ownershipFull source plus private git repository handed overYou own it, and you own maintaining it aloneOften obfuscated or licence-key gatedOpen source, but the functionality is absent
Version and edition coverageBuilt for your exact series — 17.0, 18.0 or 19.0, Community or EnterpriseWhatever you pay to build and then re-pay to upgradeUsually one or two versions; Community support inconsistentSII slice is Enterprise-only; Community has no path
Time and cost to liveone working week from confirmed scope, fixed quoted scope, UAT on staging with rollback planMonths, open-ended, discovery cost paid entirely by youInstalls in minutes; the fit and rejection gaps surface at the first filingImmediate but incomplete — the gap moves to spreadsheets

Frequently Asked Questions about Spain Veri*factu & SII

How long does delivery take?

This is a build-to-order module, so nothing ships the moment you click. Typical delivery is one working week from confirmed scope. The clock starts when we have agreed the scope in writing after the scoping call — not when the enquiry arrives. What moves you within that range is usually the state of your master data: if your `account.tax` rows and partner NIF data are clean, we are at the fast end; if tax mapping needs remediation across a long product and tax catalogue, we are at the slow end. We tell you which case you are in during scoping, before you commit.

Does this work on Odoo Community, or do I need Enterprise?

Both, and we handle the difference explicitly at scoping. On Enterprise, `l10n_es_edi_sii` already provides part of the SII transport, and where it fits your setup we extend and reuse it rather than duplicating it. On Community there is no SII path in core, so we implement the transport layer as part of the build. The functional result is the same; the internals and therefore the effort differ, which is why we confirm your edition before quoting.

What support and updates do I get after go-live?

Delivery includes a post-go-live support window for defect fixes within the scope we agreed — if the module does not do what the signed scope says it does, we fix it. Because you receive the full source and the git repository, you are never locked in. Regulatory changes and Odoo major-version upgrades are separate engagements: Spanish requirements evolve, and we scope and quote that work when it arrives rather than promising open-ended free maintenance we could not honestly deliver.

Will this conflict with my existing `l10n_es` setup or other customisations?

That is exactly what the scoping call is for. We build against a copy of your database, so we see your actual tax rows, fiscal positions, journals and any existing localisation customisations before writing code. The module depends on `l10n_es` and extends `account.move` rather than replacing it, and tax mapping reads your existing master data instead of imposing its own. If we find a genuine conflict, you hear about it during scoping, not during UAT.

What happens when the AEAT rejects a submission?

The record moves to a `rejected` state, the AEAT error code and message are stored and shown in a dedicated tab on the invoice form, and an activity is raised on the responsible accountant so a person is assigned rather than an error going into a log file. From there you either fix the underlying master data and resubmit, or issue a `factura rectificativa` through the extended credit note flow, which carries the correct rectification type, reason and reference to the original record.

Do you handle the digital certificate and AEAT credentials?

We build the configuration and the transport, and we document exactly where the certificate lives and how it is referenced. We do not take custody of your certificate or your AEAT credentials — your team installs them on your own infrastructure. During UAT on staging we validate the connection with whatever test arrangement your setup allows, so the first production submission is not the first time the pipeline runs.

Can I read submission status from outside Odoo?

Yes. The compliance records are ordinary Odoo models, so submission state, AEAT acknowledgements and error codes are readable over the standard XML-RPC and JSON-RPC API, subject to the same access rights and record rules as any other model. Group consolidation tools, a Power BI dataset, or an internal reconciliation script can read them without touching the database directly.

آرڈر پر تیار
STC Pay & mada Wallet Checkout for Odoo
قیمت کا تخمینہ طلب کریں

Spain Veri*factu & SII

A build-to-order Odoo module that turns every posted customer invoice into a Veri*factu-compliant record and keeps your SII ledgers submitted, acknowledged and reconciled from inside Odoo. ECOSIRE scopes, builds, installs and supports it for your Odoo 17.0, 18.0 or 19.0 database.

  • New `ecosire.es.verifactu.record` model created on `account.move._post()`, storing an immutable snapshot of issuer, recipient, series, number, date, taxable base and quota per rate
  • Hash-chained records linked through `previous_record_id`, with the chain value computed by a stored compute so it cannot be silently recalculated after the fact
  • Veri*factu QR payload generated from the stored record and rendered into the customer invoice QWeb report, not recomputed at print time
  • Tax key and régimen clave mapping driven from `account.tax` master data rather than hardcoded, so new tax rows inherit correct classification

قیمت کا تخمینہ طلب کریں

ہمیں Spain Veri*factu & SII کے لیے اپنی ضروریات بتائیں اور ہم آپ کو قیمتیں، لائسنس کے اختیارات اور ایک مخصوص تجویز بھیجیں گے — عام طور پر ایک کاروباری دن میں۔

ابھی کوئی ادائیگی نہیں۔ یہ ہماری ٹیم کو قیمت کی درخواست بھیجتا ہے — ہم قیمت اور اگلے اقدامات کے ساتھ ای میل کے ذریعے رابطہ کریں گے۔