{"version":3,"sources":["../src/utils/currency.ts","../src/components/BirhausCurrencyDisplay.tsx","../src/components/BirhausPaymentForm.tsx","../src/components/BirhausAccountSummary.tsx","../src/components/BirhausTransactionList.tsx","../src/components/BirhausFinancialMetricCard.tsx","../src/components/BirhausBudgetTracker.tsx","../src/components/BirhausInvestmentPortfolio.tsx","../src/components/v3/BirhausPaymentFormV3.tsx","../src/components/v3/BirhausAccountSummaryV3.tsx","../src/components/v3/BirhausTransactionListV3.tsx","../src/hooks/useCurrency.ts","../src/hooks/useTransactions.ts","../src/hooks/useFinancialMetrics.ts"],"names":["twMerge","clsx","useBirhaus","React","jsx","cn","DollarSign","CreditCard","Building2","Smartphone","useState","useCallback","jsxs","AlertTriangle","BirhausSpinner","PiggyBank","TrendingUp","Wallet","EyeOff","Eye","AlertCircle","Fragment","ArrowDownLeft","ArrowUpRight","Clock","Search","Filter","ChevronDown","Download","TrendingDown","Minus","Info","Utensils","Car","Home","Plane","Heart","BookOpen","ShoppingCart","Calculator","CheckCircle","PieChart","Plus","Edit","Trash2","BarChart3","Calendar","Target","cva","useTheme","formatCurrency","amount","selectedMethod","Shield","Sparkles","Lock","Banknote","Coffee","X","useEffect","useMemo","exportTransactions"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Currency utilities for BIRHAUS Financial components\n * SEPRELAD compliant and Paraguay-first\n */\n\nimport type { CurrencyCode, Currency, CurrencyFormatOptions } from '../types/financial'\n\n/**\n * Supported currencies with Paraguay-first configuration\n */\nexport const SUPPORTED_CURRENCIES: Record<CurrencyCode, Currency> = {\n  PYG: {\n    code: 'PYG',\n    symbol: '₲',\n    nameEs: 'Guaraní paraguayo',\n    nameEn: 'Paraguayan guaraní',\n    decimals: 0, // Guaraní doesn't use decimal places\n    thousandSeparator: '.',\n    decimalSeparator: ','\n  },\n  USD: {\n    code: 'USD',\n    symbol: '$',\n    nameEs: 'Dólar estadounidense',\n    nameEn: 'US dollar',\n    decimals: 2,\n    thousandSeparator: ',',\n    decimalSeparator: '.'\n  },\n  EUR: {\n    code: 'EUR',\n    symbol: '€',\n    nameEs: 'Euro',\n    nameEn: 'Euro',\n    decimals: 2,\n    thousandSeparator: '.',\n    decimalSeparator: ','\n  },\n  BRL: {\n    code: 'BRL',\n    symbol: 'R$',\n    nameEs: 'Real brasileño',\n    nameEn: 'Brazilian real',\n    decimals: 2,\n    thousandSeparator: '.',\n    decimalSeparator: ','\n  },\n  ARS: {\n    code: 'ARS',\n    symbol: '$',\n    nameEs: 'Peso argentino',\n    nameEn: 'Argentine peso',\n    decimals: 2,\n    thousandSeparator: '.',\n    decimalSeparator: ','\n  }\n}\n\n/**\n * Exchange rates (mock data - in production, fetch from API)\n * Base currency: USD\n */\nexport const EXCHANGE_RATES: Record<CurrencyCode, number> = {\n  USD: 1,\n  PYG: 7300, // 1 USD = 7300 PYG (approximate)\n  EUR: 0.85, // 1 USD = 0.85 EUR (approximate)\n  BRL: 5.2,  // 1 USD = 5.2 BRL (approximate)\n  ARS: 800   // 1 USD = 800 ARS (approximate)\n}\n\n/**\n * SEPRELAD reporting thresholds in USD\n */\nexport const SEPRELAD_THRESHOLDS = {\n  CASH_OPERATION: 10000, // USD 10,000 for cash operations\n  SUSPICIOUS_OPERATION: 5000, // USD 5,000 for suspicious operations\n  DAILY_CUMULATIVE: 10000 // USD 10,000 cumulative daily\n}\n\n/**\n * Format currency amount according to locale and currency rules\n */\nexport function formatCurrency(\n  amount: number,\n  options: Partial<CurrencyFormatOptions> = {}\n): string {\n  const {\n    currency = 'PYG',\n    locale = 'es-PY',\n    showSymbol = true,\n    showCode = false,\n    minimumFractionDigits,\n    maximumFractionDigits\n  } = options\n\n  const currencyInfo = SUPPORTED_CURRENCIES[currency]\n  if (!currencyInfo) {\n    throw new Error(`Unsupported currency: ${currency}`)\n  }\n\n  // Handle special case for Guaraní (no decimals)\n  const fracDigits = currency === 'PYG' ? 0 : (minimumFractionDigits ?? currencyInfo.decimals)\n  const maxFracDigits = currency === 'PYG' ? 0 : (maximumFractionDigits ?? currencyInfo.decimals)\n\n  try {\n    // Use Intl.NumberFormat for proper localization\n    const formatter = new Intl.NumberFormat(locale, {\n      style: 'currency',\n      currency: currency,\n      minimumFractionDigits: fracDigits,\n      maximumFractionDigits: maxFracDigits\n    })\n\n    let formatted = formatter.format(amount)\n\n    // For Paraguay locale with PYG, ensure proper formatting\n    if (currency === 'PYG' && locale.startsWith('es')) {\n      // Format: ₲ 1.234.567 (with spaces and dots as thousand separators)\n      const numberPart = Math.abs(amount).toLocaleString('es-PY')\n      const sign = amount < 0 ? '-' : ''\n      formatted = `${sign}${currencyInfo.symbol} ${numberPart}`\n    }\n\n    // Add currency code if requested\n    if (showCode && !showSymbol) {\n      const numberPart = Math.abs(amount).toLocaleString(locale, {\n        minimumFractionDigits: fracDigits,\n        maximumFractionDigits: maxFracDigits\n      })\n      const sign = amount < 0 ? '-' : ''\n      formatted = `${sign}${numberPart} ${currency}`\n    } else if (showCode && showSymbol) {\n      formatted = `${formatted} ${currency}`\n    }\n\n    return formatted\n\n  } catch (error) {\n    // Fallback formatting if Intl.NumberFormat fails\n    console.warn('Currency formatting failed, using fallback:', error)\n    \n    const numberPart = Math.abs(amount).toFixed(fracDigits)\n    const sign = amount < 0 ? '-' : ''\n    \n    if (showSymbol) {\n      return `${sign}${currencyInfo.symbol} ${numberPart}`\n    } else if (showCode) {\n      return `${sign}${numberPart} ${currency}`\n    } else {\n      return `${sign}${numberPart}`\n    }\n  }\n}\n\n/**\n * Parse currency string back to number\n */\nexport function parseCurrency(value: string, currency: CurrencyCode = 'PYG'): number | null {\n  if (!value || typeof value !== 'string') {\n    return null\n  }\n\n  const currencyInfo = SUPPORTED_CURRENCIES[currency]\n  if (!currencyInfo) {\n    return null\n  }\n\n  // Remove currency symbols and codes\n  let cleanValue = value\n    .replace(new RegExp(`\\\\${currencyInfo.symbol}`, 'g'), '')\n    .replace(new RegExp(currency, 'g'), '')\n    .trim()\n\n  // Handle negative values\n  const isNegative = cleanValue.startsWith('-')\n  if (isNegative) {\n    cleanValue = cleanValue.substring(1)\n  }\n\n  // Remove thousand separators and replace decimal separator\n  if (currency === 'PYG') {\n    // For Guaraní: remove dots (thousand separators)\n    cleanValue = cleanValue.replace(/\\./g, '')\n  } else {\n    // For other currencies: handle both comma and dot separators\n    // First remove thousand separators, then handle decimal\n    if (cleanValue.includes(',') && cleanValue.includes('.')) {\n      // Determine which is decimal separator (last occurrence)\n      const lastComma = cleanValue.lastIndexOf(',')\n      const lastDot = cleanValue.lastIndexOf('.')\n      \n      if (lastDot > lastComma) {\n        // Dot is decimal separator\n        cleanValue = cleanValue.replace(/,/g, '').replace('.', '.')\n      } else {\n        // Comma is decimal separator\n        cleanValue = cleanValue.replace(/\\./g, '').replace(',', '.')\n      }\n    } else if (cleanValue.includes(',')) {\n      // Only comma - could be thousand or decimal separator\n      const commaCount = (cleanValue.match(/,/g) || []).length\n      if (commaCount === 1 && cleanValue.split(',')[1].length <= 2) {\n        // Likely decimal separator\n        cleanValue = cleanValue.replace(',', '.')\n      } else {\n        // Thousand separator\n        cleanValue = cleanValue.replace(/,/g, '')\n      }\n    }\n  }\n\n  // Parse the number\n  const parsed = parseFloat(cleanValue)\n  \n  if (isNaN(parsed)) {\n    return null\n  }\n\n  return isNegative ? -parsed : parsed\n}\n\n/**\n * Convert amount from one currency to another\n */\nexport function convertCurrency(\n  amount: number,\n  fromCurrency: CurrencyCode,\n  toCurrency: CurrencyCode\n): number {\n  if (fromCurrency === toCurrency) {\n    return amount\n  }\n\n  // Convert to USD first, then to target currency\n  const usdAmount = amount / EXCHANGE_RATES[fromCurrency]\n  const convertedAmount = usdAmount * EXCHANGE_RATES[toCurrency]\n\n  // Round based on target currency decimals\n  const targetDecimals = SUPPORTED_CURRENCIES[toCurrency].decimals\n  return Math.round(convertedAmount * Math.pow(10, targetDecimals)) / Math.pow(10, targetDecimals)\n}\n\n/**\n * Check if amount exceeds SEPRELAD reporting thresholds\n */\nexport function checkSEPRELADThreshold(\n  amount: number,\n  currency: CurrencyCode,\n  operationType: 'cash' | 'suspicious' | 'cumulative' = 'cash'\n): { requiresReport: boolean; thresholdUSD: number; amountUSD: number } {\n  const amountUSD = convertCurrency(amount, currency, 'USD')\n  \n  let thresholdUSD: number\n  switch (operationType) {\n    case 'cash':\n      thresholdUSD = SEPRELAD_THRESHOLDS.CASH_OPERATION\n      break\n    case 'suspicious':\n      thresholdUSD = SEPRELAD_THRESHOLDS.SUSPICIOUS_OPERATION\n      break\n    case 'cumulative':\n      thresholdUSD = SEPRELAD_THRESHOLDS.DAILY_CUMULATIVE\n      break\n    default:\n      thresholdUSD = SEPRELAD_THRESHOLDS.CASH_OPERATION\n  }\n\n  return {\n    requiresReport: amountUSD >= thresholdUSD,\n    thresholdUSD,\n    amountUSD\n  }\n}\n\n/**\n * Get currency info\n */\nexport function getCurrencyInfo(currency: CurrencyCode): Currency {\n  return SUPPORTED_CURRENCIES[currency]\n}\n\n/**\n * Validate currency amount for display and processing\n */\nexport function validateCurrencyAmount(\n  amount: number,\n  currency: CurrencyCode\n): { valid: boolean; errors: string[] } {\n  const errors: string[] = []\n\n  // Check if amount is a valid number\n  if (!Number.isFinite(amount)) {\n    errors.push('Invalid number format')\n    return { valid: false, errors }\n  }\n\n  // Check for reasonable limits\n  if (Math.abs(amount) > 1000000000000) { // 1 trillion limit\n    errors.push('Amount exceeds maximum allowed value')\n  }\n\n  // Check decimal places for currency\n  const currencyInfo = SUPPORTED_CURRENCIES[currency]\n  if (currencyInfo) {\n    const decimalPlaces = (amount.toString().split('.')[1] || '').length\n    if (decimalPlaces > currencyInfo.decimals) {\n      errors.push(`Too many decimal places for ${currency} (max: ${currencyInfo.decimals})`)\n    }\n  }\n\n  // Check for SEPRELAD thresholds (warnings, not errors)\n  const seprelad = checkSEPRELADThreshold(amount, currency)\n  if (seprelad.requiresReport) {\n    // This is informational, not an error\n    console.info(`Amount exceeds SEPRELAD reporting threshold: ${seprelad.amountUSD} USD`)\n  }\n\n  return {\n    valid: errors.length === 0,\n    errors\n  }\n}\n\n/**\n * Format currency for form inputs (removes symbols, keeps numbers)\n */\nexport function formatCurrencyForInput(\n  amount: number,\n  currency: CurrencyCode = 'PYG'\n): string {\n  const currencyInfo = SUPPORTED_CURRENCIES[currency]\n  if (!currencyInfo) {\n    return amount.toString()\n  }\n\n  if (currency === 'PYG') {\n    // For Guaraní: no decimals, dot as thousand separator\n    return amount.toLocaleString('es-PY', {\n      useGrouping: true,\n      minimumFractionDigits: 0,\n      maximumFractionDigits: 0\n    })\n  } else {\n    // For other currencies: include decimals\n    return amount.toLocaleString('es-PY', {\n      useGrouping: true,\n      minimumFractionDigits: currencyInfo.decimals,\n      maximumFractionDigits: currencyInfo.decimals\n    })\n  }\n}","'use client'\n\nimport React from 'react'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { formatCurrency } from '../utils/currency'\nimport type { BirhausCurrencyDisplayProps } from '../types/financial'\n\n// ChartInputs type for cn utility\ntype ChartInputs = Array<string | number | boolean | null | undefined | string[] | Record<string, boolean>>\n\n// Local cn utility\nconst cn = (...inputs: ChartInputs) => twMerge(clsx(inputs))\n\n/**\n * BirhausCurrencyDisplay - Currency amount display component\n * \n * Features:\n * - Paraguay-first currency formatting (Guaraní as default)\n * - SEPRELAD compliant number formatting\n * - Multiple currency support (PYG, USD, EUR, BRL, ARS)\n * - Accessibility with proper ARIA labels\n * - Spanish-first localization\n * - Configurable symbol and code display\n */\nexport function BirhausCurrencyDisplay({\n  amount,\n  currency = 'PYG',\n  locale,\n  showSymbol = true,\n  showCode = false,\n  className,\n  ...props\n}: BirhausCurrencyDisplayProps) {\n  const { language, reportViolation } = useBirhaus()\n\n  // BIRHAUS validation: Check for potentially problematic amounts\n  React.useEffect(() => {\n    // SEPRELAD compliance: Flag large amounts for potential reporting\n    if (currency === 'USD' && amount >= 10000) {\n      reportViolation({\n        type: 'performance',\n        severity: 'warning',\n        element: document.createElement('span'), // Placeholder element\n        message: `USD amount ${amount} exceeds SEPRELAD reporting threshold`,\n        messageEs: `Monto USD ${amount} supera umbral de reporte SEPRELAD`,\n        messageEn: `USD amount ${amount} exceeds SEPRELAD reporting threshold`,\n        recommendation: 'Ensure proper SEPRELAD compliance reporting for amounts ≥ $10,000 USD',\n        birhausPrinciple: 8 // Compliance principle (hypothetical extension)\n      })\n    }\n\n    // Validate reasonable amount ranges\n    if (Math.abs(amount) > 1000000000) { // 1 billion limit\n      reportViolation({\n        type: 'performance',\n        severity: 'warning',\n        element: document.createElement('span'),\n        message: `Currency amount ${amount} exceeds reasonable display limits`,\n        messageEs: `Monto ${amount} supera límites razonables de visualización`,\n        messageEn: `Currency amount ${amount} exceeds reasonable display limits`,\n        recommendation: 'Consider using abbreviated notation for very large amounts',\n        birhausPrinciple: 1 // Cognitive load reduction\n      })\n    }\n  }, [amount, currency, reportViolation])\n\n  // Use provided locale or infer from BIRHAUS language\n  const displayLocale = locale || (language === 'es' ? 'es-PY' : 'en-US')\n\n  // Format the currency amount\n  const formattedAmount = formatCurrency(amount, {\n    currency,\n    locale: displayLocale,\n    showSymbol,\n    showCode\n  })\n\n  // Determine text color based on amount (common financial UX pattern)\n  const amountColorClass = cn(\n    'font-mono', // Monospace for better number alignment\n    {\n      'text-green-600': amount > 0,\n      'text-red-600': amount < 0,\n      'text-birhaus-muted-foreground': amount === 0\n    }\n  )\n\n  // ARIA label for accessibility\n  const ariaLabel = React.useMemo(() => {\n    const absAmount = Math.abs(amount)\n    const sign = amount < 0 ? (language === 'es' ? 'menos ' : 'negative ') : ''\n    \n    // Currency names in Spanish and English\n    const currencyNames = {\n      PYG: { es: 'guaraníes', en: 'Paraguayan guaraníes' },\n      USD: { es: 'dólares americanos', en: 'US dollars' },\n      EUR: { es: 'euros', en: 'euros' },\n      BRL: { es: 'reales brasileños', en: 'Brazilian reais' },\n      ARS: { es: 'pesos argentinos', en: 'Argentine pesos' }\n    }\n\n    const currencyName = currencyNames[currency]?.[language] || currencyNames[currency]?.es\n    \n    return `${sign}${absAmount.toLocaleString(displayLocale)} ${currencyName}`\n  }, [amount, currency, language, displayLocale])\n\n  return (\n    <span\n      className={cn(\n        'inline-flex items-center',\n        amountColorClass,\n        className\n      )}\n      aria-label={ariaLabel}\n      title={ariaLabel}\n      {...props}\n    >\n      {formattedAmount}\n    </span>\n  )\n}\n\nexport type { BirhausCurrencyDisplayProps }","'use client'\n\nimport React, { useState, useCallback } from 'react'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { BirhausSpinner } from '@birhaus/loading'\nimport { CreditCard, Smartphone, Building2, DollarSign, AlertTriangle } from 'lucide-react'\nimport { formatCurrency } from '../utils/currency'\nimport type { \n  BirhausPaymentFormProps, \n  PaymentFormData, \n  PaymentMethod,\n  PaymentMethodInfo \n} from '../types/financial'\n\n// ChartInputs type for cn utility\ntype ChartInputs = Array<string | number | boolean | null | undefined | string[] | Record<string, boolean>>\n\n// Local cn utility\nconst cn = (...inputs: ChartInputs) => twMerge(clsx(inputs))\n\n// Default payment method configurations\nconst defaultPaymentMethods: Record<PaymentMethod, PaymentMethodInfo> = {\n  efectivo: {\n    tipo: 'efectivo',\n    nombreEs: 'Efectivo',\n    nombreEn: 'Cash',\n    icono: <DollarSign size={20} />,\n    requiereVerificacion: false,\n    limiteTransaccion: 50000000 // 50M PYG SEPRELAD limit\n  },\n  tarjeta_debito: {\n    tipo: 'tarjeta_debito',\n    nombreEs: 'Tarjeta de Débito',\n    nombreEn: 'Debit Card',\n    icono: <CreditCard size={20} />,\n    requiereVerificacion: true,\n    limiteTransaccion: 10000000, // 10M PYG daily limit\n    comision: 0,\n    tiempoProcesamientoMinutos: 5\n  },\n  tarjeta_credito: {\n    tipo: 'tarjeta_credito',\n    nombreEs: 'Tarjeta de Crédito',\n    nombreEn: 'Credit Card',\n    icono: <CreditCard size={20} />,\n    requiereVerificacion: true,\n    limiteTransaccion: 20000000, // 20M PYG\n    comision: 2.5, // 2.5% commission\n    tiempoProcesamientoMinutos: 10\n  },\n  transferencia: {\n    tipo: 'transferencia',\n    nombreEs: 'Transferencia Bancaria',\n    nombreEn: 'Bank Transfer',\n    icono: <Building2 size={20} />,\n    requiereVerificacion: true,\n    limiteTransaccion: 100000000, // 100M PYG\n    comision: 1000, // Fixed commission\n    tiempoProcesamientoMinutos: 60\n  },\n  billetera_digital: {\n    tipo: 'billetera_digital',\n    nombreEs: 'Billetera Digital',\n    nombreEn: 'Digital Wallet',\n    icono: <Smartphone size={20} />,\n    requiereVerificacion: true,\n    limiteTransaccion: 5000000, // 5M PYG\n    comision: 0.5, // 0.5% commission\n    tiempoProcesamientoMinutos: 2\n  }\n}\n\n/**\n * BirhausPaymentForm - Payment form component\n * \n * Features:\n * - SEPRELAD compliant payment processing\n * - Multiple payment method support\n * - Real-time validation and limits checking\n * - Spanish-first labels and messages\n * - Accessibility compliant form structure\n * - Progressive disclosure of payment details\n * - Commission and processing time display\n */\nexport function BirhausPaymentForm({\n  availablePaymentMethods,\n  onPaymentSubmit,\n  amount,\n  currency = 'PYG',\n  recipientInfo,\n  className,\n  ...props\n}: BirhausPaymentFormProps) {\n  const { language, reportViolation } = useBirhaus()\n  const [isSubmitting, setIsSubmitting] = useState(false)\n  const [selectedMethod, setSelectedMethod] = useState<PaymentMethod | null>(null)\n  const [formData, setFormData] = useState<Partial<PaymentFormData>>({\n    monto: amount,\n    moneda: currency,\n    destinatario: recipientInfo ? {\n      nombre: recipientInfo.nombreEs,\n      documento: recipientInfo.documento,\n      cuenta: recipientInfo.cuenta\n    } : undefined\n  })\n  const [errors, setErrors] = useState<Record<string, string>>({})\n\n  // BIRHAUS validation: Check cognitive load (max 7 payment methods - Miller's Law)\n  React.useEffect(() => {\n    if (availablePaymentMethods.length > 7) {\n      reportViolation({\n        type: 'cognitive',\n        severity: 'warning',\n        element: document.createElement('form'),\n        message: `Payment form has ${availablePaymentMethods.length} payment methods (max recommended: 7)`,\n        messageEs: `Formulario de pago con ${availablePaymentMethods.length} métodos de pago (máximo recomendado: 7)`,\n        messageEn: `Payment form has ${availablePaymentMethods.length} payment methods (max recommended: 7)`,\n        recommendation: 'Group payment methods or use progressive disclosure to reduce cognitive load',\n        birhausPrinciple: 1 // Cognitive load reduction\n      })\n    }\n  }, [availablePaymentMethods.length, reportViolation])\n\n  // Get payment method info\n  const getPaymentMethodInfo = useCallback((method: PaymentMethod): PaymentMethodInfo => {\n    return availablePaymentMethods.find(pm => pm.tipo === method) || defaultPaymentMethods[method]\n  }, [availablePaymentMethods])\n\n  // Validate form data\n  const validateForm = useCallback((): boolean => {\n    const newErrors: Record<string, string> = {}\n\n    if (!selectedMethod) {\n      newErrors.metodo = language === 'es' \n        ? 'Selecciona un método de pago'\n        : 'Select a payment method'\n    }\n\n    if (!formData.destinatario?.nombre?.trim()) {\n      newErrors.destinatario = language === 'es'\n        ? 'Ingresa el nombre del destinatario'\n        : 'Enter recipient name'\n    }\n\n    if (!formData.destinatario?.documento?.trim()) {\n      newErrors.documento = language === 'es'\n        ? 'Ingresa el documento del destinatario'\n        : 'Enter recipient document'\n    }\n\n    if (!formData.concepto?.trim()) {\n      newErrors.concepto = language === 'es'\n        ? 'Ingresa el concepto del pago'\n        : 'Enter payment concept'\n    }\n\n    // Check payment method limits\n    if (selectedMethod) {\n      const methodInfo = getPaymentMethodInfo(selectedMethod)\n      if (methodInfo.limiteTransaccion && amount > methodInfo.limiteTransaccion) {\n        newErrors.monto = language === 'es'\n          ? `Monto excede límite de ${formatCurrency(methodInfo.limiteTransaccion, { currency })}`\n          : `Amount exceeds limit of ${formatCurrency(methodInfo.limiteTransaccion, { currency })}`\n      }\n    }\n\n    setErrors(newErrors)\n    return Object.keys(newErrors).length === 0\n  }, [selectedMethod, formData, amount, currency, language, getPaymentMethodInfo])\n\n  // Handle form submission\n  const handleSubmit = useCallback(async (e: React.FormEvent) => {\n    e.preventDefault()\n    \n    if (!validateForm() || !selectedMethod) return\n\n    setIsSubmitting(true)\n    try {\n      const submitData: PaymentFormData = {\n        metodo: selectedMethod,\n        monto: amount,\n        moneda: currency,\n        destinatario: {\n          nombre: formData.destinatario!.nombre!,\n          documento: formData.destinatario!.documento!,\n          cuenta: formData.destinatario?.cuenta\n        },\n        concepto: formData.concepto!,\n        programada: formData.programada,\n        fechaProgramada: formData.fechaProgramada\n      }\n\n      await onPaymentSubmit(submitData)\n    } catch (error) {\n      console.error('Payment submission error:', error)\n    } finally {\n      setIsSubmitting(false)\n    }\n  }, [validateForm, selectedMethod, amount, currency, formData, onPaymentSubmit])\n\n  // Update form data\n  const updateFormData = useCallback((updates: Partial<PaymentFormData>) => {\n    setFormData(prev => ({ ...prev, ...updates }))\n    // Clear related errors\n    if (updates.destinatario) {\n      const newErrors = { ...errors }\n      delete newErrors.destinatario\n      delete newErrors.documento\n      setErrors(newErrors)\n    }\n  }, [errors])\n\n  return (\n    <form \n      className={cn('space-y-6', className)}\n      onSubmit={handleSubmit}\n      {...props}\n    >\n      {/* Amount Display */}\n      <div className=\"bg-birhaus-muted/30 p-4 rounded-lg\">\n        <div className=\"text-center\">\n          <p className=\"text-sm text-birhaus-muted-foreground\">\n            {language === 'es' ? 'Monto a pagar' : 'Amount to pay'}\n          </p>\n          <p className=\"text-2xl font-bold text-birhaus-foreground\">\n            {formatCurrency(amount, { currency, showSymbol: true })}\n          </p>\n        </div>\n      </div>\n\n      {/* Payment Method Selection */}\n      <div className=\"space-y-3\">\n        <label className=\"block text-sm font-medium text-birhaus-foreground\">\n          {language === 'es' ? 'Método de pago' : 'Payment method'}\n        </label>\n        \n        <div className=\"grid gap-3\">\n          {availablePaymentMethods.map((method) => {\n            const isSelected = selectedMethod === method.tipo\n            const methodInfo = getPaymentMethodInfo(method.tipo)\n            const displayName = language === 'es' ? method.nombreEs : (method.nombreEn || method.nombreEs)\n            \n            // Check if method can handle the amount\n            const exceedsLimit = methodInfo.limiteTransaccion && amount > methodInfo.limiteTransaccion\n            \n            return (\n              <button\n                key={method.tipo}\n                type=\"button\"\n                onClick={() => !exceedsLimit && setSelectedMethod(method.tipo)}\n                disabled={!!exceedsLimit}\n                className={cn(\n                  'p-4 border rounded-lg text-left transition-all duration-200',\n                  'focus:outline-none focus:ring-2 focus:ring-birhaus-primary',\n                  isSelected && 'border-birhaus-primary bg-birhaus-primary/5',\n                  !isSelected && !exceedsLimit && 'border-birhaus-border hover:border-birhaus-primary/50',\n                  exceedsLimit && 'border-red-200 bg-red-50 opacity-50 cursor-not-allowed'\n                )}\n              >\n                <div className=\"flex items-start gap-3\">\n                  <div className=\"mt-1 text-birhaus-muted-foreground\">\n                    {method.icono}\n                  </div>\n                  \n                  <div className=\"flex-1\">\n                    <div className=\"flex items-center justify-between\">\n                      <h4 className=\"font-medium text-birhaus-foreground\">\n                        {displayName}\n                      </h4>\n                      {isSelected && (\n                        <div className=\"w-5 h-5 bg-birhaus-primary rounded-full flex items-center justify-center\">\n                          <div className=\"w-2 h-2 bg-white rounded-full\" />\n                        </div>\n                      )}\n                    </div>\n                    \n                    {/* Method details */}\n                    <div className=\"mt-1 text-xs text-birhaus-muted-foreground space-y-1\">\n                      {methodInfo.comision && (\n                        <p>\n                          {language === 'es' ? 'Comisión: ' : 'Fee: '}\n                          {typeof methodInfo.comision === 'number' && methodInfo.comision < 1\n                            ? `${methodInfo.comision}%`\n                            : formatCurrency(methodInfo.comision, { currency })}\n                        </p>\n                      )}\n                      \n                      {methodInfo.tiempoProcesamientoMinutos && (\n                        <p>\n                          {language === 'es' ? 'Procesamiento: ' : 'Processing: '}\n                          {methodInfo.tiempoProcesamientoMinutos < 60\n                            ? `${methodInfo.tiempoProcesamientoMinutos} min`\n                            : `${Math.round(methodInfo.tiempoProcesamientoMinutos / 60)}h`}\n                        </p>\n                      )}\n                      \n                      {exceedsLimit && (\n                        <div className=\"flex items-center gap-1 text-red-600\">\n                          <AlertTriangle size={12} />\n                          <span>\n                            {language === 'es' \n                              ? `Límite: ${formatCurrency(methodInfo.limiteTransaccion!, { currency })}`\n                              : `Limit: ${formatCurrency(methodInfo.limiteTransaccion!, { currency })}`}\n                          </span>\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                </div>\n              </button>\n            )\n          })}\n        </div>\n        \n        {errors.metodo && (\n          <p className=\"text-sm text-red-600\">{errors.metodo}</p>\n        )}\n      </div>\n\n      {/* Recipient Information */}\n      <div className=\"space-y-4\">\n        <h3 className=\"font-medium text-birhaus-foreground\">\n          {language === 'es' ? 'Información del destinatario' : 'Recipient information'}\n        </h3>\n        \n        <div className=\"grid gap-4 sm:grid-cols-2\">\n          <div>\n            <label className=\"block text-sm font-medium text-birhaus-foreground mb-1\">\n              {language === 'es' ? 'Nombre completo' : 'Full name'}\n            </label>\n            <input\n              type=\"text\"\n              value={formData.destinatario?.nombre || ''}\n              onChange={(e) => updateFormData({\n                destinatario: { ...formData.destinatario!, nombre: e.target.value }\n              })}\n              className={cn(\n                'w-full px-3 py-2 border rounded-md',\n                'focus:outline-none focus:ring-2 focus:ring-birhaus-primary',\n                errors.destinatario ? 'border-red-500' : 'border-birhaus-border'\n              )}\n              placeholder={language === 'es' ? 'Juan Pérez' : 'John Doe'}\n            />\n            {errors.destinatario && (\n              <p className=\"mt-1 text-sm text-red-600\">{errors.destinatario}</p>\n            )}\n          </div>\n          \n          <div>\n            <label className=\"block text-sm font-medium text-birhaus-foreground mb-1\">\n              {language === 'es' ? 'Documento' : 'Document'}\n            </label>\n            <input\n              type=\"text\"\n              value={formData.destinatario?.documento || ''}\n              onChange={(e) => updateFormData({\n                destinatario: { ...formData.destinatario!, documento: e.target.value }\n              })}\n              className={cn(\n                'w-full px-3 py-2 border rounded-md',\n                'focus:outline-none focus:ring-2 focus:ring-birhaus-primary',\n                errors.documento ? 'border-red-500' : 'border-birhaus-border'\n              )}\n              placeholder={language === 'es' ? '12345678' : '12345678'}\n            />\n            {errors.documento && (\n              <p className=\"mt-1 text-sm text-red-600\">{errors.documento}</p>\n            )}\n          </div>\n        </div>\n\n        {/* Account number (conditional) */}\n        {selectedMethod === 'transferencia' && (\n          <div>\n            <label className=\"block text-sm font-medium text-birhaus-foreground mb-1\">\n              {language === 'es' ? 'Número de cuenta' : 'Account number'}\n            </label>\n            <input\n              type=\"text\"\n              value={formData.destinatario?.cuenta || ''}\n              onChange={(e) => updateFormData({\n                destinatario: { ...formData.destinatario!, cuenta: e.target.value }\n              })}\n              className=\"w-full px-3 py-2 border border-birhaus-border rounded-md focus:outline-none focus:ring-2 focus:ring-birhaus-primary\"\n              placeholder=\"123456789\"\n            />\n          </div>\n        )}\n      </div>\n\n      {/* Payment concept */}\n      <div>\n        <label className=\"block text-sm font-medium text-birhaus-foreground mb-1\">\n          {language === 'es' ? 'Concepto' : 'Concept'}\n        </label>\n        <input\n          type=\"text\"\n          value={formData.concepto || ''}\n          onChange={(e) => updateFormData({ concepto: e.target.value })}\n          className={cn(\n            'w-full px-3 py-2 border rounded-md',\n            'focus:outline-none focus:ring-2 focus:ring-birhaus-primary',\n            errors.concepto ? 'border-red-500' : 'border-birhaus-border'\n          )}\n          placeholder={language === 'es' ? 'Pago de servicios' : 'Service payment'}\n        />\n        {errors.concepto && (\n          <p className=\"mt-1 text-sm text-red-600\">{errors.concepto}</p>\n        )}\n      </div>\n\n      {/* Submit button */}\n      <button\n        type=\"submit\"\n        disabled={isSubmitting || !selectedMethod}\n        className={cn(\n          'w-full py-3 px-4 rounded-md font-medium transition-all duration-200',\n          'focus:outline-none focus:ring-2 focus:ring-birhaus-primary focus:ring-offset-2',\n          !isSubmitting && selectedMethod\n            ? 'bg-birhaus-primary text-white hover:bg-birhaus-primary/90'\n            : 'bg-birhaus-muted text-birhaus-muted-foreground cursor-not-allowed'\n        )}\n      >\n        {isSubmitting ? (\n          <div className=\"flex items-center justify-center gap-2\">\n            <BirhausSpinner size=\"sm\" color=\"current\" />\n            <span>{language === 'es' ? 'Procesando...' : 'Processing...'}</span>\n          </div>\n        ) : (\n          <span>\n            {language === 'es' ? 'Realizar pago' : 'Make payment'}\n            {selectedMethod && (() => {\n              const methodInfo = getPaymentMethodInfo(selectedMethod)\n              const commission = methodInfo.comision\n              if (commission) {\n                const commissionAmount = typeof commission === 'number' && commission < 1\n                  ? amount * (commission / 100)\n                  : commission\n                return ` (+ ${formatCurrency(commissionAmount, { currency })})`\n              }\n              return ''\n            })()}\n          </span>\n        )}\n      </button>\n\n      {errors.monto && (\n        <p className=\"text-sm text-red-600 text-center\">{errors.monto}</p>\n      )}\n    </form>\n  )\n}\n\nexport type { BirhausPaymentFormProps, PaymentFormData }","'use client'\n\nimport React from 'react'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { Eye, EyeOff, CreditCard, Wallet, PiggyBank, TrendingUp, AlertCircle } from 'lucide-react'\nimport { formatCurrency } from '../utils/currency'\nimport { BirhausCurrencyDisplay } from './BirhausCurrencyDisplay'\nimport type { BirhausAccountSummaryProps, Account, AccountType, AccountStatus } from '../types/financial'\n\n// ChartInputs type for cn utility\ntype ChartInputs = Array<string | number | boolean | null | undefined | string[] | Record<string, boolean>>\n\n// Local cn utility\nconst cn = (...inputs: ChartInputs) => twMerge(clsx(inputs))\n\n// Account type icons and colors\nconst accountTypeConfig: Record<AccountType, { \n  icon: React.ReactNode\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  corriente: {\n    icon: <CreditCard size={20} />,\n    colorClass: 'text-blue-600 bg-blue-100',\n    nameEs: 'Cuenta Corriente',\n    nameEn: 'Checking Account'\n  },\n  ahorros: {\n    icon: <PiggyBank size={20} />,\n    colorClass: 'text-green-600 bg-green-100',\n    nameEs: 'Cuenta de Ahorros',\n    nameEn: 'Savings Account'\n  },\n  credito: {\n    icon: <CreditCard size={20} />,\n    colorClass: 'text-purple-600 bg-purple-100',\n    nameEs: 'Línea de Crédito',\n    nameEn: 'Credit Line'\n  },\n  inversion: {\n    icon: <TrendingUp size={20} />,\n    colorClass: 'text-orange-600 bg-orange-100',\n    nameEs: 'Cuenta de Inversión',\n    nameEn: 'Investment Account'\n  }\n}\n\n// Account status configuration\nconst accountStatusConfig: Record<AccountStatus, {\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  activa: {\n    colorClass: 'text-green-700 bg-green-100',\n    nameEs: 'Activa',\n    nameEn: 'Active'\n  },\n  inactiva: {\n    colorClass: 'text-gray-700 bg-gray-100',\n    nameEs: 'Inactiva',\n    nameEn: 'Inactive'\n  },\n  bloqueada: {\n    colorClass: 'text-red-700 bg-red-100',\n    nameEs: 'Bloqueada',\n    nameEn: 'Blocked'\n  },\n  cerrada: {\n    colorClass: 'text-gray-700 bg-gray-200',\n    nameEs: 'Cerrada',\n    nameEn: 'Closed'\n  }\n}\n\n/**\n * BirhausAccountSummary - Account summary display component\n * \n * Features:\n * - Multiple account types with appropriate icons and colors\n * - Balance visibility toggle for privacy\n * - Account status indicators\n * - Spanish-first account type and status names\n * - Accessibility compliant with proper ARIA labels\n * - Responsive layout for different screen sizes\n * - Click handlers for account selection\n * - Support for inactive/closed account filtering\n */\nexport function BirhausAccountSummary({\n  accounts,\n  showBalances = true,\n  showInactive = false,\n  onAccountClick,\n  className,\n  ...props\n}: BirhausAccountSummaryProps) {\n  const { language, reportViolation } = useBirhaus()\n  const [balancesVisible, setBalancesVisible] = React.useState(showBalances)\n\n  // Filter accounts based on showInactive setting\n  const filteredAccounts = React.useMemo(() => {\n    return accounts.filter(account => \n      showInactive || (account.estado === 'activa')\n    )\n  }, [accounts, showInactive])\n\n  // BIRHAUS validation: Check cognitive load (max 7 accounts visible - Miller's Law)\n  React.useEffect(() => {\n    if (filteredAccounts.length > 7) {\n      reportViolation({\n        type: 'cognitive',\n        severity: 'warning',\n        element: document.createElement('div'),\n        message: `Account summary shows ${filteredAccounts.length} accounts (max recommended: 7)`,\n        messageEs: `Resumen de cuentas muestra ${filteredAccounts.length} cuentas (máximo recomendado: 7)`,\n        messageEn: `Account summary shows ${filteredAccounts.length} accounts (max recommended: 7)`,\n        recommendation: 'Consider pagination or grouping for large numbers of accounts',\n        birhausPrinciple: 1 // Cognitive load reduction\n      })\n    }\n  }, [filteredAccounts.length, reportViolation])\n\n  // Calculate total balance across all active accounts\n  const totalBalance = React.useMemo(() => {\n    return filteredAccounts\n      .filter(account => account.estado === 'activa')\n      .reduce((sum, account) => {\n        // Convert all to PYG for summary (in real app, use proper currency conversion)\n        const balance = account.moneda === 'PYG' ? account.saldo : account.saldo * 7300\n        return sum + balance\n      }, 0)\n  }, [filteredAccounts])\n\n  // Toggle balance visibility\n  const toggleBalanceVisibility = React.useCallback(() => {\n    setBalancesVisible(prev => !prev)\n  }, [])\n\n  // Handle account click\n  const handleAccountClick = React.useCallback((account: Account) => {\n    onAccountClick?.(account)\n  }, [onAccountClick])\n\n  if (filteredAccounts.length === 0) {\n    return (\n      <div className={cn('p-6 text-center text-birhaus-muted-foreground', className)}>\n        <Wallet size={48} className=\"mx-auto mb-4 text-birhaus-muted-foreground/50\" />\n        <p>\n          {language === 'es' \n            ? 'No hay cuentas disponibles' \n            : 'No accounts available'}\n        </p>\n      </div>\n    )\n  }\n\n  return (\n    <div className={cn('space-y-4', className)} {...props}>\n      {/* Summary header with total balance */}\n      <div className=\"bg-gradient-to-r from-birhaus-primary to-birhaus-primary/80 p-6 rounded-lg text-white\">\n        <div className=\"flex items-center justify-between mb-2\">\n          <h2 className=\"text-lg font-semibold\">\n            {language === 'es' ? 'Resumen de Cuentas' : 'Account Summary'}\n          </h2>\n          \n          <button\n            onClick={toggleBalanceVisibility}\n            className=\"p-2 hover:bg-white/20 rounded-full transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-white/50\"\n            aria-label={balancesVisible \n              ? (language === 'es' ? 'Ocultar saldos' : 'Hide balances')\n              : (language === 'es' ? 'Mostrar saldos' : 'Show balances')}\n          >\n            {balancesVisible ? <EyeOff size={20} /> : <Eye size={20} />}\n          </button>\n        </div>\n        \n        <div className=\"space-y-1\">\n          <p className=\"text-white/80 text-sm\">\n            {language === 'es' ? 'Balance total' : 'Total balance'}\n          </p>\n          <p className=\"text-2xl font-bold\">\n            {balancesVisible ? (\n              <BirhausCurrencyDisplay \n                amount={totalBalance} \n                currency=\"PYG\" \n                className=\"text-white\"\n              />\n            ) : (\n              '••••••••'\n            )}\n          </p>\n          <p className=\"text-white/70 text-xs\">\n            {filteredAccounts.filter(a => a.estado === 'activa').length}{' '}\n            {language === 'es' ? 'cuentas activas' : 'active accounts'}\n          </p>\n        </div>\n      </div>\n\n      {/* Account list */}\n      <div className=\"space-y-3\">\n        {filteredAccounts.map((account) => {\n          const typeConfig = accountTypeConfig[account.tipo]\n          const statusConfig = accountStatusConfig[account.estado]\n          const displayName = language === 'es' ? account.nombreEs : (account.nombreEn || account.nombreEs)\n          const typeName = language === 'es' ? typeConfig.nameEs : typeConfig.nameEn\n          const statusName = language === 'es' ? statusConfig.nameEs : statusConfig.nameEn\n          \n          const isClickable = Boolean(onAccountClick)\n          const isInactive = account.estado !== 'activa'\n\n          return (\n            <div\n              key={account.id}\n              className={cn(\n                'p-4 border border-birhaus-border rounded-lg transition-all duration-200',\n                isClickable && 'cursor-pointer hover:border-birhaus-primary/50 hover:shadow-sm',\n                isInactive && 'opacity-60',\n                'focus:outline-none focus:ring-2 focus:ring-birhaus-primary focus:border-birhaus-primary'\n              )}\n              onClick={() => isClickable && handleAccountClick(account)}\n              onKeyDown={(e) => {\n                if (isClickable && (e.key === 'Enter' || e.key === ' ')) {\n                  e.preventDefault()\n                  handleAccountClick(account)\n                }\n              }}\n              tabIndex={isClickable ? 0 : -1}\n              role={isClickable ? 'button' : undefined}\n              aria-label={`${displayName}, ${typeName}, ${balancesVisible ? formatCurrency(account.saldo, { currency: account.moneda }) : 'saldo oculto'}`}\n            >\n              <div className=\"flex items-center gap-4\">\n                {/* Account type icon */}\n                <div className={cn(\n                  'p-2 rounded-full flex-shrink-0',\n                  typeConfig.colorClass\n                )}>\n                  {typeConfig.icon}\n                </div>\n\n                {/* Account info */}\n                <div className=\"flex-1 min-w-0\">\n                  <div className=\"flex items-center justify-between mb-1\">\n                    <h3 className=\"font-medium text-birhaus-foreground truncate\">\n                      {displayName}\n                    </h3>\n                    \n                    {/* Account status badge */}\n                    {isInactive && (\n                      <span className={cn(\n                        'px-2 py-1 text-xs font-medium rounded-full',\n                        statusConfig.colorClass\n                      )}>\n                        {statusName}\n                      </span>\n                    )}\n                  </div>\n\n                  <div className=\"flex items-center justify-between\">\n                    <div className=\"space-y-1\">\n                      <p className=\"text-sm text-birhaus-muted-foreground\">\n                        {typeName} • {account.numero}\n                      </p>\n                      \n                      {/* Account limits info */}\n                      {(account.limiteDiario || account.limiteMensual) && (\n                        <p className=\"text-xs text-birhaus-muted-foreground\">\n                          {account.limiteDiario && (\n                            <span>\n                              {language === 'es' ? 'Límite diario: ' : 'Daily limit: '}\n                              {formatCurrency(account.limiteDiario, { currency: account.moneda })}\n                            </span>\n                          )}\n                          {account.limiteDiario && account.limiteMensual && ' • '}\n                          {account.limiteMensual && (\n                            <span>\n                              {language === 'es' ? 'Límite mensual: ' : 'Monthly limit: '}\n                              {formatCurrency(account.limiteMensual, { currency: account.moneda })}\n                            </span>\n                          )}\n                        </p>\n                      )}\n                    </div>\n\n                    {/* Balance display */}\n                    <div className=\"text-right\">\n                      <p className={cn(\n                        'font-semibold',\n                        account.saldo >= 0 ? 'text-green-600' : 'text-red-600'\n                      )}>\n                        {balancesVisible ? (\n                          <BirhausCurrencyDisplay \n                            amount={account.saldo} \n                            currency={account.moneda}\n                          />\n                        ) : (\n                          '••••••'\n                        )}\n                      </p>\n                      \n                      <p className=\"text-xs text-birhaus-muted-foreground\">\n                        {language === 'es' ? 'Última actividad: ' : 'Last activity: '}\n                        {account.ultimaActividad.toLocaleDateString(language === 'es' ? 'es-PY' : 'en-US')}\n                      </p>\n                    </div>\n                  </div>\n                </div>\n\n                {/* Warning indicator for blocked accounts */}\n                {account.estado === 'bloqueada' && (\n                  <div className=\"flex-shrink-0\">\n                    <AlertCircle size={20} className=\"text-red-600\" />\n                  </div>\n                )}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n\n      {/* Footer info */}\n      {accounts.length > filteredAccounts.length && (\n        <div className=\"text-center text-sm text-birhaus-muted-foreground\">\n          {language === 'es' ? (\n            <>Mostrando {filteredAccounts.length} de {accounts.length} cuentas</>\n          ) : (\n            <>Showing {filteredAccounts.length} of {accounts.length} accounts</>\n          )}\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport type { BirhausAccountSummaryProps }","'use client'\n\nimport React from 'react'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { \n  ArrowUpRight, \n  ArrowDownLeft, \n  Clock, \n  AlertTriangle, \n  Filter, \n  Search,\n  Calendar,\n  ChevronDown,\n  Download,\n  Eye\n} from 'lucide-react'\nimport { formatCurrency, checkSEPRELADThreshold } from '../utils/currency'\nimport { BirhausCurrencyDisplay } from './BirhausCurrencyDisplay'\nimport type { \n  BirhausTransactionListProps, \n  Transaction, \n  TransactionType,\n  TransactionStatus,\n  TransactionFilters\n} from '../types/financial'\n\n// ChartInputs type for cn utility\ntype ChartInputs = Array<string | number | boolean | null | undefined | string[] | Record<string, boolean>>\n\n// Local cn utility\nconst cn = (...inputs: ChartInputs) => twMerge(clsx(inputs))\n\n// Transaction type configuration\nconst transactionTypeConfig: Record<TransactionType, {\n  icon: React.ReactNode\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  ingreso: {\n    icon: <ArrowDownLeft size={16} />,\n    colorClass: 'text-green-600 bg-green-100',\n    nameEs: 'Ingreso',\n    nameEn: 'Income'\n  },\n  gasto: {\n    icon: <ArrowUpRight size={16} />,\n    colorClass: 'text-red-600 bg-red-100',\n    nameEs: 'Gasto',\n    nameEn: 'Expense'\n  },\n  transferencia: {\n    icon: <Clock size={16} />,\n    colorClass: 'text-blue-600 bg-blue-100',\n    nameEs: 'Transferencia',\n    nameEn: 'Transfer'\n  },\n  inversion: {\n    icon: <ArrowDownLeft size={16} />,\n    colorClass: 'text-green-600 bg-green-100',\n    nameEs: 'Inversión',\n    nameEn: 'Investment'\n  }\n}\n\n// Transaction status configuration\nconst transactionStatusConfig: Record<TransactionStatus, {\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  pendiente: {\n    colorClass: 'text-yellow-700 bg-yellow-100',\n    nameEs: 'Pendiente',\n    nameEn: 'Pending'\n  },\n  completada: {\n    colorClass: 'text-green-700 bg-green-100',\n    nameEs: 'Completada',\n    nameEn: 'Completed'\n  },\n  fallida: {\n    colorClass: 'text-red-700 bg-red-100',\n    nameEs: 'Fallida',\n    nameEn: 'Failed'\n  },\n  cancelada: {\n    colorClass: 'text-gray-700 bg-gray-100',\n    nameEs: 'Cancelada',\n    nameEn: 'Cancelled'\n  },\n  procesando: {\n    colorClass: 'text-blue-700 bg-blue-100',\n    nameEs: 'Procesando',\n    nameEn: 'Processing'\n  }\n}\n\n/**\n * BirhausTransactionList - Transaction history display component\n * \n * Features:\n * - Comprehensive transaction filtering and search\n * - SEPRELAD compliance flagging for large transactions\n * - Spanish-first transaction type and status names\n * - Miller's Law compliance (max 7 visible transactions per page)\n * - Responsive layout for different screen sizes\n * - Export functionality for transaction reports\n * - Real-time status updates and error handling\n * - Accessibility compliant with proper ARIA labels\n */\nexport function BirhausTransactionList({\n  transactions,\n  loading = false,\n  pageSize = 7,\n  showFilters = true,\n  showSearch = true,\n  showExport = true,\n  onTransactionClick,\n  onExport,\n  className,\n  ...props\n}: BirhausTransactionListProps) {\n  const { language, reportViolation } = useBirhaus()\n  \n  // Filter and search state\n  const [searchTerm, setSearchTerm] = React.useState('')\n  const [filters, setFilters] = React.useState<TransactionFilters>({})\n  const [currentPage, setCurrentPage] = React.useState(1)\n  const [showFiltersPanel, setShowFiltersPanel] = React.useState(false)\n\n  // BIRHAUS validation: Check cognitive load (max 7 transactions - Miller's Law)\n  React.useEffect(() => {\n    if (pageSize > 7) {\n      reportViolation({\n        type: 'cognitive',\n        severity: 'warning',\n        element: document.createElement('div'),\n        message: `Transaction list shows ${pageSize} items per page (max recommended: 7)`,\n        messageEs: `Lista de transacciones muestra ${pageSize} elementos por página (máximo recomendado: 7)`,\n        messageEn: `Transaction list shows ${pageSize} items per page (max recommended: 7)`,\n        recommendation: 'Use pagination to keep cognitive load manageable',\n        birhausPrinciple: 1 // Cognitive load reduction\n      })\n    }\n  }, [pageSize, reportViolation])\n\n  // Filter transactions based on search and filters\n  const filteredTransactions = React.useMemo(() => {\n    let filtered = transactions\n\n    // Search filter\n    if (searchTerm) {\n      const term = searchTerm.toLowerCase()\n      filtered = filtered.filter(transaction =>\n        transaction.descripcionEs.toLowerCase().includes(term) ||\n        transaction.referencia?.toLowerCase().includes(term) ||\n        transaction.cuentaDestino?.toLowerCase().includes(term) ||\n        transaction.cuentaOrigen?.toLowerCase().includes(term)\n      )\n    }\n\n    // Type filter\n    if (filters.tipo) {\n      filtered = filtered.filter(t => filters.tipo!.includes(t.tipo))\n    }\n\n    // Status filter\n    if (filters.estado) {\n      filtered = filtered.filter(t => filters.estado!.includes(t.estado))\n    }\n\n    // Date range filter\n    if (filters.fechaDesde) {\n      filtered = filtered.filter(t => new Date(t.fecha) >= new Date(filters.fechaDesde!))\n    }\n    if (filters.fechaHasta) {\n      filtered = filtered.filter(t => new Date(t.fecha) <= new Date(filters.fechaHasta!))\n    }\n\n    // Amount range filter\n    if (filters.montoMinimo !== undefined) {\n      filtered = filtered.filter(t => t.monto >= filters.montoMinimo!)\n    }\n    if (filters.montoMaximo !== undefined) {\n      filtered = filtered.filter(t => t.monto <= filters.montoMaximo!)\n    }\n\n    // Currency filter\n    if (filters.moneda) {\n      filtered = filtered.filter(t => filters.moneda!.includes(t.moneda))\n    }\n\n    return filtered.sort((a, b) => new Date(b.fecha).getTime() - new Date(a.fecha).getTime())\n  }, [transactions, searchTerm, filters])\n\n  // Paginate results\n  const totalPages = Math.ceil(filteredTransactions.length / pageSize)\n  const paginatedTransactions = React.useMemo(() => {\n    const start = (currentPage - 1) * pageSize\n    return filteredTransactions.slice(start, start + pageSize)\n  }, [filteredTransactions, currentPage, pageSize])\n\n  // Handle search\n  const handleSearch = React.useCallback((value: string) => {\n    setSearchTerm(value)\n    setCurrentPage(1) // Reset to first page\n  }, [])\n\n  // Handle filter changes\n  const handleFilterChange = React.useCallback((newFilters: Partial<TransactionFilters>) => {\n    setFilters((prev: TransactionFilters) => ({ ...prev, ...newFilters }))\n    setCurrentPage(1) // Reset to first page\n  }, [])\n\n  // Clear filters\n  const clearFilters = React.useCallback(() => {\n    setFilters({})\n    setSearchTerm('')\n    setCurrentPage(1)\n  }, [])\n\n  // Handle transaction click\n  const handleTransactionClick = React.useCallback((transaction: Transaction) => {\n    onTransactionClick?.(transaction)\n  }, [onTransactionClick])\n\n  // Handle export\n  const handleExport = React.useCallback(() => {\n    onExport?.(filteredTransactions)\n  }, [onExport, filteredTransactions])\n\n  // Check if transaction requires SEPRELAD reporting\n  const checkSEPRELADCompliance = React.useCallback((transaction: Transaction) => {\n    const seprelad = checkSEPRELADThreshold(transaction.monto, transaction.moneda)\n    return seprelad.requiresReport\n  }, [])\n\n  if (loading) {\n    return (\n      <div className={cn('space-y-4', className)} {...props}>\n        {/* Loading skeleton */}\n        {Array.from({ length: pageSize }).map((_, index) => (\n          <div key={index} className=\"p-4 border border-birhaus-border rounded-lg\">\n            <div className=\"flex items-center gap-4\">\n              <div className=\"w-10 h-10 bg-gray-200 rounded-full animate-pulse\" />\n              <div className=\"flex-1 space-y-2\">\n                <div className=\"h-4 bg-gray-200 rounded animate-pulse w-1/2\" />\n                <div className=\"h-3 bg-gray-200 rounded animate-pulse w-1/3\" />\n              </div>\n              <div className=\"h-4 bg-gray-200 rounded animate-pulse w-24\" />\n            </div>\n          </div>\n        ))}\n      </div>\n    )\n  }\n\n  return (\n    <div className={cn('space-y-4', className)} {...props}>\n      {/* Header with search and filters */}\n      {(showSearch || showFilters || showExport) && (\n        <div className=\"flex items-center justify-between gap-4 flex-wrap\">\n          <div className=\"flex items-center gap-4 flex-1\">\n            {/* Search */}\n            {showSearch && (\n              <div className=\"relative flex-1 max-w-md\">\n                <Search size={16} className=\"absolute left-3 top-1/2 transform -translate-y-1/2 text-birhaus-muted-foreground\" />\n                <input\n                  type=\"text\"\n                  value={searchTerm}\n                  onChange={(e) => handleSearch(e.target.value)}\n                  placeholder={language === 'es' ? 'Buscar transacciones...' : 'Search transactions...'}\n                  className=\"w-full pl-10 pr-4 py-2 border border-birhaus-border rounded-lg focus:outline-none focus:ring-2 focus:ring-birhaus-primary focus:border-birhaus-primary\"\n                />\n              </div>\n            )}\n\n            {/* Filter toggle */}\n            {showFilters && (\n              <button\n                onClick={() => setShowFiltersPanel(!showFiltersPanel)}\n                className=\"flex items-center gap-2 px-4 py-2 border border-birhaus-border rounded-lg hover:bg-birhaus-muted/50 transition-colors\"\n              >\n                <Filter size={16} />\n                <span>{language === 'es' ? 'Filtros' : 'Filters'}</span>\n                <ChevronDown size={16} className={cn(\n                  'transition-transform duration-200',\n                  showFiltersPanel && 'rotate-180'\n                )} />\n              </button>\n            )}\n          </div>\n\n          {/* Export button */}\n          {showExport && (\n            <button\n              onClick={handleExport}\n              className=\"flex items-center gap-2 px-4 py-2 bg-birhaus-primary text-white rounded-lg hover:bg-birhaus-primary/90 transition-colors\"\n            >\n              <Download size={16} />\n              <span>{language === 'es' ? 'Exportar' : 'Export'}</span>\n            </button>\n          )}\n        </div>\n      )}\n\n      {/* Filters panel */}\n      {showFilters && showFiltersPanel && (\n        <div className=\"p-4 border border-birhaus-border rounded-lg bg-birhaus-muted/10 space-y-4\">\n          <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\n            {/* Transaction type filter */}\n            <div>\n              <label className=\"block text-sm font-medium mb-2\">\n                {language === 'es' ? 'Tipo de Transacción' : 'Transaction Type'}\n              </label>\n              <select\n                value={filters.tipo?.join(',') || ''}\n                onChange={(e) => handleFilterChange({\n                  tipo: e.target.value ? e.target.value.split(',') as TransactionType[] : undefined\n                })}\n                className=\"w-full p-2 border border-birhaus-border rounded-lg focus:outline-none focus:ring-2 focus:ring-birhaus-primary\"\n              >\n                <option value=\"\">{language === 'es' ? 'Todos' : 'All'}</option>\n                {Object.entries(transactionTypeConfig).map(([key, config]) => (\n                  <option key={key} value={key}>\n                    {language === 'es' ? config.nameEs : config.nameEn}\n                  </option>\n                ))}\n              </select>\n            </div>\n\n            {/* Status filter */}\n            <div>\n              <label className=\"block text-sm font-medium mb-2\">\n                {language === 'es' ? 'Estado' : 'Status'}\n              </label>\n              <select\n                value={filters.estado?.join(',') || ''}\n                onChange={(e) => handleFilterChange({\n                  estado: e.target.value ? e.target.value.split(',') as TransactionStatus[] : undefined\n                })}\n                className=\"w-full p-2 border border-birhaus-border rounded-lg focus:outline-none focus:ring-2 focus:ring-birhaus-primary\"\n              >\n                <option value=\"\">{language === 'es' ? 'Todos' : 'All'}</option>\n                {Object.entries(transactionStatusConfig).map(([key, config]) => (\n                  <option key={key} value={key}>\n                    {language === 'es' ? config.nameEs : config.nameEn}\n                  </option>\n                ))}\n              </select>\n            </div>\n\n            {/* Date range */}\n            <div>\n              <label className=\"block text-sm font-medium mb-2\">\n                {language === 'es' ? 'Fecha Desde' : 'Date From'}\n              </label>\n              <input\n                type=\"date\"\n                value={filters.fechaDesde instanceof Date ? filters.fechaDesde.toISOString().split('T')[0] : filters.fechaDesde || ''}\n                onChange={(e) => handleFilterChange({ fechaDesde: e.target.value || undefined })}\n                className=\"w-full p-2 border border-birhaus-border rounded-lg focus:outline-none focus:ring-2 focus:ring-birhaus-primary\"\n              />\n            </div>\n\n            <div>\n              <label className=\"block text-sm font-medium mb-2\">\n                {language === 'es' ? 'Fecha Hasta' : 'Date To'}\n              </label>\n              <input\n                type=\"date\"\n                value={filters.fechaHasta instanceof Date ? filters.fechaHasta.toISOString().split('T')[0] : filters.fechaHasta || ''}\n                onChange={(e) => handleFilterChange({ fechaHasta: e.target.value || undefined })}\n                className=\"w-full p-2 border border-birhaus-border rounded-lg focus:outline-none focus:ring-2 focus:ring-birhaus-primary\"\n              />\n            </div>\n          </div>\n\n          {/* Clear filters */}\n          <div className=\"flex justify-end\">\n            <button\n              onClick={clearFilters}\n              className=\"px-4 py-2 text-sm text-birhaus-muted-foreground hover:text-birhaus-foreground transition-colors\"\n            >\n              {language === 'es' ? 'Limpiar Filtros' : 'Clear Filters'}\n            </button>\n          </div>\n        </div>\n      )}\n\n      {/* Results summary */}\n      <div className=\"flex items-center justify-between text-sm text-birhaus-muted-foreground\">\n        <span>\n          {language === 'es' \n            ? `Mostrando ${paginatedTransactions.length} de ${filteredTransactions.length} transacciones`\n            : `Showing ${paginatedTransactions.length} of ${filteredTransactions.length} transactions`\n          }\n        </span>\n        {filteredTransactions.length !== transactions.length && (\n          <span>\n            ({language === 'es' ? 'filtrado de' : 'filtered from'} {transactions.length})\n          </span>\n        )}\n      </div>\n\n      {/* Transaction list */}\n      <div className=\"space-y-3\">\n        {paginatedTransactions.length === 0 ? (\n          <div className=\"p-8 text-center text-birhaus-muted-foreground\">\n            <Clock size={48} className=\"mx-auto mb-4 text-birhaus-muted-foreground/50\" />\n            <p>\n              {language === 'es' \n                ? 'No se encontraron transacciones'\n                : 'No transactions found'}\n            </p>\n            {(searchTerm || Object.keys(filters).length > 0) && (\n              <button\n                onClick={clearFilters}\n                className=\"mt-2 text-birhaus-primary hover:underline\"\n              >\n                {language === 'es' ? 'Limpiar filtros' : 'Clear filters'}\n              </button>\n            )}\n          </div>\n        ) : (\n          paginatedTransactions.map((transaction) => {\n            const typeConfig = transactionTypeConfig[transaction.tipo]\n            const statusConfig = transactionStatusConfig[transaction.estado]\n            const requiresSEPRELAD = checkSEPRELADCompliance(transaction)\n            const isClickable = Boolean(onTransactionClick)\n            const isCredit = transaction.tipo === 'ingreso' || transaction.tipo === 'inversion'\n\n            return (\n              <div\n                key={transaction.id}\n                className={cn(\n                  'p-4 border border-birhaus-border rounded-lg transition-all duration-200',\n                  isClickable && 'cursor-pointer hover:border-birhaus-primary/50 hover:shadow-sm',\n                  'focus:outline-none focus:ring-2 focus:ring-birhaus-primary focus:border-birhaus-primary'\n                )}\n                onClick={() => isClickable && handleTransactionClick(transaction)}\n                onKeyDown={(e) => {\n                  if (isClickable && (e.key === 'Enter' || e.key === ' ')) {\n                    e.preventDefault()\n                    handleTransactionClick(transaction)\n                  }\n                }}\n                tabIndex={isClickable ? 0 : -1}\n                role={isClickable ? 'button' : undefined}\n                aria-label={`${transaction.descripcionEs}, ${formatCurrency(transaction.monto, { currency: transaction.moneda })}, ${transaction.fecha.toLocaleDateString()}`}\n              >\n                <div className=\"flex items-center gap-4\">\n                  {/* Transaction type icon */}\n                  <div className={cn(\n                    'p-2 rounded-full flex-shrink-0 relative',\n                    typeConfig.colorClass\n                  )}>\n                    {typeConfig.icon}\n                    {/* SEPRELAD warning indicator */}\n                    {requiresSEPRELAD && (\n                      <div className=\"absolute -top-1 -right-1 w-3 h-3 bg-yellow-500 rounded-full border-2 border-white\">\n                        <AlertTriangle size={8} className=\"text-white\" />\n                      </div>\n                    )}\n                  </div>\n\n                  {/* Transaction details */}\n                  <div className=\"flex-1 min-w-0\">\n                    <div className=\"flex items-center justify-between mb-1\">\n                      <h3 className=\"font-medium text-birhaus-foreground truncate\">\n                        {transaction.descripcionEs}\n                      </h3>\n                      \n                      {/* Transaction status */}\n                      <span className={cn(\n                        'px-2 py-1 text-xs font-medium rounded-full flex-shrink-0',\n                        statusConfig.colorClass\n                      )}>\n                        {language === 'es' ? statusConfig.nameEs : statusConfig.nameEn}\n                      </span>\n                    </div>\n\n                    <div className=\"flex items-center justify-between\">\n                      <div className=\"space-y-1 min-w-0\">\n                        <p className=\"text-sm text-birhaus-muted-foreground truncate\">\n                          {language === 'es' ? typeConfig.nameEs : typeConfig.nameEn}\n                          {transaction.referencia && ` • ${transaction.referencia}`}\n                        </p>\n                        \n                        {/* Origin/Destination info */}\n                        {(transaction.cuentaOrigen || transaction.cuentaDestino) && (\n                          <p className=\"text-xs text-birhaus-muted-foreground truncate\">\n                            {isCredit ? (\n                              <>\n                                {language === 'es' ? 'De: ' : 'From: '}\n                                {transaction.cuentaOrigen}\n                              </>\n                            ) : (\n                              <>\n                                {language === 'es' ? 'Para: ' : 'To: '}\n                                {transaction.cuentaDestino}\n                              </>\n                            )}\n                          </p>\n                        )}\n\n                        {/* Transaction date and time */}\n                        <p className=\"text-xs text-birhaus-muted-foreground\">\n                          {transaction.fecha.toLocaleDateString(language === 'es' ? 'es-PY' : 'en-US', {\n                            year: 'numeric',\n                            month: 'short',\n                            day: 'numeric',\n                            hour: '2-digit',\n                            minute: '2-digit'\n                          })}\n                        </p>\n                      </div>\n\n                      {/* Amount display */}\n                      <div className=\"text-right flex-shrink-0\">\n                        <p className={cn(\n                          'font-semibold',\n                          isCredit ? 'text-green-600' : 'text-red-600'\n                        )}>\n                          {isCredit ? '+' : '-'}\n                          <BirhausCurrencyDisplay \n                            amount={Math.abs(transaction.monto)} \n                            currency={transaction.moneda}\n                            className={isCredit ? 'text-green-600' : 'text-red-600'}\n                          />\n                        </p>\n                        \n                        {/* Commission info */}\n                        {transaction.comision && transaction.comision > 0 && (\n                          <p className=\"text-xs text-birhaus-muted-foreground\">\n                            {language === 'es' ? 'Comisión: ' : 'Fee: '}\n                            <BirhausCurrencyDisplay \n                              amount={transaction.comision} \n                              currency={transaction.moneda}\n                            />\n                          </p>\n                        )}\n\n                        {/* SEPRELAD warning */}\n                        {requiresSEPRELAD && (\n                          <p className=\"text-xs text-yellow-600 font-medium\">\n                            {language === 'es' ? 'SEPRELAD' : 'SEPRELAD'}\n                          </p>\n                        )}\n                      </div>\n                    </div>\n                  </div>\n\n                  {/* View details indicator */}\n                  {isClickable && (\n                    <div className=\"flex-shrink-0 text-birhaus-muted-foreground\">\n                      <Eye size={16} />\n                    </div>\n                  )}\n                </div>\n              </div>\n            )\n          })\n        )}\n      </div>\n\n      {/* Pagination */}\n      {totalPages > 1 && (\n        <div className=\"flex items-center justify-between\">\n          <button\n            onClick={() => setCurrentPage(page => Math.max(1, page - 1))}\n            disabled={currentPage === 1}\n            className=\"px-4 py-2 text-sm border border-birhaus-border rounded-lg disabled:opacity-50 disabled:cursor-not-allowed hover:bg-birhaus-muted/50 transition-colors\"\n          >\n            {language === 'es' ? 'Anterior' : 'Previous'}\n          </button>\n\n          <span className=\"text-sm text-birhaus-muted-foreground\">\n            {language === 'es' \n              ? `Página ${currentPage} de ${totalPages}`\n              : `Page ${currentPage} of ${totalPages}`\n            }\n          </span>\n\n          <button\n            onClick={() => setCurrentPage(page => Math.min(totalPages, page + 1))}\n            disabled={currentPage === totalPages}\n            className=\"px-4 py-2 text-sm border border-birhaus-border rounded-lg disabled:opacity-50 disabled:cursor-not-allowed hover:bg-birhaus-muted/50 transition-colors\"\n          >\n            {language === 'es' ? 'Siguiente' : 'Next'}\n          </button>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport type { BirhausTransactionListProps }","'use client'\n\nimport React from 'react'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { \n  TrendingUp, \n  TrendingDown, \n  Minus,\n  DollarSign,\n  PiggyBank,\n  CreditCard,\n  Target,\n  AlertTriangle,\n  Info,\n  Eye,\n  EyeOff\n} from 'lucide-react'\nimport { formatCurrency } from '../utils/currency'\nimport { BirhausCurrencyDisplay } from './BirhausCurrencyDisplay'\nimport type { \n  BirhausFinancialMetricCardProps, \n  FinancialMetric,\n  MetricTrend,\n  MetricTrendDirection,\n  MetricCategory,\n  CurrencyCode\n} from '../types/financial'\n\n// ChartInputs type for cn utility\ntype ChartInputs = Array<string | number | boolean | null | undefined | string[] | Record<string, boolean>>\n\n// Local cn utility\nconst cn = (...inputs: ChartInputs) => twMerge(clsx(inputs))\n\n// Metric type configuration\nconst metricTypeConfig: Record<MetricCategory, {\n  icon: React.ReactNode\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  ingresos: {\n    icon: <TrendingUp size={20} />,\n    colorClass: 'text-green-600 bg-green-100',\n    nameEs: 'Ingresos',\n    nameEn: 'Income'\n  },\n  gastos: {\n    icon: <TrendingDown size={20} />,\n    colorClass: 'text-red-600 bg-red-100',\n    nameEs: 'Gastos',\n    nameEn: 'Expenses'\n  },\n  balance: {\n    icon: <DollarSign size={20} />,\n    colorClass: 'text-blue-600 bg-blue-100',\n    nameEs: 'Balance',\n    nameEn: 'Balance'\n  },\n  proyeccion: {\n    icon: <TrendingUp size={20} />,\n    colorClass: 'text-purple-600 bg-purple-100',\n    nameEs: 'Proyección',\n    nameEn: 'Projection'\n  }\n}\n\n// Trend configuration\nconst trendConfig: Record<MetricTrendDirection, {\n  icon: React.ReactNode\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  subida: {\n    icon: <TrendingUp size={16} />,\n    colorClass: 'text-green-600',\n    nameEs: 'Creciendo',\n    nameEn: 'Increasing'\n  },\n  bajada: {\n    icon: <TrendingDown size={16} />,\n    colorClass: 'text-red-600',\n    nameEs: 'Decreciendo',\n    nameEn: 'Decreasing'\n  },\n  estable: {\n    icon: <Minus size={16} />,\n    colorClass: 'text-gray-600',\n    nameEs: 'Estable',\n    nameEn: 'Stable'\n  }\n}\n\n/**\n * BirhausFinancialMetricCard - Financial KPI display component\n * \n * Features:\n * - Multiple metric types with appropriate icons and colors\n * - Trend analysis with percentage change indicators\n * - Privacy toggle for sensitive financial information\n * - Goal progress tracking and alerts\n * - Spanish-first metric names and descriptions\n * - Accessibility compliant with proper ARIA labels\n * - Responsive layout for different screen sizes\n * - Warning indicators for concerning metrics\n * - Historical comparison support\n */\nexport function BirhausFinancialMetricCard({\n  metric,\n  showTrend = true,\n  showGoalProgress = false,\n  allowPrivacyToggle = true,\n  variant = 'default',\n  size = 'medium',\n  className,\n  ...props\n}: BirhausFinancialMetricCardProps) {\n  const { language, reportViolation } = useBirhaus()\n  const [isPrivacyEnabled, setIsPrivacyEnabled] = React.useState(false)\n\n  // BIRHAUS validation: Check for concerning financial metrics\n  React.useEffect(() => {\n    // Alert for negative balances\n    if (metric.categoria === 'balance' && metric.valor < 0) {\n      reportViolation({\n        type: 'performance',\n        severity: 'warning',\n        element: document.createElement('div'),\n        message: `Negative balance detected: ${metric.valor}`,\n        messageEs: `Saldo negativo detectado: ${metric.valor}`,\n        messageEn: `Negative balance detected: ${metric.valor}`,\n        recommendation: 'Consider showing balance alerts or overdraft notifications',\n        birhausPrinciple: 6 // Progressive disclosure\n      })\n    }\n\n    // Alert for exceeded spending goals\n    if (metric.objetivo && metric.valor > metric.objetivo.valor) {\n      const overage = ((metric.valor - metric.objetivo.valor) / metric.objetivo.valor) * 100\n      reportViolation({\n        type: 'performance',\n        severity: overage > 50 ? 'error' : 'warning',\n        element: document.createElement('div'),\n        message: `Metric exceeds goal by ${overage.toFixed(1)}%`,\n        messageEs: `Métrica supera objetivo en ${overage.toFixed(1)}%`,\n        messageEn: `Metric exceeds goal by ${overage.toFixed(1)}%`,\n        recommendation: 'Show clear goal progress and overage warnings',\n        birhausPrinciple: 6 // Progressive disclosure\n      })\n    }\n\n    // Alert for significant negative trends\n    if (metric.tendencia && metric.tendencia.direccion === 'bajada' && Math.abs(metric.tendencia.porcentaje) > 20) {\n      reportViolation({\n        type: 'performance',\n        severity: 'warning',\n        element: document.createElement('div'),\n        message: `Significant downward trend: ${metric.tendencia.porcentaje}%`,\n        messageEs: `Tendencia descendente significativa: ${metric.tendencia.porcentaje}%`,\n        messageEn: `Significant downward trend: ${metric.tendencia.porcentaje}%`,\n        recommendation: 'Consider highlighting concerning financial trends',\n        birhausPrinciple: 6 // Progressive disclosure\n      })\n    }\n  }, [metric, reportViolation])\n\n  const typeConfig = metric.categoria ? metricTypeConfig[metric.categoria] : metricTypeConfig.balance\n  const trendInfo = metric.tendencia ? trendConfig[metric.tendencia.direccion] : null\n\n  // Calculate goal progress percentage\n  const goalProgress = React.useMemo(() => {\n    if (!metric.objetivo || metric.objetivo.valor === 0) return 0\n    return Math.min(100, (metric.valor / metric.objetivo.valor) * 100)\n  }, [metric.valor, metric.objetivo])\n\n  // Determine if metric is concerning\n  const isConcerning = React.useMemo(() => {\n    if (metric.categoria === 'balance' && metric.valor < 0) return true\n    if (metric.objetivo && metric.valor > metric.objetivo.valor) return true\n    if (metric.tendencia && metric.tendencia.direccion === 'bajada' && Math.abs(metric.tendencia.porcentaje) > 20) return true\n    return false\n  }, [metric])\n\n  // Format display value\n  const formatDisplayValue = (value: number, currency: CurrencyCode = 'PYG') => {\n    if (isPrivacyEnabled) {\n      return '••••••••'\n    }\n    return <BirhausCurrencyDisplay amount={value} currency={currency} />\n  }\n\n  // Toggle privacy mode\n  const togglePrivacy = React.useCallback(() => {\n    setIsPrivacyEnabled(!isPrivacyEnabled)\n  }, [isPrivacyEnabled])\n\n  // Get size classes\n  const sizeClasses = {\n    small: 'p-4',\n    medium: 'p-6',\n    large: 'p-8'\n  }\n\n  // Get variant classes\n  const variantClasses = {\n    default: 'bg-white border border-birhaus-border',\n    outline: 'bg-transparent border-2 border-birhaus-border',\n    filled: 'bg-birhaus-muted border border-birhaus-border',\n    gradient: 'bg-gradient-to-br from-white to-birhaus-muted/20 border border-birhaus-border'\n  }\n\n  return (\n    <div\n      className={cn(\n        'rounded-lg transition-all duration-200 hover:shadow-md',\n        sizeClasses[size || 'medium'],\n        variantClasses[variant || 'default'],\n        isConcerning && 'ring-2 ring-red-200 border-red-200',\n        className\n      )}\n      {...props}\n    >\n      {/* Header with icon and privacy toggle */}\n      <div className=\"flex items-start justify-between mb-4\">\n        <div className=\"flex items-center gap-3\">\n          <div className={cn('p-2 rounded-full', typeConfig.colorClass)}>\n            {typeConfig.icon}\n          </div>\n          <div>\n            <h3 className=\"font-semibold text-birhaus-foreground\">\n              {language === 'es' ? typeConfig.nameEs : typeConfig.nameEn}\n            </h3>\n            {metric.descripcionEs && (\n              <p className=\"text-sm text-birhaus-muted-foreground mt-1\">\n                {metric.descripcionEs}\n              </p>\n            )}\n          </div>\n        </div>\n\n        <div className=\"flex items-center gap-2\">\n          {/* Warning indicator */}\n          {isConcerning && (\n            <div \n              className=\"text-red-600\"\n              title={language === 'es' ? 'Atención requerida' : 'Attention required'}\n            >\n              <AlertTriangle size={16} />\n            </div>\n          )}\n\n          {/* Privacy toggle */}\n          {allowPrivacyToggle && (\n            <button\n              onClick={togglePrivacy}\n              className=\"p-1 hover:bg-birhaus-muted rounded transition-colors\"\n              aria-label={isPrivacyEnabled \n                ? (language === 'es' ? 'Mostrar valor' : 'Show value')\n                : (language === 'es' ? 'Ocultar valor' : 'Hide value')}\n            >\n              {isPrivacyEnabled ? <EyeOff size={16} /> : <Eye size={16} />}\n            </button>\n          )}\n        </div>\n      </div>\n\n      {/* Main value */}\n      <div className=\"mb-4\">\n        <div className=\"text-2xl font-bold text-birhaus-foreground mb-1\">\n          {formatDisplayValue(metric.valor, metric.moneda)}\n        </div>\n        \n        {/* Trend indicator */}\n        {showTrend && metric.tendencia && trendInfo && !isPrivacyEnabled && (\n          <div className={cn('flex items-center gap-2 text-sm', trendInfo.colorClass)}>\n            {trendInfo.icon}\n            <span>\n              {metric.tendencia.porcentaje > 0 ? '+' : ''}{metric.tendencia.porcentaje.toFixed(1)}%\n            </span>\n            <span className=\"text-birhaus-muted-foreground\">\n              {metric.tendencia.periodo && (\n                language === 'es' \n                  ? `vs. ${metric.tendencia.periodo}`\n                  : `vs. ${metric.tendencia.periodo}`\n              )}\n            </span>\n          </div>\n        )}\n      </div>\n\n      {/* Goal progress */}\n      {showGoalProgress && metric.objetivo && !isPrivacyEnabled && (\n        <div className=\"mb-4\">\n          <div className=\"flex items-center justify-between text-sm mb-2\">\n            <span className=\"text-birhaus-muted-foreground\">\n              {language === 'es' ? 'Progreso del objetivo' : 'Goal progress'}\n            </span>\n            <span className=\"font-medium\">\n              {goalProgress.toFixed(0)}%\n            </span>\n          </div>\n          \n          {/* Progress bar */}\n          <div className=\"w-full bg-birhaus-muted rounded-full h-2\">\n            <div\n              className={cn(\n                'h-2 rounded-full transition-all duration-500',\n                goalProgress >= 100 \n                  ? 'bg-green-500' \n                  : goalProgress >= 80 \n                  ? 'bg-blue-500'\n                  : 'bg-yellow-500'\n              )}\n              style={{ width: `${Math.min(100, goalProgress)}%` }}\n            />\n          </div>\n          \n          {/* Goal target info */}\n          <div className=\"flex items-center justify-between text-xs text-birhaus-muted-foreground mt-2\">\n            <span>\n              {language === 'es' ? 'Meta: ' : 'Target: '}\n              <BirhausCurrencyDisplay \n                amount={metric.objetivo.valor} \n                currency={metric.moneda}\n              />\n            </span>\n            {metric.objetivo.fechaLimite && (\n              <span>\n                {language === 'es' ? 'Vence: ' : 'Due: '}\n                {metric.objetivo.fechaLimite.toLocaleDateString(\n                  language === 'es' ? 'es-PY' : 'en-US'\n                )}\n              </span>\n            )}\n          </div>\n        </div>\n      )}\n\n      {/* Additional info */}\n      {metric.informacionAdicional && metric.informacionAdicional.length > 0 && (\n        <div className=\"border-t border-birhaus-border pt-4\">\n          {metric.informacionAdicional.map((info, index) => (\n            <div key={index} className=\"flex items-center gap-2 text-sm text-birhaus-muted-foreground mb-2 last:mb-0\">\n              <Info size={12} />\n              <span>{info}</span>\n            </div>\n          ))}\n        </div>\n      )}\n\n      {/* Footer with last update */}\n      {metric.ultimaActualizacion && (\n        <div className=\"mt-4 pt-4 border-t border-birhaus-border\">\n          <p className=\"text-xs text-birhaus-muted-foreground\">\n            {language === 'es' ? 'Última actualización: ' : 'Last updated: '}\n            {metric.ultimaActualizacion.toLocaleDateString(\n              language === 'es' ? 'es-PY' : 'en-US',\n              {\n                year: 'numeric',\n                month: 'short',\n                day: 'numeric',\n                hour: '2-digit',\n                minute: '2-digit'\n              }\n            )}\n          </p>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport type { BirhausFinancialMetricCardProps }","'use client'\n\nimport React from 'react'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { \n  PieChart,\n  AlertTriangle,\n  CheckCircle,\n  Clock,\n  Plus,\n  Edit,\n  Trash2,\n  Car,\n  Home,\n  ShoppingCart,\n  Utensils,\n  Plane,\n  Heart,\n  BookOpen,\n  Smartphone,\n  Calculator\n} from 'lucide-react'\nimport { formatCurrency } from '../utils/currency'\nimport { BirhausCurrencyDisplay } from './BirhausCurrencyDisplay'\nimport type { \n  BirhausBudgetTrackerProps, \n  Budget,\n  BudgetCategory,\n  BudgetStatus,\n  BudgetPeriod \n} from '../types/financial'\n\n// ChartInputs type for cn utility\ntype ChartInputs = Array<string | number | boolean | null | undefined | string[] | Record<string, boolean>>\n\n// Local cn utility\nconst cn = (...inputs: ChartInputs) => twMerge(clsx(inputs))\n\n// Budget category configuration\nconst budgetCategoryConfig: Record<BudgetCategory, {\n  icon: React.ReactNode\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  alimentacion: {\n    icon: <Utensils size={20} />,\n    colorClass: 'text-green-600 bg-green-100',\n    nameEs: 'Alimentación',\n    nameEn: 'Food & Dining'\n  },\n  transporte: {\n    icon: <Car size={20} />,\n    colorClass: 'text-blue-600 bg-blue-100',\n    nameEs: 'Transporte',\n    nameEn: 'Transportation'\n  },\n  vivienda: {\n    icon: <Home size={20} />,\n    colorClass: 'text-purple-600 bg-purple-100',\n    nameEs: 'Vivienda',\n    nameEn: 'Housing'\n  },\n  entretenimiento: {\n    icon: <Plane size={20} />,\n    colorClass: 'text-orange-600 bg-orange-100',\n    nameEs: 'Entretenimiento',\n    nameEn: 'Entertainment'\n  },\n  salud: {\n    icon: <Heart size={20} />,\n    colorClass: 'text-red-600 bg-red-100',\n    nameEs: 'Salud',\n    nameEn: 'Healthcare'\n  },\n  educacion: {\n    icon: <BookOpen size={20} />,\n    colorClass: 'text-indigo-600 bg-indigo-100',\n    nameEs: 'Educación',\n    nameEn: 'Education'\n  },\n  compras: {\n    icon: <ShoppingCart size={20} />,\n    colorClass: 'text-pink-600 bg-pink-100',\n    nameEs: 'Compras',\n    nameEn: 'Shopping'\n  },\n  tecnologia: {\n    icon: <Smartphone size={20} />,\n    colorClass: 'text-gray-600 bg-gray-100',\n    nameEs: 'Tecnología',\n    nameEn: 'Technology'\n  },\n  servicios: {\n    icon: <Calculator size={20} />,\n    colorClass: 'text-indigo-600 bg-indigo-100',\n    nameEs: 'Servicios',\n    nameEn: 'Services'\n  },\n  otros: {\n    icon: <Calculator size={20} />,\n    colorClass: 'text-yellow-600 bg-yellow-100',\n    nameEs: 'Otros',\n    nameEn: 'Other'\n  }\n}\n\n// Budget status configuration\nconst budgetStatusConfig: Record<BudgetStatus, {\n  colorClass: string\n  nameEs: string\n  nameEn: string\n  icon: React.ReactNode\n}> = {\n  activo: {\n    colorClass: 'text-blue-700 bg-blue-100',\n    nameEs: 'Activo',\n    nameEn: 'Active',\n    icon: <CheckCircle size={16} />\n  },\n  pausado: {\n    colorClass: 'text-gray-700 bg-gray-100',\n    nameEs: 'Pausado',\n    nameEn: 'Paused',\n    icon: <Clock size={16} />\n  },\n  completado: {\n    colorClass: 'text-green-700 bg-green-100',\n    nameEs: 'Completado',\n    nameEn: 'Completed',\n    icon: <CheckCircle size={16} />\n  },\n  excedido: {\n    colorClass: 'text-red-700 bg-red-100',\n    nameEs: 'Excedido',\n    nameEn: 'Over Budget',\n    icon: <AlertTriangle size={16} />\n  },\n  cerca_limite: {\n    colorClass: 'text-yellow-700 bg-yellow-100',\n    nameEs: 'Cerca del Límite',\n    nameEn: 'Near Limit',\n    icon: <Clock size={16} />\n  },\n  en_objetivo: {\n    colorClass: 'text-green-700 bg-green-100',\n    nameEs: 'En Objetivo',\n    nameEn: 'On Track',\n    icon: <CheckCircle size={16} />\n  }\n}\n\n/**\n * BirhausBudgetTracker - Budget management and tracking component\n * \n * Features:\n * - Multiple budget categories with appropriate icons and colors\n * - Real-time spending tracking with progress indicators\n * - Budget alerts and warnings when approaching/exceeding limits\n * - Period-based budget management (monthly, weekly, yearly)\n * - Spanish-first category names and descriptions\n * - Miller's Law compliance (max 7 visible categories)\n * - CRUD operations for budget management\n * - Accessibility compliant with proper ARIA labels\n * - Responsive layout for different screen sizes\n * - Summary statistics and recommendations\n */\nexport function BirhausBudgetTracker({\n  budgets,\n  periodo = 'mensual',\n  moneda = 'PYG',\n  showAddButton = true,\n  showEditButtons = true,\n  onAddBudget,\n  onEditBudget,\n  onDeleteBudget,\n  className,\n  ...props\n}: BirhausBudgetTrackerProps) {\n  const { language, reportViolation } = useBirhaus()\n\n  // BIRHAUS validation: Check cognitive load (max 7 budgets - Miller's Law)\n  React.useEffect(() => {\n    if (budgets.length > 7) {\n      reportViolation({\n        type: 'cognitive',\n        severity: 'warning',\n        element: document.createElement('div'),\n        message: `Budget tracker shows ${budgets.length} categories (max recommended: 7)`,\n        messageEs: `Seguidor de presupuesto muestra ${budgets.length} categorías (máximo recomendado: 7)`,\n        messageEn: `Budget tracker shows ${budgets.length} categories (max recommended: 7)`,\n        recommendation: 'Consider grouping related categories or using tabs for large numbers',\n        birhausPrinciple: 1 // Cognitive load reduction\n      })\n    }\n  }, [budgets.length, reportViolation])\n\n  // Calculate total budget and spending\n  const totals = React.useMemo(() => {\n    const totalBudget = budgets.reduce((sum, budget) => sum + (budget.limite ?? budget.montoPresupuesto), 0)\n    const totalSpent = budgets.reduce((sum, budget) => sum + (budget.gastado ?? budget.montoGastado), 0)\n    const totalRemaining = totalBudget - totalSpent\n    const spentPercentage = totalBudget > 0 ? (totalSpent / totalBudget) * 100 : 0\n\n    return {\n      totalBudget,\n      totalSpent,\n      totalRemaining,\n      spentPercentage\n    }\n  }, [budgets])\n\n  // Get budget status\n  const getBudgetStatus = React.useCallback((budget: Budget): BudgetStatus => {\n    const spent = budget.gastado ?? budget.montoGastado\n    const limit = budget.limite ?? budget.montoPresupuesto\n    const percentage = limit > 0 ? (spent / limit) * 100 : 0\n    \n    if (percentage >= 100) return 'excedido'\n    if (percentage >= 80) return 'cerca_limite'\n    return 'en_objetivo'\n  }, [])\n\n  // Calculate progress percentage\n  const getProgressPercentage = React.useCallback((budget: Budget): number => {\n    const spent = budget.gastado ?? budget.montoGastado\n    const limit = budget.limite ?? budget.montoPresupuesto\n    return Math.min(100, limit > 0 ? (spent / limit) * 100 : 0)\n  }, [])\n\n  // Handle budget actions\n  const handleAddBudget = React.useCallback(() => {\n    onAddBudget?.()\n  }, [onAddBudget])\n\n  const handleEditBudget = React.useCallback((budget: Budget) => {\n    onEditBudget?.(budget)\n  }, [onEditBudget])\n\n  const handleDeleteBudget = React.useCallback((budget: Budget) => {\n    onDeleteBudget?.(budget)\n  }, [onDeleteBudget])\n\n  // Get period name\n  const getPeriodName = React.useCallback((period: BudgetPeriod): string => {\n    const periods = {\n      semanal: { es: 'Semanal', en: 'Weekly' },\n      mensual: { es: 'Mensual', en: 'Monthly' },\n      anual: { es: 'Anual', en: 'Annual' }\n    }\n    return language === 'es' ? periods[period].es : periods[period].en\n  }, [language])\n\n  // Sort budgets by spending percentage (highest first for attention)\n  const sortedBudgets = React.useMemo(() => {\n    return [...budgets].sort((a, b) => {\n      const aPercentage = getProgressPercentage(a)\n      const bPercentage = getProgressPercentage(b)\n      return bPercentage - aPercentage\n    })\n  }, [budgets, getProgressPercentage])\n\n  if (budgets.length === 0) {\n    return (\n      <div className={cn('p-8 text-center border border-birhaus-border rounded-lg', className)} {...props}>\n        <PieChart size={48} className=\"mx-auto mb-4 text-birhaus-muted-foreground/50\" />\n        <h3 className=\"text-lg font-semibold text-birhaus-foreground mb-2\">\n          {language === 'es' ? 'No hay presupuestos configurados' : 'No budgets configured'}\n        </h3>\n        <p className=\"text-birhaus-muted-foreground mb-4\">\n          {language === 'es' \n            ? 'Crea tu primer presupuesto para comenzar a hacer seguimiento de tus gastos.'\n            : 'Create your first budget to start tracking your expenses.'\n          }\n        </p>\n        {showAddButton && onAddBudget && (\n          <button\n            onClick={handleAddBudget}\n            className=\"flex items-center gap-2 mx-auto px-4 py-2 bg-birhaus-primary text-white rounded-lg hover:bg-birhaus-primary/90 transition-colors\"\n          >\n            <Plus size={16} />\n            <span>{language === 'es' ? 'Crear Presupuesto' : 'Create Budget'}</span>\n          </button>\n        )}\n      </div>\n    )\n  }\n\n  return (\n    <div className={cn('space-y-6', className)} {...props}>\n      {/* Header with summary */}\n      <div className=\"bg-gradient-to-r from-birhaus-primary to-birhaus-primary/80 p-6 rounded-lg text-white\">\n        <div className=\"flex items-center justify-between mb-4\">\n          <div>\n            <h2 className=\"text-xl font-bold mb-1\">\n              {language === 'es' ? 'Seguimiento de Presupuesto' : 'Budget Tracking'}\n            </h2>\n            <p className=\"text-white/80\">\n              {language === 'es' ? `Período ${getPeriodName(periodo)}` : `${getPeriodName(periodo)} Period`}\n            </p>\n          </div>\n          \n          {showAddButton && onAddBudget && (\n            <button\n              onClick={handleAddBudget}\n              className=\"flex items-center gap-2 px-4 py-2 bg-white/20 rounded-lg hover:bg-white/30 transition-colors\"\n              aria-label={language === 'es' ? 'Agregar presupuesto' : 'Add budget'}\n            >\n              <Plus size={16} />\n              <span className=\"hidden sm:inline\">\n                {language === 'es' ? 'Agregar' : 'Add'}\n              </span>\n            </button>\n          )}\n        </div>\n\n        {/* Total summary */}\n        <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-4\">\n          <div>\n            <p className=\"text-white/70 text-sm mb-1\">\n              {language === 'es' ? 'Presupuesto Total' : 'Total Budget'}\n            </p>\n            <p className=\"text-xl font-bold\">\n              <BirhausCurrencyDisplay \n                amount={totals.totalBudget} \n                currency={moneda}\n                className=\"text-white\"\n              />\n            </p>\n          </div>\n          \n          <div>\n            <p className=\"text-white/70 text-sm mb-1\">\n              {language === 'es' ? 'Total Gastado' : 'Total Spent'}\n            </p>\n            <p className=\"text-xl font-bold\">\n              <BirhausCurrencyDisplay \n                amount={totals.totalSpent} \n                currency={moneda}\n                className=\"text-white\"\n              />\n            </p>\n          </div>\n          \n          <div>\n            <p className=\"text-white/70 text-sm mb-1\">\n              {language === 'es' ? 'Restante' : 'Remaining'}\n            </p>\n            <p className={cn(\n              'text-xl font-bold',\n              totals.totalRemaining >= 0 ? 'text-green-200' : 'text-red-200'\n            )}>\n              <BirhausCurrencyDisplay \n                amount={totals.totalRemaining} \n                currency={moneda}\n                className={totals.totalRemaining >= 0 ? 'text-green-200' : 'text-red-200'}\n              />\n            </p>\n          </div>\n        </div>\n\n        {/* Overall progress bar */}\n        <div className=\"mt-4\">\n          <div className=\"flex items-center justify-between text-sm text-white/80 mb-2\">\n            <span>{language === 'es' ? 'Progreso General' : 'Overall Progress'}</span>\n            <span>{totals.spentPercentage.toFixed(1)}%</span>\n          </div>\n          <div className=\"w-full bg-white/20 rounded-full h-2\">\n            <div\n              className={cn(\n                'h-2 rounded-full transition-all duration-500',\n                totals.spentPercentage >= 100 \n                  ? 'bg-red-300' \n                  : totals.spentPercentage >= 80 \n                  ? 'bg-yellow-300'\n                  : 'bg-green-300'\n              )}\n              style={{ width: `${Math.min(100, totals.spentPercentage)}%` }}\n            />\n          </div>\n        </div>\n      </div>\n\n      {/* Budget categories */}\n      <div className=\"space-y-4\">\n        {sortedBudgets.map((budget) => {\n          const categoryConfig = budgetCategoryConfig[budget.categoria]\n          const budgetStatus = getBudgetStatus(budget)\n          const statusConfig = budgetStatusConfig[budgetStatus]\n          const progressPercentage = getProgressPercentage(budget)\n          const limit = budget.limite ?? budget.montoPresupuesto\n          const spent = budget.gastado ?? budget.montoGastado\n          const remaining = limit - spent\n\n          return (\n            <div\n              key={budget.id}\n              className={cn(\n                'p-4 border rounded-lg transition-all duration-200',\n                budgetStatus === 'excedido' \n                  ? 'border-red-200 bg-red-50' \n                  : budgetStatus === 'cerca_limite'\n                  ? 'border-yellow-200 bg-yellow-50'\n                  : 'border-birhaus-border bg-white hover:shadow-sm'\n              )}\n            >\n              <div className=\"flex items-start justify-between\">\n                {/* Category info */}\n                <div className=\"flex items-center gap-4 flex-1\">\n                  <div className={cn('p-2 rounded-full', categoryConfig.colorClass)}>\n                    {categoryConfig.icon}\n                  </div>\n                  \n                  <div className=\"flex-1 min-w-0\">\n                    <div className=\"flex items-center gap-2 mb-2\">\n                      <h3 className=\"font-semibold text-birhaus-foreground\">\n                        {language === 'es' ? categoryConfig.nameEs : categoryConfig.nameEn}\n                      </h3>\n                      \n                      <span className={cn(\n                        'flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full',\n                        statusConfig.colorClass\n                      )}>\n                        {statusConfig.icon}\n                        <span>{language === 'es' ? statusConfig.nameEs : statusConfig.nameEn}</span>\n                      </span>\n                    </div>\n\n                    {/* Progress bar */}\n                    <div className=\"mb-3\">\n                      <div className=\"flex items-center justify-between text-sm text-birhaus-muted-foreground mb-1\">\n                        <span>\n                          <BirhausCurrencyDisplay amount={spent} currency={moneda} />\n                          {' '}/{' '}\n                          <BirhausCurrencyDisplay amount={limit} currency={moneda} />\n                        </span>\n                        <span>{progressPercentage.toFixed(1)}%</span>\n                      </div>\n                      \n                      <div className=\"w-full bg-birhaus-muted rounded-full h-2\">\n                        <div\n                          className={cn(\n                            'h-2 rounded-full transition-all duration-500',\n                            budgetStatus === 'excedido' \n                              ? 'bg-red-500' \n                              : budgetStatus === 'cerca_limite'\n                              ? 'bg-yellow-500'\n                              : 'bg-green-500'\n                          )}\n                          style={{ width: `${Math.min(100, progressPercentage)}%` }}\n                        />\n                      </div>\n                    </div>\n\n                    {/* Remaining amount */}\n                    <p className={cn(\n                      'text-sm font-medium',\n                      remaining >= 0 ? 'text-green-600' : 'text-red-600'\n                    )}>\n                      {remaining >= 0 ? (\n                        <>\n                          {language === 'es' ? 'Restante: ' : 'Remaining: '}\n                          <BirhausCurrencyDisplay amount={remaining} currency={moneda} />\n                        </>\n                      ) : (\n                        <>\n                          {language === 'es' ? 'Excedido por: ' : 'Over by: '}\n                          <BirhausCurrencyDisplay amount={Math.abs(remaining)} currency={moneda} />\n                        </>\n                      )}\n                    </p>\n\n                    {/* Last updated */}\n                    {budget.ultimaActualizacion && (\n                      <p className=\"text-xs text-birhaus-muted-foreground mt-2\">\n                        {language === 'es' ? 'Actualizado: ' : 'Updated: '}\n                        {budget.ultimaActualizacion.toLocaleDateString(\n                          language === 'es' ? 'es-PY' : 'en-US'\n                        )}\n                      </p>\n                    )}\n                  </div>\n                </div>\n\n                {/* Action buttons */}\n                {showEditButtons && (\n                  <div className=\"flex items-center gap-2 ml-4\">\n                    {onEditBudget && (\n                      <button\n                        onClick={() => handleEditBudget(budget)}\n                        className=\"p-2 text-birhaus-muted-foreground hover:text-birhaus-foreground hover:bg-birhaus-muted rounded transition-colors\"\n                        aria-label={language === 'es' ? 'Editar presupuesto' : 'Edit budget'}\n                      >\n                        <Edit size={16} />\n                      </button>\n                    )}\n                    \n                    {onDeleteBudget && (\n                      <button\n                        onClick={() => handleDeleteBudget(budget)}\n                        className=\"p-2 text-birhaus-muted-foreground hover:text-red-600 hover:bg-red-50 rounded transition-colors\"\n                        aria-label={language === 'es' ? 'Eliminar presupuesto' : 'Delete budget'}\n                      >\n                        <Trash2 size={16} />\n                      </button>\n                    )}\n                  </div>\n                )}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n\n      {/* Summary statistics */}\n      <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 pt-4 border-t border-birhaus-border\">\n        <div className=\"text-center\">\n          <p className=\"text-2xl font-bold text-green-600\">\n            {budgets.filter(b => getBudgetStatus(b) === 'en_objetivo').length}\n          </p>\n          <p className=\"text-sm text-birhaus-muted-foreground\">\n            {language === 'es' ? 'En Objetivo' : 'On Track'}\n          </p>\n        </div>\n        \n        <div className=\"text-center\">\n          <p className=\"text-2xl font-bold text-yellow-600\">\n            {budgets.filter(b => getBudgetStatus(b) === 'cerca_limite').length}\n          </p>\n          <p className=\"text-sm text-birhaus-muted-foreground\">\n            {language === 'es' ? 'Cerca del Límite' : 'Near Limit'}\n          </p>\n        </div>\n        \n        <div className=\"text-center\">\n          <p className=\"text-2xl font-bold text-red-600\">\n            {budgets.filter(b => getBudgetStatus(b) === 'excedido').length}\n          </p>\n          <p className=\"text-sm text-birhaus-muted-foreground\">\n            {language === 'es' ? 'Excedido' : 'Over Budget'}\n          </p>\n        </div>\n        \n        <div className=\"text-center\">\n          <p className=\"text-2xl font-bold text-birhaus-foreground\">\n            {budgets.length}\n          </p>\n          <p className=\"text-sm text-birhaus-muted-foreground\">\n            {language === 'es' ? 'Total Categorías' : 'Total Categories'}\n          </p>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nexport type { BirhausBudgetTrackerProps }","'use client'\n\nimport React from 'react'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { \n  TrendingUp, \n  TrendingDown, \n  Minus,\n  PieChart,\n  BarChart3,\n  DollarSign,\n  Percent,\n  AlertCircle,\n  Info,\n  Eye,\n  EyeOff,\n  Calendar,\n  Target\n} from 'lucide-react'\nimport { formatCurrency } from '../utils/currency'\nimport { BirhausCurrencyDisplay } from './BirhausCurrencyDisplay'\nimport type { \n  BirhausInvestmentPortfolioProps, \n  Investment,\n  InvestmentType,\n  InvestmentRisk,\n  PortfolioAllocation,\n  CurrencyCode\n} from '../types/financial'\n\n// ChartInputs type for cn utility\ntype ChartInputs = Array<string | number | boolean | null | undefined | string[] | Record<string, boolean>>\n\n// Local cn utility\nconst cn = (...inputs: ChartInputs) => twMerge(clsx(inputs))\n\n// Investment type configuration\nconst investmentTypeConfig: Record<InvestmentType, {\n  icon: React.ReactNode\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  acciones: {\n    icon: <TrendingUp size={20} />,\n    colorClass: 'text-blue-600 bg-blue-100',\n    nameEs: 'Acciones',\n    nameEn: 'Stocks'\n  },\n  bonos: {\n    icon: <BarChart3 size={20} />,\n    colorClass: 'text-green-600 bg-green-100',\n    nameEs: 'Bonos',\n    nameEn: 'Bonds'\n  },\n  fondo_mutuo: {\n    icon: <PieChart size={20} />,\n    colorClass: 'text-purple-600 bg-purple-100',\n    nameEs: 'Fondos Mutuos',\n    nameEn: 'Mutual Funds'\n  },\n  etf: {\n    icon: <BarChart3 size={20} />,\n    colorClass: 'text-orange-600 bg-orange-100',\n    nameEs: 'ETF',\n    nameEn: 'ETF'\n  },\n  crypto: {\n    icon: <DollarSign size={20} />,\n    colorClass: 'text-yellow-600 bg-yellow-100',\n    nameEs: 'Crypto',\n    nameEn: 'Crypto'\n  },\n  criptomonedas: {\n    icon: <DollarSign size={20} />,\n    colorClass: 'text-yellow-600 bg-yellow-100',\n    nameEs: 'Criptomonedas',\n    nameEn: 'Cryptocurrency'\n  },\n  plazo_fijo: {\n    icon: <Calendar size={20} />,\n    colorClass: 'text-indigo-600 bg-indigo-100',\n    nameEs: 'Plazo Fijo',\n    nameEn: 'Fixed Deposit'\n  },\n  inmuebles: {\n    icon: <Target size={20} />,\n    colorClass: 'text-red-600 bg-red-100',\n    nameEs: 'Inmuebles',\n    nameEn: 'Real Estate'\n  }\n}\n\n// Risk level configuration\nconst riskLevelConfig: Record<InvestmentRisk, {\n  colorClass: string\n  nameEs: string\n  nameEn: string\n}> = {\n  bajo: {\n    colorClass: 'text-green-700 bg-green-100',\n    nameEs: 'Riesgo Bajo',\n    nameEn: 'Low Risk'\n  },\n  medio: {\n    colorClass: 'text-yellow-700 bg-yellow-100',\n    nameEs: 'Riesgo Medio',\n    nameEn: 'Medium Risk'\n  },\n  alto: {\n    colorClass: 'text-red-700 bg-red-100',\n    nameEs: 'Riesgo Alto',\n    nameEn: 'High Risk'\n  }\n}\n\n/**\n * BirhausInvestmentPortfolio - Investment portfolio tracking component\n * \n * Features:\n * - Multiple investment types with appropriate icons and colors\n * - Real-time performance tracking with gains/losses\n * - Risk level indicators and portfolio diversification analysis\n * - Portfolio allocation visualization and recommendations\n * - Spanish-first investment terminology\n * - Miller's Law compliance (max 7 visible investments)\n * - Privacy toggle for sensitive financial information\n * - Accessibility compliant with proper ARIA labels\n * - Responsive layout for different screen sizes\n * - Performance alerts and investment recommendations\n */\nexport function BirhausInvestmentPortfolio({\n  investments,\n  showPrivacyToggle = true,\n  showAllocation = true,\n  showPerformanceMetrics = true,\n  moneda = 'PYG',\n  onInvestmentClick,\n  className,\n  ...props\n}: BirhausInvestmentPortfolioProps) {\n  const { language, reportViolation } = useBirhaus()\n  const [isPrivacyEnabled, setIsPrivacyEnabled] = React.useState(false)\n\n  // BIRHAUS validation: Check cognitive load (max 7 investments - Miller's Law)\n  React.useEffect(() => {\n    if (investments.length > 7) {\n      reportViolation({\n        type: 'cognitive',\n        severity: 'warning',\n        element: document.createElement('div'),\n        message: `Investment portfolio shows ${investments.length} investments (max recommended: 7)`,\n        messageEs: `Portafolio de inversiones muestra ${investments.length} inversiones (máximo recomendado: 7)`,\n        messageEn: `Investment portfolio shows ${investments.length} investments (max recommended: 7)`,\n        recommendation: 'Consider grouping similar investments or using pagination',\n        birhausPrinciple: 1 // Cognitive load reduction\n      })\n    }\n  }, [investments.length, reportViolation])\n\n  // Calculate portfolio totals and performance\n  const portfolioMetrics = React.useMemo(() => {\n    const totalValue = investments.reduce((sum: number, inv: Investment) => sum + inv.valorActual, 0)\n    const totalCost = investments.reduce((sum: number, inv: Investment) => sum + inv.montoInvertido, 0)\n    const totalGainLoss = totalValue - totalCost\n    const totalGainLossPercentage = totalCost > 0 ? ((totalValue - totalCost) / totalCost) * 100 : 0\n\n    // Calculate allocation by type\n    const allocationByType = investments.reduce((acc, inv) => {\n      const existing = acc.find(item => item.tipo === inv.tipo)\n      if (existing) {\n        existing.valor += inv.valorActual\n        existing.porcentaje = (existing.valor / totalValue) * 100\n      } else {\n        acc.push({\n          tipo: inv.tipo,\n          valor: inv.valorActual,\n          porcentaje: (inv.valorActual / totalValue) * 100,\n          rendimiento: inv.rendimiento\n        })\n      }\n      return acc\n    }, [] as PortfolioAllocation[])\n\n    // Calculate allocation by risk level\n    const allocationByRisk = investments.reduce((acc, inv) => {\n      const existing = acc.find(item => item.nivel === inv.nivelRiesgo)\n      if (existing) {\n        existing.valor += inv.valorActual\n        existing.porcentaje = (existing.valor / totalValue) * 100\n      } else {\n        acc.push({\n          nivel: inv.nivelRiesgo ?? inv.riesgo,\n          valor: inv.valorActual,\n          porcentaje: (inv.valorActual / totalValue) * 100\n        })\n      }\n      return acc\n    }, [] as { nivel: InvestmentRisk; valor: number; porcentaje: number }[])\n\n    return {\n      totalValue,\n      totalCost,\n      totalGainLoss,\n      totalGainLossPercentage,\n      allocationByType,\n      allocationByRisk\n    }\n  }, [investments])\n\n  // BIRHAUS validation: Check for high-risk concentration\n  React.useEffect(() => {\n    const highRiskAllocation = portfolioMetrics.allocationByRisk\n      .find(item => item.nivel === 'alto')?.porcentaje || 0\n\n    if (highRiskAllocation > 30) {\n      reportViolation({\n        type: 'performance',\n        severity: 'warning',\n        element: document.createElement('div'),\n        message: `High-risk investments represent ${highRiskAllocation.toFixed(1)}% of portfolio`,\n        messageEs: `Inversiones de alto riesgo representan ${highRiskAllocation.toFixed(1)}% del portafolio`,\n        messageEn: `High-risk investments represent ${highRiskAllocation.toFixed(1)}% of portfolio`,\n        recommendation: 'Consider diversifying with lower-risk investments',\n        birhausPrinciple: 6 // Progressive disclosure of risk information\n      })\n    }\n  }, [portfolioMetrics.allocationByRisk, reportViolation])\n\n  // Toggle privacy mode\n  const togglePrivacy = React.useCallback(() => {\n    setIsPrivacyEnabled(!isPrivacyEnabled)\n  }, [isPrivacyEnabled])\n\n  // Handle investment click\n  const handleInvestmentClick = React.useCallback((investment: Investment) => {\n    onInvestmentClick?.(investment)\n  }, [onInvestmentClick])\n\n  // Format display value\n  const formatDisplayValue = (value: number, currency: CurrencyCode = moneda) => {\n    if (isPrivacyEnabled) {\n      return '••••••••'\n    }\n    return <BirhausCurrencyDisplay amount={value} currency={currency} />\n  }\n\n  // Get performance color class\n  const getPerformanceColorClass = (gainLoss: number) => {\n    if (gainLoss > 0) return 'text-green-600'\n    if (gainLoss < 0) return 'text-red-600'\n    return 'text-birhaus-muted-foreground'\n  }\n\n  if (investments.length === 0) {\n    return (\n      <div className={cn('p-8 text-center border border-birhaus-border rounded-lg', className)} {...props}>\n        <PieChart size={48} className=\"mx-auto mb-4 text-birhaus-muted-foreground/50\" />\n        <h3 className=\"text-lg font-semibold text-birhaus-foreground mb-2\">\n          {language === 'es' ? 'No hay inversiones en el portafolio' : 'No investments in portfolio'}\n        </h3>\n        <p className=\"text-birhaus-muted-foreground\">\n          {language === 'es' \n            ? 'Agrega tu primera inversión para comenzar a hacer seguimiento de tu portafolio.'\n            : 'Add your first investment to start tracking your portfolio.'\n          }\n        </p>\n      </div>\n    )\n  }\n\n  return (\n    <div className={cn('space-y-6', className)} {...props}>\n      {/* Portfolio Summary Header */}\n      <div className=\"bg-gradient-to-r from-birhaus-primary to-birhaus-primary/80 p-6 rounded-lg text-white\">\n        <div className=\"flex items-center justify-between mb-4\">\n          <div>\n            <h2 className=\"text-xl font-bold mb-1\">\n              {language === 'es' ? 'Portafolio de Inversiones' : 'Investment Portfolio'}\n            </h2>\n            <p className=\"text-white/80\">\n              {investments.length} {language === 'es' ? 'inversiones' : 'investments'}\n            </p>\n          </div>\n          \n          {showPrivacyToggle && (\n            <button\n              onClick={togglePrivacy}\n              className=\"flex items-center gap-2 px-4 py-2 bg-white/20 rounded-lg hover:bg-white/30 transition-colors\"\n              aria-label={isPrivacyEnabled \n                ? (language === 'es' ? 'Mostrar valores' : 'Show values')\n                : (language === 'es' ? 'Ocultar valores' : 'Hide values')}\n            >\n              {isPrivacyEnabled ? <EyeOff size={16} /> : <Eye size={16} />}\n              <span className=\"hidden sm:inline\">\n                {isPrivacyEnabled \n                  ? (language === 'es' ? 'Mostrar' : 'Show')\n                  : (language === 'es' ? 'Ocultar' : 'Hide')\n                }\n              </span>\n            </button>\n          )}\n        </div>\n\n        {/* Portfolio Totals */}\n        <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-4\">\n          <div>\n            <p className=\"text-white/70 text-sm mb-1\">\n              {language === 'es' ? 'Valor Total' : 'Total Value'}\n            </p>\n            <p className=\"text-xl font-bold\">\n              {formatDisplayValue(portfolioMetrics.totalValue)}\n            </p>\n          </div>\n          \n          <div>\n            <p className=\"text-white/70 text-sm mb-1\">\n              {language === 'es' ? 'Ganancia/Pérdida' : 'Gain/Loss'}\n            </p>\n            <p className={cn(\n              'text-xl font-bold',\n              isPrivacyEnabled ? 'text-white' : getPerformanceColorClass(portfolioMetrics.totalGainLoss)\n            )}>\n              {isPrivacyEnabled ? '••••••••' : (\n                <>\n                  {portfolioMetrics.totalGainLoss >= 0 ? '+' : ''}\n                  <BirhausCurrencyDisplay \n                    amount={portfolioMetrics.totalGainLoss} \n                    currency={moneda}\n                    className={getPerformanceColorClass(portfolioMetrics.totalGainLoss)}\n                  />\n                </>\n              )}\n            </p>\n          </div>\n          \n          <div>\n            <p className=\"text-white/70 text-sm mb-1\">\n              {language === 'es' ? 'Rendimiento %' : 'Performance %'}\n            </p>\n            <p className={cn(\n              'text-xl font-bold flex items-center gap-2',\n              isPrivacyEnabled ? 'text-white' : getPerformanceColorClass(portfolioMetrics.totalGainLoss)\n            )}>\n              {isPrivacyEnabled ? '••••' : (\n                <>\n                  {portfolioMetrics.totalGainLossPercentage > 0 ? (\n                    <TrendingUp size={20} />\n                  ) : portfolioMetrics.totalGainLossPercentage < 0 ? (\n                    <TrendingDown size={20} />\n                  ) : (\n                    <Minus size={20} />\n                  )}\n                  {portfolioMetrics.totalGainLossPercentage >= 0 ? '+' : ''}\n                  {portfolioMetrics.totalGainLossPercentage.toFixed(2)}%\n                </>\n              )}\n            </p>\n          </div>\n        </div>\n      </div>\n\n      {/* Portfolio Allocation */}\n      {showAllocation && !isPrivacyEnabled && (\n        <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n          {/* Allocation by Type */}\n          <div className=\"bg-white p-6 border border-birhaus-border rounded-lg\">\n            <h3 className=\"text-lg font-semibold text-birhaus-foreground mb-4\">\n              {language === 'es' ? 'Asignación por Tipo' : 'Allocation by Type'}\n            </h3>\n            <div className=\"space-y-3\">\n              {portfolioMetrics.allocationByType.map((allocation) => {\n                const typeConfig = investmentTypeConfig[allocation.tipo]\n                return (\n                  <div key={allocation.tipo} className=\"flex items-center justify-between\">\n                    <div className=\"flex items-center gap-3\">\n                      <div className={cn('p-1 rounded', typeConfig.colorClass)}>\n                        {typeConfig.icon}\n                      </div>\n                      <span className=\"text-sm font-medium\">\n                        {language === 'es' ? typeConfig.nameEs : typeConfig.nameEn}\n                      </span>\n                    </div>\n                    <div className=\"text-right\">\n                      <p className=\"text-sm font-semibold\">\n                        {allocation.porcentaje.toFixed(1)}%\n                      </p>\n                      <p className=\"text-xs text-birhaus-muted-foreground\">\n                        {formatDisplayValue(allocation.valor)}\n                      </p>\n                    </div>\n                  </div>\n                )\n              })}\n            </div>\n          </div>\n\n          {/* Allocation by Risk */}\n          <div className=\"bg-white p-6 border border-birhaus-border rounded-lg\">\n            <h3 className=\"text-lg font-semibold text-birhaus-foreground mb-4\">\n              {language === 'es' ? 'Asignación por Riesgo' : 'Allocation by Risk'}\n            </h3>\n            <div className=\"space-y-3\">\n              {portfolioMetrics.allocationByRisk.map((allocation) => {\n                const riskConfig = riskLevelConfig[allocation.nivel]\n                return (\n                  <div key={allocation.nivel} className=\"flex items-center justify-between\">\n                    <div className=\"flex items-center gap-3\">\n                      <span className={cn(\n                        'px-2 py-1 text-xs font-medium rounded-full',\n                        riskConfig.colorClass\n                      )}>\n                        {language === 'es' ? riskConfig.nameEs : riskConfig.nameEn}\n                      </span>\n                    </div>\n                    <div className=\"text-right\">\n                      <p className=\"text-sm font-semibold\">\n                        {allocation.porcentaje.toFixed(1)}%\n                      </p>\n                      <p className=\"text-xs text-birhaus-muted-foreground\">\n                        {formatDisplayValue(allocation.valor)}\n                      </p>\n                    </div>\n                  </div>\n                )\n              })}\n            </div>\n          </div>\n        </div>\n      )}\n\n      {/* Individual Investments */}\n      <div className=\"space-y-4\">\n        <h3 className=\"text-lg font-semibold text-birhaus-foreground\">\n          {language === 'es' ? 'Inversiones Individuales' : 'Individual Investments'}\n        </h3>\n        \n        {investments.map((investment) => {\n          const typeConfig = investmentTypeConfig[investment.tipo]\n          const riesgoLevel = investment.nivelRiesgo ?? investment.riesgo\n          const riskConfig = riskLevelConfig[riesgoLevel]\n          const costoBase = investment.costoBase ?? investment.montoInvertido\n          const gainLoss = investment.valorActual - costoBase\n          const gainLossPercentage = costoBase > 0 ? (gainLoss / costoBase) * 100 : 0\n          const isClickable = Boolean(onInvestmentClick)\n\n          return (\n            <div\n              key={investment.id}\n              className={cn(\n                'p-4 border border-birhaus-border rounded-lg transition-all duration-200',\n                isClickable && 'cursor-pointer hover:border-birhaus-primary/50 hover:shadow-sm',\n                'focus:outline-none focus:ring-2 focus:ring-birhaus-primary focus:border-birhaus-primary'\n              )}\n              onClick={() => isClickable && handleInvestmentClick(investment)}\n              onKeyDown={(e) => {\n                if (isClickable && (e.key === 'Enter' || e.key === ' ')) {\n                  e.preventDefault()\n                  handleInvestmentClick(investment)\n                }\n              }}\n              tabIndex={isClickable ? 0 : -1}\n              role={isClickable ? 'button' : undefined}\n            >\n              <div className=\"flex items-start justify-between\">\n                {/* Investment info */}\n                <div className=\"flex items-start gap-4 flex-1\">\n                  <div className={cn('p-2 rounded-full', typeConfig.colorClass)}>\n                    {typeConfig.icon}\n                  </div>\n                  \n                  <div className=\"flex-1 min-w-0\">\n                    <div className=\"flex items-center gap-2 mb-2\">\n                      <h4 className=\"font-semibold text-birhaus-foreground truncate\">\n                        {investment.nombre ?? investment.nombreEs}\n                      </h4>\n                      <span className={cn(\n                        'px-2 py-1 text-xs font-medium rounded-full',\n                        riskConfig.colorClass\n                      )}>\n                        {language === 'es' ? riskConfig.nameEs : riskConfig.nameEn}\n                      </span>\n                    </div>\n\n                    <p className=\"text-sm text-birhaus-muted-foreground mb-2\">\n                      {language === 'es' ? typeConfig.nameEs : typeConfig.nameEn}\n                      {investment.simbolo && ` • ${investment.simbolo}`}\n                    </p>\n\n                    <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4 text-sm\">\n                      <div>\n                        <p className=\"text-birhaus-muted-foreground mb-1\">\n                          {language === 'es' ? 'Cantidad' : 'Quantity'}\n                        </p>\n                        <p className=\"font-medium\">\n                          {investment.cantidad?.toLocaleString() ?? '-'}\n                        </p>\n                      </div>\n                      \n                      <div>\n                        <p className=\"text-birhaus-muted-foreground mb-1\">\n                          {language === 'es' ? 'Costo Base' : 'Cost Basis'}\n                        </p>\n                        <p className=\"font-medium\">\n                          {formatDisplayValue(costoBase)}\n                        </p>\n                      </div>\n                      \n                      <div>\n                        <p className=\"text-birhaus-muted-foreground mb-1\">\n                          {language === 'es' ? 'Valor Actual' : 'Current Value'}\n                        </p>\n                        <p className=\"font-medium\">\n                          {formatDisplayValue(investment.valorActual)}\n                        </p>\n                      </div>\n                      \n                      <div>\n                        <p className=\"text-birhaus-muted-foreground mb-1\">\n                          {language === 'es' ? 'Rendimiento' : 'Return'}\n                        </p>\n                        <p className={cn(\n                          'font-medium flex items-center gap-1',\n                          isPrivacyEnabled ? 'text-birhaus-foreground' : getPerformanceColorClass(gainLoss)\n                        )}>\n                          {!isPrivacyEnabled && (\n                            <>\n                              {gainLossPercentage > 0 ? (\n                                <TrendingUp size={12} />\n                              ) : gainLossPercentage < 0 ? (\n                                <TrendingDown size={12} />\n                              ) : (\n                                <Minus size={12} />\n                              )}\n                              {gainLossPercentage >= 0 ? '+' : ''}\n                              {gainLossPercentage.toFixed(2)}%\n                            </>\n                          )}\n                          {isPrivacyEnabled && '••••'}\n                        </p>\n                      </div>\n                    </div>\n\n                    {/* Additional investment info */}\n                    {(investment.fechaCompra ?? investment.fechaInversion) && (\n                      <p className=\"text-xs text-birhaus-muted-foreground mt-2\">\n                        {language === 'es' ? 'Comprado: ' : 'Purchased: '}\n                        {(investment.fechaCompra ?? investment.fechaInversion).toLocaleDateString(\n                          language === 'es' ? 'es-PY' : 'en-US'\n                        )}\n                      </p>\n                    )}\n                  </div>\n                </div>\n\n                {/* Performance indicator */}\n                {!isPrivacyEnabled && (\n                  <div className=\"text-right flex-shrink-0\">\n                    <p className={cn('font-bold', getPerformanceColorClass(gainLoss))}>\n                      {gainLoss >= 0 ? '+' : ''}\n                      <BirhausCurrencyDisplay \n                        amount={gainLoss} \n                        currency={moneda}\n                        className={getPerformanceColorClass(gainLoss)}\n                      />\n                    </p>\n                    \n                    {/* Warning for significant losses */}\n                    {gainLossPercentage <= -20 && (\n                      <div className=\"flex items-center gap-1 text-red-600 mt-1\">\n                        <AlertCircle size={12} />\n                        <span className=\"text-xs\">\n                          {language === 'es' ? 'Pérdida significativa' : 'Significant loss'}\n                        </span>\n                      </div>\n                    )}\n                  </div>\n                )}\n              </div>\n            </div>\n          )\n        })}\n      </div>\n\n      {/* Portfolio Performance Metrics */}\n      {showPerformanceMetrics && !isPrivacyEnabled && (\n        <div className=\"bg-birhaus-muted/10 p-6 rounded-lg border border-birhaus-border\">\n          <h3 className=\"text-lg font-semibold text-birhaus-foreground mb-4\">\n            {language === 'es' ? 'Métricas de Rendimiento' : 'Performance Metrics'}\n          </h3>\n          \n          <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 text-center\">\n            <div>\n              <p className=\"text-2xl font-bold text-green-600\">\n                {investments.filter(inv => (inv.valorActual - (inv.costoBase ?? inv.montoInvertido)) > 0).length}\n              </p>\n              <p className=\"text-sm text-birhaus-muted-foreground\">\n                {language === 'es' ? 'Con Ganancias' : 'Profitable'}\n              </p>\n            </div>\n            \n            <div>\n              <p className=\"text-2xl font-bold text-red-600\">\n                {investments.filter(inv => (inv.valorActual - (inv.costoBase ?? inv.montoInvertido)) < 0).length}\n              </p>\n              <p className=\"text-sm text-birhaus-muted-foreground\">\n                {language === 'es' ? 'Con Pérdidas' : 'Losing'}\n              </p>\n            </div>\n            \n            <div>\n              <p className=\"text-2xl font-bold text-birhaus-foreground\">\n                {portfolioMetrics.allocationByType.length}\n              </p>\n              <p className=\"text-sm text-birhaus-muted-foreground\">\n                {language === 'es' ? 'Tipos de Activos' : 'Asset Types'}\n              </p>\n            </div>\n            \n            <div>\n              <p className=\"text-2xl font-bold text-birhaus-foreground\">\n                {((portfolioMetrics.allocationByRisk.find(r => r.nivel === 'alto')?.porcentaje || 0)).toFixed(0)}%\n              </p>\n              <p className=\"text-sm text-birhaus-muted-foreground\">\n                {language === 'es' ? 'Alto Riesgo' : 'High Risk'}\n              </p>\n            </div>\n          </div>\n\n          {/* Diversification recommendation */}\n          <div className=\"mt-4 p-4 bg-blue-50 rounded-lg border border-blue-200\">\n            <div className=\"flex items-start gap-2\">\n              <Info size={16} className=\"text-blue-600 flex-shrink-0 mt-0.5\" />\n              <div>\n                <p className=\"text-sm font-medium text-blue-900 mb-1\">\n                  {language === 'es' ? 'Recomendación de Diversificación' : 'Diversification Recommendation'}\n                </p>\n                <p className=\"text-xs text-blue-800\">\n                  {language === 'es' \n                    ? 'Considera balancear tu portafolio con una mezcla de inversiones de bajo, medio y alto riesgo para optimizar el rendimiento.'\n                    : 'Consider balancing your portfolio with a mix of low, medium, and high-risk investments to optimize performance.'\n                  }\n                </p>\n              </div>\n            </div>\n          </div>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport type { BirhausInvestmentPortfolioProps }","'use client'\n\nimport React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { useTheme } from '@birhaus/themes'\nimport { \n  CreditCard, \n  Banknote, \n  Shield, \n  CheckCircle, \n  AlertCircle,\n  Lock,\n  Sparkles,\n  Eye,\n  EyeOff\n} from 'lucide-react'\n\n// Local cn utility\nconst cn = (...inputs: (string | boolean | undefined | null)[]) => twMerge(clsx(inputs))\n\n// V3 Payment Form variants with glass morphism\nconst paymentFormV3Variants = cva(\n  'group relative transition-all duration-700 ease-smooth overflow-hidden backdrop-blur-md border border-white/30',\n  {\n    variants: {\n      glassVariant: {\n        subtle: 'bg-white/40 shadow-lg',\n        medium: 'bg-white/60 shadow-xl backdrop-saturate-150',\n        intense: 'bg-white/80 shadow-2xl backdrop-saturate-200'\n      },\n      borderRadius: {\n        moderate: 'rounded-2xl',\n        generous: 'rounded-3xl',\n        radical: 'rounded-[2.5rem]'\n      },\n      spacing: {\n        comfortable: 'p-6',\n        generous: 'p-8',\n        radical: 'p-12'\n      },\n      security: {\n        standard: 'border-gray-300/50',\n        secure: 'border-green-300/50 bg-gradient-to-br from-green-50/30 to-white/50',\n        warning: 'border-amber-300/50 bg-gradient-to-br from-amber-50/30 to-white/50'\n      },\n      floating: {\n        true: 'hover:scale-[1.01] hover:-translate-y-1',\n        false: ''\n      }\n    },\n    defaultVariants: {\n      glassVariant: 'medium',\n      borderRadius: 'generous',\n      spacing: 'generous',\n      security: 'secure',\n      floating: true\n    }\n  }\n)\n\nconst inputV3Variants = cva(\n  'w-full transition-all duration-300 border-0 outline-0 focus:ring-2 focus:ring-blue-500/50 backdrop-blur-sm',\n  {\n    variants: {\n      glassVariant: {\n        subtle: 'bg-white/60 placeholder-gray-500',\n        medium: 'bg-white/70 placeholder-gray-600 backdrop-saturate-150',\n        intense: 'bg-white/80 placeholder-gray-700 backdrop-saturate-200'\n      },\n      size: {\n        comfortable: 'px-4 py-3 text-base rounded-xl',\n        generous: 'px-6 py-4 text-lg rounded-2xl',\n        radical: 'px-8 py-5 text-xl rounded-[1.5rem]'\n      }\n    },\n    defaultVariants: {\n      glassVariant: 'medium',\n      size: 'generous'\n    }\n  }\n)\n\nexport interface PaymentMethodV3 {\n  id: string\n  name: string\n  nameEs?: string\n  nameEn?: string\n  type: 'card' | 'bank' | 'digital' | 'cash'\n  icon?: React.ComponentType<{ size?: number }>\n  enabled: boolean\n  fees?: {\n    percentage?: number\n    fixed?: number\n    currency?: string\n  }\n  limits?: {\n    min?: number\n    max?: number\n    daily?: number\n  }\n  description?: string\n  descriptionEs?: string\n  descriptionEn?: string\n}\n\nexport interface BirhausPaymentFormV3Props extends VariantProps<typeof paymentFormV3Variants> {\n  // Payment data\n  amount?: number\n  currency?: 'PYG' | 'USD' | 'EUR' | 'BRL'\n  paymentMethods?: PaymentMethodV3[]\n  \n  // V3 Glass styling\n  enableGlass?: boolean\n  glassIntensity?: 'subtle' | 'medium' | 'intense'\n  enableFloating?: boolean\n  reducedMotion?: boolean\n  \n  // Security features\n  enableSEPRELADValidation?: boolean\n  requireDocumentId?: boolean\n  showSecurityIndicators?: boolean\n  encryptSensitiveData?: boolean\n  \n  // Form behavior\n  autoFocus?: boolean\n  validateOnChange?: boolean\n  showAmountBreakdown?: boolean\n  allowPartialPayments?: boolean\n  \n  // Theme and localization\n  themeName?: 'financial' | 'educational' | 'healthcare' | 'default'\n  defaultPaymentMethod?: string\n  \n  // Event handlers\n  onPaymentMethodChange?: (method: PaymentMethodV3) => void\n  onAmountChange?: (amount: number) => void\n  onValidationError?: (errors: string[]) => void\n  onSubmit?: (paymentData: any) => Promise<void> | void\n  onCancel?: () => void\n  \n  // Standard props\n  className?: string\n  disabled?: boolean\n  loading?: boolean\n  title?: string\n  titleEs?: string\n  titleEn?: string\n}\n\n/**\n * BirhausPaymentFormV3 - Glass morphism payment form with SEPRELAD compliance\n * \n * Features:\n * - Glass morphism container with enhanced security indicators\n * - SEPRELAD compliant validation for Paraguay financial regulations\n * - Multi-currency support (PYG, USD, EUR, BRL)\n * - Secure card input with encryption indicators\n * - Real-time validation with glass error states\n * - Spanish-first payment method labeling\n * - Floating animations with security assurance\n * - Generous spacing for improved UX\n */\nexport function BirhausPaymentFormV3({\n  amount = 0,\n  currency = 'PYG',\n  paymentMethods = [],\n  enableGlass = true,\n  glassVariant = 'medium',\n  borderRadius = 'generous',\n  spacing = 'generous',\n  security = 'secure',\n  floating = true,\n  enableSEPRELADValidation = true,\n  requireDocumentId = true,\n  showSecurityIndicators = true,\n  encryptSensitiveData = true,\n  autoFocus = false,\n  validateOnChange = true,\n  showAmountBreakdown = true,\n  allowPartialPayments = false,\n  reducedMotion = false,\n  themeName = 'financial',\n  defaultPaymentMethod,\n  onPaymentMethodChange,\n  onAmountChange,\n  onValidationError,\n  onSubmit,\n  onCancel,\n  className,\n  disabled = false,\n  loading = false,\n  title,\n  titleEs,\n  titleEn,\n  ...props\n}: BirhausPaymentFormV3Props) {\n  const { language } = useBirhaus()\n  const theme = useTheme(themeName)\n  \n  // Form state\n  const [selectedPaymentMethod, setSelectedPaymentMethod] = React.useState<string>(\n    defaultPaymentMethod || paymentMethods[0]?.id || ''\n  )\n  const [formData, setFormData] = React.useState({\n    amount: amount,\n    cardNumber: '',\n    expiryDate: '',\n    cvv: '',\n    cardholderName: '',\n    documentId: '',\n    email: '',\n    phone: ''\n  })\n  const [showCardDetails, setShowCardDetails] = React.useState(false)\n  const [validationErrors, setValidationErrors] = React.useState<string[]>([])\n  const [isSecureMode, setIsSecureMode] = React.useState(encryptSensitiveData)\n  const [isHovered, setIsHovered] = React.useState(false)\n\n  // Format currency for Paraguay\n  const formatCurrency = React.useCallback((value: number): string => {\n    const locale = language === 'es' ? 'es-PY' : 'en-US'\n    const currencyMap = {\n      'PYG': 'PYG',\n      'USD': 'USD', \n      'EUR': 'EUR',\n      'BRL': 'BRL'\n    }\n    \n    return new Intl.NumberFormat(locale, {\n      style: 'currency',\n      currency: currencyMap[currency],\n      minimumFractionDigits: currency === 'PYG' ? 0 : 2,\n      maximumFractionDigits: currency === 'PYG' ? 0 : 2\n    }).format(value)\n  }, [language, currency])\n\n  // SEPRELAD validation for Paraguay financial regulations\n  const validateSEPRELAD = React.useCallback((amount: number, documentId: string): string[] => {\n    const errors: string[] = []\n    \n    if (!enableSEPRELADValidation) return errors\n    \n    // SEPRELAD threshold validation (simplified)\n    const thresholdPYG = 10000000 // 10M PYG\n    if (currency === 'PYG' && amount > thresholdPYG) {\n      if (!documentId) {\n        errors.push(\n          language === 'es' \n            ? 'Documento de identidad requerido para montos superiores a ₲10.000.000'\n            : 'ID document required for amounts over ₲10,000,000'\n        )\n      }\n    }\n    \n    return errors\n  }, [enableSEPRELADValidation, currency, language])\n\n  // Form validation\n  const validateForm = React.useCallback(() => {\n    const errors: string[] = []\n    const selectedMethod = paymentMethods.find(m => m.id === selectedPaymentMethod)\n    \n    if (!selectedMethod) {\n      errors.push(\n        language === 'es' ? 'Selecciona un método de pago' : 'Select a payment method'\n      )\n    }\n    \n    if (formData.amount <= 0) {\n      errors.push(\n        language === 'es' ? 'El monto debe ser mayor a cero' : 'Amount must be greater than zero'\n      )\n    }\n    \n    if (selectedMethod?.type === 'card') {\n      if (!formData.cardNumber || formData.cardNumber.length < 13) {\n        errors.push(\n          language === 'es' ? 'Número de tarjeta inválido' : 'Invalid card number'\n        )\n      }\n      if (!formData.expiryDate) {\n        errors.push(\n          language === 'es' ? 'Fecha de vencimiento requerida' : 'Expiry date required'\n        )\n      }\n      if (!formData.cvv || formData.cvv.length < 3) {\n        errors.push(\n          language === 'es' ? 'CVV inválido' : 'Invalid CVV'\n        )\n      }\n    }\n    \n    // SEPRELAD validation\n    if (requireDocumentId) {\n      const seprelad = validateSEPRELAD(formData.amount, formData.documentId)\n      errors.push(...seprelad)\n    }\n    \n    return errors\n  }, [formData, selectedPaymentMethod, paymentMethods, requireDocumentId, validateSEPRELAD, language])\n\n  // Handle form submission\n  const handleSubmit = React.useCallback(async (e: React.FormEvent) => {\n    e.preventDefault()\n    \n    if (disabled || loading) return\n    \n    const errors = validateForm()\n    if (errors.length > 0) {\n      setValidationErrors(errors)\n      onValidationError?.(errors)\n      return\n    }\n    \n    setValidationErrors([])\n    \n    const paymentData = {\n      ...formData,\n      paymentMethod: selectedPaymentMethod,\n      currency,\n      securityCompliant: isSecureMode,\n      seprelad: enableSEPRELADValidation\n    }\n    \n    try {\n      await onSubmit?.(paymentData)\n    } catch (error) {\n      console.error('Payment submission error:', error)\n    }\n  }, [formData, selectedPaymentMethod, currency, isSecureMode, enableSEPRELADValidation, disabled, loading, validateForm, onValidationError, onSubmit])\n\n  // Handle input changes\n  const handleInputChange = React.useCallback((field: string, value: string) => {\n    setFormData(prev => ({ ...prev, [field]: value }))\n    \n    if (field === 'amount') {\n      onAmountChange?.(parseFloat(value) || 0)\n    }\n    \n    if (validateOnChange) {\n      const errors = validateForm()\n      setValidationErrors(errors)\n    }\n  }, [validateOnChange, validateForm, onAmountChange])\n\n  // Mouse interactions\n  const handleMouseEnter = React.useCallback(() => {\n    if (floating && !reducedMotion) {\n      setIsHovered(true)\n    }\n  }, [floating, reducedMotion])\n\n  const handleMouseLeave = React.useCallback(() => {\n    if (floating && !reducedMotion) {\n      setIsHovered(false)\n    }\n  }, [floating, reducedMotion])\n\n  // Selected payment method\n  const selectedMethod = paymentMethods.find(m => m.id === selectedPaymentMethod)\n\n  return (\n    <form\n      onSubmit={handleSubmit}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      className={cn(\n        paymentFormV3Variants({\n          glassVariant: enableGlass ? glassVariant : undefined,\n          borderRadius,\n          spacing,\n          security: validationErrors.length > 0 ? 'warning' : security,\n          floating: floating && isHovered\n        }),\n        'space-y-6',\n        !enableGlass && 'bg-white border-gray-200',\n        disabled && 'opacity-60 cursor-not-allowed',\n        className\n      )}\n      {...props}\n    >\n      {/* Glass gradient overlay */}\n      {enableGlass && (\n        <div className=\"absolute inset-0 rounded-[inherit] bg-gradient-to-br from-white/30 via-transparent to-white/10 pointer-events-none\" />\n      )}\n\n      {/* Security indicators */}\n      {showSecurityIndicators && (\n        <div className=\"absolute top-6 right-6 flex items-center gap-2\">\n          {isSecureMode && (\n            <div className=\"flex items-center gap-1 text-green-600\">\n              <Shield size={16} />\n              <span className=\"text-xs font-medium\">\n                {language === 'es' ? 'Seguro' : 'Secure'}\n              </span>\n            </div>\n          )}\n          {enableGlass && floating && (\n            <div className=\"text-blue-400/60\">\n              <Sparkles size={16} className=\"animate-pulse\" />\n            </div>\n          )}\n        </div>\n      )}\n\n      {/* Form header */}\n      <div className=\"relative space-y-3\">\n        <h2 className=\"text-2xl font-bold text-gray-800 flex items-center gap-3\">\n          <CreditCard size={28} className=\"text-blue-600\" />\n          {language === 'es' \n            ? (titleEs || title || 'Formulario de Pago')\n            : (titleEn || title || 'Payment Form')\n          }\n        </h2>\n        {showSecurityIndicators && (\n          <div className=\"flex items-center gap-2 text-sm text-gray-600\">\n            <Lock size={14} />\n            <span>\n              {language === 'es' \n                ? 'Cumplimiento SEPRELAD - Transacciones seguras'\n                : 'SEPRELAD Compliant - Secure transactions'\n              }\n            </span>\n          </div>\n        )}\n      </div>\n\n      {/* Amount input */}\n      <div className=\"relative space-y-2\">\n        <label className=\"block text-sm font-semibold text-gray-700\">\n          {language === 'es' ? 'Monto' : 'Amount'}\n        </label>\n        <div className=\"relative\">\n          <input\n            type=\"number\"\n            value={formData.amount}\n            onChange={(e) => handleInputChange('amount', e.target.value)}\n            placeholder={language === 'es' ? 'Ingresa el monto' : 'Enter amount'}\n            className={cn(\n              inputV3Variants({\n                glassVariant: enableGlass ? glassVariant : undefined,\n                size: spacing === 'radical' ? 'radical' : 'generous'\n              }),\n              !enableGlass && 'bg-gray-50 border border-gray-300'\n            )}\n            disabled={disabled}\n            autoFocus={autoFocus}\n          />\n          <div className=\"absolute right-4 top-1/2 -translate-y-1/2 text-gray-600 font-medium\">\n            {currency}\n          </div>\n        </div>\n        {showAmountBreakdown && formData.amount > 0 && (\n          <div className={cn(\n            'p-3 rounded-xl text-sm',\n            enableGlass \n              ? 'bg-white/40 backdrop-blur-sm border border-white/30'\n              : 'bg-blue-50 border border-blue-200'\n          )}>\n            <div className=\"flex justify-between\">\n              <span>{language === 'es' ? 'Total:' : 'Total:'}</span>\n              <span className=\"font-bold\">{formatCurrency(formData.amount)}</span>\n            </div>\n          </div>\n        )}\n      </div>\n\n      {/* Payment methods */}\n      {paymentMethods.length > 0 && (\n        <div className=\"space-y-3\">\n          <label className=\"block text-sm font-semibold text-gray-700\">\n            {language === 'es' ? 'Método de Pago' : 'Payment Method'}\n          </label>\n          <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n            {paymentMethods.map((method) => (\n              <button\n                key={method.id}\n                type=\"button\"\n                onClick={() => {\n                  setSelectedPaymentMethod(method.id)\n                  setShowCardDetails(method.type === 'card')\n                  onPaymentMethodChange?.(method)\n                }}\n                disabled={disabled || !method.enabled}\n                className={cn(\n                  'p-4 rounded-2xl border transition-all duration-300 text-left',\n                  enableGlass ? [\n                    selectedPaymentMethod === method.id\n                      ? 'bg-blue-100/60 border-blue-300/50 backdrop-blur-sm'\n                      : 'bg-white/50 border-white/30 hover:bg-white/70 backdrop-blur-sm'\n                  ] : [\n                    selectedPaymentMethod === method.id\n                      ? 'bg-blue-50 border-blue-300'\n                      : 'bg-gray-50 border-gray-200 hover:bg-gray-100'\n                  ],\n                  !method.enabled && 'opacity-50 cursor-not-allowed'\n                )}\n              >\n                <div className=\"flex items-center gap-3\">\n                  {method.icon ? (\n                    <method.icon size={24} />\n                  ) : (\n                    <CreditCard size={24} className=\"text-gray-600\" />\n                  )}\n                  <div>\n                    <div className=\"font-medium text-gray-800\">\n                      {language === 'es' ? (method.nameEs || method.name) : (method.nameEn || method.name)}\n                    </div>\n                    {method.description && (\n                      <div className=\"text-xs text-gray-600\">\n                        {language === 'es' \n                          ? (method.descriptionEs || method.description)\n                          : (method.descriptionEn || method.description)\n                        }\n                      </div>\n                    )}\n                  </div>\n                  {selectedPaymentMethod === method.id && (\n                    <CheckCircle size={20} className=\"text-blue-600 ml-auto\" />\n                  )}\n                </div>\n              </button>\n            ))}\n          </div>\n        </div>\n      )}\n\n      {/* Card details (when card payment is selected) */}\n      {showCardDetails && selectedMethod?.type === 'card' && (\n        <div className=\"space-y-4\">\n          <h3 className=\"text-lg font-semibold text-gray-700 flex items-center gap-2\">\n            <CreditCard size={20} />\n            {language === 'es' ? 'Detalles de Tarjeta' : 'Card Details'}\n          </h3>\n          \n          <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n            <div className=\"md:col-span-2\">\n              <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n                {language === 'es' ? 'Número de Tarjeta' : 'Card Number'}\n              </label>\n              <input\n                type=\"text\"\n                value={formData.cardNumber}\n                onChange={(e) => handleInputChange('cardNumber', e.target.value)}\n                placeholder=\"1234 5678 9012 3456\"\n                maxLength={19}\n                className={cn(\n                  inputV3Variants({\n                    glassVariant: enableGlass ? glassVariant : undefined,\n                    size: 'comfortable'\n                  }),\n                  !enableGlass && 'bg-gray-50 border border-gray-300'\n                )}\n                disabled={disabled}\n              />\n            </div>\n            \n            <div>\n              <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n                {language === 'es' ? 'Fecha de Vencimiento' : 'Expiry Date'}\n              </label>\n              <input\n                type=\"text\"\n                value={formData.expiryDate}\n                onChange={(e) => handleInputChange('expiryDate', e.target.value)}\n                placeholder=\"MM/YY\"\n                maxLength={5}\n                className={cn(\n                  inputV3Variants({\n                    glassVariant: enableGlass ? glassVariant : undefined,\n                    size: 'comfortable'\n                  }),\n                  !enableGlass && 'bg-gray-50 border border-gray-300'\n                )}\n                disabled={disabled}\n              />\n            </div>\n            \n            <div>\n              <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n                CVV\n              </label>\n              <input\n                type=\"password\"\n                value={formData.cvv}\n                onChange={(e) => handleInputChange('cvv', e.target.value)}\n                placeholder=\"123\"\n                maxLength={4}\n                className={cn(\n                  inputV3Variants({\n                    glassVariant: enableGlass ? glassVariant : undefined,\n                    size: 'comfortable'\n                  }),\n                  !enableGlass && 'bg-gray-50 border border-gray-300'\n                )}\n                disabled={disabled}\n              />\n            </div>\n          </div>\n        </div>\n      )}\n\n      {/* Document ID (SEPRELAD requirement) */}\n      {requireDocumentId && (\n        <div className=\"space-y-2\">\n          <label className=\"block text-sm font-medium text-gray-700\">\n            {language === 'es' ? 'Documento de Identidad' : 'Identity Document'}\n            <span className=\"text-red-500 ml-1\">*</span>\n          </label>\n          <input\n            type=\"text\"\n            value={formData.documentId}\n            onChange={(e) => handleInputChange('documentId', e.target.value)}\n            placeholder={language === 'es' ? 'Número de cédula' : 'ID number'}\n            className={cn(\n              inputV3Variants({\n                glassVariant: enableGlass ? glassVariant : undefined,\n                size: 'comfortable'\n              }),\n              !enableGlass && 'bg-gray-50 border border-gray-300'\n            )}\n            disabled={disabled}\n          />\n        </div>\n      )}\n\n      {/* Validation errors */}\n      {validationErrors.length > 0 && (\n        <div className={cn(\n          'p-4 rounded-2xl border',\n          enableGlass \n            ? 'bg-red-50/60 border-red-200/50 backdrop-blur-sm'\n            : 'bg-red-50 border-red-200'\n        )}>\n          <div className=\"flex items-start gap-3\">\n            <AlertCircle size={20} className=\"text-red-600 mt-0.5\" />\n            <div className=\"space-y-1\">\n              <h4 className=\"font-medium text-red-800\">\n                {language === 'es' ? 'Errores de validación' : 'Validation errors'}\n              </h4>\n              <ul className=\"text-sm text-red-700 space-y-1\">\n                {validationErrors.map((error, index) => (\n                  <li key={index}>• {error}</li>\n                ))}\n              </ul>\n            </div>\n          </div>\n        </div>\n      )}\n\n      {/* Action buttons */}\n      <div className=\"flex items-center gap-4 pt-4\">\n        <button\n          type=\"submit\"\n          disabled={disabled || loading || validationErrors.length > 0}\n          className={cn(\n            'flex-1 py-4 px-6 rounded-2xl font-semibold text-white transition-all duration-300',\n            'bg-blue-600 hover:bg-blue-700 active:bg-blue-800',\n            'disabled:opacity-50 disabled:cursor-not-allowed',\n            enableGlass && 'backdrop-blur-sm shadow-lg hover:shadow-xl',\n            loading && 'animate-pulse'\n          )}\n        >\n          {loading ? (\n            <span className=\"flex items-center justify-center gap-2\">\n              <div className=\"w-5 h-5 border-2 border-white/30 border-t-white rounded-full animate-spin\" />\n              {language === 'es' ? 'Procesando...' : 'Processing...'}\n            </span>\n          ) : (\n            language === 'es' ? 'Procesar Pago' : 'Process Payment'\n          )}\n        </button>\n        \n        {onCancel && (\n          <button\n            type=\"button\"\n            onClick={onCancel}\n            disabled={disabled || loading}\n            className={cn(\n              'px-6 py-4 rounded-2xl font-medium transition-all duration-300',\n              enableGlass \n                ? 'bg-white/50 hover:bg-white/70 text-gray-700 backdrop-blur-sm border border-white/30'\n                : 'bg-gray-100 hover:bg-gray-200 text-gray-700'\n            )}\n          >\n            {language === 'es' ? 'Cancelar' : 'Cancel'}\n          </button>\n        )}\n      </div>\n    </form>\n  )\n}\n\nexport type { BirhausPaymentFormV3Props, PaymentMethodV3 }","'use client'\n\nimport React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { useTheme } from '@birhaus/themes'\nimport { \n  Wallet, \n  TrendingUp, \n  TrendingDown, \n  Eye, \n  EyeOff,\n  Shield,\n  AlertTriangle,\n  CheckCircle,\n  Sparkles,\n  CreditCard,\n  Banknote,\n  PiggyBank\n} from 'lucide-react'\n\n// Local cn utility\nconst cn = (...inputs: (string | boolean | undefined | null)[]) => twMerge(clsx(inputs))\n\n// V3 Account Summary variants with glass morphism\nconst accountSummaryV3Variants = cva(\n  'group relative transition-all duration-700 ease-smooth overflow-hidden backdrop-blur-md border border-white/30',\n  {\n    variants: {\n      glassVariant: {\n        subtle: 'bg-white/40 shadow-lg hover:shadow-xl',\n        medium: 'bg-white/60 shadow-xl hover:shadow-2xl backdrop-saturate-150',\n        intense: 'bg-white/80 shadow-2xl hover:shadow-3xl backdrop-saturate-200'\n      },\n      borderRadius: {\n        moderate: 'rounded-2xl',\n        generous: 'rounded-3xl',\n        radical: 'rounded-[2.5rem]'\n      },\n      spacing: {\n        comfortable: 'p-6',\n        generous: 'p-8',\n        radical: 'p-12'\n      },\n      accountType: {\n        checking: 'border-blue-300/50 bg-gradient-to-br from-blue-50/30 to-white/50',\n        savings: 'border-green-300/50 bg-gradient-to-br from-green-50/30 to-white/50',\n        credit: 'border-purple-300/50 bg-gradient-to-br from-purple-50/30 to-white/50',\n        investment: 'border-amber-300/50 bg-gradient-to-br from-amber-50/30 to-white/50'\n      },\n      floating: {\n        true: 'hover:scale-[1.02] hover:-translate-y-1',\n        false: ''\n      }\n    },\n    defaultVariants: {\n      glassVariant: 'medium',\n      borderRadius: 'generous',\n      spacing: 'generous',\n      accountType: 'checking',\n      floating: true\n    }\n  }\n)\n\nconst balanceCardVariants = cva(\n  'transition-all duration-300 backdrop-blur-sm border border-white/40 rounded-2xl',\n  {\n    variants: {\n      variant: {\n        primary: 'bg-blue-100/60 text-blue-800',\n        success: 'bg-green-100/60 text-green-800',\n        warning: 'bg-amber-100/60 text-amber-800',\n        neutral: 'bg-white/70 text-gray-800'\n      }\n    },\n    defaultVariants: {\n      variant: 'neutral'\n    }\n  }\n)\n\nexport interface AccountV3 {\n  id: string\n  name: string\n  nameEs?: string\n  nameEn?: string\n  type: 'checking' | 'savings' | 'credit' | 'investment'\n  number: string\n  balance: {\n    available: number\n    pending?: number\n    credit?: number\n    blocked?: number\n  }\n  currency: 'PYG' | 'USD' | 'EUR' | 'BRL'\n  status: 'active' | 'inactive' | 'blocked' | 'pending'\n  lastTransaction?: {\n    date: Date\n    amount: number\n    description: string\n    type: 'debit' | 'credit'\n  }\n  limits?: {\n    daily?: number\n    monthly?: number\n    credit?: number\n  }\n  features?: {\n    hasOnlineBanking: boolean\n    hasCard: boolean\n    hasOverdraft: boolean\n    seprelad: boolean\n  }\n  trend?: {\n    period: '7d' | '30d' | '90d'\n    change: number\n    percentage: number\n  }\n}\n\nexport interface BirhausAccountSummaryV3Props extends VariantProps<typeof accountSummaryV3Variants> {\n  // Account data\n  accounts: AccountV3[]\n  \n  // V3 Glass styling\n  enableGlass?: boolean\n  glassIntensity?: 'subtle' | 'medium' | 'intense'\n  enableFloating?: boolean\n  reducedMotion?: boolean\n  \n  // Display options\n  showBalances?: boolean\n  showTrends?: boolean\n  showLastTransaction?: boolean\n  showAccountNumbers?: boolean\n  maskSensitiveData?: boolean\n  \n  // Layout\n  layout?: 'grid' | 'list' | 'compact'\n  columns?: 1 | 2 | 3\n  \n  // Security\n  requireAuthentication?: boolean\n  showSEPRELADStatus?: boolean\n  \n  // Theme\n  themeName?: 'financial' | 'educational' | 'healthcare' | 'default'\n  \n  // Interaction\n  onAccountClick?: (account: AccountV3) => void\n  onBalanceToggle?: (accountId: string, visible: boolean) => void\n  onAccountAction?: (accountId: string, action: string) => void\n  \n  // Standard props\n  className?: string\n  title?: string\n  titleEs?: string\n  titleEn?: string\n}\n\n/**\n * BirhausAccountSummaryV3 - Glass morphism account summary with financial overview\n * \n * Features:\n * - Glass morphism account cards with status-based tinting\n * - Balance visibility toggle with security indicators\n * - Multi-currency support (PYG, USD, EUR, BRL)\n * - SEPRELAD compliance indicators for Paraguay\n * - Floating hover animations with account details\n * - Spanish-first account labeling\n * - Trend visualization with glass styling\n * - Generous spacing for financial data clarity\n */\nexport function BirhausAccountSummaryV3({\n  accounts,\n  enableGlass = true,\n  glassVariant = 'medium',\n  borderRadius = 'generous',\n  spacing = 'generous',\n  floating = true,\n  showBalances = true,\n  showTrends = true,\n  showLastTransaction = true,\n  showAccountNumbers = false,\n  maskSensitiveData = true,\n  layout = 'grid',\n  columns = 2,\n  requireAuthentication = false,\n  showSEPRELADStatus = true,\n  reducedMotion = false,\n  themeName = 'financial',\n  onAccountClick,\n  onBalanceToggle,\n  onAccountAction,\n  className,\n  title,\n  titleEs,\n  titleEn,\n  ...props\n}: BirhausAccountSummaryV3Props) {\n  const { language } = useBirhaus()\n  const theme = useTheme(themeName)\n  const [visibleBalances, setVisibleBalances] = React.useState<Set<string>>(\n    new Set(maskSensitiveData ? [] : accounts.map(a => a.id))\n  )\n  const [hoveredAccount, setHoveredAccount] = React.useState<string | null>(null)\n\n  // Format currency for different types\n  const formatCurrency = React.useCallback((value: number, currency: string): string => {\n    const locale = language === 'es' ? 'es-PY' : 'en-US'\n    const currencyMap = {\n      'PYG': 'PYG',\n      'USD': 'USD',\n      'EUR': 'EUR', \n      'BRL': 'BRL'\n    }\n    \n    return new Intl.NumberFormat(locale, {\n      style: 'currency',\n      currency: currencyMap[currency as keyof typeof currencyMap] || 'PYG',\n      minimumFractionDigits: currency === 'PYG' ? 0 : 2,\n      maximumFractionDigits: currency === 'PYG' ? 0 : 2\n    }).format(value)\n  }, [language])\n\n  // Mask account number\n  const maskAccountNumber = React.useCallback((number: string): string => {\n    if (!maskSensitiveData) return number\n    return `****${number.slice(-4)}`\n  }, [maskSensitiveData])\n\n  // Toggle balance visibility\n  const toggleBalanceVisibility = React.useCallback((accountId: string) => {\n    setVisibleBalances(prev => {\n      const newSet = new Set(prev)\n      const isVisible = newSet.has(accountId)\n      \n      if (isVisible) {\n        newSet.delete(accountId)\n      } else {\n        newSet.add(accountId)\n      }\n      \n      onBalanceToggle?.(accountId, !isVisible)\n      return newSet\n    })\n  }, [onBalanceToggle])\n\n  // Get account type icon and colors\n  const getAccountTypeInfo = React.useCallback((type: string) => {\n    const types = {\n      checking: {\n        icon: Wallet,\n        color: 'text-blue-600',\n        bgColor: 'bg-blue-100/60',\n        name: language === 'es' ? 'Cuenta Corriente' : 'Checking Account'\n      },\n      savings: {\n        icon: PiggyBank,\n        color: 'text-green-600',\n        bgColor: 'bg-green-100/60',\n        name: language === 'es' ? 'Cuenta de Ahorro' : 'Savings Account'\n      },\n      credit: {\n        icon: CreditCard,\n        color: 'text-purple-600',\n        bgColor: 'bg-purple-100/60',\n        name: language === 'es' ? 'Tarjeta de Crédito' : 'Credit Card'\n      },\n      investment: {\n        icon: TrendingUp,\n        color: 'text-amber-600',\n        bgColor: 'bg-amber-100/60',\n        name: language === 'es' ? 'Inversión' : 'Investment'\n      }\n    }\n    \n    return types[type as keyof typeof types] || types.checking\n  }, [language])\n\n  // Get status info\n  const getStatusInfo = React.useCallback((status: string) => {\n    const statuses = {\n      active: {\n        icon: CheckCircle,\n        color: 'text-green-600',\n        label: language === 'es' ? 'Activa' : 'Active'\n      },\n      inactive: {\n        icon: AlertTriangle,\n        color: 'text-gray-500',\n        label: language === 'es' ? 'Inactiva' : 'Inactive'\n      },\n      blocked: {\n        icon: Shield,\n        color: 'text-red-600',\n        label: language === 'es' ? 'Bloqueada' : 'Blocked'\n      },\n      pending: {\n        icon: AlertTriangle,\n        color: 'text-amber-600',\n        label: language === 'es' ? 'Pendiente' : 'Pending'\n      }\n    }\n    \n    return statuses[status as keyof typeof statuses] || statuses.active\n  }, [language])\n\n  // Grid classes\n  const gridClasses = React.useMemo(() => {\n    if (layout === 'list') return 'space-y-4'\n    if (layout === 'compact') return 'grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 gap-4'\n    \n    switch (columns) {\n      case 1: return 'grid grid-cols-1 gap-6'\n      case 2: return 'grid grid-cols-1 md:grid-cols-2 gap-6'  \n      case 3: return 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6'\n      default: return 'grid grid-cols-1 md:grid-cols-2 gap-6'\n    }\n  }, [layout, columns])\n\n  if (!accounts.length) {\n    return (\n      <div className={cn(\n        accountSummaryV3Variants({\n          glassVariant: enableGlass ? glassVariant : undefined,\n          borderRadius,\n          spacing: 'radical'\n        }),\n        'text-center',\n        !enableGlass && 'bg-white border-gray-200',\n        className\n      )}>\n        <div className=\"flex flex-col items-center justify-center min-h-48\">\n          <div className=\"relative mb-6\">\n            <Wallet size={64} className=\"text-gray-400/60\" />\n            {enableGlass && (\n              <div className=\"absolute inset-0 bg-gradient-to-br from-blue-400/20 to-purple-400/20 rounded-full blur-xl\" />\n            )}\n          </div>\n          <h3 className=\"text-xl font-bold text-gray-700 mb-3\">\n            {language === 'es' ? 'No hay cuentas disponibles' : 'No accounts available'}\n          </h3>\n          <p className=\"text-gray-500 max-w-md\">\n            {language === 'es' \n              ? 'Conecta tus cuentas bancarias para ver el resumen financiero'\n              : 'Connect your bank accounts to view financial summary'\n            }\n          </p>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div className={cn('space-y-6', className)} {...props}>\n      {/* Header */}\n      <div className=\"flex items-center justify-between\">\n        <h2 className=\"text-2xl font-bold text-gray-800 flex items-center gap-3\">\n          <Banknote size={28} className=\"text-green-600\" />\n          {language === 'es' \n            ? (titleEs || title || 'Resumen de Cuentas')\n            : (titleEn || title || 'Account Summary')\n          }\n        </h2>\n        \n        {showSEPRELADStatus && (\n          <div className=\"flex items-center gap-2 text-sm text-gray-600\">\n            <Shield size={16} />\n            <span>\n              {language === 'es' ? 'Conforme SEPRELAD' : 'SEPRELAD Compliant'}\n            </span>\n          </div>\n        )}\n      </div>\n\n      {/* Account cards */}\n      <div className={gridClasses}>\n        {accounts.map((account) => {\n          const typeInfo = getAccountTypeInfo(account.type)\n          const statusInfo = getStatusInfo(account.status)\n          const isBalanceVisible = visibleBalances.has(account.id)\n          const isHovered = hoveredAccount === account.id\n          \n          return (\n            <div\n              key={account.id}\n              onMouseEnter={() => setHoveredAccount(account.id)}\n              onMouseLeave={() => setHoveredAccount(null)}\n              onClick={() => onAccountClick?.(account)}\n              className={cn(\n                accountSummaryV3Variants({\n                  glassVariant: enableGlass ? glassVariant : undefined,\n                  borderRadius,\n                  spacing,\n                  accountType: account.type,\n                  floating: floating && !reducedMotion\n                }),\n                'cursor-pointer space-y-4',\n                !enableGlass && 'bg-white border-gray-200 hover:shadow-lg'\n              )}\n            >\n              {/* Glass gradient overlay */}\n              {enableGlass && (\n                <div className=\"absolute inset-0 rounded-[inherit] bg-gradient-to-br from-white/20 via-transparent to-white/5 pointer-events-none\" />\n              )}\n\n              {/* Floating effects */}\n              {enableGlass && isHovered && (\n                <div className=\"absolute top-4 right-4 text-blue-400/40\">\n                  <Sparkles size={16} className=\"animate-pulse\" />\n                </div>\n              )}\n\n              {/* Account header */}\n              <div className=\"relative flex items-start justify-between\">\n                <div className=\"flex items-center gap-3\">\n                  <div className={cn(\n                    'p-3 rounded-xl transition-colors duration-300',\n                    enableGlass \n                      ? 'bg-white/60 backdrop-blur-sm border border-white/40'\n                      : typeInfo.bgColor\n                  )}>\n                    <typeInfo.icon size={24} className={typeInfo.color} />\n                  </div>\n                  <div>\n                    <h3 className=\"font-semibold text-gray-800\">\n                      {language === 'es' ? (account.nameEs || account.name) : (account.nameEn || account.name)}\n                    </h3>\n                    <p className=\"text-sm text-gray-600\">{typeInfo.name}</p>\n                    {showAccountNumbers && (\n                      <p className=\"text-xs text-gray-500 font-mono\">\n                        {maskAccountNumber(account.number)}\n                      </p>\n                    )}\n                  </div>\n                </div>\n                \n                <div className=\"flex items-center gap-2\">\n                  <statusInfo.icon size={16} className={statusInfo.color} />\n                  <span className={cn('text-xs font-medium', statusInfo.color)}>\n                    {statusInfo.label}\n                  </span>\n                </div>\n              </div>\n\n              {/* Balance section */}\n              {showBalances && (\n                <div className=\"relative space-y-3\">\n                  <div className=\"flex items-center justify-between\">\n                    <h4 className=\"text-sm font-semibold text-gray-700\">\n                      {language === 'es' ? 'Saldo Disponible' : 'Available Balance'}\n                    </h4>\n                    <button\n                      onClick={(e) => {\n                        e.stopPropagation()\n                        toggleBalanceVisibility(account.id)\n                      }}\n                      className={cn(\n                        'p-2 rounded-lg transition-colors duration-200',\n                        enableGlass \n                          ? 'hover:bg-white/40 text-gray-600'\n                          : 'hover:bg-gray-100 text-gray-600'\n                      )}\n                    >\n                      {isBalanceVisible ? (\n                        <Eye size={16} />\n                      ) : (\n                        <EyeOff size={16} />\n                      )}\n                    </button>\n                  </div>\n                  \n                  <div className={cn(\n                    balanceCardVariants({ variant: 'primary' }),\n                    'p-4'\n                  )}>\n                    <div className=\"text-2xl font-bold\">\n                      {isBalanceVisible \n                        ? formatCurrency(account.balance.available, account.currency)\n                        : '••••••'\n                      }\n                    </div>\n                    {account.balance.pending && account.balance.pending > 0 && (\n                      <div className=\"text-sm mt-1 opacity-80\">\n                        {language === 'es' ? 'Pendiente: ' : 'Pending: '}\n                        {isBalanceVisible \n                          ? formatCurrency(account.balance.pending, account.currency)\n                          : '••••'\n                        }\n                      </div>\n                    )}\n                  </div>\n\n                  {/* Additional balances for credit accounts */}\n                  {account.type === 'credit' && account.balance.credit && (\n                    <div className={cn(\n                      balanceCardVariants({ variant: 'neutral' }),\n                      'p-3'\n                    )}>\n                      <div className=\"flex justify-between text-sm\">\n                        <span>{language === 'es' ? 'Límite de Crédito' : 'Credit Limit'}</span>\n                        <span className=\"font-medium\">\n                          {isBalanceVisible \n                            ? formatCurrency(account.balance.credit, account.currency)\n                            : '••••••'\n                          }\n                        </span>\n                      </div>\n                    </div>\n                  )}\n                </div>\n              )}\n\n              {/* Trend information */}\n              {showTrends && account.trend && isBalanceVisible && (\n                <div className={cn(\n                  'p-3 rounded-xl transition-colors duration-300',\n                  enableGlass \n                    ? 'bg-white/40 backdrop-blur-sm border border-white/30'\n                    : 'bg-gray-50'\n                )}>\n                  <div className=\"flex items-center justify-between\">\n                    <span className=\"text-sm text-gray-600\">\n                      {language === 'es' \n                        ? `Cambio (${account.trend.period})` \n                        : `Change (${account.trend.period})`\n                      }\n                    </span>\n                    <div className=\"flex items-center gap-2\">\n                      {account.trend.change >= 0 ? (\n                        <TrendingUp size={16} className=\"text-green-600\" />\n                      ) : (\n                        <TrendingDown size={16} className=\"text-red-600\" />\n                      )}\n                      <span className={cn(\n                        'text-sm font-medium',\n                        account.trend.change >= 0 ? 'text-green-600' : 'text-red-600'\n                      )}>\n                        {account.trend.change >= 0 ? '+' : ''}{account.trend.percentage.toFixed(1)}%\n                      </span>\n                    </div>\n                  </div>\n                </div>\n              )}\n\n              {/* Last transaction */}\n              {showLastTransaction && account.lastTransaction && (\n                <div className={cn(\n                  'p-3 rounded-xl transition-colors duration-300',\n                  enableGlass \n                    ? 'bg-white/40 backdrop-blur-sm border border-white/30'\n                    : 'bg-gray-50'\n                )}>\n                  <div className=\"text-xs text-gray-600 mb-1\">\n                    {language === 'es' ? 'Última transacción' : 'Last transaction'}\n                  </div>\n                  <div className=\"flex justify-between items-center\">\n                    <div>\n                      <div className=\"text-sm font-medium text-gray-800 truncate\">\n                        {account.lastTransaction.description}\n                      </div>\n                      <div className=\"text-xs text-gray-500\">\n                        {account.lastTransaction.date.toLocaleDateString(\n                          language === 'es' ? 'es-PY' : 'en-US'\n                        )}\n                      </div>\n                    </div>\n                    <div className={cn(\n                      'text-sm font-medium',\n                      account.lastTransaction.type === 'credit' \n                        ? 'text-green-600' \n                        : 'text-gray-800'\n                    )}>\n                      {account.lastTransaction.type === 'credit' ? '+' : '-'}\n                      {isBalanceVisible \n                        ? formatCurrency(Math.abs(account.lastTransaction.amount), account.currency)\n                        : '••••'\n                      }\n                    </div>\n                  </div>\n                </div>\n              )}\n\n              {/* SEPRELAD status indicator */}\n              {account.features?.seprelad && showSEPRELADStatus && (\n                <div className=\"flex items-center justify-center pt-2\">\n                  <div className={cn(\n                    'flex items-center gap-2 px-3 py-1 rounded-full text-xs',\n                    enableGlass \n                      ? 'bg-green-100/60 text-green-700 backdrop-blur-sm'\n                      : 'bg-green-100 text-green-700'\n                  )}>\n                    <Shield size={12} />\n                    <span>\n                      {language === 'es' ? 'SEPRELAD Compliant' : 'SEPRELAD Compliant'}\n                    </span>\n                  </div>\n                </div>\n              )}\n            </div>\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n\nexport type { BirhausAccountSummaryV3Props, AccountV3 }","'use client'\n\nimport React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\nimport { useBirhaus } from '@birhaus/provider'\nimport { useTheme } from '@birhaus/themes'\nimport { \n  ArrowUpRight, \n  ArrowDownLeft, \n  Filter, \n  Search,\n  Calendar,\n  CreditCard,\n  Banknote,\n  ShoppingCart,\n  Home,\n  Car,\n  Coffee,\n  Sparkles,\n  CheckCircle,\n  Clock,\n  AlertCircle,\n  X\n} from 'lucide-react'\n\n// Local cn utility\nconst cn = (...inputs: (string | boolean | undefined | null)[]) => twMerge(clsx(inputs))\n\n// V3 Transaction List variants with glass morphism\nconst transactionListV3Variants = cva(\n  'group relative transition-all duration-700 ease-smooth overflow-hidden backdrop-blur-md border border-white/30',\n  {\n    variants: {\n      glassVariant: {\n        subtle: 'bg-white/40 shadow-lg',\n        medium: 'bg-white/60 shadow-xl backdrop-saturate-150',\n        intense: 'bg-white/80 shadow-2xl backdrop-saturate-200'\n      },\n      borderRadius: {\n        moderate: 'rounded-2xl',\n        generous: 'rounded-3xl',\n        radical: 'rounded-[2.5rem]'\n      },\n      spacing: {\n        comfortable: 'p-6',\n        generous: 'p-8',\n        radical: 'p-12'\n      },\n      floating: {\n        true: 'hover:scale-[1.005] hover:-translate-y-0.5',\n        false: ''\n      }\n    },\n    defaultVariants: {\n      glassVariant: 'medium',\n      borderRadius: 'generous',\n      spacing: 'generous',\n      floating: false\n    }\n  }\n)\n\nconst transactionItemVariants = cva(\n  'group relative transition-all duration-300 backdrop-blur-sm border border-white/30 rounded-2xl hover:shadow-md',\n  {\n    variants: {\n      type: {\n        credit: 'bg-green-50/60 hover:bg-green-50/80',\n        debit: 'bg-white/70 hover:bg-white/90',\n        pending: 'bg-amber-50/60 hover:bg-amber-50/80',\n        failed: 'bg-red-50/60 hover:bg-red-50/80'\n      }\n    },\n    defaultVariants: {\n      type: 'debit'\n    }\n  }\n)\n\nexport interface TransactionV3 {\n  id: string\n  date: Date\n  description: string\n  descriptionEs?: string\n  descriptionEn?: string\n  amount: number\n  currency: 'PYG' | 'USD' | 'EUR' | 'BRL'\n  type: 'credit' | 'debit'\n  status: 'completed' | 'pending' | 'failed' | 'cancelled'\n  category?: string\n  categoryEs?: string\n  categoryEn?: string\n  categoryIcon?: React.ComponentType<{ size?: number }>\n  merchant?: {\n    name: string\n    location?: string\n    mcc?: string // Merchant Category Code\n  }\n  account?: {\n    id: string\n    name: string\n    lastFour?: string\n  }\n  reference?: string\n  balance?: number // Account balance after transaction\n  fees?: {\n    amount: number\n    type: string\n    description?: string\n  }\n  seprelad?: {\n    threshold: boolean\n    reported: boolean\n    reference?: string\n  }\n}\n\nexport interface FilterOptionsV3 {\n  dateRange?: {\n    from: Date\n    to: Date\n  }\n  amountRange?: {\n    min: number\n    max: number\n  }\n  types?: ('credit' | 'debit')[]\n  statuses?: ('completed' | 'pending' | 'failed' | 'cancelled')[]\n  categories?: string[]\n  accounts?: string[]\n  searchTerm?: string\n}\n\nexport interface BirhausTransactionListV3Props extends VariantProps<typeof transactionListV3Variants> {\n  // Transaction data\n  transactions: TransactionV3[]\n  \n  // V3 Glass styling\n  enableGlass?: boolean\n  glassIntensity?: 'subtle' | 'medium' | 'intense'\n  enableFloating?: boolean\n  reducedMotion?: boolean\n  \n  // Display options\n  showSearch?: boolean\n  showFilters?: boolean\n  showBalance?: boolean\n  showCategories?: boolean\n  showMerchant?: boolean\n  showSEPRELADStatus?: boolean\n  itemsPerPage?: number\n  \n  // Interaction\n  enableSelection?: boolean\n  selectedTransactions?: string[]\n  onSelectionChange?: (selectedIds: string[]) => void\n  onTransactionClick?: (transaction: TransactionV3) => void\n  onFilterChange?: (filters: FilterOptionsV3) => void\n  \n  // Theme\n  themeName?: 'financial' | 'educational' | 'healthcare' | 'default'\n  \n  // Standard props\n  className?: string\n  loading?: boolean\n  title?: string\n  titleEs?: string\n  titleEn?: string\n}\n\n/**\n * BirhausTransactionListV3 - Glass morphism transaction history with advanced filtering\n * \n * Features:\n * - Glass morphism transaction cards with status-based tinting\n * - Advanced filtering with glass UI elements\n * - SEPRELAD threshold highlighting for Paraguay compliance\n * - Multi-currency transaction display\n * - Category-based visual organization with icons\n * - Spanish-first transaction descriptions\n * - Real-time search with glass styling\n * - Generous spacing for financial data clarity\n */\nexport function BirhausTransactionListV3({\n  transactions,\n  enableGlass = true,\n  glassVariant = 'medium',\n  borderRadius = 'generous',\n  spacing = 'generous',\n  floating = false,\n  showSearch = true,\n  showFilters = true,\n  showBalance = false,\n  showCategories = true,\n  showMerchant = true,\n  showSEPRELADStatus = true,\n  itemsPerPage = 20,\n  enableSelection = false,\n  selectedTransactions = [],\n  reducedMotion = false,\n  themeName = 'financial',\n  onSelectionChange,\n  onTransactionClick,\n  onFilterChange,\n  className,\n  loading = false,\n  title,\n  titleEs,\n  titleEn,\n  ...props\n}: BirhausTransactionListV3Props) {\n  const { language } = useBirhaus()\n  const theme = useTheme(themeName)\n  \n  const [filters, setFilters] = React.useState<FilterOptionsV3>({})\n  const [searchTerm, setSearchTerm] = React.useState('')\n  const [showFilterPanel, setShowFilterPanel] = React.useState(false)\n  const [currentPage, setCurrentPage] = React.useState(1)\n\n  // Format currency\n  const formatCurrency = React.useCallback((value: number, currency: string): string => {\n    const locale = language === 'es' ? 'es-PY' : 'en-US'\n    const currencyMap = {\n      'PYG': 'PYG',\n      'USD': 'USD',\n      'EUR': 'EUR',\n      'BRL': 'BRL'\n    }\n    \n    return new Intl.NumberFormat(locale, {\n      style: 'currency',\n      currency: currencyMap[currency as keyof typeof currencyMap] || 'PYG',\n      minimumFractionDigits: currency === 'PYG' ? 0 : 2,\n      maximumFractionDigits: currency === 'PYG' ? 0 : 2\n    }).format(value)\n  }, [language])\n\n  // Get category icon\n  const getCategoryIcon = React.useCallback((category?: string) => {\n    const icons = {\n      shopping: ShoppingCart,\n      food: Coffee,\n      transport: Car,\n      housing: Home,\n      finance: CreditCard,\n      default: Banknote\n    }\n    \n    return icons[category as keyof typeof icons] || icons.default\n  }, [])\n\n  // Get status info\n  const getStatusInfo = React.useCallback((status: string) => {\n    const statuses = {\n      completed: {\n        icon: CheckCircle,\n        color: 'text-green-600',\n        label: language === 'es' ? 'Completada' : 'Completed'\n      },\n      pending: {\n        icon: Clock,\n        color: 'text-amber-600',\n        label: language === 'es' ? 'Pendiente' : 'Pending'\n      },\n      failed: {\n        icon: AlertCircle,\n        color: 'text-red-600',\n        label: language === 'es' ? 'Fallida' : 'Failed'\n      },\n      cancelled: {\n        icon: X,\n        color: 'text-gray-500',\n        label: language === 'es' ? 'Cancelada' : 'Cancelled'\n      }\n    }\n    \n    return statuses[status as keyof typeof statuses] || statuses.completed\n  }, [language])\n\n  // Filter transactions\n  const filteredTransactions = React.useMemo(() => {\n    let filtered = transactions\n\n    // Search filter\n    if (searchTerm) {\n      filtered = filtered.filter(t => \n        t.description.toLowerCase().includes(searchTerm.toLowerCase()) ||\n        t.merchant?.name.toLowerCase().includes(searchTerm.toLowerCase()) ||\n        t.reference?.toLowerCase().includes(searchTerm.toLowerCase())\n      )\n    }\n\n    // Apply other filters\n    if (filters.types?.length) {\n      filtered = filtered.filter(t => filters.types!.includes(t.type))\n    }\n\n    if (filters.statuses?.length) {\n      filtered = filtered.filter(t => filters.statuses!.includes(t.status))\n    }\n\n    if (filters.categories?.length) {\n      filtered = filtered.filter(t => t.category && filters.categories!.includes(t.category))\n    }\n\n    if (filters.dateRange) {\n      filtered = filtered.filter(t => \n        t.date >= filters.dateRange!.from && t.date <= filters.dateRange!.to\n      )\n    }\n\n    if (filters.amountRange) {\n      filtered = filtered.filter(t => \n        Math.abs(t.amount) >= filters.amountRange!.min && \n        Math.abs(t.amount) <= filters.amountRange!.max\n      )\n    }\n\n    return filtered.sort((a, b) => b.date.getTime() - a.date.getTime())\n  }, [transactions, searchTerm, filters])\n\n  // Paginated transactions\n  const paginatedTransactions = React.useMemo(() => {\n    const start = (currentPage - 1) * itemsPerPage\n    const end = start + itemsPerPage\n    return filteredTransactions.slice(start, end)\n  }, [filteredTransactions, currentPage, itemsPerPage])\n\n  const totalPages = Math.ceil(filteredTransactions.length / itemsPerPage)\n\n  // Handle search\n  const handleSearch = React.useCallback((value: string) => {\n    setSearchTerm(value)\n    setCurrentPage(1)\n  }, [])\n\n  // Handle filter change\n  const handleFilterChange = React.useCallback((newFilters: FilterOptionsV3) => {\n    setFilters(newFilters)\n    setCurrentPage(1)\n    onFilterChange?.(newFilters)\n  }, [onFilterChange])\n\n  if (loading) {\n    return (\n      <div className={cn(\n        transactionListV3Variants({\n          glassVariant: enableGlass ? glassVariant : undefined,\n          borderRadius,\n          spacing\n        }),\n        'animate-pulse',\n        !enableGlass && 'bg-white border-gray-200',\n        className\n      )}>\n        <div className=\"space-y-4\">\n          {[...Array(5)].map((_, i) => (\n            <div key={i} className=\"h-16 bg-gray-200/50 rounded-2xl\" />\n          ))}\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <div\n      className={cn(\n        transactionListV3Variants({\n          glassVariant: enableGlass ? glassVariant : undefined,\n          borderRadius,\n          spacing,\n          floating: floating && !reducedMotion\n        }),\n        'space-y-6',\n        !enableGlass && 'bg-white border-gray-200',\n        className\n      )}\n      {...props}\n    >\n      {/* Glass gradient overlay */}\n      {enableGlass && (\n        <div className=\"absolute inset-0 rounded-[inherit] bg-gradient-to-br from-white/20 via-transparent to-white/5 pointer-events-none\" />\n      )}\n\n      {/* Header */}\n      <div className=\"relative flex items-center justify-between\">\n        <h2 className=\"text-2xl font-bold text-gray-800 flex items-center gap-3\">\n          <CreditCard size={28} className=\"text-blue-600\" />\n          {language === 'es' \n            ? (titleEs || title || 'Historial de Transacciones')\n            : (titleEn || title || 'Transaction History')\n          }\n        </h2>\n        \n        {enableGlass && (\n          <div className=\"text-blue-400/40\">\n            <Sparkles size={20} className=\"animate-pulse\" />\n          </div>\n        )}\n      </div>\n\n      {/* Search and filters */}\n      {(showSearch || showFilters) && (\n        <div className=\"relative space-y-4\">\n          {/* Search */}\n          {showSearch && (\n            <div className=\"relative\">\n              <div className=\"absolute left-4 top-1/2 -translate-y-1/2\">\n                <Search size={20} className=\"text-gray-500\" />\n              </div>\n              <input\n                type=\"text\"\n                placeholder={\n                  language === 'es' \n                    ? 'Buscar transacciones...' \n                    : 'Search transactions...'\n                }\n                value={searchTerm}\n                onChange={(e) => handleSearch(e.target.value)}\n                className={cn(\n                  'w-full pl-12 pr-4 py-3 text-base rounded-2xl border-0 outline-0 transition-all duration-300',\n                  'focus:ring-2 focus:ring-blue-500/50',\n                  enableGlass \n                    ? 'bg-white/70 backdrop-blur-sm placeholder-gray-600 backdrop-saturate-150'\n                    : 'bg-gray-50 border border-gray-300 placeholder-gray-500'\n                )}\n              />\n            </div>\n          )}\n\n          {/* Filter toggle */}\n          {showFilters && (\n            <button\n              onClick={() => setShowFilterPanel(!showFilterPanel)}\n              className={cn(\n                'flex items-center gap-2 px-4 py-2 rounded-xl transition-all duration-300',\n                enableGlass \n                  ? 'bg-white/60 hover:bg-white/80 backdrop-blur-sm border border-white/40'\n                  : 'bg-gray-100 hover:bg-gray-200'\n              )}\n            >\n              <Filter size={16} />\n              <span className=\"text-sm font-medium\">\n                {language === 'es' ? 'Filtros' : 'Filters'}\n              </span>\n            </button>\n          )}\n        </div>\n      )}\n\n      {/* Results summary */}\n      <div className=\"text-sm text-gray-600\">\n        {language === 'es' \n          ? `${filteredTransactions.length} transacciones encontradas`\n          : `${filteredTransactions.length} transactions found`\n        }\n      </div>\n\n      {/* Transaction list */}\n      <div className=\"relative space-y-3\">\n        {paginatedTransactions.map((transaction, index) => {\n          const statusInfo = getStatusInfo(transaction.status)\n          const CategoryIcon = transaction.categoryIcon || getCategoryIcon(transaction.category)\n          const isSelected = selectedTransactions?.includes(transaction.id)\n          \n          return (\n            <div\n              key={transaction.id}\n              onClick={() => onTransactionClick?.(transaction)}\n              className={cn(\n                transactionItemVariants({\n                  type: transaction.type === 'credit' ? 'credit' : \n                        transaction.status === 'pending' ? 'pending' :\n                        transaction.status === 'failed' ? 'failed' : 'debit'\n                }),\n                'p-4 cursor-pointer',\n                isSelected && 'ring-2 ring-blue-500/50',\n                !enableGlass && 'bg-white border border-gray-200'\n              )}\n            >\n              <div className=\"flex items-center gap-4\">\n                {/* Category icon */}\n                {showCategories && (\n                  <div className={cn(\n                    'p-3 rounded-xl transition-colors duration-300',\n                    enableGlass \n                      ? 'bg-white/60 backdrop-blur-sm border border-white/40'\n                      : 'bg-gray-100'\n                  )}>\n                    <CategoryIcon size={20} className=\"text-gray-600\" />\n                  </div>\n                )}\n\n                {/* Transaction details */}\n                <div className=\"flex-1 min-w-0\">\n                  <div className=\"flex items-start justify-between\">\n                    <div className=\"min-w-0 flex-1\">\n                      <h4 className=\"font-medium text-gray-800 truncate\">\n                        {language === 'es' \n                          ? (transaction.descriptionEs || transaction.description)\n                          : (transaction.descriptionEn || transaction.description)\n                        }\n                      </h4>\n                      \n                      {showMerchant && transaction.merchant && (\n                        <p className=\"text-sm text-gray-600 truncate\">\n                          {transaction.merchant.name}\n                          {transaction.merchant.location && ` • ${transaction.merchant.location}`}\n                        </p>\n                      )}\n                      \n                      <div className=\"flex items-center gap-3 mt-1\">\n                        <span className=\"text-xs text-gray-500\">\n                          {transaction.date.toLocaleDateString(\n                            language === 'es' ? 'es-PY' : 'en-US'\n                          )}\n                        </span>\n                        \n                        {/* Status */}\n                        <div className=\"flex items-center gap-1\">\n                          <statusInfo.icon size={12} className={statusInfo.color} />\n                          <span className={cn('text-xs', statusInfo.color)}>\n                            {statusInfo.label}\n                          </span>\n                        </div>\n\n                        {/* SEPRELAD indicator */}\n                        {showSEPRELADStatus && transaction.seprelad?.threshold && (\n                          <div className=\"flex items-center gap-1 text-xs text-amber-600\">\n                            <AlertCircle size={12} />\n                            <span>SEPRELAD</span>\n                          </div>\n                        )}\n                      </div>\n                    </div>\n\n                    {/* Amount and direction */}\n                    <div className=\"text-right ml-4\">\n                      <div className={cn(\n                        'flex items-center gap-2 font-semibold',\n                        transaction.type === 'credit' ? 'text-green-600' : 'text-gray-800'\n                      )}>\n                        {transaction.type === 'credit' ? (\n                          <ArrowDownLeft size={16} className=\"text-green-600\" />\n                        ) : (\n                          <ArrowUpRight size={16} className=\"text-gray-600\" />\n                        )}\n                        <span>\n                          {transaction.type === 'credit' ? '+' : '-'}\n                          {formatCurrency(Math.abs(transaction.amount), transaction.currency)}\n                        </span>\n                      </div>\n                      \n                      {showBalance && transaction.balance !== undefined && (\n                        <div className=\"text-xs text-gray-500 mt-1\">\n                          {language === 'es' ? 'Saldo: ' : 'Balance: '}\n                          {formatCurrency(transaction.balance, transaction.currency)}\n                        </div>\n                      )}\n\n                      {transaction.fees && (\n                        <div className=\"text-xs text-amber-600 mt-1\">\n                          {language === 'es' ? 'Comisión: ' : 'Fee: '}\n                          {formatCurrency(transaction.fees.amount, transaction.currency)}\n                        </div>\n                      )}\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          )\n        })}\n      </div>\n\n      {/* Pagination */}\n      {totalPages > 1 && (\n        <div className=\"flex items-center justify-center gap-2 pt-4\">\n          {[...Array(totalPages)].map((_, i) => (\n            <button\n              key={i + 1}\n              onClick={() => setCurrentPage(i + 1)}\n              className={cn(\n                'px-3 py-2 rounded-lg text-sm font-medium transition-all duration-200',\n                i + 1 === currentPage\n                  ? enableGlass\n                    ? 'bg-blue-100/80 text-blue-700 backdrop-blur-sm'\n                    : 'bg-blue-100 text-blue-700'\n                  : enableGlass\n                    ? 'bg-white/50 hover:bg-white/70 text-gray-600 backdrop-blur-sm'\n                    : 'bg-gray-100 hover:bg-gray-200 text-gray-600'\n              )}\n            >\n              {i + 1}\n            </button>\n          ))}\n        </div>\n      )}\n\n      {/* Empty state */}\n      {filteredTransactions.length === 0 && !loading && (\n        <div className=\"text-center py-12\">\n          <div className=\"relative mb-4\">\n            <CreditCard size={48} className=\"text-gray-400 mx-auto\" />\n            {enableGlass && (\n              <div className=\"absolute inset-0 bg-gradient-to-br from-gray-400/20 to-transparent rounded-full blur-xl\" />\n            )}\n          </div>\n          <h3 className=\"text-lg font-medium text-gray-700 mb-2\">\n            {language === 'es' ? 'No se encontraron transacciones' : 'No transactions found'}\n          </h3>\n          <p className=\"text-gray-500\">\n            {language === 'es' \n              ? 'Ajusta los filtros para ver más resultados'\n              : 'Adjust filters to see more results'\n            }\n          </p>\n        </div>\n      )}\n    </div>\n  )\n}\n\nexport type { BirhausTransactionListV3Props, TransactionV3, FilterOptionsV3 }","'use client'\n\nimport { useCallback } from 'react'\nimport { useBirhaus } from '@birhaus/provider'\nimport { \n  formatCurrency, \n  parseCurrency, \n  convertCurrency, \n  getCurrencyInfo,\n  validateCurrencyAmount,\n  checkSEPRELADThreshold\n} from '../utils/currency'\nimport type { \n  CurrencyCode, \n  CurrencyFormatOptions, \n  UseCurrencyReturn \n} from '../types/financial'\n\n/**\n * useCurrency - Hook for currency operations and formatting\n * \n * Features:\n * - Paraguay-first currency formatting with Guaraní support\n * - SEPRELAD compliance checking and reporting\n * - Multi-currency conversion with exchange rates\n * - Currency parsing and validation\n * - Spanish-first localization\n * - Error handling and validation\n * - Real-time exchange rate simulation (mock)\n */\nexport function useCurrency(): UseCurrencyReturn {\n  const { language } = useBirhaus()\n\n  // Format currency with BIRHAUS locale preferences\n  const formatCurrencyAmount = useCallback((\n    amount: number, \n    options?: Partial<CurrencyFormatOptions>\n  ): string => {\n    const locale = language === 'es' ? 'es-PY' : 'en-US'\n    \n    try {\n      return formatCurrency(amount, {\n        locale,\n        ...options\n      })\n    } catch (error) {\n      console.error('Currency formatting error:', error)\n      // Fallback to simple number formatting\n      return amount.toString()\n    }\n  }, [language])\n\n  // Parse currency string to number\n  const parseCurrencyString = useCallback((value: string): number | null => {\n    try {\n      return parseCurrency(value)\n    } catch (error) {\n      console.error('Currency parsing error:', error)\n      return null\n    }\n  }, [])\n\n  // Convert between currencies (mock implementation - in production, use real API)\n  const convertCurrencyAmount = useCallback(async (\n    amount: number, \n    from: CurrencyCode, \n    to: CurrencyCode\n  ): Promise<number> => {\n    // Simulate API delay\n    await new Promise(resolve => setTimeout(resolve, 100))\n    \n    try {\n      return convertCurrency(amount, from, to)\n    } catch (error) {\n      console.error('Currency conversion error:', error)\n      throw error\n    }\n  }, [])\n\n  // Get currency information\n  const getCurrencyInformation = useCallback((code: CurrencyCode) => {\n    return getCurrencyInfo(code)\n  }, [])\n\n  // Validate currency amount for processing\n  const validateAmount = useCallback((\n    amount: number, \n    currency: CurrencyCode = 'PYG'\n  ): { valid: boolean; errors: string[]; warnings: string[] } => {\n    const validation = validateCurrencyAmount(amount, currency)\n    const warnings: string[] = []\n\n    // Check SEPRELAD thresholds\n    const seprelad = checkSEPRELADThreshold(amount, currency)\n    if (seprelad.requiresReport) {\n      warnings.push(\n        language === 'es' \n          ? `Monto supera umbral SEPRELAD (${seprelad.thresholdUSD} USD)`\n          : `Amount exceeds SEPRELAD threshold (${seprelad.thresholdUSD} USD)`\n      )\n    }\n\n    return {\n      ...validation,\n      warnings\n    }\n  }, [language])\n\n  // Format for input fields (no symbols, proper formatting)\n  const formatForInput = useCallback((\n    amount: number, \n    currency: CurrencyCode = 'PYG'\n  ): string => {\n    const currencyInfo = getCurrencyInfo(currency)\n    \n    if (currency === 'PYG') {\n      // Guaraní: no decimals, dot as thousand separator\n      return amount.toLocaleString('es-PY', {\n        useGrouping: true,\n        minimumFractionDigits: 0,\n        maximumFractionDigits: 0\n      })\n    } else {\n      // Other currencies: include decimals\n      return amount.toLocaleString('es-PY', {\n        useGrouping: true,\n        minimumFractionDigits: currencyInfo.decimals,\n        maximumFractionDigits: currencyInfo.decimals\n      })\n    }\n  }, [])\n\n  // Get exchange rate between currencies\n  const getExchangeRate = useCallback(async (\n    from: CurrencyCode, \n    to: CurrencyCode\n  ): Promise<number> => {\n    if (from === to) return 1\n    \n    // Simulate API call\n    await new Promise(resolve => setTimeout(resolve, 50))\n    \n    try {\n      // Calculate rate by converting 1 unit\n      return convertCurrency(1, from, to)\n    } catch (error) {\n      console.error('Exchange rate fetch error:', error)\n      throw error\n    }\n  }, [])\n\n  // Check if currency is supported\n  const isCurrencySupported = useCallback((currency: string): currency is CurrencyCode => {\n    return ['PYG', 'USD', 'EUR', 'BRL', 'ARS'].includes(currency as CurrencyCode)\n  }, [])\n\n  // Get localized currency name\n  const getCurrencyName = useCallback((\n    currency: CurrencyCode, \n    locale?: 'es' | 'en'\n  ): string => {\n    const currencyInfo = getCurrencyInfo(currency)\n    const targetLocale = locale || language\n    return targetLocale === 'es' ? currencyInfo.nameEs : currencyInfo.nameEn\n  }, [language])\n\n  // Format percentage for interest rates, commissions, etc.\n  const formatPercentage = useCallback((\n    value: number, \n    decimals: number = 2\n  ): string => {\n    const locale = language === 'es' ? 'es-PY' : 'en-US'\n    return new Intl.NumberFormat(locale, {\n      style: 'percent',\n      minimumFractionDigits: decimals,\n      maximumFractionDigits: decimals\n    }).format(value / 100)\n  }, [language])\n\n  // Calculate compound interest (useful for investment components)\n  const calculateCompoundInterest = useCallback((\n    principal: number,\n    rate: number, // annual rate as percentage\n    time: number, // time in years\n    compounding: number = 12 // times per year\n  ): { finalAmount: number; interestEarned: number } => {\n    const r = rate / 100 / compounding\n    const n = compounding * time\n    const finalAmount = principal * Math.pow(1 + r, n)\n    const interestEarned = finalAmount - principal\n    \n    return {\n      finalAmount: Math.round(finalAmount * 100) / 100,\n      interestEarned: Math.round(interestEarned * 100) / 100\n    }\n  }, [])\n\n  // Format large numbers with abbreviations (K, M, B)\n  const formatAbbreviated = useCallback((\n    amount: number,\n    currency: CurrencyCode = 'PYG'\n  ): string => {\n    const abs = Math.abs(amount)\n    const sign = amount < 0 ? '-' : ''\n    \n    let value: number\n    let suffix: string\n    \n    if (abs >= 1000000000) {\n      value = amount / 1000000000\n      suffix = language === 'es' ? 'MM' : 'B' // Mil millones vs Billions\n    } else if (abs >= 1000000) {\n      value = amount / 1000000\n      suffix = 'M'\n    } else if (abs >= 1000) {\n      value = amount / 1000\n      suffix = 'K'\n    } else {\n      return formatCurrencyAmount(amount, { currency })\n    }\n    \n    const currencyInfo = getCurrencyInfo(currency)\n    const rounded = Math.round(value * 10) / 10 // One decimal place\n    \n    return `${sign}${currencyInfo.symbol} ${rounded}${suffix}`\n  }, [formatCurrencyAmount, language])\n\n  return {\n    formatCurrency: formatCurrencyAmount,\n    parseCurrency: parseCurrencyString,\n    convertCurrency: convertCurrencyAmount,\n    getCurrencyInfo: getCurrencyInformation,\n    validateAmount,\n    formatForInput,\n    getExchangeRate,\n    isCurrencySupported,\n    getCurrencyName,\n    formatPercentage,\n    calculateCompoundInterest,\n    formatAbbreviated\n  }\n}\n\nexport type { UseCurrencyReturn }","'use client'\n\nimport { useState, useCallback, useMemo, useEffect } from 'react'\nimport { useBirhaus } from '@birhaus/provider'\nimport { checkSEPRELADThreshold } from '../utils/currency'\nimport type { \n  Transaction, \n  TransactionType, \n  TransactionStatus,\n  TransactionFilters,\n  CreateTransactionData,\n  UseTransactionsReturn,\n  CurrencyCode\n} from '../types/financial'\n\n/**\n * useTransactions - Hook for transaction operations and state management\n * \n * Features:\n * - Complete transaction CRUD operations\n * - Real-time filtering and search capabilities\n * - SEPRELAD compliance checking and alerts\n * - Transaction categorization and analytics\n * - Spanish-first error messages and validation\n * - Optimistic updates for better UX\n * - Error handling and retry logic\n * - Export functionality for transaction reports\n * - Transaction status tracking and updates\n */\nexport function useTransactions(accountId?: string): UseTransactionsReturn {\n  const { language, reportViolation } = useBirhaus()\n  \n  // Transaction state\n  const [transactions, setTransactions] = useState<Transaction[]>([])\n  const [loading, setLoading] = useState(false)\n  const [error, setError] = useState<string | null>(null)\n  const [filters, setFilters] = useState<TransactionFilters>({})\n\n  // Load transactions on mount or account change\n  useEffect(() => {\n    if (accountId) {\n      loadTransactions()\n    }\n  }, [accountId])\n\n  // Load transactions from API/storage\n  const loadTransactions = useCallback(async () => {\n    setLoading(true)\n    setError(null)\n    \n    try {\n      // Simulate API call - in real implementation, fetch from Supabase\n      await new Promise(resolve => setTimeout(resolve, 500))\n      \n      // Mock transaction data for development\n      const mockTransactions: Transaction[] = [\n        {\n          id: '1',\n          tipo: 'ingreso',\n          monto: 500000,\n          moneda: 'PYG',\n          categoria: 'salario',\n          descripcionEs: 'Transferencia de Juan Pérez',\n          fecha: new Date('2024-01-15T10:30:00'),\n          estado: 'completada',\n          referencia: 'TRF001',\n          cuentaOrigen: 'Juan Pérez',\n          comision: 0\n        },\n        {\n          id: '2',\n          tipo: 'gasto',\n          monto: 150000,\n          moneda: 'PYG',\n          categoria: 'servicios',\n          descripcionEs: 'Pago ANDE - Electricidad',\n          fecha: new Date('2024-01-14T14:20:00'),\n          estado: 'completada',\n          referencia: 'ANDE2024001',\n          cuentaDestino: 'ANDE',\n          comision: 5000\n        }\n      ]\n      \n      setTransactions(mockTransactions)\n    } catch (err) {\n      const errorMessage = language === 'es' \n        ? 'Error al cargar transacciones'\n        : 'Error loading transactions'\n      setError(errorMessage)\n      console.error('Error loading transactions:', err)\n    } finally {\n      setLoading(false)\n    }\n  }, [accountId, language])\n\n  // Create new transaction\n  const createTransaction = useCallback(async (data: CreateTransactionData) => {\n    setLoading(true)\n    setError(null)\n\n    try {\n      // SEPRELAD compliance check\n      const seprelad = checkSEPRELADThreshold(data.monto, data.moneda)\n      if (seprelad.requiresReport) {\n        reportViolation({\n          type: 'performance',\n          severity: 'warning',\n          element: document.createElement('div'),\n          message: `Transaction amount ${seprelad.amountUSD} USD exceeds SEPRELAD threshold`,\n          messageEs: `Monto de transacción ${seprelad.amountUSD} USD supera umbral SEPRELAD`,\n          messageEn: `Transaction amount ${seprelad.amountUSD} USD exceeds SEPRELAD threshold`,\n          recommendation: 'Transaction will be flagged for compliance reporting',\n          birhausPrinciple: 8 // Compliance principle\n        })\n      }\n\n      // Simulate API call\n      await new Promise(resolve => setTimeout(resolve, 1000))\n\n      const newTransaction: Transaction = {\n        id: Date.now().toString(),\n        ...data,\n        fecha: new Date(),\n        estado: 'pendiente'\n      }\n\n      // Optimistic update\n      setTransactions(prev => [newTransaction, ...prev])\n\n      // Simulate status update after processing\n      setTimeout(() => {\n        setTransactions(prev => prev.map(t => \n          t.id === newTransaction.id \n            ? { ...t, estado: 'completada' }\n            : t\n        ))\n      }, 2000)\n\n      return newTransaction\n    } catch (err) {\n      const errorMessage = language === 'es' \n        ? 'Error al crear transacción'\n        : 'Error creating transaction'\n      setError(errorMessage)\n      throw err\n    } finally {\n      setLoading(false)\n    }\n  }, [language, reportViolation])\n\n  // Update transaction status\n  const updateTransactionStatus = useCallback(async (\n    transactionId: string, \n    status: TransactionStatus\n  ) => {\n    try {\n      // Simulate API call\n      await new Promise(resolve => setTimeout(resolve, 300))\n\n      setTransactions(prev => prev.map(transaction =>\n        transaction.id === transactionId\n          ? { ...transaction, estado: status }\n          : transaction\n      ))\n    } catch (err) {\n      const errorMessage = language === 'es' \n        ? 'Error al actualizar estado de transacción'\n        : 'Error updating transaction status'\n      setError(errorMessage)\n      throw err\n    }\n  }, [language])\n\n  // Cancel transaction\n  const cancelTransaction = useCallback(async (transactionId: string) => {\n    try {\n      await updateTransactionStatus(transactionId, 'cancelada')\n    } catch (err) {\n      console.error('Error cancelling transaction:', err)\n      throw err\n    }\n  }, [updateTransactionStatus])\n\n  // Retry failed transaction\n  const retryTransaction = useCallback(async (transactionId: string) => {\n    try {\n      await updateTransactionStatus(transactionId, 'procesando')\n      \n      // Simulate processing delay\n      setTimeout(async () => {\n        try {\n          await updateTransactionStatus(transactionId, 'completada')\n        } catch (err) {\n          await updateTransactionStatus(transactionId, 'fallida')\n        }\n      }, 3000)\n    } catch (err) {\n      console.error('Error retrying transaction:', err)\n      throw err\n    }\n  }, [updateTransactionStatus])\n\n  // Filter transactions\n  const filteredTransactions = useMemo(() => {\n    let filtered = transactions\n\n    // Type filter\n    if (filters.tipo?.length) {\n      filtered = filtered.filter(t => filters.tipo!.includes(t.tipo))\n    }\n\n    // Status filter  \n    if (filters.estado?.length) {\n      filtered = filtered.filter(t => filters.estado!.includes(t.estado))\n    }\n\n    // Date range filter\n    if (filters.fechaDesde) {\n      filtered = filtered.filter(t => new Date(t.fecha) >= new Date(filters.fechaDesde!))\n    }\n    if (filters.fechaHasta) {\n      filtered = filtered.filter(t => new Date(t.fecha) <= new Date(filters.fechaHasta!))\n    }\n\n    // Amount range filter\n    if (filters.montoMinimo !== undefined) {\n      filtered = filtered.filter(t => t.monto >= filters.montoMinimo!)\n    }\n    if (filters.montoMaximo !== undefined) {\n      filtered = filtered.filter(t => t.monto <= filters.montoMaximo!)\n    }\n\n    // Currency filter\n    if (filters.moneda?.length) {\n      filtered = filtered.filter(t => filters.moneda!.includes(t.moneda))\n    }\n\n    return filtered.sort((a, b) => new Date(b.fecha).getTime() - new Date(a.fecha).getTime())\n  }, [transactions, filters])\n\n  // Transaction analytics\n  const analytics = useMemo(() => {\n    const totalIncoming = filteredTransactions\n      .filter(t => ['transferencia_entrante', 'deposito'].includes(t.tipo) && t.estado === 'completada')\n      .reduce((sum, t) => sum + t.monto, 0)\n\n    const totalOutgoing = filteredTransactions\n      .filter(t => ['transferencia_saliente', 'retiro', 'pago_servicios', 'compra'].includes(t.tipo) && t.estado === 'completada')\n      .reduce((sum, t) => sum + t.monto, 0)\n\n    const totalCommissions = filteredTransactions\n      .filter(t => t.estado === 'completada')\n      .reduce((sum, t) => sum + (t.comision || 0), 0)\n\n    const pendingTransactions = filteredTransactions.filter(t => \n      ['pendiente', 'procesando'].includes(t.estado)\n    ).length\n\n    const failedTransactions = filteredTransactions.filter(t => \n      t.estado === 'fallida'\n    ).length\n\n    // Group by transaction type\n    const byType = filteredTransactions.reduce((acc, transaction) => {\n      if (!acc[transaction.tipo]) {\n        acc[transaction.tipo] = {\n          count: 0,\n          totalAmount: 0\n        }\n      }\n      acc[transaction.tipo].count++\n      acc[transaction.tipo].totalAmount += transaction.monto\n      return acc\n    }, {} as Record<TransactionType, { count: number; totalAmount: number }>)\n\n    return {\n      totalIncoming,\n      totalOutgoing,\n      totalCommissions,\n      netFlow: totalIncoming - totalOutgoing,\n      pendingTransactions,\n      failedTransactions,\n      byType\n    }\n  }, [filteredTransactions])\n\n  // Export transactions to CSV\n  const exportTransactions = useCallback((exportTransactions?: Transaction[]) => {\n    const dataToExport = exportTransactions || filteredTransactions\n    \n    const headers = language === 'es' \n      ? ['Fecha', 'Tipo', 'Descripción', 'Monto', 'Moneda', 'Estado', 'Referencia', 'Comisión']\n      : ['Date', 'Type', 'Description', 'Amount', 'Currency', 'Status', 'Reference', 'Commission']\n\n    const rows = dataToExport.map(transaction => [\n      transaction.fecha.toISOString().split('T')[0],\n      transaction.tipo,\n      transaction.descripcionEs,\n      transaction.monto.toString(),\n      transaction.moneda,\n      transaction.estado,\n      transaction.referencia || '',\n      (transaction.comision || 0).toString()\n    ])\n\n    const csvContent = [headers, ...rows]\n      .map(row => row.map(cell => `\"${cell}\"`).join(','))\n      .join('\\n')\n\n    // Create and download file\n    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })\n    const link = document.createElement('a')\n    \n    if (link.download !== undefined) {\n      const url = URL.createObjectURL(blob)\n      link.setAttribute('href', url)\n      link.setAttribute('download', `transacciones_${new Date().toISOString().split('T')[0]}.csv`)\n      link.style.visibility = 'hidden'\n      document.body.appendChild(link)\n      link.click()\n      document.body.removeChild(link)\n    }\n  }, [filteredTransactions, language])\n\n  // Get transaction by ID\n  const getTransactionById = useCallback((id: string): Transaction | undefined => {\n    return transactions.find(t => t.id === id)\n  }, [transactions])\n\n  // Check if transaction requires SEPRELAD reporting\n  const checkTransactionCompliance = useCallback((transaction: Transaction) => {\n    return checkSEPRELADThreshold(transaction.monto, transaction.moneda)\n  }, [])\n\n  // Update filters\n  const updateFilters = useCallback((newFilters: Partial<TransactionFilters>) => {\n    setFilters((prev: TransactionFilters) => ({ ...prev, ...newFilters }))\n  }, [])\n\n  // Clear filters\n  const clearFilters = useCallback(() => {\n    setFilters({})\n  }, [])\n\n  // Clear error\n  const clearError = useCallback(() => {\n    setError(null)\n  }, [])\n\n  // Refresh transactions\n  const refresh = useCallback(() => {\n    if (accountId) {\n      loadTransactions()\n    }\n  }, [loadTransactions, accountId])\n\n  // Get transactions by type\n  const getTransactionsByType = useCallback((type: TransactionType) => {\n    return transactions.filter(t => t.tipo === type)\n  }, [transactions])\n\n  // Get transactions by status\n  const getTransactionsByStatus = useCallback((status: TransactionStatus) => {\n    return transactions.filter(t => t.estado === status)\n  }, [transactions])\n\n  // Get transactions by date range\n  const getTransactionsByDateRange = useCallback((startDate: Date, endDate: Date) => {\n    return transactions.filter(t => {\n      const transactionDate = new Date(t.fecha)\n      return transactionDate >= startDate && transactionDate <= endDate\n    })\n  }, [transactions])\n\n  // Get recent transactions\n  const getRecentTransactions = useCallback((limit: number = 10) => {\n    return transactions\n      .sort((a, b) => new Date(b.fecha).getTime() - new Date(a.fecha).getTime())\n      .slice(0, limit)\n  }, [transactions])\n\n  return {\n    transactions,\n    filteredTransactions,\n    filters,\n    setFilters: updateFilters,\n    addTransaction: createTransaction,\n    updateTransaction: (id: string, updates: Partial<Transaction>) => {\n      setTransactions(prev => prev.map(t => t.id === id ? { ...t, ...updates } : t))\n    },\n    deleteTransaction: (id: string) => {\n      setTransactions(prev => prev.filter(t => t.id !== id))\n    },\n    calculateSummary: () => ({\n      ingresosMensuales: 0,\n      gastosMensuales: 0,\n      ahorrosMensuales: 0,\n      porcentajeAhorros: 0,\n      proyeccionAnual: 0\n    })\n  }\n}\n\nexport type { UseTransactionsReturn }","'use client'\n\nimport { useState, useCallback, useMemo, useEffect } from 'react'\nimport { useBirhaus } from '@birhaus/provider'\nimport { convertCurrency } from '../utils/currency'\nimport type { \n  FinancialMetric, \n  MetricType, \n  MetricTrend,\n  UseFinancialMetricsReturn,\n  CurrencyCode,\n  Transaction,\n  Account,\n  Budget\n} from '../types/financial'\n\n/**\n * useFinancialMetrics - Hook for financial KPI calculation and management\n * \n * Features:\n * - Real-time financial metric calculation from transactions and accounts\n * - Trend analysis with historical comparisons\n * - Goal tracking and progress monitoring\n * - Multi-currency support with automatic conversion\n * - Spanish-first metric names and descriptions\n * - Performance optimization with memoized calculations\n * - Alert system for concerning financial trends\n * - Export functionality for financial reports\n * - Customizable metric periods and groupings\n */\nexport function useFinancialMetrics(\n  accounts?: Account[],\n  transactions?: Transaction[],\n  budgets?: Budget[]\n): UseFinancialMetricsReturn {\n  const { language, reportViolation } = useBirhaus()\n  \n  // Metrics state\n  const [metrics, setMetrics] = useState<FinancialMetric[]>([])\n  const [loading, setLoading] = useState(false)\n  const [error, setError] = useState<Error | null>(null)\n  const [baseCurrency, setBaseCurrency] = useState<CurrencyCode>('PYG')\n  const [period, setPeriod] = useState<'daily' | 'weekly' | 'monthly' | 'yearly'>('monthly')\n\n  // Calculate financial metrics\n  const calculateMetrics = useCallback(async () => {\n    if (!accounts || !transactions) return\n\n    setLoading(true)\n    setError(null)\n\n    try {\n      const now = new Date()\n      const currentPeriodStart = new Date()\n      const previousPeriodStart = new Date()\n      const previousPeriodEnd = new Date()\n\n      // Set period boundaries\n      switch (period) {\n        case 'daily':\n          currentPeriodStart.setHours(0, 0, 0, 0)\n          previousPeriodEnd.setDate(now.getDate() - 1)\n          previousPeriodEnd.setHours(23, 59, 59, 999)\n          previousPeriodStart.setDate(now.getDate() - 1)\n          previousPeriodStart.setHours(0, 0, 0, 0)\n          break\n        case 'weekly':\n          currentPeriodStart.setDate(now.getDate() - now.getDay())\n          previousPeriodEnd.setDate(currentPeriodStart.getDate() - 1)\n          previousPeriodStart.setDate(currentPeriodStart.getDate() - 7)\n          break\n        case 'monthly':\n          currentPeriodStart.setDate(1)\n          previousPeriodEnd.setMonth(now.getMonth(), 0)\n          previousPeriodStart.setMonth(now.getMonth() - 1, 1)\n          break\n        case 'yearly':\n          currentPeriodStart.setMonth(0, 1)\n          previousPeriodEnd.setFullYear(now.getFullYear() - 1, 11, 31)\n          previousPeriodStart.setFullYear(now.getFullYear() - 1, 0, 1)\n          break\n      }\n\n      // Filter transactions for current and previous periods\n      const currentTransactions = transactions.filter(t => \n        new Date(t.fecha) >= currentPeriodStart && new Date(t.fecha) <= now\n      )\n      \n      const previousTransactions = transactions.filter(t => \n        new Date(t.fecha) >= previousPeriodStart && new Date(t.fecha) <= previousPeriodEnd\n      )\n\n      const calculatedMetrics: FinancialMetric[] = []\n\n      // 1. Total Balance\n      const totalBalance = accounts.reduce((sum, account) => {\n        if (account.moneda === baseCurrency) {\n          return sum + account.saldo\n        }\n        return sum + convertCurrency(account.saldo, account.moneda, baseCurrency)\n      }, 0)\n\n      calculatedMetrics.push({\n        id: 'balance',\n        tipo: 'saldo',\n        nombreEs: 'Saldo Total',\n        nombreEn: 'Total Balance',\n        valor: totalBalance,\n        moneda: baseCurrency,\n        descripcionEs: 'Saldo total de todas las cuentas',\n        descripcionEn: 'Total balance across all accounts',\n        ultimaActualizacion: now\n      })\n\n      // 2. Income (Current Period)\n      const currentIncome = currentTransactions\n        .filter(t => ['transferencia_entrante', 'deposito'].includes(t.tipo) && t.estado === 'completada')\n        .reduce((sum, t) => {\n          if (t.moneda === baseCurrency) {\n            return sum + t.monto\n          }\n          return sum + convertCurrency(t.monto, t.moneda, baseCurrency)\n        }, 0)\n\n      const previousIncome = previousTransactions\n        .filter(t => ['transferencia_entrante', 'deposito'].includes(t.tipo) && t.estado === 'completada')\n        .reduce((sum, t) => {\n          if (t.moneda === baseCurrency) {\n            return sum + t.monto\n          }\n          return sum + convertCurrency(t.monto, t.moneda, baseCurrency)\n        }, 0)\n\n      const incomeTrend: MetricTrend | undefined = previousIncome > 0 \n        ? {\n            direccion: currentIncome > previousIncome ? 'subida' : currentIncome < previousIncome ? 'bajada' : 'estable',\n            porcentaje: ((currentIncome - previousIncome) / previousIncome) * 100,\n            periodo: getPeriodName(period)\n          }\n        : undefined\n\n      calculatedMetrics.push({\n        id: 'income',\n        tipo: 'ingresos',\n        nombreEs: 'Ingresos',\n        nombreEn: 'Income',\n        valor: currentIncome,\n        moneda: baseCurrency,\n        descripcionEs: `Ingresos del período ${getPeriodName(period).toLowerCase()}`,\n        descripcionEn: `${getPeriodName(period)} income`,\n        tendencia: incomeTrend,\n        ultimaActualizacion: now\n      })\n\n      // 3. Expenses (Current Period)\n      const currentExpenses = currentTransactions\n        .filter(t => ['transferencia_saliente', 'retiro', 'pago_servicios', 'compra'].includes(t.tipo) && t.estado === 'completada')\n        .reduce((sum, t) => {\n          if (t.moneda === baseCurrency) {\n            return sum + t.monto\n          }\n          return sum + convertCurrency(t.monto, t.moneda, baseCurrency)\n        }, 0)\n\n      const previousExpenses = previousTransactions\n        .filter(t => ['transferencia_saliente', 'retiro', 'pago_servicios', 'compra'].includes(t.tipo) && t.estado === 'completada')\n        .reduce((sum, t) => {\n          if (t.moneda === baseCurrency) {\n            return sum + t.monto\n          }\n          return sum + convertCurrency(t.monto, t.moneda, baseCurrency)\n        }, 0)\n\n      const expensesTrend: MetricTrend | undefined = previousExpenses > 0\n        ? {\n            direccion: currentExpenses > previousExpenses ? 'subida' : currentExpenses < previousExpenses ? 'bajada' : 'estable',\n            porcentaje: ((currentExpenses - previousExpenses) / previousExpenses) * 100,\n            periodo: getPeriodName(period)\n          }\n        : undefined\n\n      calculatedMetrics.push({\n        id: 'expenses',\n        tipo: 'gastos',\n        valor: currentExpenses,\n        moneda: baseCurrency,\n        nombreEs: 'Gastos',\n        nombreEn: 'Expenses',\n        descripcionEs: `Gastos del período ${getPeriodName(period).toLowerCase()}`,\n        descripcionEn: `${getPeriodName(period)} expenses`,\n        tendencia: expensesTrend,\n        ultimaActualizacion: now\n      })\n\n      // 4. Savings (Income - Expenses)\n      const savings = currentIncome - currentExpenses\n      const previousSavings = previousIncome - previousExpenses\n      \n      const savingsTrend: MetricTrend | undefined = previousSavings !== 0\n        ? {\n            direccion: savings > previousSavings ? 'subida' : savings < previousSavings ? 'bajada' : 'estable',\n            porcentaje: previousSavings > 0 ? ((savings - previousSavings) / Math.abs(previousSavings)) * 100 : 0,\n            periodo: getPeriodName(period)\n          }\n        : undefined\n\n      calculatedMetrics.push({\n        id: 'savings',\n        tipo: 'ahorros',\n        valor: savings,\n        moneda: baseCurrency,\n        nombreEs: 'Ahorros',\n        nombreEn: 'Savings',\n        descripcionEs: `Ahorros del período ${getPeriodName(period).toLowerCase()}`,\n        descripcionEn: `${getPeriodName(period)} savings`,\n        tendencia: savingsTrend,\n        ultimaActualizacion: now\n      })\n\n      // 5. Budget Adherence (if budgets provided)\n      if (budgets && budgets.length > 0) {\n        const totalBudget = budgets.reduce((sum, budget) => {\n          const limit = budget.limite ?? budget.montoPresupuesto\n          if (budget.moneda === baseCurrency) {\n            return sum + limit\n          }\n          return sum + convertCurrency(limit, budget.moneda, baseCurrency)\n        }, 0)\n\n        const budgetUsed = budgets.reduce((sum, budget) => {\n          const spent = budget.gastado ?? budget.montoGastado\n          if (budget.moneda === baseCurrency) {\n            return sum + spent\n          }\n          return sum + convertCurrency(spent, budget.moneda, baseCurrency)\n        }, 0)\n\n        const budgetAdherence = totalBudget > 0 ? (budgetUsed / totalBudget) * 100 : 0\n\n        calculatedMetrics.push({\n          id: 'budget-adherence',\n          tipo: 'objetivo',\n          valor: budgetAdherence,\n          moneda: 'PERCENT',\n          nombreEs: 'Adherencia al Presupuesto',\n          nombreEn: 'Budget Adherence',\n          descripcionEs: 'Adherencia al presupuesto',\n          descripcionEn: 'Budget adherence',\n          objetivo: {\n            valor: 100,\n            fechaLimite: new Date(now.getFullYear(), now.getMonth() + 1, 0)\n          },\n          ultimaActualizacion: now,\n          informacionAdicional: [\n            language === 'es' \n              ? `Presupuesto total: ${totalBudget.toLocaleString()} ${baseCurrency}`\n              : `Total budget: ${totalBudget.toLocaleString()} ${baseCurrency}`,\n            language === 'es'\n              ? `Utilizado: ${budgetUsed.toLocaleString()} ${baseCurrency}`\n              : `Used: ${budgetUsed.toLocaleString()} ${baseCurrency}`\n          ]\n        })\n      }\n\n      // 6. Available Credit (from credit accounts)\n      const creditAccounts = accounts.filter(a => a.tipo === 'credito')\n      const availableCredit = creditAccounts.reduce((sum, account) => {\n        const creditLimit = account.limiteDiario || 0 // Assuming credit limit is stored in limiteDiario\n        const usedCredit = Math.abs(account.saldo) // Negative balance indicates used credit\n        const available = creditLimit - usedCredit\n        \n        if (account.moneda === baseCurrency) {\n          return sum + available\n        }\n        return sum + convertCurrency(available, account.moneda, baseCurrency)\n      }, 0)\n\n      if (creditAccounts.length > 0) {\n        calculatedMetrics.push({\n          id: 'available-credit',\n          tipo: 'credito_disponible',\n          valor: availableCredit,\n          moneda: baseCurrency,\n          nombreEs: 'Crédito Disponible',\n          nombreEn: 'Available Credit',\n          descripcionEs: 'Crédito disponible total',\n          descripcionEn: 'Total available credit',\n          ultimaActualizacion: now\n        })\n      }\n\n      setMetrics(calculatedMetrics)\n\n      // BIRHAUS compliance: Alert on concerning metrics\n      if (savings < 0 && Math.abs(savings) > currentIncome * 0.1) {\n        reportViolation({\n          type: 'performance',\n          severity: 'warning',\n          element: document.createElement('div'),\n          message: `Negative savings rate: ${savings} ${baseCurrency}`,\n          messageEs: `Tasa de ahorro negativa: ${savings} ${baseCurrency}`,\n          messageEn: `Negative savings rate: ${savings} ${baseCurrency}`,\n          recommendation: 'Consider budget adjustments to improve savings rate',\n          birhausPrinciple: 6 // Progressive disclosure of financial health\n        })\n      }\n\n    } catch (err) {\n      const errorMessage = language === 'es' \n        ? 'Error al calcular métricas financieras'\n        : 'Error calculating financial metrics'\n      setError(new Error(errorMessage))\n      console.error('Error calculating metrics:', err)\n    } finally {\n      setLoading(false)\n    }\n  }, [accounts, transactions, budgets, baseCurrency, period, language, reportViolation])\n\n  // Get period name helper\n  const getPeriodName = useCallback((periodType: string) => {\n    const periods = {\n      daily: { es: 'Diario', en: 'Daily' },\n      weekly: { es: 'Semanal', en: 'Weekly' },\n      monthly: { es: 'Mensual', en: 'Monthly' },\n      yearly: { es: 'Anual', en: 'Annual' }\n    }\n    return language === 'es' ? periods[periodType as keyof typeof periods].es : periods[periodType as keyof typeof periods].en\n  }, [language])\n\n  // Recalculate metrics when dependencies change\n  useEffect(() => {\n    if (accounts && transactions) {\n      calculateMetrics()\n    }\n  }, [calculateMetrics])\n\n  // Get metric by type\n  const getMetricByType = useCallback((type: MetricType): FinancialMetric | undefined => {\n    return metrics.find(m => m.tipo === type)\n  }, [metrics])\n\n  // Get metric by ID\n  const getMetricById = useCallback((id: string): FinancialMetric | undefined => {\n    return metrics.find(m => m.id === id)\n  }, [metrics])\n\n  // Calculate metric change from previous period\n  const getMetricChange = useCallback((metricId: string): number | null => {\n    const metric = metrics.find(m => m.id === metricId)\n    if (!metric?.tendencia) return null\n    return metric.tendencia.porcentaje\n  }, [metrics])\n\n  // Export metrics to CSV\n  const exportMetrics = useCallback(() => {\n    const headers = language === 'es' \n      ? ['ID', 'Tipo', 'Valor', 'Moneda', 'Descripción', 'Tendencia %', 'Última Actualización']\n      : ['ID', 'Type', 'Value', 'Currency', 'Description', 'Trend %', 'Last Updated']\n\n    const rows = metrics.map(metric => [\n      metric.id,\n      metric.tipo,\n      metric.valor.toString(),\n      metric.moneda,\n      metric.descripcion,\n      metric.tendencia?.porcentaje.toFixed(2) || '0',\n      metric.ultimaActualizacion?.toISOString().split('T')[0] || ''\n    ])\n\n    const csvContent = [headers, ...rows]\n      .map(row => row.map(cell => `\"${cell}\"`).join(','))\n      .join('\\n')\n\n    // Create and download file\n    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' })\n    const link = document.createElement('a')\n    \n    if (link.download !== undefined) {\n      const url = URL.createObjectURL(blob)\n      link.setAttribute('href', url)\n      link.setAttribute('download', `metricas_financieras_${new Date().toISOString().split('T')[0]}.csv`)\n      link.style.visibility = 'hidden'\n      document.body.appendChild(link)\n      link.click()\n      document.body.removeChild(link)\n    }\n  }, [metrics, language])\n\n  // Get financial health score (0-100)\n  const financialHealthScore = useMemo(() => {\n    let score = 50 // Base score\n\n    const balanceMetric = getMetricByType('saldo')\n    const savingsMetric = getMetricByType('ahorros')\n    const incomeMetric = getMetricByType('ingresos')\n    const expensesMetric = getMetricByType('gastos')\n\n    // Positive balance contributes to score\n    if (balanceMetric && balanceMetric.valor > 0) {\n      score += 20\n    }\n\n    // Positive savings contributes to score\n    if (savingsMetric && savingsMetric.valor > 0) {\n      score += 20\n    }\n\n    // Income growth contributes to score\n    if (incomeMetric?.tendencia?.direccion === 'subida') {\n      score += 10\n    }\n\n    // Expense reduction contributes to score\n    if (expensesMetric?.tendencia?.direccion === 'bajada') {\n      score += 10\n    }\n\n    // Savings rate\n    if (incomeMetric && savingsMetric && incomeMetric.valor > 0) {\n      const savingsRate = (savingsMetric.valor / incomeMetric.valor) * 100\n      if (savingsRate >= 20) score += 15\n      else if (savingsRate >= 10) score += 10\n      else if (savingsRate >= 5) score += 5\n      else if (savingsRate < 0) score -= 15\n    }\n\n    return Math.max(0, Math.min(100, score))\n  }, [metrics, getMetricByType])\n\n  // Clear error\n  const clearError = useCallback(() => {\n    setError(null)\n  }, [])\n\n  // Refresh metrics\n  const refresh = useCallback(() => {\n    calculateMetrics()\n  }, [calculateMetrics])\n\n  return {\n    metrics,\n    loading,\n    error,\n    refreshMetrics: calculateMetrics,\n    getMetricsByCategory: () => [],\n    getMetricTrend: () => []\n  }\n}\n\nexport type { UseFinancialMetricsReturn }"]}