Descrizione
pFacturas es el plugin oficial para integrar la plataforma de facturación electrónica pFacturas con WooCommerce en Uruguay. Permite la emisión automática de Comprobantes Fiscales Electrónicos (CFE) cumpliendo con las normativas de la Dirección General Impositiva (DGI) de Uruguay.
Características principales
- Emisión automática de CFE: Genera automáticamente e-Ticket, e-Factura y Notas de Crédito al procesar pedidos
- Cumplimiento DGI: 100% conforme a las especificaciones técnicas de DGI Uruguay
- Múltiples ambientes: Soporte para Demo, Testing y Producción
- Facturación con/sin RUT: Factura tanto a consumidores finales como a empresas
- Validación en tiempo real: Validación de RUT uruguayo con dígito verificador
- Envío automático de PDF: El cliente recibe el comprobante fiscal por email
- Compatible con WooCommerce Blocks: Funciona con el nuevo checkout de WooCommerce
- Logs detallados: Sistema de logging para depuración y auditoría
- Configuración flexible: Múltiples opciones para adaptar el plugin a tus necesidades
Requisitos
- Cuenta activa en pFacturas (https://www.pfacturas.com)
- WooCommerce instalado y activo
- WordPress 6.0 o superior
- PHP 7.4 o superior
Configuración rápida
- Instalar y activar el plugin
- Ir a WooCommerce pFacturas
- Seleccionar Modo: Demo (no requiere credenciales, ideal para pruebas rápidas)
- Realizar un pedido de prueba
- Verificar recepción del PDF por email
Nota: Para usar el ambiente de Testing o Producción, necesitarás credenciales de pFacturas obtenidas al contratar el servicio.
Servicios de terceros
Este plugin utiliza el servicio externo pFacturas para generar comprobantes fiscales electrónicos conforme a las regulaciones de DGI Uruguay.
Servicio: API de Facturación Electrónica pFacturas
Proveedor: PuntoExe Consultores
URL del servicio: https://www.pfacturas.com
Qué datos se envían:
– Información del cliente (nombre, RUT, dirección) desde pedidos de WooCommerce
– Detalles del pedido (artículos, precios, impuestos)
– Información de la tienda (RUT, sucursal)
– Estos datos se envían cuando se realiza un pedido y el plugin está configurado para emitir comprobantes electrónicos
Cuándo se envían los datos:
– Automáticamente después de completar el pedido (cuando está configurado)
– Manualmente cuando el administrador activa la generación de factura
– Solo para pedidos que requieren comprobantes fiscales electrónicos
Propósito: Generar comprobantes fiscales electrónicos (CFE) legalmente conformes según lo requiere la ley tributaria uruguaya (DGI)
Política de privacidad: https://efactura.puntoexe.com.uy/facturaci%C3%B3n-electr%C3%B3nica/woocommerce-integrado/pol%C3%ADtica-de-privacidad
Términos de servicio: https://efactura.puntoexe.com.uy/facturaci%C3%B3n-electr%C3%B3nica/woocommerce-integrado/t%C3%A9rminos-y-condiciones-de-servicio
Al usar este plugin, aceptas compartir datos de pedidos con el servicio pFacturas para fines de facturación electrónica.
Soporte técnico
Para consultas y soporte técnico, contactar a efactura@puntoexe.com.uy
Plugin desarrollado y mantenido por Punto Exe Consultores.
Dependencies
Este plugin requiere que WooCommerce esté instalado y activo.
Support
¿Preguntas o problemas? Escribe a efactura@puntoexe.com.uy.
Installazione
- Ir a Plugins Añadir nuevo Subir plugin
- Seleccionar el archivo ZIP y hacer clic en “Instalar ahora”
- Activar el plugin
- Ir a WooCommerce pFacturas
- Para pruebas rápidas: Seleccionar Modo “Demo” (no requiere configuración adicional)
- Para uso en producción: Configurar RUT, Sucursal, Usuario y Contraseña con credenciales de pFacturas
Recensioni
Contributi e sviluppo
“pFacturas for WooCommerce” è un software open source. Le persone che hanno contribuito allo sviluppo di questo plugin sono indicate di seguito.
CollaboratoriTraduci “pFacturas for WooCommerce” nella tua lingua.
Ti interessa lo sviluppo?
Esplora il codice segui il repository SVN, segui il log delle modifiche tramite RSS.
Changelog
1.2.1.1
- Mejora: Changelog traducido al español (el público objetivo del plugin son empresas uruguayas)
- Nota: Esta versión solo modifica la documentación, no hay cambios de código
1.2.1.0
- Mejora: Nuevo botón “Restablecer defaults de POS” al final de la pestaña de configuración Backoffice/POS — rellena los campos vacíos con sus valores por defecto sin sobrescribir configuraciones personalizadas
- Mejora: Facilita la migración desde versiones anteriores en las que
pos_doc_meta_keyquedaba guardado como string vacío (el nuevo defaultbilling_vatno se aplica automáticamente a configuraciones ya guardadas)
1.2.0.0
- Funcionalidad: Detección heurística del tipo de documento en órdenes que no provienen del checkout estándar (típicamente sistemas POS integrados via REST API)
- Funcionalidad: Detección automática de RUT (12 dígitos con dígito verificador válido), Cédula uruguaya (8 dígitos con dígito verificador válido) u “Otros” a partir de un único campo de documento
- Funcionalidad: Bloqueo de la creación de la orden via REST cuando el documento es inválido pero la razón social termina en SA/SAS/SRL/LTDA (se presume RUT mal tipeado y se exige corrección)
- Funcionalidad: Nuevo default
billing_vatpara el meta key del documento — funciona out-of-the-box con la mayoría de plugins POS - Mejora: Pestaña Backoffice/POS reorganizada con texto de ayuda explícito para los dos modos (explícito de 2 campos vs heurístico de campo único)
- Mejora: Nuevo helper
pfwc_nombre_parece_empresa()para detectar sufijos SA/S.A./SAS/S.A.S./SRL/S.R.L./LTDA/Ltda (con o sin puntos) - Mejora: Nuevo código de error
pf_rut_invalido_empresapara órdenes POS bloqueadas por inconsistencia entre documento y sufijo empresarial
1.1.3.2
- Corrección: La página de settings ahora siempre abre en la primera pestaña al navegar de vuelta
- Corrección: La posición de la pestaña activa solo se preserva durante la recarga por guardado de settings, no entre navegaciones
1.1.3.1
- Corrección: Aviso en settings de POS cuando los meta keys de identificación fiscal no están configurados
- Corrección: La validación previa a la emisión detecta cuando
billing_companyestá presente pero los meta keys fiscales no están configurados, evitando la emisión silenciosa como consumo final - Corrección: El aviso dinámico en la pestaña POS se actualiza en tiempo real mientras el usuario completa o borra los campos de meta keys
1.1.3.0
- Mejora: Página de settings reorganizada con navegación por pestañas (Conexión, Documento, Emisión, Checkout, Backoffice/POS, Avanzado)
- Mejora: Pestaña activa persistida en localStorage entre recargas de página
- Mejora: Todo el JavaScript consolidado en un único bloque inline
1.1.2.0
- Refactor: Settings de POS simplificados — se eliminaron
pos_rut_meta_keyypos_razon_social_meta_key - Funcionalidad: POS ahora usa el campo
tipo_doc(2=RUT, 3=CI, etc.) alineado con los códigos de tipo de documento de DGI - Funcionalidad: Campos de billing POS configurables (
pos_billing_first_name,pos_billing_last_name,pos_billing_company) con defaults estándar de WooCommerce - Funcionalidad: Todos los campos de meta keys POS cambiados de combos a inputs de texto para compatibilidad universal con cualquier plugin
- Funcionalidad: Sincronización checkout — nuevos settings para copiar RUT y Razón Social a los campos billing estándar de WooCommerce
- Funcionalidad:
checkout_razon_social_meta_key(default:billing_company) sincroniza la Razón Social en el checkout
1.1.1.0
- Corrección:
IndicadorDeFacturacionahora se infiere a partir de la tasa efectiva de impuestos en vez del nombre de la tax class - Corrección: Los productos exentos de IVA (ej: libros al 0%) ahora usan correctamente el indicador 1 (Exento) en vez del 3 (IVA Básica)
- Corrección: El indicador de la línea de envío también usa el cálculo por tasa efectiva
- Refactor: Mapeo centralizado de tasa de impuesto a indicador en el método
indicador_por_tasa()
1.1.0.0
- Funcionalidad: Compatibilidad con sistemas de Backoffice/POS (YITH Point of Sale y plugins similares)
- Funcionalidad: Resolución automática de datos fiscales desde los campos billing cuando los campos del checkout están vacíos
- Funcionalidad: Mapeo configurable de campos billing para RUT, Razón Social, Tipo Documento, Documento
- Funcionalidad: Combos de settings populados dinámicamente desde los billing fields registrados por WooCommerce
- Funcionalidad: Validación en dos niveles — hook de creación de orden via REST API + validación previa a la emisión
- Funcionalidad: Funciones de validación de dígito verificador para RUT y CI (Cédula de Identidad) del lado del servidor
- Funcionalidad: Soporte para Adenda multi-línea con un meta key extra configurable
- Funcionalidad: Datos fiscales auto-persistidos en los meta de la orden para consistencia en notas de crédito
- Corrección: El campo Id de MediosPago se trunca a 20 caracteres para cumplir con el límite del WSDL
1.0.27.64
- Corrección: Modo Demo — el RUT y la Sucursal del Emisor se enviaban vacíos cuando las credenciales demo estaban expiradas
- Corrección: El constructor del Client ahora se ejecuta antes que el Mapper para que las credenciales demo se renueven antes de construir la sección Emisor del CFE
- Corrección: Mismo fix aplicado al flujo de emisión de notas de crédito (NC)
- Corrección: Bloqueo de la página de checkout por loop infinito de MutationObserver/toggle en blocks.js
- Corrección: Debounce agregado al callback del MutationObserver y se omite el dispatch al Store API cuando el payload no cambió
- Limpieza: Removidos los
console.logverbosos de debug en blocks.js
1.0.27.63
- Seguridad: Corregido el orden de verificación del nonce AJAX — ahora el nonce se verifica ANTES de extraer
order_idde$_POST - Seguridad: Migrado a verificación estática de nonce con
check_ajax_referer()en vez de nonces específicos por orden - Seguridad: El nonce ahora usa el nombre de acción estático
pfwc_emit_cfeen lugar del dinámicopf_emit_.$order_id - Corrección:
ob_start()yob_get_clean()separados en líneas individuales para manejo explícito del buffer - Mejora: El handler AJAX ahora usa
wp_localize_script()para pasar nonce yajaxUrlal JavaScript - Cumplimiento: Todas las correcciones de seguridad siguen los requerimientos del WordPress.org Plugin Directory
1.0.27.62
- Corrección: Renombradas todas las funciones helper del prefijo
pf_al prefijopfwc_(WordPress.org requiere 4 caracteres o más) - Corrección: Comentarios
phpcs:ignoreagregados para el uso de$_GETen el enqueueing de scripts del admin (solo para mostrar mensaje, no procesa datos) - Cumplimiento: Todos los nombres de funciones ahora cumplen con los estándares de naming de WordPress.org
1.0.27.61
- Corrección: Cambiados todos los prefijos de clases de
PF_aPFWC_(WordPress.org requiere 4 caracteres o más) - Corrección: Constantes
PF_PLUGIN_DIRyPF_PLUGIN_URLcambiadas aPFWC_PLUGIN_DIRyPFWC_PLUGIN_URL - Corrección: Tags
<script>inline convertidos awp_add_inline_script()para enqueueing correcto - Seguridad: Agregada verificación de nonce y de capability en el método
ajax_emit() - Seguridad: Agregada verificación de permisos en el método
emit_if_needed()y removido el procesamiento directo de$_POST - Seguridad: Removidos los
var_export()yprint_r()inseguros de datos de$_POSTen el logging - Seguridad: Agregado el escapado correcto con
esc_html()a todas las variables echoeadas - Cumplimiento: Todos los scripts ahora están correctamente enqueueados siguiendo los WordPress Coding Standards
1.0.27.60
- Corrección: Toda la descripción del plugin traducida al inglés (readme.txt y headers del plugin)
- Documentación: Agregada sección completa de Servicios de Terceros documentando la integración con la API de pFacturas
- Cumplimiento: Documentación completa de transmisión de datos, política de privacidad y términos de servicio
1.0.27.59
- Corrección: Corregido el método de compresión del ZIP (cambiado a
Compress-Archivepara compatibilidad con WordPress.org)
1.0.27.58
- Corrección: Corregido el nombre del plugin en readme.txt para que coincida con pFacturas.php (ambos usan ahora “pFacturas for WooCommerce”)
1.0.27.57
- Corrección: 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)
1.0.27.56
- Corrección: Corregido el nombre del autor de “Punto Exe Consultores” a “PuntoExe Consultores” (sin espacio)
1.0.27.55
- Corrección: Header completamente reescrito siguiendo el formato exacto de la documentación oficial de WordPress.org (nombre en inglés, campos adicionales requeridos, License en el formato exacto)
1.0.27.54
- Corrección: Acentos removidos del header del plugin para evitar problemas de encoding (WordPress.org requiere ASCII puro en headers)
1.0.27.53
- Corrección: Agregados los campos Plugin URI y Author URI al header (requeridos por WordPress.org)
1.0.27.52
- Corrección: Formato del bloque de comentarios cambiado de
/*a/**(estándar PHPDoc DocBlock)
1.0.27.51
- Corrección: Formato del header del plugin corregido (asterisco
*agregado al inicio de cada línea según el estándar de WordPress.org)
1.0.27.50
- Corrección: Formato del header del plugin corregido (changelog interno removido, se mantiene solo en readme.txt)
1.0.27.49
- Corrección: Restaurados los acentos en Plugin Name y Description
1.0.27.48
- Corrección: Restaurados los acentos en los tags de readme.txt
1.0.27.47
- Corrección: Cambiado el enfoque de
phpcs:ignoreinline a un bloquephpcs:disable/phpcs:enableenclass-pf-emitter.phplíneas 588-590
1.0.27.46
- Corrección: Actualizado el comentario
phpcs:ignoreinline enclass-pf-emitter.phplínea 589
1.0.27.45
- Corrección: Agregado comentario
phpcs:ignoreinline enclass-pf-emitter.phplínea 589 paraNonceVerification.Missing
1.0.27.44
- Corrección: Cambiado el slug del plugin de “woocommerce-pfacturas” a “pfacturas-for-woocommerce”
- Corrección: Ahora cumple con las reglas de trademark de WordPress.org (termina en “for-woocommerce”)
- Corrección: Agregado
sanitize_text_field()enclass-pf-emitter.phplínea 606 para el nonce - IMPORTANTE: Requiere desinstalar y reinstalar el plugin (cambio de slug)
1.0.27.43
- Corrección: Corregido el nombre del plugin para cumplir con las reglas de trademark de WordPress.org
- Corrección: El nombre ahora termina en “for WooCommerce” en vez de “para WooCommerce”
- Corrección: Removidos caracteres acentuados del nombre y la descripción para evitar problemas de encoding
- Corrección: readme.txt reducido a un máximo de 5 tags y la descripción corta a menos de 150 caracteres
- Corrección: Agregado
wp_unslash()enclass-pf-emitter.phplínea 606 para$_POST['_wpnonce']
1.0.27.42
- Corrección: Actualizado el Stable tag de readme.txt a 1.0.27.42
- Corrección: Completados los comentarios
phpcs:ignorefaltantes enclass-pf-checkout.php(líneas 18-20, 37-39) - Corrección: Agregado
phpcs:ignoreparavar_exportenclass-pf-emitter.phplínea 155 - Corrección: Agregados
phpcs:ignorepara$_POSTenclass-pf-emitter.phplíneas 588, 592, 605 - Corrección: Agregados
phpcs:ignoreparavar_exportyprint_renclass-pf-mapper.phplíneas 17, 20, 25
1.0.27.41
- Corrección: Agregado
sanitize_callbackaregister_setting()para cumplir con los estándares de WordPress - Corrección: Actualizado “Tested up to” a WordPress 6.8
- Corrección: Agregados comentarios
phpcs:ignorepara los warnings de verificación de nonce en hooks de WooCommerce - Corrección: Agregados comentarios
phpcs:ignorepara las funciones de debug (var_export,print_r) usadas solo para logging
1.0.27.39
- Arquitectura: Implementado el sistema de builds dual (oficial vs desarrollo)
- Archivo nuevo:
class-pf-manual-updater.phpcon la funcionalidad de actualización manual - Corrección: La actualización manual se movió a un archivo separado para evitar errores en Plugin Check
- Builds oficiales: Excluyen
class-pf-manual-updater.phppara pasar Plugin Check sin errores - Builds de desarrollo: Incluyen
class-pf-manual-updater.phppara funcionalidad completa - Documentación: Actualizada en
_dev/para explicar el sistema de builds dual
1.0.27.38
- Corrección: Agregados comentarios
phpcs:ignorea todos losprint_r()yvar_export()usados en logging - Corrección: La funcionalidad de actualización manual ahora requiere el archivo de flag
_dev/enable-manual-updates.flag - Mejora: Actualización manual deshabilitada por defecto en versiones oficiales para cumplir con los estándares de WordPress.org
- Plugin Check: Resueltos todos los warnings de
DevelopmentFunctionsenclass-pf-blocks.phpyclass-pf-emitter.php
1.0.27.37
- Corrección: Todos los usos de
date()reemplazados porgmdate()para evitar problemas de timezone - Corrección: Agregado
esc_html()al mensaje de error dewp_die()enclass-pf-settings.php WordPress.DateTime.RestrictedFunctions: Todos losdate()cambiados agmdate()enhelpers.php,class-pf-client.phpyclass-pf-mapper.php
1.0.27.36
- Corrección: Tercera ronda de correcciones para el Plugin Check de WordPress.org
- Aplicado
esc_attr()a todas las salidas deself::OPTION_KEYenclass-pf-settings.php - Aplicados
esc_html(),esc_attr(),esc_textarea()a los parámetros dinámicos de la funciónf() - Agregados comentarios
phpcs:ignoreparaprint_r()yvar_export()usados en logging - Cambiado
date()porcurrent_time('mysql')enhelpers.phppara consistencia con WordPress - Mejorada la función
in_array()con el parámetro de comparación estricta
1.0.27.35
- Corrección: Correcciones adicionales para el Plugin Check de WordPress.org (segunda ronda)
- Agregados comentarios
phpcs:ignorecon justificación para variables seguras - Corregidos 15 errores de output escaping en
class-pf-checkout.php,class-pf-emitter.phpyclass-pf-settings.php
1.0.27.34
- Corrección: Correcciones para cumplir con el Plugin Check de WordPress.org
- Heredoc convertido a concatenación de strings (WordPress.org no permite heredoc)
- Agregado output escaping con
esc_attr(),esc_js(),esc_url()donde corresponde wp_redirect()cambiado awp_safe_redirect()para mayor seguridad
1.0.27
- Funcionalidad: Modo Demo que permite probar el plugin sin credenciales
- Funcionalidad: Detección automática y renovación de credenciales Demo expiradas
- Mejora: Sistema de logging con preferencia del usuario
- Mejora: Compatibilidad completa con WooCommerce Blocks
- Mejora: Validación mejorada de RUT y CI con dígito verificador
- Mejora: Manejo del umbral en Unidades Indexadas en base al subtotal
- Corrección: Múltiples correcciones para cumplir con el Plugin Check de WordPress.org
- Corrección: Mejoras de seguridad con sanitización y escapado de datos
1.0.16
- Simplificación de campos del checkout: Ahora solo se solicitan “Tipo de Documento” y “Documento” cuando el total supera el umbral de identificación. Los demás datos (nombre, dirección, ciudad, país) se toman automáticamente de la información de billing de la orden.
- Validación de CI mejorada: Agregada validación JavaScript del dígito verificador para Cédula de Identidad uruguaya (tipo 3) tanto en el checkout clásico como en WooCommerce Blocks.
- Campos requeridos: Todos los campos billing ahora son requeridos cuando corresponde (RUT/Razón Social si se factura con RUT, Tipo y Documento si se supera el umbral).
- WooCommerce Blocks actualizado: Removidos los campos redundantes del Store API y de blocks.js; ahora usa directamente los datos de la dirección de billing.
- Mapper optimizado: El mapper ahora usa
get_billing_first_name(),get_billing_last_name(),get_billing_address_1(),get_billing_city()yget_billing_country()del objeto orden.
1.0.15
- Combos simplificados: Las opciones de los combos ahora muestran solo descripciones sin valores (ej: “Testing” en vez de “TES – Testing”).
- Campos de Persona Física extendidos: Agregados los campos “Dirección” y “Ciudad” para cumplir con los requerimientos del umbral de identificación.
- Opciones corregidas: “Cédula Mercosur” cambiado a “DNI Mercosur”, “Otro” cambiado a “Otros”.
- Lógica de umbral mejorada: Cuando el total supera el umbral configurado y no se factura con RUT, se solicitan todos los campos requeridos de Persona Física.
- Validación mejorada: La validación ahora verifica que todos los campos de Persona Física estén completos cuando corresponde.





