Saltar al contenido

Lección 12 de 25 · Lectura y práctica

Personalizar Facturas y Agregar Impuestos

Concepto clavePersonalizar facturas y gestionar impuestos en Stripe es como diseñar el recibo digital de tu negocio. No solo es un documento legal, sino una oportunidad de marca y claridad para el cliente. Imagina que cada.

Del concepto a la práctica

Taller de esta lección

Personalizar una factura exige separar presentación y cálculo fiscal. El impuesto debe aplicarse a la base definida y mostrarse como importe independiente; el total no debe sustituir al subtotal.

Ejemplo resuelto

Tres líneas: 1000, 800 y 200 céntimos. Subtotal=2000. Con una tasa ilustrativa del 21%, impuesto=2000×0,21=420 y total=2420 céntimos. La factura muestra moneda, líneas, tasa y total, sin mezclar unidades.

El 21% es solo una tasa matemática ficticia, no una recomendación fiscal para tu país, producto o cliente. Define si el impuesto es exclusivo o incluido, su base y el redondeo; Stripe Tax depende de configuración y datos aplicables. No afirmes que personalizar el PDF cumple obligaciones legales locales por sí solo. En este caso exclusivo, 2000+420=2420, equivalentes a 24,20 EUR.

Pruébalo

  1. Registra cada línea y suma la base.

  2. Aplica la tasa con una fórmula escrita.

  3. Redondea según una regla documentada.

  4. Compara subtotal, impuesto y total.

Error frecuente: calcular 21% sobre el total ya gravado. Corrección: aplica la tasa una sola vez sobre la base imponible y conserva ambos importes.

Comprueba tu resultado

La entrada completa es 1000, 800 y 200; la base es 2000, el impuesto 420 y el total 2420 céntimos. Si cambias la tasa, debes recalcular desde la base, no desde el total anterior.

Proveedor de pago que envía un webhook verificado al servidor; registro idempotente antes de conceder acceso.
CursaloMapa de práctica
Confirmar el pago en el servidor

El servidor concede acceso a partir de un evento verificado del proveedor y un registro persistente. La pantalla de éxito del navegador es una notificación, no una prueba suficiente de pago. La idempotencia evita duplicar la operación cuando el evento llega más de una vez.

Ver la infografía en tamaño completo ↗
Fuentes para profundizar

Concepto clave

Personalizar facturas y gestionar impuestos en Stripe es como diseñar el recibo digital de tu negocio. No solo es un documento legal, sino una oportunidad de marca y claridad para el cliente. Imagina que cada factura es un embajador silencioso de tu empresa: debe reflejar tu identidad, ser comprensible y cumplir con regulaciones fiscales locales.

Stripe te permite controlar dos aspectos fundamentales: el diseño visual (logo, colores, texto personalizado) y la estructura fiscal (impuestos, descuentos, desgloses). Esto es crucial porque una factura mal configurada puede generar confusiones en el cliente, problemas contables o incluso incumplimientos legales. Piensa en ello como el menú de un restaurante: debe ser atractivo, claro en precios e incluir todos los cargos aplicables.

Cómo funciona en la práctica

El proceso sigue estos pasos lógicos:

  1. Configuración inicial: Define plantillas de factura en el Dashboard de Stripe o mediante API.
  2. Personalización visual: Sube tu logo, ajusta colores y añade texto personalizado (como términos y condiciones).
  3. Configuración de impuestos: Establece tasas de IVA, GST o impuestos locales según la ubicación del cliente.
  4. Pruebas: Genera facturas de prueba para verificar que todo se muestra correctamente.
  5. Automatización: Integra con tu sistema para que las facturas se generen automáticamente con cada ciclo de facturación.

Un ejemplo común: una SaaS con clientes en España (21% IVA) y México (16% IVA). Stripe calcula automáticamente el impuesto correcto basado en la dirección del cliente, lo desglosa en la factura y lo remite a las autoridades correspondientes si usas Stripe Tax.

Codigo en accion

Configuración básica de una factura personalizada mediante API:

// 1. Configurar una plantilla de factura personalizada
const stripe = require('stripe')('sk_test_...');

async function setupInvoiceTemplate() {
  const invoiceTemplate = await stripe.invoiceItems.create({
    customer: 'cus_123456',
    amount: 2000, // $20.00 en centavos
    currency: 'usd',
    description: 'Suscripción mensual Pro',
    metadata: {
      plan_id: 'pro_monthly',
      internal_ref: 'INV-2023-001'
    }
  });
  
  // 2. Aplicar impuesto del 10%
  const taxRate = await stripe.taxRates.create({
    display_name: 'IVA',
    description: 'Impuesto al Valor Agregado',
    jurisdiction: 'ES',
    percentage: 10.0,
    inclusive: false // El impuesto se añade al precio base
  });
  
  // 3. Crear factura con personalización
  const invoice = await stripe.invoices.create({
    customer: 'cus_123456',
    collection_method: 'send_invoice',
    days_until_due: 30,
    default_tax_rates: [taxRate.id],
    footer: 'Gracias por su negocio. Contacto: soporte@empresa.com',
    metadata: {
      proyecto: 'Implementación Stripe',
      factura_numero: 'FAC-001'
    }
  });
  
  console.log('Factura creada:', invoice.id);
  return invoice;
}

