Skip to main content
Portugal SAF-T (PT) File Checks

Portugal SAF-T (PT) File Checks: what it covers, what you need first and which Odoo version

Portugal SAF-T (PT) File Checks fits if you keep a Portuguese company's accounts in Odoo and want to generate the SAF-T v1.03 file from there, validate it against the Portuguese tax authority's XSD schema and submit it to the ATCUD portal. Before installing it you need an outgoing mail server, the company's NIF, the ATCUD endpoint URL and credentials and, if ATCUD requires one, a digital certificate. It is published on Odoo Apps for Odoo 17.0, 18.0, 19.0 and 20.0.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 4 November 2026

Key facts

Versions
Odoo 17, 18, 19 and 20
Checked
in the module's source code, version 20.0 · against the sources linked at the end
Reading time
6 min

What the module covers according to its README

The README groups the features into numbered requirements (FR) and lettered sections. The core is these requirements:

  • SAF-T v1.03 XML generation (FR-001): creates the files from Odoo's accounting data.
  • XSD schema validation (FR-002): the module checks the file against the Portuguese tax authority's schema.
  • Direct submission to the ATCUD portal (FR-003): with automatic retry logic.
  • Errors and exceptions (FR-004): detailed error logging and user-friendly feedback.
  • Configuration interface (FR-005): manages credentials, email and submission settings.

Around that core, the README describes these other pieces:

  • Multi-company: submissions tracked per company, with separate audit trails.
  • GDPR (Section C): mentions 10-year mandatory retention override and a DSAR workflow with legal response templates.
  • Email notifications (Section D): DKIM/SPF/DMARC guidance and submission confirmations.
  • Annual statistics (Section E): export and submission of annual reporting.
  • Observability (Section F): JSON logging, Prometheus metrics and Sentry integration.
  • Anti-abuse protection (Section G): rate limiting, honeypot fields and CAPTCHA on public forms.
  • Large files (Section H): chunked uploads with virus scanning.
  • Chatter (Section I): discussion on submissions, with confidentiality.
  • Performance (Section J): p99 SLO tracking.
  • DSAR (Section K): legal basis tracking and response automation.
  • Languages (Section L): multi-language interfaces.
Generate SAF-T Files list with records by company, period and state
The SAF-T file generation list with six records in the states Draft, Generated, Validated, Validation Failed and Submitted; file size and transactions at zero.

What the module does and what you provide

To decide, separate what the README attributes to the module from what you have to bring yourself. This table puts both side by side, based on the documentation.

NeedDone by the module (README)Prepared by you (README)
Generate the SAF-T fileGenerates SAF-T v1.03 XML from Odoo's accounting dataChoose company and period in Generate SAF-T Files
Validate the fileValidates against the Portuguese tax authority's XSD schemaClick Generate SAF-T; the system then validates
Submit to ATCUDDirect portal submission with automatic retryATCUD endpoint URL, credentials and a digital certificate if ATCUD requires it
Know what went wrongDetailed error logging and user-friendly feedbackReview the logged errors
Email confirmationsSubmission confirmations and DKIM/SPF/DMARC guidanceOutgoing Mail Server with SMTP credentials, sender and confirmation address
Several companiesPer-company tracking with separate audit trailsATCUD submission credentials in the company settings
Annual reportExport and submission of annual statisticsNot detailed in the README
Public formsRate limiting, honeypot fields and CAPTCHAConfigure rate limiting and abuse prevention

The right-hand column tells you whether you can start now. The ATCUD endpoint URL and credentials and the outgoing mail server are part of the configuration steps the README describes. If anything is missing, get it sorted before installing.

SAF-T Error Logs list with date, error type, severity and message
The SAF-T error log with five entries: date, error type, severity, message and an unticked resolved flag.

