Instalación y activación

Paso 1 de 29
1.1. Activar plugin → sin fatales PHP
1.2. Plugin aparece en menú de WooCommerce
1.3. Verificar tablas creadas: vfwoo_invoices, vfwoo_invoice_events, vfwoo_cron, vfwoo_activity_log
1.4. Tab API visible y cargado sin errores
1.5. Sin licencia: radio Básico seleccionado, Sandbox y Producción visibles pero deshabilitados (opacity reducida)
1.6. Sin licencia: modo Básico activo → badge "Básico" visible en tab
1.7. Todas las tabs del plugin visibles y navegables sin bloqueo
1.8. Desactivar y reactivar plugin → sin errores, tablas intactas
1.9. Recargando la página Ctrl+R → estado se mantiene

Tab API — Licencia y modos

Paso 2 de 29
2.1. Sin licencia: campo "Clave de licencia" visible (type password) con toggle ojo
2.2. Sin licencia: campo "Contraseña maestra" visible (type password) con toggle ojo
2.3. Toggle ojo en clave → muestra/oculta texto, icono cambia
2.4. Toggle ojo en contraseña → muestra/oculta texto, icono cambia
2.5. Clic "Verificar Licencia" con campos vacíos → toast error
2.6. Formato de clave incorrecto → toast "Formato incorrecto. Ejemplo: XXXX-XXXX-XXXX-XXXX"
2.7. Clave correcta pero contraseña vacía → toast "Introduce la contraseña maestra"
2.8. Clave + contraseña correctos → licencia válida, badge "Válida", suffix guardado
2.9. Tras verificar: Sandbox y Producción se habilitan si la licencia incluye esas claves
2.10. Error 429 del servidor → toast "Límite de intentos superado. Espera 1 hora."
2.11. Clave o contraseña inválida (servidor rechaza) → toast con mensaje del servidor
2.12. Activar modo Básico → credenciales API limpias, radio Básico resaltado
2.13. Activar modo Sandbox → conecta /health, radio Sandbox resaltado visualmente
2.14. Activar modo Producción → conecta /health, radio Producción resaltado visualmente
2.15. Modo activo queda resaltado al recargar página
2.16. Botón "Actualizar" → badge y fecha "Último check" actualizados
2.17. Licencia expirada en "Actualizar" → toast aviso + recarga automática tras 3 s
2.18. Botón "Portal / Editar" visible si hay emisor_id → abre portal en nueva pestaña
2.19. Botón "Desactivar licencia" → diálogo de confirmación antes de borrar
2.20. Confirmar desactivación → todos los license_* borrados, vuelve a modo Básico, email interno enviado
2.21. Tras desactivar: campos clave + contraseña vuelven a aparecer vacíos

Tab Configuración

Paso 3 de 29
3.1. NIF empresa se muestra (campo solo lectura — viene desde API)
3.2. Guardar política "Al completar pago" → se persiste
3.3. Guardar política "Al cambiar a estado Completado" → se persiste
3.4. Activar facturas simplificadas F2 → aparece opción "Sector autorizado"
3.5. Desactivar F2 → opción "Sector autorizado" se oculta
3.6. F2 activo + sector autorizado activo → ambos persisten al recargar
3.7. Activar → Usar campo NIF personalizado" aparece campo "ID del campo personalizado NIF"
3.8. Tecleo en → "ID del campo personalizado NIF" → aparece badget "Guardado Correctamente "
3.9. Desactivar → Usar campo NIF personalizado" desparece campo "ID del campo personalizado NIF"
3.10. Recargando la pagina Ctrl+R mantenien los vlaores guardados

Tab Numeración

Paso 4 de 29
4.1. Serie de factura normal configurable y guardable
4.2. Serie de rectificativa configurable y guardable
4.3. Números iniciales configurable y guardable
4.4. Probar Codigos disponible , deberian cambiarse abajo de cada campo → Ejemplo: minetras escribes
4.5. Recargando la pagina Ctrl+R mantenien los vlaores guardados

Tab Impuestos

