{"id":263957,"date":"2026-01-02T22:59:28","date_gmt":"2026-01-02T22:59:28","guid":{"rendered":"https:\/\/es.wordpress.org\/plugins\/pfacturas-facturacion-electronica-en-uruguay-for-woocommerce\/"},"modified":"2026-05-24T23:29:02","modified_gmt":"2026-05-24T23:29:02","slug":"pfacturas-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ja.wordpress.org\/plugins\/pfacturas-for-woocommerce\/","author":23405526,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1.1","stable_tag":"1.2.1.1","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"pFacturas for WooCommerce","header_author":"PuntoExe Consultores","header_description":"Electronic invoicing integration for Uruguay DGI compliance","assets_banners_color":"182216","last_updated":"2026-05-24 23:29:02","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/efactura.puntoexe.com.uy\/facturaci%C3%B3n-electr%C3%B3nica\/woocommerce-integrado","header_author_uri":"https:\/\/www.puntoexe.com.uy","rating":5,"author_block_rating":0,"active_installs":0,"downloads":230,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.27.63":{"tag":"1.0.27.63","author":"puntoexeconsultores","date":"2026-01-02 23:07:36"},"1.2.1.0":{"tag":"1.2.1.0","author":"puntoexeconsultores","date":"2026-05-24 20:06:06"},"1.2.1.1":{"tag":"1.2.1.1","author":"puntoexeconsultores","date":"2026-05-24 23:29:02"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3431352,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3431338,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3431338,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3431352,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.27.63","1.2.1.0","1.2.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3431338,"resolution":"1","location":"assets","locale":"","width":1905,"height":954},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3431338,"resolution":"2","location":"assets","locale":"","width":1903,"height":948},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3431338,"resolution":"3","location":"assets","locale":"","width":1901,"height":951},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3431338,"resolution":"4","location":"assets","locale":"","width":1904,"height":950},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3431338,"resolution":"5","location":"assets","locale":"","width":1902,"height":953}},"screenshots":[]},"plugin_section":[],"plugin_tags":[253199,253198,212280,54558,286],"plugin_category":[45],"plugin_contributors":[253200],"plugin_business_model":[],"class_list":["post-263957","plugin","type-plugin","status-publish","hentry","plugin_tags-cfe","plugin_tags-dgi","plugin_tags-facturacion-electronica","plugin_tags-uruguay","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-puntoexeconsultores","plugin_committers-puntoexeconsultores"],"banners":{"banner":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/banner-772x250.png?rev=3431352","banner_2x":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/banner-1544x500.png?rev=3431338","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/icon-128x128.png?rev=3431352","icon_2x":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/icon-256x256.png?rev=3431338","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/screenshot-1.png?rev=3431338","caption":""},{"src":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/screenshot-2.png?rev=3431338","caption":""},{"src":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/screenshot-3.png?rev=3431338","caption":""},{"src":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/screenshot-4.png?rev=3431338","caption":""},{"src":"https:\/\/ps.w.org\/pfacturas-for-woocommerce\/assets\/screenshot-5.png?rev=3431338","caption":""}],"raw_content":"<!--section=description-->\n<p>pFacturas es el plugin oficial para integrar la plataforma de facturaci\u00f3n electr\u00f3nica pFacturas con WooCommerce en Uruguay. Permite la emisi\u00f3n autom\u00e1tica de Comprobantes Fiscales Electr\u00f3nicos (CFE) cumpliendo con las normativas de la Direcci\u00f3n General Impositiva (DGI) de Uruguay.<\/p>\n\n<p>[youtube https:\/\/www.youtube.com\/watch?v=6UlfmUef0I4]<\/p>\n\n<h4>Caracter\u00edsticas principales<\/h4>\n\n<ul>\n<li><strong>Emisi\u00f3n autom\u00e1tica de CFE:<\/strong> Genera autom\u00e1ticamente e-Ticket, e-Factura y Notas de Cr\u00e9dito al procesar pedidos<\/li>\n<li><strong>Cumplimiento DGI:<\/strong> 100% conforme a las especificaciones t\u00e9cnicas de DGI Uruguay<\/li>\n<li><strong>M\u00faltiples ambientes:<\/strong> Soporte para Demo, Testing y Producci\u00f3n<\/li>\n<li><strong>Facturaci\u00f3n con\/sin RUT:<\/strong> Factura tanto a consumidores finales como a empresas<\/li>\n<li><strong>Validaci\u00f3n en tiempo real:<\/strong> Validaci\u00f3n de RUT uruguayo con d\u00edgito verificador<\/li>\n<li><strong>Env\u00edo autom\u00e1tico de PDF:<\/strong> El cliente recibe el comprobante fiscal por email<\/li>\n<li><strong>Compatible con WooCommerce Blocks:<\/strong> Funciona con el nuevo checkout de WooCommerce<\/li>\n<li><strong>Logs detallados:<\/strong> Sistema de logging para depuraci\u00f3n y auditor\u00eda<\/li>\n<li><strong>Configuraci\u00f3n flexible:<\/strong> M\u00faltiples opciones para adaptar el plugin a tus necesidades<\/li>\n<\/ul>\n\n<h4>Requisitos<\/h4>\n\n<ul>\n<li>Cuenta activa en pFacturas (https:\/\/www.pfacturas.com)<\/li>\n<li>WooCommerce instalado y activo<\/li>\n<li>WordPress 6.0 o superior<\/li>\n<li>PHP 7.4 o superior<\/li>\n<\/ul>\n\n<h4>Configuraci\u00f3n r\u00e1pida<\/h4>\n\n<ol>\n<li>Instalar y activar el plugin<\/li>\n<li>Ir a WooCommerce \u2192 pFacturas<\/li>\n<li>Seleccionar Modo: Demo (no requiere credenciales, ideal para pruebas r\u00e1pidas)<\/li>\n<li>Realizar un pedido de prueba<\/li>\n<li>Verificar recepci\u00f3n del PDF por email<\/li>\n<\/ol>\n\n<p><strong>Nota<\/strong>: Para usar el ambiente de Testing o Producci\u00f3n, necesitar\u00e1s credenciales de pFacturas obtenidas al contratar el servicio.<\/p>\n\n<h4>Servicios de terceros<\/h4>\n\n<p>Este plugin utiliza el servicio externo pFacturas para generar comprobantes fiscales electr\u00f3nicos conforme a las regulaciones de DGI Uruguay.<\/p>\n\n<p><strong>Servicio:<\/strong> API de Facturaci\u00f3n Electr\u00f3nica pFacturas\n<strong>Proveedor:<\/strong> PuntoExe Consultores\n<strong>URL del servicio:<\/strong> https:\/\/www.pfacturas.com<\/p>\n\n<p><strong>Qu\u00e9 datos se env\u00edan:<\/strong>\n- Informaci\u00f3n del cliente (nombre, RUT, direcci\u00f3n) desde pedidos de WooCommerce\n- Detalles del pedido (art\u00edculos, precios, impuestos)\n- Informaci\u00f3n de la tienda (RUT, sucursal)\n- Estos datos se env\u00edan cuando se realiza un pedido y el plugin est\u00e1 configurado para emitir comprobantes electr\u00f3nicos<\/p>\n\n<p><strong>Cu\u00e1ndo se env\u00edan los datos:<\/strong>\n- Autom\u00e1ticamente despu\u00e9s de completar el pedido (cuando est\u00e1 configurado)\n- Manualmente cuando el administrador activa la generaci\u00f3n de factura\n- Solo para pedidos que requieren comprobantes fiscales electr\u00f3nicos<\/p>\n\n<p><strong>Prop\u00f3sito<\/strong>: Generar comprobantes fiscales electr\u00f3nicos (CFE) legalmente conformes seg\u00fan lo requiere la ley tributaria uruguaya (DGI)<\/p>\n\n<p><strong>Pol\u00edtica de privacidad:<\/strong> https:\/\/efactura.puntoexe.com.uy\/facturaci%C3%B3n-electr%C3%B3nica\/woocommerce-integrado\/pol%C3%ADtica-de-privacidad\n<strong>T\u00e9rminos de servicio:<\/strong> https:\/\/efactura.puntoexe.com.uy\/facturaci%C3%B3n-electr%C3%B3nica\/woocommerce-integrado\/t%C3%A9rminos-y-condiciones-de-servicio<\/p>\n\n<p>Al usar este plugin, aceptas compartir datos de pedidos con el servicio pFacturas para fines de facturaci\u00f3n electr\u00f3nica.<\/p>\n\n<h4>Soporte t\u00e9cnico<\/h4>\n\n<p>Para consultas y soporte t\u00e9cnico, contactar a <strong>efactura@puntoexe.com.uy<\/strong><\/p>\n\n<p>Plugin desarrollado y mantenido por Punto Exe Consultores.<\/p>\n\n<h3>Dependencies<\/h3>\n\n<p>Este plugin requiere que WooCommerce est\u00e9 instalado y activo.<\/p>\n\n<h3>Support<\/h3>\n\n<p>\u00bfPreguntas o problemas? Escribe a <strong>efactura@puntoexe.com.uy<\/strong>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Ir a Plugins \u2192 A\u00f1adir nuevo \u2192 Subir plugin<\/li>\n<li>Seleccionar el archivo ZIP y hacer clic en \"Instalar ahora\"<\/li>\n<li>Activar el plugin<\/li>\n<li>Ir a WooCommerce \u2192 pFacturas<\/li>\n<li>Para pruebas r\u00e1pidas: Seleccionar Modo \"Demo\" (no requiere configuraci\u00f3n adicional)<\/li>\n<li>Para uso en producci\u00f3n: Configurar RUT, Sucursal, Usuario y Contrase\u00f1a con credenciales de pFacturas<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.2.1.1<\/h4>\n\n<ul>\n<li>Mejora: Changelog traducido al espa\u00f1ol (el p\u00fablico objetivo del plugin son empresas uruguayas)<\/li>\n<li>Nota: Esta versi\u00f3n solo modifica la documentaci\u00f3n, no hay cambios de c\u00f3digo<\/li>\n<\/ul>\n\n<h4>1.2.1.0<\/h4>\n\n<ul>\n<li>Mejora: Nuevo bot\u00f3n \"Restablecer defaults de POS\" al final de la pesta\u00f1a de configuraci\u00f3n Backoffice\/POS \u2014 rellena los campos vac\u00edos con sus valores por defecto sin sobrescribir configuraciones personalizadas<\/li>\n<li>Mejora: Facilita la migraci\u00f3n desde versiones anteriores en las que <code>pos_doc_meta_key<\/code> quedaba guardado como string vac\u00edo (el nuevo default <code>billing_vat<\/code> no se aplica autom\u00e1ticamente a configuraciones ya guardadas)<\/li>\n<\/ul>\n\n<h4>1.2.0.0<\/h4>\n\n<ul>\n<li>Funcionalidad: Detecci\u00f3n heur\u00edstica del tipo de documento en \u00f3rdenes que no provienen del checkout est\u00e1ndar (t\u00edpicamente sistemas POS integrados via REST API)<\/li>\n<li>Funcionalidad: Detecci\u00f3n autom\u00e1tica de RUT (12 d\u00edgitos con d\u00edgito verificador v\u00e1lido), C\u00e9dula uruguaya (8 d\u00edgitos con d\u00edgito verificador v\u00e1lido) u \"Otros\" a partir de un \u00fanico campo de documento<\/li>\n<li>Funcionalidad: Bloqueo de la creaci\u00f3n de la orden via REST cuando el documento es inv\u00e1lido pero la raz\u00f3n social termina en SA\/SAS\/SRL\/LTDA (se presume RUT mal tipeado y se exige correcci\u00f3n)<\/li>\n<li>Funcionalidad: Nuevo default <code>billing_vat<\/code> para el meta key del documento \u2014 funciona out-of-the-box con la mayor\u00eda de plugins POS<\/li>\n<li>Mejora: Pesta\u00f1a Backoffice\/POS reorganizada con texto de ayuda expl\u00edcito para los dos modos (expl\u00edcito de 2 campos vs heur\u00edstico de campo \u00fanico)<\/li>\n<li>Mejora: Nuevo helper <code>pfwc_nombre_parece_empresa()<\/code> para detectar sufijos SA\/S.A.\/SAS\/S.A.S.\/SRL\/S.R.L.\/LTDA\/Ltda (con o sin puntos)<\/li>\n<li>Mejora: Nuevo c\u00f3digo de error <code>pf_rut_invalido_empresa<\/code> para \u00f3rdenes POS bloqueadas por inconsistencia entre documento y sufijo empresarial<\/li>\n<\/ul>\n\n<h4>1.1.3.2<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: La p\u00e1gina de settings ahora siempre abre en la primera pesta\u00f1a al navegar de vuelta<\/li>\n<li>Correcci\u00f3n: La posici\u00f3n de la pesta\u00f1a activa solo se preserva durante la recarga por guardado de settings, no entre navegaciones<\/li>\n<\/ul>\n\n<h4>1.1.3.1<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Aviso en settings de POS cuando los meta keys de identificaci\u00f3n fiscal no est\u00e1n configurados<\/li>\n<li>Correcci\u00f3n: La validaci\u00f3n previa a la emisi\u00f3n detecta cuando <code>billing_company<\/code> est\u00e1 presente pero los meta keys fiscales no est\u00e1n configurados, evitando la emisi\u00f3n silenciosa como consumo final<\/li>\n<li>Correcci\u00f3n: El aviso din\u00e1mico en la pesta\u00f1a POS se actualiza en tiempo real mientras el usuario completa o borra los campos de meta keys<\/li>\n<\/ul>\n\n<h4>1.1.3.0<\/h4>\n\n<ul>\n<li>Mejora: P\u00e1gina de settings reorganizada con navegaci\u00f3n por pesta\u00f1as (Conexi\u00f3n, Documento, Emisi\u00f3n, Checkout, Backoffice\/POS, Avanzado)<\/li>\n<li>Mejora: Pesta\u00f1a activa persistida en localStorage entre recargas de p\u00e1gina<\/li>\n<li>Mejora: Todo el JavaScript consolidado en un \u00fanico bloque inline<\/li>\n<\/ul>\n\n<h4>1.1.2.0<\/h4>\n\n<ul>\n<li>Refactor: Settings de POS simplificados \u2014 se eliminaron <code>pos_rut_meta_key<\/code> y <code>pos_razon_social_meta_key<\/code><\/li>\n<li>Funcionalidad: POS ahora usa el campo <code>tipo_doc<\/code> (2=RUT, 3=CI, etc.) alineado con los c\u00f3digos de tipo de documento de DGI<\/li>\n<li>Funcionalidad: Campos de billing POS configurables (<code>pos_billing_first_name<\/code>, <code>pos_billing_last_name<\/code>, <code>pos_billing_company<\/code>) con defaults est\u00e1ndar de WooCommerce<\/li>\n<li>Funcionalidad: Todos los campos de meta keys POS cambiados de combos a inputs de texto para compatibilidad universal con cualquier plugin<\/li>\n<li>Funcionalidad: Sincronizaci\u00f3n checkout \u2014 nuevos settings para copiar RUT y Raz\u00f3n Social a los campos billing est\u00e1ndar de WooCommerce<\/li>\n<li>Funcionalidad: <code>checkout_razon_social_meta_key<\/code> (default: <code>billing_company<\/code>) sincroniza la Raz\u00f3n Social en el checkout<\/li>\n<\/ul>\n\n<h4>1.1.1.0<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: <code>IndicadorDeFacturacion<\/code> ahora se infiere a partir de la tasa efectiva de impuestos en vez del nombre de la tax class<\/li>\n<li>Correcci\u00f3n: Los productos exentos de IVA (ej: libros al 0%) ahora usan correctamente el indicador 1 (Exento) en vez del 3 (IVA B\u00e1sica)<\/li>\n<li>Correcci\u00f3n: El indicador de la l\u00ednea de env\u00edo tambi\u00e9n usa el c\u00e1lculo por tasa efectiva<\/li>\n<li>Refactor: Mapeo centralizado de tasa de impuesto a indicador en el m\u00e9todo <code>indicador_por_tasa()<\/code><\/li>\n<\/ul>\n\n<h4>1.1.0.0<\/h4>\n\n<ul>\n<li>Funcionalidad: Compatibilidad con sistemas de Backoffice\/POS (YITH Point of Sale y plugins similares)<\/li>\n<li>Funcionalidad: Resoluci\u00f3n autom\u00e1tica de datos fiscales desde los campos billing cuando los campos del checkout est\u00e1n vac\u00edos<\/li>\n<li>Funcionalidad: Mapeo configurable de campos billing para RUT, Raz\u00f3n Social, Tipo Documento, Documento<\/li>\n<li>Funcionalidad: Combos de settings populados din\u00e1micamente desde los billing fields registrados por WooCommerce<\/li>\n<li>Funcionalidad: Validaci\u00f3n en dos niveles \u2014 hook de creaci\u00f3n de orden via REST API + validaci\u00f3n previa a la emisi\u00f3n<\/li>\n<li>Funcionalidad: Funciones de validaci\u00f3n de d\u00edgito verificador para RUT y CI (C\u00e9dula de Identidad) del lado del servidor<\/li>\n<li>Funcionalidad: Soporte para Adenda multi-l\u00ednea con un meta key extra configurable<\/li>\n<li>Funcionalidad: Datos fiscales auto-persistidos en los meta de la orden para consistencia en notas de cr\u00e9dito<\/li>\n<li>Correcci\u00f3n: El campo Id de MediosPago se trunca a 20 caracteres para cumplir con el l\u00edmite del WSDL<\/li>\n<\/ul>\n\n<h4>1.0.27.64<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Modo Demo \u2014 el RUT y la Sucursal del Emisor se enviaban vac\u00edos cuando las credenciales demo estaban expiradas<\/li>\n<li>Correcci\u00f3n: El constructor del Client ahora se ejecuta antes que el Mapper para que las credenciales demo se renueven antes de construir la secci\u00f3n Emisor del CFE<\/li>\n<li>Correcci\u00f3n: Mismo fix aplicado al flujo de emisi\u00f3n de notas de cr\u00e9dito (NC)<\/li>\n<li>Correcci\u00f3n: Bloqueo de la p\u00e1gina de checkout por loop infinito de MutationObserver\/toggle en blocks.js<\/li>\n<li>Correcci\u00f3n: Debounce agregado al callback del MutationObserver y se omite el dispatch al Store API cuando el payload no cambi\u00f3<\/li>\n<li>Limpieza: Removidos los <code>console.log<\/code> verbosos de debug en blocks.js<\/li>\n<\/ul>\n\n<h4>1.0.27.63<\/h4>\n\n<ul>\n<li>Seguridad: Corregido el orden de verificaci\u00f3n del nonce AJAX \u2014 ahora el nonce se verifica ANTES de extraer <code>order_id<\/code> de <code>$_POST<\/code><\/li>\n<li>Seguridad: Migrado a verificaci\u00f3n est\u00e1tica de nonce con <code>check_ajax_referer()<\/code> en vez de nonces espec\u00edficos por orden<\/li>\n<li>Seguridad: El nonce ahora usa el nombre de acci\u00f3n est\u00e1tico <code>pfwc_emit_cfe<\/code> en lugar del din\u00e1mico <code>pf_emit_<\/code> . <code>$order_id<\/code><\/li>\n<li>Correcci\u00f3n: <code>ob_start()<\/code> y <code>ob_get_clean()<\/code> separados en l\u00edneas individuales para manejo expl\u00edcito del buffer<\/li>\n<li>Mejora: El handler AJAX ahora usa <code>wp_localize_script()<\/code> para pasar nonce y <code>ajaxUrl<\/code> al JavaScript<\/li>\n<li>Cumplimiento: Todas las correcciones de seguridad siguen los requerimientos del WordPress.org Plugin Directory<\/li>\n<\/ul>\n\n<h4>1.0.27.62<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Renombradas todas las funciones helper del prefijo <code>pf_<\/code> al prefijo <code>pfwc_<\/code> (WordPress.org requiere 4 caracteres o m\u00e1s)<\/li>\n<li>Correcci\u00f3n: Comentarios <code>phpcs:ignore<\/code> agregados para el uso de <code>$_GET<\/code> en el enqueueing de scripts del admin (solo para mostrar mensaje, no procesa datos)<\/li>\n<li>Cumplimiento: Todos los nombres de funciones ahora cumplen con los est\u00e1ndares de naming de WordPress.org<\/li>\n<\/ul>\n\n<h4>1.0.27.61<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Cambiados todos los prefijos de clases de <code>PF_<\/code> a <code>PFWC_<\/code> (WordPress.org requiere 4 caracteres o m\u00e1s)<\/li>\n<li>Correcci\u00f3n: Constantes <code>PF_PLUGIN_DIR<\/code> y <code>PF_PLUGIN_URL<\/code> cambiadas a <code>PFWC_PLUGIN_DIR<\/code> y <code>PFWC_PLUGIN_URL<\/code><\/li>\n<li>Correcci\u00f3n: Tags <code>&lt;script&gt;<\/code> inline convertidos a <code>wp_add_inline_script()<\/code> para enqueueing correcto<\/li>\n<li>Seguridad: Agregada verificaci\u00f3n de nonce y de capability en el m\u00e9todo <code>ajax_emit()<\/code><\/li>\n<li>Seguridad: Agregada verificaci\u00f3n de permisos en el m\u00e9todo <code>emit_if_needed()<\/code> y removido el procesamiento directo de <code>$_POST<\/code><\/li>\n<li>Seguridad: Removidos los <code>var_export()<\/code> y <code>print_r()<\/code> inseguros de datos de <code>$_POST<\/code> en el logging<\/li>\n<li>Seguridad: Agregado el escapado correcto con <code>esc_html()<\/code> a todas las variables echoeadas<\/li>\n<li>Cumplimiento: Todos los scripts ahora est\u00e1n correctamente enqueueados siguiendo los WordPress Coding Standards<\/li>\n<\/ul>\n\n<h4>1.0.27.60<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Toda la descripci\u00f3n del plugin traducida al ingl\u00e9s (readme.txt y headers del plugin)<\/li>\n<li>Documentaci\u00f3n: Agregada secci\u00f3n completa de Servicios de Terceros documentando la integraci\u00f3n con la API de pFacturas<\/li>\n<li>Cumplimiento: Documentaci\u00f3n completa de transmisi\u00f3n de datos, pol\u00edtica de privacidad y t\u00e9rminos de servicio<\/li>\n<\/ul>\n\n<h4>1.0.27.59<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Corregido el m\u00e9todo de compresi\u00f3n del ZIP (cambiado a <code>Compress-Archive<\/code> para compatibilidad con WordPress.org)<\/li>\n<\/ul>\n\n<h4>1.0.27.58<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Corregido el nombre del plugin en readme.txt para que coincida con pFacturas.php (ambos usan ahora \"pFacturas for WooCommerce\")<\/li>\n<\/ul>\n\n<h4>1.0.27.57<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Plugin URI corregido para cumplir con los requerimientos de WordPress.org (no puede ser una URL de WordPress.org, debe ser del sitio del desarrollador)<\/li>\n<\/ul>\n\n<h4>1.0.27.56<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Corregido el nombre del autor de \"Punto Exe Consultores\" a \"PuntoExe Consultores\" (sin espacio)<\/li>\n<\/ul>\n\n<h4>1.0.27.55<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Header completamente reescrito siguiendo el formato exacto de la documentaci\u00f3n oficial de WordPress.org (nombre en ingl\u00e9s, campos adicionales requeridos, License en el formato exacto)<\/li>\n<\/ul>\n\n<h4>1.0.27.54<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Acentos removidos del header del plugin para evitar problemas de encoding (WordPress.org requiere ASCII puro en headers)<\/li>\n<\/ul>\n\n<h4>1.0.27.53<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Agregados los campos Plugin URI y Author URI al header (requeridos por WordPress.org)<\/li>\n<\/ul>\n\n<h4>1.0.27.52<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Formato del bloque de comentarios cambiado de <code>\/*<\/code> a <code>\/**<\/code> (est\u00e1ndar PHPDoc DocBlock)<\/li>\n<\/ul>\n\n<h4>1.0.27.51<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Formato del header del plugin corregido (asterisco <code>*<\/code> agregado al inicio de cada l\u00ednea seg\u00fan el est\u00e1ndar de WordPress.org)<\/li>\n<\/ul>\n\n<h4>1.0.27.50<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Formato del header del plugin corregido (changelog interno removido, se mantiene solo en readme.txt)<\/li>\n<\/ul>\n\n<h4>1.0.27.49<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Restaurados los acentos en Plugin Name y Description<\/li>\n<\/ul>\n\n<h4>1.0.27.48<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Restaurados los acentos en los tags de readme.txt<\/li>\n<\/ul>\n\n<h4>1.0.27.47<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Cambiado el enfoque de <code>phpcs:ignore<\/code> inline a un bloque <code>phpcs:disable<\/code>\/<code>phpcs:enable<\/code> en <code>class-pf-emitter.php<\/code> l\u00edneas 588-590<\/li>\n<\/ul>\n\n<h4>1.0.27.46<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Actualizado el comentario <code>phpcs:ignore<\/code> inline en <code>class-pf-emitter.php<\/code> l\u00ednea 589<\/li>\n<\/ul>\n\n<h4>1.0.27.45<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Agregado comentario <code>phpcs:ignore<\/code> inline en <code>class-pf-emitter.php<\/code> l\u00ednea 589 para <code>NonceVerification.Missing<\/code><\/li>\n<\/ul>\n\n<h4>1.0.27.44<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Cambiado el slug del plugin de \"woocommerce-pfacturas\" a \"pfacturas-for-woocommerce\"<\/li>\n<li>Correcci\u00f3n: Ahora cumple con las reglas de trademark de WordPress.org (termina en \"for-woocommerce\")<\/li>\n<li>Correcci\u00f3n: Agregado <code>sanitize_text_field()<\/code> en <code>class-pf-emitter.php<\/code> l\u00ednea 606 para el nonce<\/li>\n<li>IMPORTANTE: Requiere desinstalar y reinstalar el plugin (cambio de slug)<\/li>\n<\/ul>\n\n<h4>1.0.27.43<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Corregido el nombre del plugin para cumplir con las reglas de trademark de WordPress.org<\/li>\n<li>Correcci\u00f3n: El nombre ahora termina en \"for WooCommerce\" en vez de \"para WooCommerce\"<\/li>\n<li>Correcci\u00f3n: Removidos caracteres acentuados del nombre y la descripci\u00f3n para evitar problemas de encoding<\/li>\n<li>Correcci\u00f3n: readme.txt reducido a un m\u00e1ximo de 5 tags y la descripci\u00f3n corta a menos de 150 caracteres<\/li>\n<li>Correcci\u00f3n: Agregado <code>wp_unslash()<\/code> en <code>class-pf-emitter.php<\/code> l\u00ednea 606 para <code>$_POST['_wpnonce']<\/code><\/li>\n<\/ul>\n\n<h4>1.0.27.42<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Actualizado el Stable tag de readme.txt a 1.0.27.42<\/li>\n<li>Correcci\u00f3n: Completados los comentarios <code>phpcs:ignore<\/code> faltantes en <code>class-pf-checkout.php<\/code> (l\u00edneas 18-20, 37-39)<\/li>\n<li>Correcci\u00f3n: Agregado <code>phpcs:ignore<\/code> para <code>var_export<\/code> en <code>class-pf-emitter.php<\/code> l\u00ednea 155<\/li>\n<li>Correcci\u00f3n: Agregados <code>phpcs:ignore<\/code> para <code>$_POST<\/code> en <code>class-pf-emitter.php<\/code> l\u00edneas 588, 592, 605<\/li>\n<li>Correcci\u00f3n: Agregados <code>phpcs:ignore<\/code> para <code>var_export<\/code> y <code>print_r<\/code> en <code>class-pf-mapper.php<\/code> l\u00edneas 17, 20, 25<\/li>\n<\/ul>\n\n<h4>1.0.27.41<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Agregado <code>sanitize_callback<\/code> a <code>register_setting()<\/code> para cumplir con los est\u00e1ndares de WordPress<\/li>\n<li>Correcci\u00f3n: Actualizado \"Tested up to\" a WordPress 6.8<\/li>\n<li>Correcci\u00f3n: Agregados comentarios <code>phpcs:ignore<\/code> para los warnings de verificaci\u00f3n de nonce en hooks de WooCommerce<\/li>\n<li>Correcci\u00f3n: Agregados comentarios <code>phpcs:ignore<\/code> para las funciones de debug (<code>var_export<\/code>, <code>print_r<\/code>) usadas solo para logging<\/li>\n<\/ul>\n\n<h4>1.0.27.39<\/h4>\n\n<ul>\n<li>Arquitectura: Implementado el sistema de builds dual (oficial vs desarrollo)<\/li>\n<li>Archivo nuevo: <code>class-pf-manual-updater.php<\/code> con la funcionalidad de actualizaci\u00f3n manual<\/li>\n<li>Correcci\u00f3n: La actualizaci\u00f3n manual se movi\u00f3 a un archivo separado para evitar errores en Plugin Check<\/li>\n<li>Builds oficiales: Excluyen <code>class-pf-manual-updater.php<\/code> para pasar Plugin Check sin errores<\/li>\n<li>Builds de desarrollo: Incluyen <code>class-pf-manual-updater.php<\/code> para funcionalidad completa<\/li>\n<li>Documentaci\u00f3n: Actualizada en <code>_dev\/<\/code> para explicar el sistema de builds dual<\/li>\n<\/ul>\n\n<h4>1.0.27.38<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Agregados comentarios <code>phpcs:ignore<\/code> a todos los <code>print_r()<\/code> y <code>var_export()<\/code> usados en logging<\/li>\n<li>Correcci\u00f3n: La funcionalidad de actualizaci\u00f3n manual ahora requiere el archivo de flag <code>_dev\/enable-manual-updates.flag<\/code><\/li>\n<li>Mejora: Actualizaci\u00f3n manual deshabilitada por defecto en versiones oficiales para cumplir con los est\u00e1ndares de WordPress.org<\/li>\n<li>Plugin Check: Resueltos todos los warnings de <code>DevelopmentFunctions<\/code> en <code>class-pf-blocks.php<\/code> y <code>class-pf-emitter.php<\/code><\/li>\n<\/ul>\n\n<h4>1.0.27.37<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Todos los usos de <code>date()<\/code> reemplazados por <code>gmdate()<\/code> para evitar problemas de timezone<\/li>\n<li>Correcci\u00f3n: Agregado <code>esc_html()<\/code> al mensaje de error de <code>wp_die()<\/code> en <code>class-pf-settings.php<\/code><\/li>\n<li><code>WordPress.DateTime.RestrictedFunctions<\/code>: Todos los <code>date()<\/code> cambiados a <code>gmdate()<\/code> en <code>helpers.php<\/code>, <code>class-pf-client.php<\/code> y <code>class-pf-mapper.php<\/code><\/li>\n<\/ul>\n\n<h4>1.0.27.36<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Tercera ronda de correcciones para el Plugin Check de WordPress.org<\/li>\n<li>Aplicado <code>esc_attr()<\/code> a todas las salidas de <code>self::OPTION_KEY<\/code> en <code>class-pf-settings.php<\/code><\/li>\n<li>Aplicados <code>esc_html()<\/code>, <code>esc_attr()<\/code>, <code>esc_textarea()<\/code> a los par\u00e1metros din\u00e1micos de la funci\u00f3n <code>f()<\/code><\/li>\n<li>Agregados comentarios <code>phpcs:ignore<\/code> para <code>print_r()<\/code> y <code>var_export()<\/code> usados en logging<\/li>\n<li>Cambiado <code>date()<\/code> por <code>current_time('mysql')<\/code> en <code>helpers.php<\/code> para consistencia con WordPress<\/li>\n<li>Mejorada la funci\u00f3n <code>in_array()<\/code> con el par\u00e1metro de comparaci\u00f3n estricta<\/li>\n<\/ul>\n\n<h4>1.0.27.35<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Correcciones adicionales para el Plugin Check de WordPress.org (segunda ronda)<\/li>\n<li>Agregados comentarios <code>phpcs:ignore<\/code> con justificaci\u00f3n para variables seguras<\/li>\n<li>Corregidos 15 errores de output escaping en <code>class-pf-checkout.php<\/code>, <code>class-pf-emitter.php<\/code> y <code>class-pf-settings.php<\/code><\/li>\n<\/ul>\n\n<h4>1.0.27.34<\/h4>\n\n<ul>\n<li>Correcci\u00f3n: Correcciones para cumplir con el Plugin Check de WordPress.org<\/li>\n<li>Heredoc convertido a concatenaci\u00f3n de strings (WordPress.org no permite heredoc)<\/li>\n<li>Agregado output escaping con <code>esc_attr()<\/code>, <code>esc_js()<\/code>, <code>esc_url()<\/code> donde corresponde<\/li>\n<li><code>wp_redirect()<\/code> cambiado a <code>wp_safe_redirect()<\/code> para mayor seguridad<\/li>\n<\/ul>\n\n<h4>1.0.27<\/h4>\n\n<ul>\n<li>Funcionalidad: Modo Demo que permite probar el plugin sin credenciales<\/li>\n<li>Funcionalidad: Detecci\u00f3n autom\u00e1tica y renovaci\u00f3n de credenciales Demo expiradas<\/li>\n<li>Mejora: Sistema de logging con preferencia del usuario<\/li>\n<li>Mejora: Compatibilidad completa con WooCommerce Blocks<\/li>\n<li>Mejora: Validaci\u00f3n mejorada de RUT y CI con d\u00edgito verificador<\/li>\n<li>Mejora: Manejo del umbral en Unidades Indexadas en base al subtotal<\/li>\n<li>Correcci\u00f3n: M\u00faltiples correcciones para cumplir con el Plugin Check de WordPress.org<\/li>\n<li>Correcci\u00f3n: Mejoras de seguridad con sanitizaci\u00f3n y escapado de datos<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li><strong>Simplificaci\u00f3n de campos del checkout<\/strong>: Ahora solo se solicitan \"Tipo de Documento\" y \"Documento\" cuando el total supera el umbral de identificaci\u00f3n. Los dem\u00e1s datos (nombre, direcci\u00f3n, ciudad, pa\u00eds) se toman autom\u00e1ticamente de la informaci\u00f3n de billing de la orden.<\/li>\n<li><strong>Validaci\u00f3n de CI mejorada<\/strong>: Agregada validaci\u00f3n JavaScript del d\u00edgito verificador para C\u00e9dula de Identidad uruguaya (tipo 3) tanto en el checkout cl\u00e1sico como en WooCommerce Blocks.<\/li>\n<li><strong>Campos requeridos<\/strong>: Todos los campos billing ahora son requeridos cuando corresponde (RUT\/Raz\u00f3n Social si se factura con RUT, Tipo y Documento si se supera el umbral).<\/li>\n<li><strong>WooCommerce Blocks actualizado<\/strong>: Removidos los campos redundantes del Store API y de blocks.js; ahora usa directamente los datos de la direcci\u00f3n de billing.<\/li>\n<li><strong>Mapper optimizado<\/strong>: El mapper ahora usa <code>get_billing_first_name()<\/code>, <code>get_billing_last_name()<\/code>, <code>get_billing_address_1()<\/code>, <code>get_billing_city()<\/code> y <code>get_billing_country()<\/code> del objeto orden.<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li><strong>Combos simplificados<\/strong>: Las opciones de los combos ahora muestran solo descripciones sin valores (ej: \"Testing\" en vez de \"TES - Testing\").<\/li>\n<li><strong>Campos de Persona F\u00edsica extendidos<\/strong>: Agregados los campos \"Direcci\u00f3n\" y \"Ciudad\" para cumplir con los requerimientos del umbral de identificaci\u00f3n.<\/li>\n<li><strong>Opciones corregidas<\/strong>: \"C\u00e9dula Mercosur\" cambiado a \"DNI Mercosur\", \"Otro\" cambiado a \"Otros\".<\/li>\n<li><strong>L\u00f3gica de umbral mejorada<\/strong>: Cuando el total supera el umbral configurado y no se factura con RUT, se solicitan todos los campos requeridos de Persona F\u00edsica.<\/li>\n<li><strong>Validaci\u00f3n mejorada<\/strong>: La validaci\u00f3n ahora verifica que todos los campos de Persona F\u00edsica est\u00e9n completos cuando corresponde.<\/li>\n<\/ul>","raw_excerpt":"Facturaci\u00f3n electr\u00f3nica autom\u00e1tica (e-Ticket, e-Factura, notas de cr\u00e9dito) para Uruguay cumpliendo normativa DGI.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/263957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=263957"}],"author":[{"embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/puntoexeconsultores"}],"wp:attachment":[{"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=263957"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=263957"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=263957"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=263957"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=263957"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ja.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=263957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}