If this sounds like you, here is what fits

  • You keep a Portuguese company's accounts in Odoo and want to produce SAF-T from there: the module covers generating, validating and submitting the file (FR-001 to FR-003).
  • You run several companies in the same database: the README mentions multi-company support with separate audit trails per company.
  • You do not have ATCUD access yet: get the endpoint URL and credentials first, as the module's settings ask for them, along with the digital certificate if ATCUD requires it.
  • Your technical team wants to monitor the service: the README mentions JSON logging, Prometheus metrics, Sentry and p99 SLO tracking.
  • You work in several languages: the README includes multi-language interfaces (Section L).
  • You need something that is not on the feature list: do not assume it is there. Ask before buying or consider bespoke development.

If you want to see which menus it adds and how a record moves through its states, we cover that in how Portugal SAF-T (PT) File Checks works inside Odoo.

Annual SAF-T Statistics list with company, year, documents, value and state
The annual SAF-T statistics with five rows by company and year, total documents, total value and a Draft or Exported state.

What to have ready before installing

On the server

  • Odoo installed: the README's installation steps begin with Ensure you have Odoo 19 installed, while on Odoo Apps the module is published for 17.0, 18.0, 19.0 and 20.0. Check the listing for the version you use.
  • Python packages: the README has an Install required Python packages step. Check the list in the module's README before installing.
  • Addons directory: copy the module into your Odoo addons directory.
  • Installation: in Odoo, open Apps, search for Portugal SAF-T and click Install.

In Odoo

  • Email: in Settings → General Settings, Emails section, set the Outgoing Mail Server with your SMTP credentials and the sender address.
  • SAF-T settings: in Accounting → Configuration → SAF-T Accounting → Settings, the NIF (Número de Identificação Fiscal), the ATCUD endpoint URL with its credentials and the digital certificate if ATCUD requires it.
  • Company settings: ATCUD submission credentials, the email address for submission confirmations, and rate limiting and abuse prevention.

In the screenshots, the module's lists appear under Invoicing, whereas the README writes the paths with Accounting. If you cannot find a menu, look in both.

The full walk-through of settings and fields is in setting up Portugal SAF-T (PT) File Checks.

Odoo versions and price

On Odoo Apps it costs €9 per Odoo version, one-off payment, excluding VAT, for 17.0, 18.0, 19.0 and 20.0. It is a module with a FlexigoTech Cloud local service, which costs €29/month or €290/year excluding VAT (Pro: €58/month or €580/year).

With the subscription, the module for new Odoo versions is included if you bought it on flexigotech.com; on the Odoo App Store, each Odoo version is bought there. Without a subscription, or with the service suspended, whatever the subscription provides stops and your data stays in your Odoo.

How to try it with one period before deciding

The README describes file generation like this; you can follow it with one period to see it working with your own data:

  1. Go to Accounting → SAF-T Accounting → Generate SAF-T Files.
  2. Click Create to start a new generation.
  3. Select the company and the date period.
  4. Click the Generate SAF-T button.
  5. The system validates the file against the XSD schema.

If validation or submission fails, the error messages of Portugal SAF-T (PT) File Checks explain when each one appears and what to do.

Where FlexigoTech can help

We implement Odoo 17, 18, 19 and 20 and build bespoke connectors and integrations. If the module covers almost everything you need but one piece is missing, or you want help getting email, the NIF and ATCUD access ready, get in touch through the module page. You can also check the Odoo Apps listing for your version.

Keep reading

How Portugal SAF-T (PT) File Checks works in Odoo, from the insideThe menus Portugal SAF-T (PT) File Checks adds to Invoicing, the models behind them, the states you see in its lists and which part uses an external service.Portugal SAF-T (PT) File Checks errors: when each message appears and what to doEvery Portugal SAF-T (PT) File Checks error message, word for word: when it appears, what it means and what to do in Odoo, from generation to ATCUD submission.Setting up Portugal SAF-T (PT) File Checks in Odoo, told through a worked caseSetting up Portugal SAF-T (PT) File Checks in Odoo with an invented case: ATCUD configuration, key fields, states and what to check in the first week.
Checked in the module's source code (version 20.0) and the linked sources

Sources