Paso 5 de 29
5.1. Mapeo de impuestos WC visible (tasas definidas en WooCommerce)
5.2. Asignar tipo fiscal a cada tasa y guardar → persiste
5.3. Guardar sin mapear una tasa → se guarda sin romper nada
5.4. Añadir nueva tasa en WC → aparece en el mapeo al recargar tab
5.5. Recargando la pagina Ctrl+R mantenien los vlaores guardados

Tab PDF

Paso 6 de 29
6.1. Subir logo → sin errores y guardar → persisten al recargar
6.2. Borrar logo → sin errores y guardar → persisten al recargar
6.3. Cambiar datos empresa en PDF y guardar → persisten al recargar
6.4. Rellenar Campos de PDF → sin errores y guardar → persisten al recargar
6.5. Cambiar Colores → sin errores y guardar → persisten al recargar
6.6. Cambiar fuentes → sin errores y guardar → persisten al recargar
6.7. Resetear ajustes de PDF → sin errores y guardar → persisten al recargar
6.8. Recargando la pagina Ctrl+R mantenien los vlaores guardados

Checkout

Paso 7 de 29
7.1. Chekout menos de 400€ → F2 activado → campo NIF no debe ser obligatorio ( checkout elementor)
7.2. Chekout mas de 400€ → F2 activado → campo NIF debe ser obligatorio ( checkout elementor)
7.3. Chekout mas de 400€ → F2 activado + Sector Autorizado activado → campo NIF no debe ser obligatorio ( checkout elementor)
7.4. NIF inválido → Chekout Elementor → Aviso error
7.5. NIF válido → Validar NIF con censo de Hacienda activado → Nombre no coincide con NIF → Chekout Elementor → Aviso error
7.6. NIF válido → Validar NIF con censo de Hacienda activado → Nombre coincide con NIF → Chekout Elementor → Sin error
7.7. NIF inválido→ Chekout Gutenberg → Aviso error
7.8. NIF válido → Validar NIF con censo de Hacienda activado → Nombre no coincide con NIF → Chekout Gutenberg → Aviso error
7.9. NIF válido → Validar NIF con censo de Hacienda activado → Nombre coincide con NIF → Chekout Gutenberg → Sin error

Emisión automática — Al completar pago

Paso 8 de 29
8.1. Crear pedido y marcar como pagado → factura emitida automáticamente
8.2. Verificar en Tab Emisiones que aparece la factura
8.3. Estado de la factura correcto (PEN o ENV según API)

Emisión automática — Al completar pedido

Paso 9 de 29
9.1. Cambiar pedido a "Completado" manualmente → factura emitida automáticamente
9.2. Pago completado solo (sin completar pedido) → NO emite
9.3. Verificar en Tab Emisiones

Emisión manual — Vitamin

Paso 10 de 29
10.1. Panel Vitamin visible en pedido procesado
10.2. Botón "Emitir" con API key válida → éxito, estado cambia a PEN/ENV
10.3. Botón "Emitir" con API key inválida → error visible en modal, no rompe pedido
10.4. Modal de debug muestra request y response correctamente
10.5. No se puede emitir dos veces la misma factura (botón deshabilitado o warning)
10.6. Emitir desde listado de pedidos (bulk action si existe)

Factura F2 (simplificada)

Paso 11 de 29
11.1. Emitir factura
11.2. Comprobar PDF
11.3. Comprobar email
11.4. Crear rectificativa
11.5. Emitir factura rectificada
11.6. Comprobar email rectificativa

Factura F1 (normal)

Paso 12 de 29
12.1. Emitir factura
12.2. Comprobar PDF con datos correctos y QR
12.3. Comprobar email
12.4. Crear rectificativa
12.5. Emitir factura rectificada
12.6. Comprobar PDF con datos correctos y QR
12.7. Comprobar email rectificativa

Comprador extranjero

Paso 13 de 29
13.1. País de facturación no ES + sin NIF español → payload incluye id_otro con código país
13.2. País extranjero con NIF local del país → id_otro correcto
13.3. País ES con NIF vacío y F2 desactivado → comportamiento controlado

Tipos de pedido — IVA

