{"id":269324,"date":"2026-03-13T11:41:50","date_gmt":"2026-03-13T11:41:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/freefactu-toolkit-para-verifactu\/"},"modified":"2026-03-13T11:43:37","modified_gmt":"2026-03-13T11:43:37","slug":"freefactu","status":"publish","type":"plugin","link":"https:\/\/hy.wordpress.org\/plugins\/freefactu\/","author":18479393,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.5.6","stable_tag":"0.5.6","tested":"6.9.4","requires":"5.8","requires_php":"8.2","requires_plugins":null,"header_name":"Freefactu - Toolkit para Verifactu","header_author":"Aleix Pellicer","header_description":"Herramientas t\u00e9cnicas para integrar los requisitos de facturaci\u00f3n Verifactu de la AEAT espa\u00f1ola. Plugin de WordPress con licencia GPLv2 para desarrolladores.","assets_banners_color":"899ccf","last_updated":"2026-03-13 11:43:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/aleixpellicer.com\/freefactu\/","header_author_uri":"https:\/\/github.com\/aleixpellicer\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":147,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5.6":{"tag":"0.5.6","author":"aleixpellicer","date":"2026-03-13 11:43:37"}},"upgrade_notice":{"0.5.6":"<p>Plugin review fixes: explicit nonce\/capability validation, comprehensive external service documentation, file upload sanitization hardening, and DOMPDF template annotations.<\/p>","0.5.5":"<p>Plugin review fixes: library upgrades, comprehensive escaping audit, security hardening, and class name prefixing.<\/p>","0.5.4":"<p>Dependency structure updated to follow WordPress.org reviewer guidelines: scoped vendor in vendor\/ folder, composer.json included.<\/p>","0.5.3":"<p>(upgrade notice pending)<\/p>","0.5.2":"<p>Plugin review fixes: proper WordPress APIs for plugin activation, enhanced security documentation, and complete AEAT endpoint documentation.<\/p>","0.5.1":"<p>Security and compatibility improvements for WordPress.org directory compliance.<\/p>","0.5.0":"<p>Initial public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3481936,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3481936,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3481936,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3481936,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3481936,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3481936,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3481936,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3481936,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3481936,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3481936,"resolution":"6","location":"assets","locale":""}},"screenshots":{"1":"Invoice history panel showing generated VeriFactu records with AEAT submission status","2":"Plugin settings page for configuring business details, certificate upload, and environment selection","3":"Invoice numbering series configuration for managing multiple invoice sequences","4":"Generated PDF invoice with QR verification code and digital signature data","5":"WooCommerce orders list with one-click VeriFactu invoice generation actions","6":"Debug and diagnostics panel with detailed AEAT response logs"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[257667,152125,1764,247447,286],"plugin_category":[45,50],"plugin_contributors":[257668],"plugin_business_model":[],"class_list":["post-269324","plugin","type-plugin","status-publish","hentry","plugin_tags-aeat","plugin_tags-factura","plugin_tags-pdf","plugin_tags-verifactu","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-media","plugin_contributors-aleixpellicer","plugin_committers-aleixpellicer"],"banners":{"banner":"https:\/\/ps.w.org\/freefactu\/assets\/banner-772x250.png?rev=3481936","banner_2x":"https:\/\/ps.w.org\/freefactu\/assets\/banner-1544x500.png?rev=3481936","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/freefactu\/assets\/icon-128x128.png?rev=3481936","icon_2x":"https:\/\/ps.w.org\/freefactu\/assets\/icon-256x256.png?rev=3481936","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/freefactu\/assets\/screenshot-1.png?rev=3481936","caption":"Invoice history panel showing generated VeriFactu records with AEAT submission status"},{"src":"https:\/\/ps.w.org\/freefactu\/assets\/screenshot-2.png?rev=3481936","caption":"Plugin settings page for configuring business details, certificate upload, and environment selection"},{"src":"https:\/\/ps.w.org\/freefactu\/assets\/screenshot-3.png?rev=3481936","caption":"Invoice numbering series configuration for managing multiple invoice sequences"},{"src":"https:\/\/ps.w.org\/freefactu\/assets\/screenshot-4.png?rev=3481936","caption":"Generated PDF invoice with QR verification code and digital signature data"},{"src":"https:\/\/ps.w.org\/freefactu\/assets\/screenshot-5.png?rev=3481936","caption":"WooCommerce orders list with one-click VeriFactu invoice generation actions"},{"src":"https:\/\/ps.w.org\/freefactu\/assets\/screenshot-6.png?rev=3481936","caption":"Debug and diagnostics panel with detailed AEAT response logs"}],"raw_content":"<!--section=description-->\n<p><strong>Freefactu<\/strong> is a free, open-source helper plugin for WooCommerce that provides technical tools to assist with invoicing workflows related to Spain\u2019s AEAT VeriFactu framework.<\/p>\n\n<p>The plugin offers functionality to generate digitally signed electronic invoice data, manage invoice records, and interact with AEAT environments based on publicly available technical specifications.<\/p>\n\n<p>Freefactu is <strong>not certified<\/strong>, <strong>not approved<\/strong>, and <strong>not endorsed<\/strong> by the Agencia Tributaria (AEAT). The use of this plugin does not guarantee compliance with any legal, tax, or regulatory obligations. Users are solely responsible for ensuring that their invoicing practices comply with applicable laws and regulations.<\/p>\n\n<p>This plugin does not constitute legal, tax, or accounting advice.<\/p>\n\n<h3>Key Features<\/h3>\n\n<ul>\n<li>Technical tools to generate electronic invoice data based on VeriFactu specifications<\/li>\n<li>Digital signature support using user-provided PKCS#12 certificates (.p12 \/ .pfx)<\/li>\n<li>QR code generation derived from invoice data for verification purposes<\/li>\n<li>Hash chaining mechanisms between invoice records<\/li>\n<li>Configurable invoice numbering series<\/li>\n<li>Support for corrective (rectificativa) invoice data structures (R1\u2013R5)<\/li>\n<li>Generation of draft \u201cDeclaraci\u00f3n Responsable\u201d documents and SIF archives<\/li>\n<li>Test and production environment configuration options<\/li>\n<li>Export of invoice-related data to CSV or XML formats<\/li>\n<li>Local PDF rendering of invoice representations<\/li>\n<li>Error reporting and retry workflows based on AEAT responses<\/li>\n<li>Snapshot-based storage of invoice data at creation time<\/li>\n<\/ul>\n\n<h3>System Requirements<\/h3>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>WooCommerce 6.0 or higher<\/li>\n<li>PHP 8.2 or higher<\/li>\n<li>PHP Extensions:\n\n<ul>\n<li>OpenSSL (required)<\/li>\n<li>DOM (required)<\/li>\n<li>GD or Imagick (recommended)<\/li>\n<li>ZipArchive (recommended; fallback to PclZip)<\/li>\n<\/ul><\/li>\n<li>Spanish digital certificate in .p12 or .pfx format<\/li>\n<li>HTTPS-enabled website (required for AEAT communication)<\/li>\n<\/ul>\n\n<h3>How It Works<\/h3>\n\n<ol>\n<li>Configure business identification details (name, NIF)<\/li>\n<li>Upload a valid digital certificate provided by the user<\/li>\n<li>Configure invoice numbering series<\/li>\n<li>Generate draft SIF documentation if required<\/li>\n<li>Generate invoice data from WooCommerce orders<\/li>\n<li>Optionally transmit invoice data to AEAT environments<\/li>\n<\/ol>\n\n<p>All steps require correct configuration and validation by the user.<\/p>\n\n<h3>VeriFactu Framework Reference<\/h3>\n\n<p>This plugin is developed with reference to publicly available technical documentation, including:<\/p>\n\n<ul>\n<li>Real Decreto 1007\/2023<\/li>\n<li>Orden HFP\/1177\/2024<\/li>\n<\/ul>\n\n<p>Implementation of these specifications does not imply certification, validation, or approval by the Agencia Tributaria (AEAT). Interpretation of regulatory requirements and compliance decisions remain the responsibility of the user.<\/p>\n\n<h3>AEAT Communication<\/h3>\n\n<p>When enabled and configured by the user, the plugin may transmit invoice-related data directly from the user\u2019s WordPress installation to AEAT servers.<\/p>\n\n<p>The plugin developer does not monitor, intercept, validate, or store transmitted data. Users are solely responsible for:<\/p>\n\n<ul>\n<li>Accuracy and legality of submitted information<\/li>\n<li>Maintaining valid digital certificates<\/li>\n<li>Selecting the appropriate AEAT environment<\/li>\n<li>Any fiscal, legal, or administrative consequences resulting from submitted data<\/li>\n<\/ul>\n\n<h3>Data Handling<\/h3>\n\n<p>All invoice data is stored locally in the user\u2019s WordPress database. No data is collected, processed, or transmitted by the plugin developer.<\/p>\n\n<p>Communication, when enabled, occurs directly between the user\u2019s server and AEAT servers.<\/p>\n\n<h3>Legal Disclaimer<\/h3>\n\n<p>This plugin is provided \u201cas is\u201d, without warranty of any kind, express or implied, including but not limited to warranties of correctness, fitness for a particular purpose, legal compliance, or uninterrupted operation.<\/p>\n\n<p>The authors and contributors shall not be liable for any damages, penalties, fines, data loss, business interruption, or legal consequences arising from the use or misuse of this software.<\/p>\n\n<p>Use of this plugin is entirely at your own risk.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following external services when configured and enabled by the user:<\/p>\n\n<h4>AEAT VeriFactu API (Agencia Tributaria - Spain)<\/h4>\n\n<p>This plugin sends invoice data to Spain's Tax Agency (AEAT) for electronic invoice validation under the VeriFactu system.<\/p>\n\n<ul>\n<li><strong>What the service is<\/strong>: Official Spanish Tax Agency electronic invoicing validation system (AEAT - Agencia Estatal de Administraci\u00f3n Tributaria)<\/li>\n<li><strong>What it is used for<\/strong>: Submitting signed invoice records for tax compliance under Spain's VeriFactu regulations<\/li>\n<li><strong>Data sent<\/strong>: Invoice number, date, amounts, tax breakdown, company NIF, customer NIF (if provided), cryptographic hash, digital signature, and invoice chain reference<\/li>\n<li><strong>When data is sent<\/strong>: Each time an invoice is generated and the user has enabled AEAT submission in the plugin settings<\/li>\n<li><strong>Service provider<\/strong>: Agencia Estatal de Administraci\u00f3n Tributaria (AEAT) - Spanish Tax Agency<\/li>\n<li><strong>Terms of Service<\/strong>: <a href=\"https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales.html\">https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales.html<\/a><\/li>\n<li><strong>Privacy Policy<\/strong>: <a href=\"https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales\/privacidad.html\">https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales\/privacidad.html<\/a><\/li>\n<\/ul>\n\n<p><strong>API Endpoints (all operated by AEAT, all subject to the Terms of Service and Privacy Policy linked above):<\/strong><\/p>\n\n<ul>\n<li><p><strong>Test Environment<\/strong> (for development\/testing \u2014 domain: <code>prewww1.aeat.es<\/code> and <code>prewww2.aeat.es<\/code>):<\/p>\n\n<ul>\n<li>SOAP VeriFactu endpoint: <code>https:\/\/prewww1.aeat.es\/wlpl\/TIKE-CONT\/ws\/SistemaFacturacion\/VerifactuSOAP<\/code><\/li>\n<li>QR Verification endpoint: <code>https:\/\/prewww2.aeat.es\/wlpl\/TIKE-CONT\/ValidarQR<\/code><\/li>\n<\/ul><\/li>\n<li><p><strong>Production Environment<\/strong> (for live submissions \u2014 domain: <code>www3.agenciatributaria.gob.com.es<\/code> and <code>www2.agenciatributaria.gob.es<\/code>):<\/p>\n\n<ul>\n<li>SOAP VeriFactu endpoint: <code>https:\/\/www3.agenciatributaria.gob.com.es\/wlpl\/TIKE-CONT\/ws\/SistemaFacturacion\/VerifactuSOAP<\/code><\/li>\n<li>QR Verification endpoint: <code>https:\/\/www2.agenciatributaria.gob.es\/wlpl\/TIKE-CONT\/ValidarQR<\/code><\/li>\n<\/ul><\/li>\n<\/ul>\n\n<p>All four domains above (<code>prewww1.aeat.es<\/code>, <code>prewww2.aeat.es<\/code>, <code>www3.agenciatributaria.gob.com.es<\/code>, <code>www2.agenciatributaria.gob.es<\/code>) are operated by the Agencia Tributaria and are subject to their Terms of Service (<a href=\"https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales.html\">https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales.html<\/a>) and Privacy Policy (<a href=\"https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales\/privacidad.html\">https:\/\/sede.agenciatributaria.gob.es\/Sede\/avisos-legales\/privacidad.html<\/a>).<\/p>\n\n<h4>QR Code Generation<\/h4>\n\n<p>QR codes are generated <strong>locally<\/strong> using the Endroid QR Code library bundled with the plugin. No external API calls are made for QR generation. The QR codes contain verification URLs pointing to AEAT's ValidarQR service (documented above).<\/p>\n\n<h3>Open Source Libraries<\/h3>\n\n<ul>\n<li>DOMPDF (LGPL-2.1)<\/li>\n<li>Endroid QR Code (MIT)<\/li>\n<li>Verifactu-PHP (MIT)<\/li>\n<\/ul>\n\n<h3>Trademark Notice<\/h3>\n\n<p>\u201cVeriFactu\u201d and \u201cAEAT\u201d are trademarks of the Agencia Estatal de Administraci\u00f3n Tributaria. This plugin is an independent implementation and is not affiliated with or endorsed by AEAT.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>freefactu<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin via the WordPress Plugins menu<\/li>\n<li>Access the plugin via WooCommerce settings<\/li>\n<li>Configure required technical and business parameters<\/li>\n<li>Test configuration in AEAT test environment before any production use<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20plugin%20certified%20by%20aeat%3F\"><h3>Is this plugin certified by AEAT?<\/h3><\/dt>\n<dd><p>No. This plugin is not certified, approved, or endorsed by AEAT.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20guarantee%20legal%20or%20tax%20compliance%3F\"><h3>Does this plugin guarantee legal or tax compliance?<\/h3><\/dt>\n<dd><p>No. Compliance depends entirely on correct configuration, usage, and legal interpretation by the user.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20a%20replacement%20for%20professional%20tax%20advice%3F\"><h3>Is this plugin a replacement for professional tax advice?<\/h3><\/dt>\n<dd><p>No. This plugin is a technical tool only.<\/p><\/dd>\n<dt id=\"who%20is%20responsible%20if%20aeat%20rejects%20my%20submission%3F\"><h3>Who is responsible if AEAT rejects my submission?<\/h3><\/dt>\n<dd><p>The user is solely responsible for submitted data and resulting consequences.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5.6<\/h4>\n\n<ul>\n<li>Security: Added explicit nonce verification and capability check at the top of sanitize_settings()<\/li>\n<li>Security: Added sanitize_text_field() to $_FILES tmp_name fields in both certificate upload paths<\/li>\n<li>Security: Added sanitize_text_field() and wp_unslash() to $_POST['option_page'] access<\/li>\n<li>Documentation: Updated External Services section with exact endpoint URLs matching source code<\/li>\n<li>Documentation: Listed all four AEAT domains (prewww1, prewww2, www3, www2) with explicit Terms\/Privacy links<\/li>\n<li>Documentation: Added phpcs:ignore comments to DOMPDF PDF templates explaining inline CSS requirement<\/li>\n<li>Code Quality: Removed redundant nonce check in certificate upload block (now validated at function entry)<\/li>\n<\/ul>\n\n<h4>0.5.5<\/h4>\n\n<ul>\n<li>Security: Added esc_attr() escaping to all boolean ternaries in HTML class\/style attributes<\/li>\n<li>Security: Added explicit nonce and capability checks to settings certificate upload<\/li>\n<li>Security: Added sanitize_file_name() and is_uploaded_file() to certificate uploads<\/li>\n<li>Updated: endroid\/qr-code from v5.1.0 to v6.0.9 (major version migration)<\/li>\n<li>Updated: dompdf\/dompdf from 3.1.4 to 3.1.5<\/li>\n<li>Updated: josemmo\/verifactu-php from 0.3.3 to 0.3.4<\/li>\n<li>Code Quality: Renamed 8 generic Aeat_* classes to Freefactu_Aeat_* prefix<\/li>\n<li>Code Quality: Comprehensive output escaping audit across all templates<\/li>\n<\/ul>\n\n<h4>0.5.4<\/h4>\n\n<ul>\n<li>Dependency structure: Moved scoped dependencies from deps\/ to vendor\/ per WordPress.org reviewer guidelines<\/li>\n<li>Distribution: composer.json now included in plugin submission<\/li>\n<li>Build: Updated PHP-Scoper output to target vendor\/ directory<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>(changelog pending)<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Security: Replaced direct active_plugins manipulation with WordPress activate_plugin\/deactivate_plugins API<\/li>\n<li>Security: Added nonce verification to ajax_get_declaration handler<\/li>\n<li>Documentation: Enhanced External Services section with complete AEAT endpoint documentation<\/li>\n<li>Documentation: Added Terms of Service and Privacy Policy links for AEAT<\/li>\n<li>Documentation: Improved PHPCS ignore comments with security explanations<\/li>\n<li>Code Quality: Enhanced docblocks for output escaping safety documentation<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Security: Improved input sanitization and output escaping<\/li>\n<li>Security: Replaced move_uploaded_file() with wp_handle_upload()<\/li>\n<li>Security: Secured uninstall.php with proper capability checks<\/li>\n<li>Improvement: Converted inline scripts\/styles to wp_enqueue functions<\/li>\n<li>Improvement: Added direct file access protection<\/li>\n<li>Documentation: Added external services disclosure in readme.txt<\/li>\n<li>Updated: DOMPDF library to latest stable version<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Initial public release<\/li>\n<li>Technical invoicing tools related to VeriFactu specifications<\/li>\n<li>Digital signature support<\/li>\n<li>Invoice data export<\/li>\n<li>AEAT test and production environment configuration<\/li>\n<li>Snapshot-based invoice storage<\/li>\n<li>Error reporting workflows<\/li>\n<\/ul>","raw_excerpt":"Free, open-source helper plugin providing technical tools related to AEAT VeriFactu invoicing workflows. Not certified software.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/269324","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=269324"}],"author":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/aleixpellicer"}],"wp:attachment":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=269324"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=269324"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=269324"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=269324"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=269324"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=269324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}