OdooWiki OCA HUB

Portugal - Accounting (Certification)

l10n_pt_certification folder_open OCA/l10n-portugal open_in_new
Accounting/Localizations/Account Charts License: LGPL-3

Portugal - Accounting (Certification)

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

This module makes Odoo compliant with Portuguese invoicing certification rules: it assigns official AT document series, secures posted documents with a digital signature and QR code, and adds cancellation and reprint controls.

For Portuguese companies, this module enforces the legal requirements of the Portuguese tax authority (AT) on sales invoices, receipts, credit notes and inbound payment receipts.

  • You must create AT Series (with a name, document types, prefixes and AT validation codes) and link them to sales or payment journals. Each document gets an AT Series, a unique document number and an ATCUD code.
  • Once a document is posted, it is digitally signed (hash) and gets a QR code. After signing, key data cannot be changed and the document cannot be reset to draft.
  • The module blocks invoices without VAT, negative or zero lines, and requires an exemption reason on zero-rated taxes. Discounts are limited to 0–100% and a global discount is combined with line discounts.
  • Cancelling a document requires a reason, and reprinting a document also requires a reason. Credit notes must have a reason and cannot exceed the original invoice amounts.
  • It adds warnings for future-dated documents and prevents issuing earlier-dated documents in the same series after a future-dated one.
  • It also adds a hash integrity report and a payment mechanism field on payment methods.

Depends on

Models and fields (21)
  • account.tax · extends an existing modell10n_pt_tax_exemption_reason (Tax Exemption Reason)
  • res.company · extends an existing modell10n_pt_region_code (Region Code)
  • res.partner · extends an existing model
  • account.move · extends an existing modell10n_pt_atcud (Portuguese ATCUD), l10n_pt_hashed_on (Hashed On), l10n_pt_qr_code_str (Portuguese QR Code), l10n_pt_at_series_id (AT Series), l10n_pt_cancel_reason (Reason for Cancellation), l10n_pt_document_type (Portuguese Document Type), l10n_pt_print_version (Version of Printed Document), l10n_pt_document_number (Unique Document Number), l10n_pt_global_discount (Global Discount %), l10n_pt_at_series_line_id (Document-specific AT Series), l10n_pt_inalterable_hash_short (Short version of the Portuguese hash), l10n_pt_inalterable_hash_version (Portuguese hash version), l10n_pt_show_future_date_warning
  • l10n_pt.cancel · new modell10n_pt_cancel_reason (Cancel Reason)
  • account.payment · extends an existing modell10n_pt_atcud (Portuguese ATCUD), l10n_pt_at_series_id (AT Series), l10n_pt_cancel_reason (Reason for Cancellation), l10n_pt_document_type (Portuguese Document Type), l10n_pt_print_version (Version of Printed Document), l10n_pt_document_number (Unique Document Number), l10n_pt_at_series_line_id (Document-specific AT Series), l10n_pt_show_future_date_warning
  • product.product · extends an existing model
  • product.template · extends an existing model
  • account.move.line · extends an existing modell10n_pt_line_discount (Line Discount)
  • account.move.send · extends an existing model
  • account.tax.group · extends an existing modell10n_pt_tax_region (Region (PT)), l10n_pt_tax_category (Tax Category (PT))
  • ir.actions.report · extends an existing model
  • l10n_pt.at.series · new modelname (Name of the Series), active, date_end (End Date), company_id, sale_journal_id (Sales Journal), training_series (Training Series), at_series_line_ids (Document Types), payment_journal_id (Payment Journal), company_exclusive_series (Exclusive Series)
  • l10n.pt.attachment · new modelres_id (Record id), original (Original Print), cancelled (Canceled), res_model (Model), company_id, report_name (Report), report_binary (File Binary)
  • account.move.reversal · extends an existing model
  • account.chart.template · extends an existing model
  • l10n_pt.at.series.line · new modeltype (Document Type), prefix (Document-specific Series Prefix), at_code (AT Validation Code), type_name (Type Name), company_id, at_series_id (AT Series), at_series_active, document_identifier (Document Identifier), company_exclusive_series
  • l10n_pt.reprint.reason · new modelreason (Reason for reprinting the document)
  • account.move.send.wizard · extends an existing model
  • account.payment.register · extends an existing modell10n_pt_at_series_id (AT Series), available_l10n_pt_at_series_ids
  • account.payment.method.line · extends an existing modell10n_pt_payment_mechanism (Payment Mechanism)

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 1 confirmed, 8 with no information of 9 versions.

Sources · Odoo 18.0

Confirmed on 2026-11-03 in branch 18.0 of OCA/l10n-portugal.

terminal Installation and usage

No verified information

Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.