Paso 14 de 29
14.1. Pedido con IVA 21% → línea de impuesto en payload correcta
14.2. Pedido con IVA 10% → línea correcta
14.3. Pedido con IVA 4% → línea correcta
14.4. Pedido exento 0% → línea con tipo_impositivo: 0
14.5. Pedido con múltiples productos a distintos IVAs → múltiples líneas en payload
14.6. Pedido con descuento → importe total correcto en payload

Rectificativas

Paso 15 de 29
15.1. Reembolso total de pedido con factura F1 emitida → genera R1, referencia factura original
15.2. Reembolso parcial → genera R1 con importe correcto
15.3. Reembolso de 0€ → bloqueado, sin emisión, sin error fatal
15.4. Pedido sin factura previa → reembolso no emite rectificativa (o warning controlado)
15.5. Reembolso de F2 → genera negativo F2 o sustitución según lógica del builder

Anulación

Paso 16 de 29
16.1. Anular factura emitida (desde Vitamin) → request de cancelación enviado a API
16.2. Estado cambia a CAN en Tab Emisiones
16.3. Anular factura ya anulada → error controlado, sin fatal
16.4. Anular factura en estado PEN → comportamiento controlado

Cron — Facturas pendientes

Paso 17 de 29
17.1. Factura en estado PEN → cron ejecuta verificación de estado con API
17.2. API responde "no encontrada" → registro eliminado de verifactu_cron (sin reintento infinito)
17.3. Forzar ejecución de cron manualmente (WP-CLI o Action Scheduler) → sin fatales

PDF

Paso 18 de 29
18.1. Descarga PDF desde pedido admin → PDF generado correctamente
18.2. PDF incluye datos de empresa, NIF, líneas de pedido
18.3. PDF de rectificativa → diferenciado visualmente
18.4. Preview PDF en navegador → sin errores de header

QR VERIFACTU

Paso 19 de 29
19.1. QR visible en pedido admin tras emisión
19.2. QR es imagen válida (no roto)
19.3. QR incluido en email al cliente (si configurado)

Shortcodes en frontend

Paso 20 de 29
20.1. Shortcode de descarga PDF funciona en página de pedido cliente
20.2. Shortcode de QR funciona en página de pedido cliente

Fiscal — Nacional estándar

Paso 21 de 29
21.1. IVA (21%/10%/4%/0%)
21.2. Cálculo IVA desglosado
21.3. Validación NIF español
21.4. Retención IRPF si autónomo

Fiscal — Nacional exento

Paso 22 de 29
22.1. Exento IVA (e.g., educación, sanidad)
22.2. Asegurar 0% IVA
22.3. Mención legal de exención (art. 20 LIVA)

Fiscal — Canarias

Paso 23 de 29
23.1. Exento IVA
23.2. No cobrar IVA
23.3. IGIC aplica en destino (no gestionado por emisor)
23.4. Marcar exención (art. 21 LIVA)
23.5. Probar exportación de bienes

Fiscal — Ceuta/Melilla

Paso 24 de 29
24.1. Exento IVA
24.2. No cobrar IVA
24.3. IGIC aplica en destino (no gestionado por emisor)
24.4. Marcar exención (art. 21 LIVA)
24.5. Probar exportación de bienes

Fiscal — Intracomunitario B2B

Paso 25 de 29
25.1. Exento IVA si VAT válido (reverse charge)
25.2. Error si VAT inválido
25.3. Verificar VAT con VIES
25.4. Mención "Inversión del sujeto pasivo"

Fiscal — Intracomunitario B2C

Paso 26 de 29
26.1. IVA español aplica (límite umbral 10.000€/año para servicios digitales)
26.2. Cálculo IVA origen; umbrales para reverse charge

Fiscal — Exportación no UE

Paso 27 de 29
27.1. Exento IVA (exportación)
27.2. No IVA en factura
27.3. Justificante exención (e.g., DUA aduanas)

Fiscal — Operaciones mixtas

Paso 28 de 29
28.1. Desglose por línea; validación totales
28.2. IVA parcial + exenciones en mismo pedido

Datos del test

Paso 29 de 29