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

Portugal SAF-T (PT) File Checks errors: when each message appears and what to do

The messages in Portugal SAF-T (PT) File Checks are in English and nearly all of them already say what went wrong and, often, the next step: generate before validating, check the log, configure the ATCUD certificate and key, or try again later. Below you have each message word for word, when it appears according to its own text and what to do, without assuming anything the message does not say.

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

How to read a Portugal SAF-T (PT) File Checks message

Every message carries a text, and many end in %s or carry %d in the middle. That gap is where the module inserts the specific data: the failure detail, the value you have saved, an address or the number of attempts. When you see a colon followed by some text, that part tells you what happened in your case.

In the table below the messages appear exactly as the module writes them, with %s and %d in place. On your screen you will see the real data instead of those placeholders.

Error table: message, when it appears and what to do

MessageWhen it appearsWhat to do
SAF-T generation failed: %sGenerating the SAF-T file fails.Read the detail after the colon and fix what it points to before generating again.
No SAF-T file generated. Run generation first.There is no SAF-T file generated yet.Generate the file first, as the message asks.
SAF-T validation failed. Check validation log for details.The SAF-T file does not pass validation.Open the validation log and check the detail there.
SAF-T validation failed: %sValidation fails and the message includes the reason.Read the reason after the colon.
Failed to fetch SAF-T schema from %s: %sThe SAF-T schema cannot be fetched from an address.The message shows the address and the detail: check both.
SAF-T file must be an XML fileThe SAF-T file is not an XML file.Use an XML file.
Period start must be before period endThe period start is not before the period end.Fix the dates so the start comes before the end.
XML export failed: %sExporting to XML fails.Read the detail after the colon.
CSV export failed: %sExporting to CSV fails.Read the detail after the colon.
Annual statistics generation failed: %sGenerating annual statistics fails.Read the detail after the colon.
NIF must be exactly 9 digits. Current value: %sThe NIF does not have exactly 9 digits.The message shows the current value: leave it with exactly 9 digits.
Invalid ATCUD endpoint URL formatThe ATCUD endpoint URL format is not valid.Check how the endpoint URL is written.
ATCUD certificate and key must be configured in SAF-T settingsThe ATCUD certificate and key are not configured.Configure them in the SAF-T settings.
ATCUD rejected the submission. Check error log for details.ATCUD rejects the submission.Check the error log.
Failed to contact ATCUD after %d attempts. Try again later.ATCUD cannot be reached after several attempts; the message says how many.Try again later.
ATCUD submission failed. Please try again later.The submission to ATCUD fails.Try again later.
Submission can only be retried from error stateYou try to retry a submission that is not in error state.Only retry submissions in error state.
No submissions found for this companyThere are no submissions for that company.Check it is the company you meant to look at.
No email configured for companyThe company has no email configured.Configure the company email.
Email test failed: %sThe email test fails.Read the detail after the colon.
Several contacts match "%s": enter the email or the tax ID of the data subject.Several contacts match what you entered.Enter the email or the tax ID of the data subject.
DSAR processing failed: %sDSAR processing fails.Read the detail after the colon.

NIF, URL, email and certificate: the data messages

One group of messages concerns data you fill in yourself. The NIF one is the most direct: it asks for exactly 9 digits and shows what is saved (Current value: %s), so you can see at a glance what is extra or missing. The URL one (Invalid ATCUD endpoint URL format) only says the format is not valid, so the step is to check how that address is written.

To submit to ATCUD, the module asks for a certificate and key in the SAF-T settings: if they are missing, you get ATCUD certificate and key must be configured in SAF-T settings. Email works in a similar way: No email configured for company means the company has no email, and Email test failed: %s appears when the email test does not go through, with the detail at the end.

New ATCUD configuration form with company, ATCUD, email and notifications and upload sections
ATCUD configuration form in Invoicing, with nothing saved yet: only the endpoint URL is filled in and the bottom of the form is cut off.

The ones that send you to a log or ask you to wait

Two messages do not carry the detail inside and point you elsewhere: SAF-T validation failed. Check validation log for details. sends you to the validation log, and ATCUD rejected the submission. Check error log for details. to the error log. In those cases the cause is not in the message window but in the log the message names.

Two others just ask for patience: Failed to contact ATCUD after %d attempts. Try again later. and ATCUD submission failed. Please try again later. The first tells you how many attempts the module made. In both, what the text says is to try again later.

SAF-T Error Logs list with five records and columns for date, error type, severity, message and resolved
Invoicing › SAF-T Error Logs: five records with date, type, severity and message, and the resolved flag unticked.

Generate, validate and retry: the order the messages set

Some messages tell you which order to work in. No SAF-T file generated. Run generation first. makes it clear that the SAF-T file has to be generated first. Submission can only be retried from error state says a submission can only be retried from error state. And Period start must be before period end requires the period start to come before its end.

If the problem is the file itself, look at SAF-T file must be an XML file and at the export messages (XML export failed: %s, CSV export failed: %s), which carry the detail at the end. For the settings and states each record goes through, see setting up the module, and for menus and scheduled tasks, how it works under the bonnet.

Generate SAF-T Files list with six records showing company, period and state
Invoicing › SAF-T Accounting › Generate SAF-T Files: six records in Draft, Generated, Validated, Validation Failed and Submitted, with file size and transactions at zero.
Walkthrough of the SAF-T annual statistics, SAF-T Error Logs and Generate SAF-T Files lists
From the annual statistics (company, year, total documents, total value and state Draft or Exported) to the error log list and the list of generated SAF-T files.

How FlexigoTech can help

If a message leaves you stuck or you want your configuration reviewed before submitting, FlexigoTech implements Odoo 17, 18, 19 and 20 and builds bespoke connectors and integrations. The module costs €9 per Odoo version on Odoo Apps, a one-off payment excluding VAT, for 17, 18, 19 and 20 (Odoo Apps listing); the FlexigoTech Cloud local service is €29/month or €290/year excluding VAT. You will find all the details on the module page.

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.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.Portugal SAF-T (PT) File Checks: what it covers, what you need first and which Odoo versionWhat Portugal SAF-T (PT) File Checks covers according to its README, what you need before installing it (NIF, ATCUD, email) and which Odoo versions.
Checked in the module's source code (version 20.0) and the linked sources

Sources