{"id":245346,"date":"2025-08-18T13:48:32","date_gmt":"2025-08-18T13:48:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/facturacion-electronica-vessi-cl\/"},"modified":"2026-09-17T19:06:52","modified_gmt":"2026-09-17T19:06:52","slug":"facturacion-electronica-vessi-cl","status":"publish","type":"plugin","link":"https:\/\/ru.wordpress.org\/plugins\/facturacion-electronica-vessi-cl\/","author":23341691,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.8","stable_tag":"1.0.8","tested":"6.8.9","requires":"5.0","requires_php":"8.0","requires_plugins":null,"header_name":"Vessi.cl Electronic Invoicing","header_author":"Vessi.cl","header_description":"Automatically issues electronic invoices and receipts integrated with Vessi.cl for WooCommerce.","assets_banners_color":"","last_updated":"2026-09-17 19:06:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/vessi.cl\/facturacion-electronica-vessi-cl","header_author_uri":"https:\/\/vessi.cl","rating":0,"author_block_rating":0,"active_installs":0,"downloads":1423,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"fulldominios","date":"2025-08-18 13:55:53","revision":3346464},"1.0.1":{"tag":"1.0.1","author":"fulldominios","date":"2025-08-18 16:58:45","revision":3346566},"1.0.2":{"tag":"1.0.2","author":"fulldominios","date":"2025-08-18 18:15:58","revision":3346607},"1.0.3":{"tag":"1.0.3","author":"fulldominios","date":"2026-09-16 16:32:49","revision":3698994},"1.0.4":{"tag":"1.0.4","author":"fulldominios","date":"2026-09-16 18:48:57","revision":3699143},"1.0.5":{"tag":"1.0.5","author":"fulldominios","date":"2026-09-17 02:53:18","revision":3699458},"1.0.6":{"tag":"1.0.6","author":"fulldominios","date":"2026-09-17 02:53:18","revision":3699458},"1.0.7":{"tag":"1.0.7","author":"fulldominios","date":"2026-09-17 15:02:11","revision":3700485},"1.0.8":{"tag":"1.0.8","author":"fulldominios","date":"2026-09-17 19:06:52","revision":3700845}},"upgrade_notice":{"1.0.8":"<p>Important. Customers who asked for an invoice could silently receive a receipt, and invoice details were never validated on the server.<\/p>","1.0.7":"<p>Recommended. Invoicing details can now be corrected from the order screen; before, an order that arrived without a customer tax ID could never be invoiced.<\/p>","1.0.6":"<p>Required for shops on the classic checkout: the plugin did not work there at all. No change in behaviour for shops on the block checkout.<\/p>","1.0.5":"<p>Recommended. Invoices with no valid customer RUT were issued to a generic one, documents left out shipping and fees, API credentials could reach the error log, and the plugin blocked High-Performance Order Storage.<\/p>","1.0.4":"<p>Important. Earlier versions issued tax documents for more than the customer paid -- 19% high on receipts, 41.6% on invoices -- and issued every invoice to RUT 11111111-1.<\/p>","1.0.3":"<p>Required. Earlier versions could not issue invoices or receipts at all: every attempt ended in an error in the browser. Upgrading is the only fix.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[19289,195908,26349,246472,286],"plugin_category":[45],"plugin_contributors":[246473],"plugin_business_model":[],"class_list":["post-245346","plugin","type-plugin","status-publish","hentry","plugin_tags-chile","plugin_tags-electronic-invoice","plugin_tags-receipt","plugin_tags-vessi","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-fulldominios","plugin_committers-fulldominios"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/facturacion-electronica-vessi-cl.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>This plugin allows you to automatically generate and send electronic invoices and receipts using the Vessi.cl API from WooCommerce. Customers can choose the type of document (invoice or receipt) during the checkout process.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li>Integration with Vessi.cl API<\/li>\n<li>Automatic issuance upon payment completion<\/li>\n<li>Custom data capture at checkout<\/li>\n<li>Support for Chilean electronic invoices and receipts<\/li>\n<li>Easy configuration from the admin panel<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin integrates with an external service to generate and send Chilean Electronic Tax Documents (DTE).<\/p>\n\n<p><strong>Service Name:<\/strong> Vessi.cl \u2013 Electronic Invoicing API<br \/>\n<strong>Service Type:<\/strong> Private REST API endpoint for the generation and submission of electronic tax documents to the Chilean Internal Revenue Service (SII).<\/p>\n\n<p><strong>Data Sent:<\/strong><br \/>\nDepending on the selected document type (invoice or receipt), the following information is sent to the Vessi.cl API:\n- Emitter data (provided in the plugin settings).\n- Customer data:\n  - RUT\n  - Legal name \/ full name\n  - Business activity (giro)\n  - Address\n  - Municipality (comuna)\n  - Region\n  - Email address\n- Order details:\n  - Product names, quantities, and prices\n  - Net amounts, VAT, and totals\n- WooCommerce order reference data (order ID, date).<\/p>\n\n<p><strong>When Data Is Sent:<\/strong><br \/>\n- Automatically when a WooCommerce order is marked as paid (<code>woocommerce_payment_complete<\/code>), if the \"Auto-issue document\" option is enabled in the plugin settings.<br \/>\n- Manually, when the admin triggers the issuance from the plugin\u2019s interface.<\/p>\n\n<p><strong>Purpose of Data Transfer:<\/strong><br \/>\n- To generate a valid Electronic Tax Document (DTE) and register it with the Chilean Internal Revenue Service (SII) in compliance with local tax regulations.<\/p>\n\n<p><strong>Service Terms and Privacy Policy:<\/strong><br \/>\n- Vessi.cl Terms and Conditions: https:\/\/vessi.cl\/terminos<br \/>\n- Vessi.cl Privacy Policy: https:\/\/vessi.cl\/privacidad<br \/>\n<em>(If you operate an intermediate endpoint between your plugin and Vessi.cl, you must publish and link to your own Terms and Privacy Policy on your domain.)<\/em><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the \u201cPlugins\u201d menu in WordPress.<\/li>\n<li>Go to <strong>Invoicing &gt; Settings<\/strong> and complete the required fields.<\/li>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20vessi.cl%20account%3F\"><h3>Do I need a Vessi.cl account?<\/h3><\/dt>\n<dd><p>Yes, you need an active account with valid credentials (Access Key, Secret Key, and emitter RUT).<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20work%20outside%20chile%3F\"><h3>Does this plugin work outside Chile?<\/h3><\/dt>\n<dd><p>No, it is designed specifically for Chilean electronic invoicing using Vessi.cl.<\/p><\/dd>\n<dt id=\"where%20can%20i%20configure%20the%20invoicing%20data%3F\"><h3>Where can I configure the invoicing data?<\/h3><\/dt>\n<dd><p>In the WordPress admin menu: <strong>Invoicing &gt; Settings<\/strong>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Fixed: a customer who chose Invoice could end up with a receipt instead, without being told. The choice was only recorded once they interacted with the invoice fields, and any order whose invoice details had not reached the session was silently rewritten as a receipt with those fields deleted. The choice is now recorded as soon as it is made, and an order that asks for an invoice stays an invoice.<\/li>\n<li>Added: the invoice details are now validated on the server, on both the block and the classic checkout. Until now the only check was a browser alert that did not stop anything, so an order could be placed asking for an invoice with no tax ID at all. Incomplete details now block the order with a message naming the missing fields.<\/li>\n<li>Added: when details still arrive incomplete, a note on the order tells the shop exactly what is missing and where to complete it.<\/li>\n<li>Fixed: the plugin's own scripts and styles were served with fixed version numbers that never changed, so a returning visitor's browser kept using its cached copy after an update. They now carry the plugin version.<\/li>\n<li>Fixed: a receipt no longer forwards an invalid tax ID. It falls back to the generic consumer tax ID and says so on the order.<\/li>\n<li>Fixed: issuing an invoice twice is now refused, as it already was for receipts.<\/li>\n<li>Fixed: with an empty tax ID the checkout said the tax ID was invalid instead of asking for the missing fields.<\/li>\n<li>Removed: dead code -- a branch that never ran because it tested for the wrong order status, and a user meta value nothing ever read.<\/li>\n<li>Fixed: settings values are no longer escaped twice, which could corrupt a stored value containing certain characters.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Added: the invoicing details -- tax ID (RUT), legal name, business activity, address, email, municipality and region -- and the document type can now be edited from the order screen, while no document has been issued. Until now they could only be captured at checkout, so an order that arrived without them could never be invoiced at all: the note left by a failed issuance asked the shop to collect the data from the customer, with nowhere to enter it.<\/li>\n<li>Added: a tax ID entered in the admin is validated with the same check-digit test used at issuance. An invalid one is not saved and the reason is shown.<\/li>\n<li>Once a document has been issued the details become read-only. Changing them afterwards would not change the document already registered with the tax authority.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed: the plugin did nothing at all on the classic (shortcode) checkout. The document type selector was never inserted, so customers could not request an invoice, and neither the document type nor the invoice details were ever saved to the order -- leaving it impossible to issue. The selector now has a server-side anchor on the classic checkout, and the order data is saved there through the same code path used by the block checkout.<\/li>\n<li>Fixed: when the selector had nowhere to be inserted, the script retried on every animation frame forever -- around 60 times a second, for as long as the checkout page stayed open. The retry is now bounded.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed: an invoice for an order with no valid receptor tax ID (RUT) was issued to a generic one, producing a tax document of no use to the recipient. Nothing is issued now; instead a private note is added to the order so the shop can contact the customer, collect the data and issue it afterwards. The RUT check digit is validated on the server, not only in the browser.<\/li>\n<li>Fixed: shipping costs and fees were left out of the document, so any order with a delivery charge was invoiced for less than the customer paid.<\/li>\n<li>Security: API credentials are no longer passed as function arguments. PHP records call arguments in stack traces, so any fatal error in the signing path wrote them (truncated) to the site's error log. They are now read inside the signing function.<\/li>\n<li>Added: HPOS compatibility is now declared, and order metadata is written only through the WooCommerce order API. WooCommerce blocks High-Performance Order Storage while an undeclared plugin is active, and the legacy post-meta writes created a second, divergent copy of the data.<\/li>\n<li>Removed: a leftover <code>emular_webpay<\/code> debug hook that force-completed payment on an order from a URL parameter.<\/li>\n<li>Added: orders with no document type recorded -- created manually, imported, or placed before the plugin was installed -- can now be issued a receipt. Previously the sales list showed no button at all and there was no way to issue them.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed: every document was issued for more than the customer paid. Line prices were multiplied by 1.19 regardless of the store's tax configuration and of the document type. On a receipt the total came out 19% high; on an invoice 41.6% high, because for that document type the API adds VAT on top of the price it receives. Prices now come from what the customer actually paid, after discounts, converted per document type and rounded to whole pesos.<\/li>\n<li>Fixed: invoices were always issued to RUT 11111111-1. The customer's RUT captured at checkout is now used.<\/li>\n<li>Fixed: issuing an invoice also overwrote the receipt metadata (folio, PDF URL, base64) with the invoice's values, which corrupted the sales list and the \"already issued\" check.<\/li>\n<li>Fixed: a line item with quantity 0 caused a division by zero.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed: no document could be issued at all. The file that builds the API request was stored in a non-UTF-8 encoding, so <code>json_encode()<\/code> returned <code>false<\/code> and an invalid request body was sent. The result was a PHP fatal error and a misleading browser message (\"JSON.parse: unexpected character\" or \"Unexpected end of JSON input\"). Every installation was affected; this is the reason to upgrade.<\/li>\n<li>Fixed: the plugin header reported <code>1.0.0<\/code> regardless of the version actually released, so WordPress showed the wrong version and update checks were unreliable.<\/li>\n<li>Removed: a stale, unused duplicate of <code>assets\/js\/checkout.js<\/code> that shipped inside the package. It was never loaded, but it misled anyone editing the plugin.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with full integration to Vessi.cl<\/li>\n<\/ul>","raw_excerpt":"Automatically issue and send Chilean electronic invoices and receipts from WooCommerce via Vessi.cl.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/245346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=245346"}],"author":[{"embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fulldominios"}],"wp:attachment":[{"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=245346"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=245346"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=245346"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=245346"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=245346"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ru.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=245346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}