Refactorización para mejor manejo de errores y reutilización:

// Versión mejorada con validaciones y funciones reutilizables
class InvoiceManager {
  constructor(stripeClient) {
    this.stripe = stripeClient;
  }
  
  async createInvoiceWithTax(customerId, amount, description, taxRateId) {
    try {
      // Validar parámetros
      if (!customerId || amount <= 0) {
        throw new Error('Parámetros inválidos');
      }
      
      const invoice = await this.stripe.invoices.create({
        customer: customerId,
        amount_due: amount,
        currency: 'usd',
        description: description,
        default_tax_rates: taxRateId ? [taxRateId] : [],
        footer: '© 2024 Mi Empresa. Todos los derechos reservados.',
        metadata: {
          generated_at: new Date().toISOString(),
          version: '2.0'
        }
      });
      
      return {
        success: true,
        invoiceId: invoice.id,
        invoiceUrl: invoice.hosted_invoice_url
      };
    } catch (error) {
      console.error('Error creando factura:', error);
      return {
        success: false,
        error: error.message
      };
    }
  }
}

// Uso
const manager = new InvoiceManager(stripe);
const result = await manager.createInvoiceWithTax(
  'cus_123456', 
  2500, 
  'Suscripción trimestral', 
  'txr_789012'
);

Errores comunes

  • No configurar impuestos por ubicación: Cobrar la misma tasa a todos los clientes sin importar su país. Solución: Usa Stripe Tax o configura múltiples tax rates basados en el país del cliente.
  • Olvidar el footer personalizado: Dejar el texto por defecto que no refleja tu marca. Solución: Siempre define un footer con información de contacto y términos relevantes.
  • No probar facturas en diferentes monedas: Asumir que el formato funciona igual en USD, EUR o JPY. Solución: Genera facturas de prueba en todas las monedas que soportas.
  • Ignorar los webhooks de facturación: No escuchar eventos como invoice.paid o invoice.payment_failed. Solución: Configura webhooks para actualizar el estado de suscripciones automáticamente.
  • Usar metadata incorrectamente: Poner información crítica en metadata en lugar de en campos dedicados. Solución: Usa metadata solo para datos auxiliares, no para cálculos de precios o impuestos.

Checklist de dominio

  1. ¿Puedes crear una plantilla de factura con tu logo y colores corporativos?
  2. ¿Sabes configurar diferentes tasas de impuestos para distintos países?
  3. ¿Has implementado lógica para manejar facturas vencidas o fallidas?
  4. ¿Puedes generar facturas proforma antes del cargo real?
  5. ¿Has personalizado los emails que acompañan a las facturas?
  6. ¿Sabes acceder al PDF de una factura mediante API?
  7. ¿Has probado el flujo completo con webhooks de facturación?

Implementa un sistema de facturación con impuestos multi-país

En este ejercicio práctico, crearás un sistema que genera facturas personalizadas con impuestos específicos por país.

  1. Configuración inicial: Crea una cuenta de prueba en Stripe y obtén tus claves API.
  2. Definir tasas de impuestos: Configura tres tax rates diferentes: 21% para España, 20% para Reino Unido, y 10% para México.
  3. Crear clientes de prueba: Genera tres clientes con direcciones en cada uno de los países mencionados.
  4. Implementar lógica de facturación: Escribe una función que, dado un cliente y un monto, genere una factura con el impuesto correcto automáticamente.
  5. Personalización: Añade un footer personalizado con tu información de contacto y un número de factura secuencial.
  6. Pruebas: Genera facturas para los tres clientes y verifica que los impuestos se calculen correctamente.
  7. Extra: Configura un webhook local (puedes usar ngrok) para recibir notificaciones cuando las facturas se paguen.

Entrega: Código funcional que cumpla todos los pasos y capturas de pantalla de las facturas generadas.

Pistas
  • Usa el campo 'address' del cliente para determinar el país y aplicar el tax rate correspondiente.
  • Considera usar Stripe Tax si necesitas soportar muchos países, ya que maneja cálculos complejos automáticamente.
  • Para el número de factura secuencial, puedes usar el metadata de Stripe combinado con un contador en tu base de datos.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Implementación Profesional de Suscripciones y Facturación con Stripe

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.