{"id":152909,"date":"2022-03-28T19:39:34","date_gmt":"2022-03-28T19:39:34","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/fiscomm-purs-e-fiscalisation\/"},"modified":"2026-06-17T13:16:51","modified_gmt":"2026-06-17T13:16:51","slug":"fiscomm-purs-e-fiscalisation","status":"publish","type":"plugin","link":"https:\/\/ibo.wordpress.org\/plugins\/fiscomm-purs-e-fiscalisation\/","author":20204022,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.4","stable_tag":"1.3.4","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Fiscomm PURS E-Fiscalisation","header_author":"Square One Consulting","header_description":"Allows users to automate Fiscalisation of invoices for the Serbian Tax Authority (PURS). Plugin is intended as interface for connecting to the Fiscomm backend services.","assets_banners_color":"0b3640","last_updated":"2026-06-17 13:16:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/fiscomm.rs","header_author_uri":"https:\/\/fiscomm.rs\/","rating":0,"author_block_rating":0,"active_installs":100,"downloads":7477,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"fiscomm","date":"2022-03-25 16:10:48"},"0.1.2":{"tag":"0.1.2","author":"fiscomm","date":"2022-04-10 23:16:51"},"0.1.3":{"tag":"0.1.3","author":"fiscomm","date":"2022-04-18 15:18:55"},"1.2.0":{"tag":"1.2.0","author":"fiscomm","date":"2026-06-02 12:00:06"},"1.2.1":{"tag":"1.2.1","author":"fiscomm","date":"2026-06-02 19:59:39"},"1.2.2":{"tag":"1.2.2","author":"fiscomm","date":"2026-06-11 13:00:38"},"1.3.0":{"tag":"1.3.0","author":"fiscomm","date":"2026-06-11 15:02:30"},"1.3.2":{"tag":"1.3.2","author":"fiscomm","date":"2026-06-14 18:11:17"},"1.3.3":{"tag":"1.3.3","author":"fiscomm","date":"2026-06-17 11:25:52"},"1.3.4":{"tag":"1.3.4","author":"fiscomm","date":"2026-06-17 13:16:51"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":2699083,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":2699083,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":2699083,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0","0.1.2","0.1.3","1.2.0","1.2.1","1.2.2","1.3.0","1.3.2","1.3.3","1.3.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[184741,265522,146746,286],"plugin_category":[45],"plugin_contributors":[208972],"plugin_business_model":[],"class_list":["post-152909","plugin","type-plugin","status-publish","hentry","plugin_tags-fiskalizacija","plugin_tags-racuni","plugin_tags-srbija","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-fiscomm","plugin_committers-fiscomm"],"banners":{"banner":"https:\/\/ps.w.org\/fiscomm-purs-e-fiscalisation\/assets\/banner-772x250.png?rev=2699083","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fiscomm-purs-e-fiscalisation\/assets\/icon-128x128.png?rev=2699083","icon_2x":"https:\/\/ps.w.org\/fiscomm-purs-e-fiscalisation\/assets\/icon-256x256.png?rev=2699083","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Fiscomm PURS E-Fiscalisation connects your WooCommerce store to the <a href=\"https:\/\/fiscomm.rs\/\">Fiscomm E-Fiscalization API<\/a> and automatically submits fiscal invoices to the Serbian Tax Authority (Poreska Uprava Republike Srbije \u2014 PURS) when orders are completed or refunded.<\/p>\n\n<h4>Key features<\/h4>\n\n<ul>\n<li>Automatic fiscalization on WooCommerce order completion and refund<\/li>\n<li>Support for standard, advance, and proforma invoices<\/li>\n<li>Support for B2B invoices (taxpayer identification number \u2014 PIB)<\/li>\n<li>Configurable buyer ID fields (individual \/ company)<\/li>\n<li>Per-product tax labels with support for variable products<\/li>\n<li>Product SKU prefix \/ suffix support<\/li>\n<li>Training mode for sandbox testing<\/li>\n<li>Detailed fiscalization log per order<\/li>\n<li>Serbian (sr_RS) and English (en_US) translations included<\/li>\n<li>WooCommerce HPOS (High Performance Order Storage) compatible<\/li>\n<\/ul>\n\n<h4>Third-party services<\/h4>\n\n<p>This plugin connects to the <strong>Fiscomm E-Fiscalization API<\/strong> (https:\/\/fiscomm.rs\/) to submit fiscal invoices to the Serbian Tax Authority. By using this plugin you agree to send order data (amounts, tax rates, buyer information) to that service on every fiscalized order.<\/p>\n\n<ul>\n<li>Fiscomm service: https:\/\/fiscomm.rs\/<\/li>\n<li>Fiscomm terms of use: https:\/\/fiscomm.rs\/uslovi-koriscenja\/<\/li>\n<li>Fiscomm privacy policy: https:\/\/fiscomm.rs\/politika-privatnosti\/<\/li>\n<\/ul>\n\n<p>An active Fiscomm API key is required. You can obtain one at https:\/\/fiscomm.rs\/.<\/p>\n\n<h4>Developer extensibility<\/h4>\n\n<p>The plugin exposes documented WordPress action and filter hooks so that developers can customise fiscalization behaviour without modifying plugin files. See <code>docs\/HOOKS_REFERENCE.md<\/code> in the plugin folder for the full reference.<\/p>\n\n<p>Bundled third-party libraries and their licenses are documented in <code>THIRD_PARTY_LICENSES.md<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>fiscomm-purs-e-fiscalisation<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the <strong>Plugins &gt; Add New<\/strong> screen in WordPress.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Make sure WooCommerce is installed and active \u2014 this plugin requires WooCommerce.<\/li>\n<li>Navigate to <strong>WooCommerce &gt; Settings &gt; Fiscomm<\/strong> and enter your Fiscomm API key.<\/li>\n<li>Configure the desired invoice type, tax labels, and other options.<\/li>\n<li>Use <strong>Training Mode<\/strong> to test the integration against the Fiscomm sandbox before going live.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20work%20without%20woocommerce%3F\"><h3>Does this plugin work without WooCommerce?<\/h3><\/dt>\n<dd><p>No. This plugin requires WooCommerce to function. It will not initialise if WooCommerce is not active.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20a%20fiscomm%20api%20key%3F\"><h3>Where do I get a Fiscomm API key?<\/h3><\/dt>\n<dd><p>You can obtain an API key by registering at https:\/\/fiscomm.rs\/.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20refunds%3F\"><h3>Does the plugin support refunds?<\/h3><\/dt>\n<dd><p>Yes. Refund invoices are automatically submitted to PURS when a WooCommerce refund is processed (configurable).<\/p><\/dd>\n<dt id=\"is%20woocommerce%20hpos%20supported%3F\"><h3>Is WooCommerce HPOS supported?<\/h3><\/dt>\n<dd><p>Yes. The plugin is compatible with WooCommerce High Performance Order Storage (HPOS \/ custom order tables).<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20the%20fiscomm%20api%3F\"><h3>What data is sent to the Fiscomm API?<\/h3><\/dt>\n<dd><p>Order amounts, tax rates, and optionally buyer identification data (name, PIB, address) are sent to the Fiscomm API to generate a fiscal invoice. No payment card data is ever transmitted.<\/p><\/dd>\n<dt id=\"can%20i%20test%20without%20submitting%20real%20invoices%3F\"><h3>Can I test without submitting real invoices?<\/h3><\/dt>\n<dd><p>Yes. Enable <strong>Training Mode<\/strong> in the plugin settings to send all invoices to the Fiscomm sandbox environment instead of the live PURS system.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Fixed rounding mode incorrectly rounding line-item amounts to whole dinars instead of 2 decimal places; \"Enable two decimal rounding\" now correctly rounds to 2 decimals as labeled.<\/li>\n<li>Applied rounding mode consistently to refund invoices (previously only applied to normal invoices).<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Fixed items with zero total amount (including shipping) being incorrectly sent to the fiscalization API; they are now skipped before submission.<\/li>\n<li>Fixed items with an empty name being sent to the API; they are now skipped alongside zero-amount items.<\/li>\n<li>Fixed PIB auto-fill not working on order open: buyer ID code (type 10) and value are now correctly populated from the configured PIB meta key when the meta box renders.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Fixed unnecessary \/auth\/verify-api-token HTTP call on every WordPress page load; API key validation is now triggered only on demand (admin verify action, fiscal requests), reducing server load for all connected sites.<\/li>\n<li>Fixed proforma-fiscalized order being incorrectly blocked from further fiscalization (\"Order already fiscalized\"): shared meta keys (_referent_document_number, _referent_document_dt) are no longer written for proforma invoices; invoiceExists() now uses per-type suffixed journal\/URL as the primary signal.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed duplicate order error (ERR_00603) on second fiscalization attempt caused by WordPress meta cache race condition.<\/li>\n<li>Added explicit cache invalidation after order and refund meta save to ensure subsequent invoiceExists() checks always see updated markers.<\/li>\n<li>Cache clearing now works on both HPOS (High-Performance Order Storage) and classic post-based WooCommerce systems.<\/li>\n<li>Added info logging for meta persistence tracking to help diagnose fiscalization issues.<\/li>\n<li>Enhanced invoiceExists() documentation to clarify cache behavior.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Fixed order list fiscalization column to show all actually created documents (proforma, all advance invoices, final invoice, and refund invoices).<\/li>\n<li>Refund invoices are now visually highlighted in red in the orders list for faster identification.<\/li>\n<li>Fixed false proforma display in orders list: proforma is now shown only when proforma URLs\/PDF are present.<\/li>\n<li>Fixed advance finalization request payload: finalize now sends payment entries in finalize format (<code>amount=0<\/code> + <code>advanceAmount<\/code>) to avoid double-payment interpretation while preserving backend finalize logic.<\/li>\n<li>Fixed finalize response parsing when backend returns wrapped payloads (<code>finalReceipt<\/code>), so created final receipts are correctly persisted to order meta.<\/li>\n<li>Advance invoice datetime is now auto-filled and sent only for advance sale flow; other invoice types no longer send <code>dateTimeOfIssue<\/code>.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Added \"Order number under receipt\" setting (Receipt Header\/Footer section): follow the shop setting from the Fiscomm platform (default), always show, or always hide the WooCommerce order number printed below fiscal receipts.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fixed fatal error (\"syntax error, unexpected '|'\") on PHP 7.4 that prevented the plugin from initializing \u2014 the plugin now runs on PHP 7.4 as declared.<\/li>\n<li>Translated all remaining hardcoded admin strings; complete Serbian (Cyrillic) and English translations with updated language files.<\/li>\n<li>Fixed plugin directory listing metadata (tags and contributors) not displaying on WordPress.org.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Added API key info card in plugin settings showing account details fetched from Fiscomm.<\/li>\n<li>Added debug logging for API key verification request and response when debug logging is enabled.<\/li>\n<li>Fixed QR code rendering in fiscalization confirmation emails (restored default renderer).<\/li>\n<li>Fixed double-fiscalization of refunds when multiple refunds exist on the same order.<\/li>\n<li>Fixed advance invoice finalization so a failed meta save cannot trigger a duplicate API call on retry.<\/li>\n<li>Fixed buyer ID fields not being recognized when values contain leading\/trailing whitespace.<\/li>\n<li>Meta box fields on fiscalized orders are now editable so buyer identification can be added before processing a refund.<\/li>\n<li>Added warning notice in the meta box when refund fiscalization is enabled but buyer ID is not set.<\/li>\n<li>Updated WordPress compatibility to 6.8.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Removed third-party CDN loading for admin assets; now uses bundled local assets only.<\/li>\n<li>Aligned plugin version metadata across plugin header, core constant, and readme stable tag.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Added public extensibility hooks for receipt lifecycle and metadata persistence.<\/li>\n<li>Added hook reference and WordPress hook audit documentation.<\/li>\n<li>Improved CI quality gates and strengthened initial test coverage.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added support for default values for all settings<\/li>\n<li>Refactored fiscalization settings and added logging functionality<\/li>\n<li>Removed unused AddSettingsTab trait and related settings tab.<\/li>\n<li>Introduced new system settings section for logging configuration.<\/li>\n<li>Added custom logging functionality to track fiscalization processes.<\/li>\n<li>Updated various methods to handle new logging and settings features.<\/li>\n<li>Enhanced order refund handling with automatic fiscalization on status change.<\/li>\n<li>Added new language files for English and Serbian translations.<\/li>\n<li>Cleaned up deprecated code and improved overall structure.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>\n\n<h4>0.3.22<\/h4>\n\n<ul>\n<li>Call to undefined method WC_Order_Item_Fee::get_product() fix<\/li>\n<\/ul>\n\n<h4>0.3.21<\/h4>\n\n<ul>\n<li>When country is empty, defaults to Serbia<\/li>\n<li>Added more information about fiscalization under Shipping details in order<\/li>\n<\/ul>\n\n<h4>0.3.20<\/h4>\n\n<ul>\n<li>Fixed exclude from fiscalization for variation products<\/li>\n<li>Added new way of using SKU with Product Name (SKU - Product Name)<\/li>\n<\/ul>\n\n<h4>0.3.19<\/h4>\n\n<ul>\n<li>API Key change support with saved settings<\/li>\n<\/ul>\n\n<h4>0.3.18<\/h4>\n\n<ul>\n<li>Advance invoices order warning fix<\/li>\n<\/ul>\n\n<h4>0.3.17<\/h4>\n\n<ul>\n<li>Fix labels not showing per product<\/li>\n<\/ul>\n\n<h4>0.3.16<\/h4>\n\n<ul>\n<li>Product SKU prefix &amp; suffix support<\/li>\n<\/ul>\n\n<h4>0.3.15<\/h4>\n\n<ul>\n<li>Reasons for not fiscalizable orders<\/li>\n<\/ul>\n\n<h4>0.3.14<\/h4>\n\n<ul>\n<li>Option for hiding Tax Label section on Product page<\/li>\n<li>Disable fiscalization for orders outside of Serbia<\/li>\n<li>Synchronized Buyer IDS with documentation<\/li>\n<li>Refund show fix<\/li>\n<\/ul>\n\n<h4>0.3.13<\/h4>\n\n<ul>\n<li>Adjusted timeout for API requests to 30 seconds<\/li>\n<\/ul>\n\n<h4>0.3.12<\/h4>\n\n<ul>\n<li>WooCommerce HPOS compatibility<\/li>\n<li>Tax labels caching<\/li>\n<\/ul>\n\n<h4>0.3.11<\/h4>\n\n<ul>\n<li>Added settings for using product SKU instead of product name in receipts<\/li>\n<\/ul>\n\n<h4>0.3.10<\/h4>\n\n<ul>\n<li>Added number format for rounding on 2 decimals for Shipping<\/li>\n<\/ul>\n\n<h4>0.3.9<\/h4>\n\n<ul>\n<li>Admin notice when Woocommerce is not installed<\/li>\n<li>Fixed buyerId sending without buyerId value<\/li>\n<\/ul>\n\n<h4>0.3.8<\/h4>\n\n<ul>\n<li>Header and Footer text on receipts<\/li>\n<li>Buyer ID is now optional fields for Refunds<\/li>\n<li>Buyer ID is now shown even if only \"Refunds\" are enabled, and not \"PIB\"<\/li>\n<\/ul>\n\n<h4>0.3.7<\/h4>\n\n<ul>\n<li>Fixed get_product returning bool instead of product object<\/li>\n<\/ul>\n\n<h4>0.3.6<\/h4>\n\n<ul>\n<li>Switched GuzzleHttp to wp_remote_post &amp; wp_remote_get for better compatibility<\/li>\n<\/ul>\n\n<h4>0.3.5<\/h4>\n\n<ul>\n<li>Now supports disabling shipping item per payment method<\/li>\n<\/ul>\n\n<h4>0.3.4<\/h4>\n\n<ul>\n<li>Added buyer cost center field in orders page<\/li>\n<\/ul>\n\n<h4>0.3.3<\/h4>\n\n<ul>\n<li>Moved product specific tax labels to advanced tab<\/li>\n<li>Added support for specific tax label for variable products<\/li>\n<\/ul>\n\n<h4>0.3.2<\/h4>\n\n<ul>\n<li>Patched error on finalizing advance invoices (createInvoice method error)<\/li>\n<\/ul>\n\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Removed sessions from the plugin<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added support for advance invoices<\/li>\n<\/ul>\n\n<h4>0.2.12<\/h4>\n\n<ul>\n<li>Fixed bug with woocommerce not saving Sell to specific countries setting<\/li>\n<\/ul>\n\n<h4>0.2.11<\/h4>\n\n<ul>\n<li>Now supports only fee orders if Woocommerce Specific Fees are included in the settings<\/li>\n<\/ul>\n\n<h4>0.2.10<\/h4>\n\n<ul>\n<li>Supports enabling of two decimals rounding in Woocommerce Specific Settings<\/li>\n<\/ul>\n\n<h4>0.2.9<\/h4>\n\n<ul>\n<li>Added support for overriding default\/foreign tax labels for shipping invoice item<\/li>\n<\/ul>\n\n<h4>0.2.8<\/h4>\n\n<ul>\n<li>Added support for adjusting exchange rate for foreign currencies<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Supports advance invoices<\/li>\n<li>Added support for B2B invoices by adding additional Taxpayer Identification Number field.<\/li>\n<li>Separated settings into sections for better readability<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Now supports multiple emails for training invoices<\/li>\n<li>Added exclusive training mode <\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Feature for setting the name of the invoice item for shipping.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Added excluding shipping costs<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Fix for dropdown<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Released: March 4, 2022<\/li>\n<\/ul>","raw_excerpt":"WooCommerce connector for the Fiscomm E-Fiscalization API \u2014 automatically fiscalise Serbian Tax Authority (PURS) invoices on order completion.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/152909","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=152909"}],"author":[{"embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fiscomm"}],"wp:attachment":[{"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=152909"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=152909"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=152909"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=152909"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=152909"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ibo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=152909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}