@fayz-ai/plugin-financial 0.8.0 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FinancialContext.d.ts +6 -0
- package/dist/FinancialContext.d.ts.map +1 -1
- package/dist/FinancialPage.d.ts.map +1 -1
- package/dist/components/FinancialGeneralSettings.d.ts.map +1 -1
- package/dist/data/supabase.d.ts.map +1 -1
- package/dist/index.cjs +281 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +283 -32
- package/dist/index.js.map +1 -1
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/pt-BR.d.ts.map +1 -1
- package/dist/migrations/index.d.ts +3 -1
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/views/CardsView.d.ts.map +1 -1
- package/dist/views/InvoiceFormView.d.ts.map +1 -1
- package/dist/views/InvoiceListView.d.ts.map +1 -1
- package/dist/views/QuickTransactionForm.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/FinancialContext.tsx +6 -0
- package/src/FinancialPage.tsx +56 -12
- package/src/components/FinancialGeneralSettings.tsx +21 -8
- package/src/data/supabase.ts +6 -1
- package/src/index.ts +128 -0
- package/src/locales/en.ts +10 -0
- package/src/locales/pt-BR.ts +10 -0
- package/src/migrations/004_order_to_cash.sql +15 -1
- package/src/migrations/009_agent_rpcs.sql +165 -0
- package/src/migrations/010_invoice_internal.sql +133 -0
- package/src/migrations/index.ts +320 -2
- package/src/views/CardsView.tsx +12 -9
- package/src/views/InvoiceFormView.tsx +10 -0
- package/src/views/InvoiceListView.tsx +98 -9
- package/src/views/QuickTransactionForm.tsx +11 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/FinancialContext.tsx","../src/views/SummaryView.tsx","../src/views/QuickTransactionForm.tsx","../src/quick-add.ts","../src/views/InvoiceListView.tsx","../src/views/InvoiceFormView.tsx","../src/components/PaymentModal.tsx","../src/views/InvoiceDetailView.tsx","../src/views/navReferrer.ts","../src/views/PayablesView.tsx","../src/views/ReceivablesView.tsx","../src/views/CashRegistersView.tsx","../src/components/TransferModal.tsx","../src/views/StatementsView.tsx","../src/views/CommissionsView.tsx","../src/views/CardsView.tsx","../src/views/ReconciliationView.tsx","../src/components/FinancialGeneralSettings.tsx","../src/components/FinancialOnboarding.tsx","../src/FinancialPage.tsx","../src/views/dashboardWidgets.tsx","../src/data/mock.ts","../src/data/tables.ts","../src/data/supabase.ts","../src/store.ts","../src/registries.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/components/PersonStatementWidget.tsx","../src/index.ts"],"names":["createPluginContext","jsxs","Fragment","jsx","DashboardCanvas","ShoppingCart","Car","Home","Utensils","Zap","Film","HeartPulse","Dumbbell","Music","ShoppingBag","Landmark","Wallet","CircleDollarSign","t","useTranslation","useMemo","useEffect","formatCurrency","Paperclip","ArrowDownCircle","ArrowLeftRight","ArrowUpCircle","useState","useRef","ChevronDown","X","Check","toast","Modal","ModalContent","CalendarDays","DatePicker","Camera","Tag","Repeat","Button","React3","CircleDashed","CircleEllipsis","CircleCheckBig","CircleAlert","Ban","PersonLink","SubpageHeader","ListView","FileText","Building2","Search","Trash2","SearchSelect","CurrencyInput","Plus","useSaveBar","MoreVertical","LayoutList","createPortal","Banknote","QrCode","CreditCard","ArrowRightLeft","FileCheck","Pencil","User","Calendar","Hash","DollarSign","ExternalLink","DataTable","Calculator","StickyNote","Play","Square","Clock","ChevronUp","TooltipProvider","Tooltip","TooltipTrigger","CheckCheck","TooltipContent","Receipt","CalendarClock","useCallback","RefreshCw","Sparkles","Link2","SettingsGroup","ToggleRow","BookOpen","ChevronRight","parseViewId","useModuleNavigation","openQuickAdd","PageTransition","PluginSettingsPanel","ModulePage","ModuleActionBar","KpiCard","ChartWidget","Card","CardHeader","CardTitle","CardContent","ArrowUpRight","ArrowDownRight","AlertTriangle","TableWidget","today","useDashboardNavigate","React","GoldCard","EyeOff","Eye","pending","CreditCardIcon","ctx","defineKpiWidget","defineChartWidget","defineCustomWidget","defineTableWidget","getActiveTenantId","getSupabaseClientOptional","round2","now","createStore","dedup","createSafeDataProvider","registerTranslations"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createPluginContext, formatCurrency, type CurrencyConfig, type EntityLookupMap, type EntityLookup } from '@fayz-ai/saas'\nimport type { FinancialPluginLabels, ItemTypeOption } from './index'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\n\n// ---------------------------------------------------------------------------\n// Resolved config — fully merged, no optionals\n// ---------------------------------------------------------------------------\n\nexport interface FinancialModules {\n payables: boolean\n receivables: boolean\n cashRegisters: boolean\n statements: boolean\n commissions: boolean\n cards: boolean\n /** Bank reconciliation (conciliação). Opt-in — enable when a bank connector imports statements. */\n reconciliation: boolean\n}\n\nexport type FinancialCurrency = CurrencyConfig\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nexport interface ResolvedFinancialConfig {\n modules: FinancialModules\n /** Show the plugin's own quick-add header buttons / FAB. Opt-in (default false). */\n quickAdd: boolean\n labels: FinancialPluginLabels\n currency: FinancialCurrency\n itemTypes: ItemTypeOption[]\n enableServiceExecution: boolean\n contactEntity: { archetypeKind: string; label: string }\n locations: LocationOption[]\n entityLookups: EntityLookupMap\n contactLookup?: EntityLookup\n onBookingClick?: (orderId: string) => void\n}\n\nconst ctx = createPluginContext<ResolvedFinancialConfig, FinancialDataProvider, FinancialUIState>('FinancialPage')\n\nexport const FinancialContextProvider = ctx.ContextProvider\nexport const useFinancialConfig = ctx.useConfig\nexport const useFinancialProvider = ctx.useProvider\nexport const useFinancialStore = ctx.useStore\n\nexport { formatCurrency }\n","import React, { useEffect, useMemo } from 'react'\nimport {\n ShoppingCart, Car, Home, Utensils, Zap, Film, HeartPulse, Dumbbell,\n Music, ShoppingBag, Landmark, Wallet, CircleDollarSign, Paperclip,\n} from 'lucide-react'\nimport { DashboardCanvas } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport type { StatementEntry } from '../types'\n\n/**\n * Financial summary. On desktop (md+) it renders the rich multi-column dashboard\n * (KPI cards + Fluxo de Caixa chart + breakdown + overdue alerts + recent-\n * transactions table) via the shared DashboardCanvas. On mobile (<md) it swaps\n * to a Mobills-grade experience: a compact KPI strip over a date-grouped\n * transaction list. The two paths share the same store — no forked screen.\n */\nexport function SummaryView() {\n return (\n <>\n {/* Mobile: Mobills-style transaction-led summary */}\n <div className=\"md:hidden\">\n <MobileSummary />\n </div>\n {/* Desktop: rich dashboard canvas (unchanged) */}\n <DashboardCanvas\n surface=\"plugin-home\"\n domain=\"financial\"\n showHeader={false}\n className=\"hidden space-y-6 md:block\"\n />\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Mobile summary (Mobills-grade)\n// ---------------------------------------------------------------------------\n\n// keyword → category glyph, so each row leads with a recognizable colored circle\n// (Mobills-style). Purely cosmetic and safe while categories aren't modeled yet;\n// falls back to a generic money glyph.\nfunction categoryIcon(label: string): React.ElementType {\n const s = label.toLowerCase()\n if (/(mercado|super|padaria|extra|p[aã]o|hortifr)/.test(s)) return ShoppingCart\n if (/(uber|99|posto|shell|gasol|combust|carro)/.test(s)) return Car\n if (/(aluguel|casa|condom|im[oó]vel)/.test(s)) return Home\n if (/(ifood|restaurante|outback|lanche|food|bar\\b)/.test(s)) return Utensils\n if (/(luz|energia|enel|internet|vivo|conta de|[aá]gua)/.test(s)) return Zap\n if (/(cinema|netflix|cinemark|filme|disney|prime)/.test(s)) return Film\n if (/(farm|drogasil|sa[uú]de|plano|hospital|m[eé]dic)/.test(s)) return HeartPulse\n if (/(academia|smartfit|gym|treino)/.test(s)) return Dumbbell\n if (/(spotify|music|deezer)/.test(s)) return Music\n if (/(amazon|shopping|loja|magaz|americanas|mercado livre)/.test(s)) return ShoppingBag\n if (/(fatura|cart[aã]o|nubank|banco|boleto)/.test(s)) return Landmark\n if (/(sal[aá]rio|freel|pix|reembolso|receb|renda|d[ií]vidend)/.test(s)) return Wallet\n return CircleDollarSign\n}\n\nfunction useDateLabel() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n return useMemo(() => {\n const todayStr = new Date().toISOString().slice(0, 10)\n const y = new Date(); y.setDate(y.getDate() - 1)\n const yesterdayStr = y.toISOString().slice(0, 10)\n return (dateStr: string): string => {\n if (dateStr === todayStr) return t('financial.summary.today')\n if (dateStr === yesterdayStr) return t('financial.summary.yesterday')\n try {\n return new Date(`${dateStr}T00:00:00`).toLocaleDateString(currency.locale, {\n weekday: 'short', day: '2-digit', month: 'short',\n })\n } catch {\n return dateStr\n }\n }\n }, [t, currency.locale])\n}\n\nfunction MobileSummary() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const statement = useFinancialStore((s) => s.statement)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n const dateLabel = useDateLabel()\n\n useEffect(() => {\n void fetchSummary()\n void fetchBankAccounts()\n const to = new Date().toISOString().slice(0, 10)\n const from = new Date(); from.setDate(from.getDate() - 90)\n void fetchStatement({ dateRange: { from: from.toISOString().slice(0, 10), to } })\n }, [])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n\n const accountName = useMemo(() => {\n const map = new Map(bankAccounts.map((a) => [a.id, a.name]))\n return (id?: string) => (id ? map.get(id) ?? '' : '')\n }, [bankAccounts])\n\n // Realized cash events grouped by day (most recent first). Transfers are\n // dropped — they're internal and would double-count in a personal feed.\n const groups = useMemo(() => {\n const entries = (statement?.entries ?? []).filter((e) => e.entryKind === 'movement')\n const byDate = new Map<string, StatementEntry[]>()\n for (const e of entries) {\n const d = e.movement.paymentDate ?? e.movement.dueDate\n const bucket = byDate.get(d)\n if (bucket) bucket.push(e)\n else byDate.set(d, [e])\n }\n return [...byDate.entries()].sort((a, b) => b[0].localeCompare(a[0]))\n }, [statement])\n\n return (\n <div className=\"space-y-4\">\n {/* Compact KPI strip */}\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"col-span-2 rounded-xl border bg-card p-4\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.summary.totalBalance')}</p>\n <p className=\"mt-0.5 text-2xl font-semibold\">{fmt(summary?.totalBalance ?? 0)}</p>\n </div>\n <div className=\"rounded-xl border bg-card p-3\">\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.summary.income')}</p>\n <p className=\"mt-0.5 text-base font-semibold text-success\">{fmt(inflow)}</p>\n </div>\n <div className=\"rounded-xl border bg-card p-3\">\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.summary.expenses')}</p>\n <p className=\"mt-0.5 text-base font-semibold text-destructive\">{fmt(outflow)}</p>\n </div>\n </div>\n\n {/* Date-grouped transaction list */}\n {groups.length === 0 ? (\n <div className=\"rounded-xl border border-dashed py-12 text-center text-sm text-muted-foreground\">\n {t('financial.summary.noTransactions')}\n </div>\n ) : (\n <div className=\"space-y-4\">\n {groups.map(([date, rows]) => (\n <div key={date} className=\"space-y-1.5\">\n <p className=\"px-1 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {dateLabel(date)}\n </p>\n <div className=\"divide-y overflow-hidden rounded-xl border bg-card\">\n {rows.map((e) => {\n const isCredit = e.movement.direction === 'credit'\n const title = e.invoice?.contactName || e.movement.notes || t('financial.summary.transactionsTitle')\n const Icon = categoryIcon(title)\n const category = isCredit ? t('financial.summary.income') : t('financial.summary.expenses')\n const acct = accountName(e.movement.bankAccountId)\n const subtitle = acct ? `${category} · ${acct}` : category\n // FAY-1226: a snapped receipt lives on the invoice metadata.\n const receiptUrl = (e.invoice?.metadata as { receiptUrl?: string } | undefined)?.receiptUrl\n return (\n <div key={e.movement.id} className=\"flex items-center gap-3 px-3 py-2.5\">\n <span\n className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-full ${\n isCredit\n ? 'bg-success-soft text-success-soft-foreground'\n : 'bg-destructive-soft text-destructive-soft-foreground'\n }`}\n >\n <Icon className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"flex items-center gap-1.5 truncate text-sm font-medium\">\n {title}\n {receiptUrl && (\n <Paperclip className=\"h-3 w-3 shrink-0 text-muted-foreground\" aria-label={t('financial.quickTx.receiptAttached')} />\n )}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">{subtitle}</p>\n </div>\n {receiptUrl && (\n <img\n src={receiptUrl}\n alt={t('financial.quickTx.receiptAttached')}\n className=\"h-9 w-9 shrink-0 rounded-md border object-cover\"\n />\n )}\n <span className={`shrink-0 text-sm font-semibold ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {isCredit ? '+' : '-'}{fmt(e.net)}\n </span>\n </div>\n )\n })}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowUpCircle, ArrowDownCircle, ArrowLeftRight, Check, ChevronDown,\n Tag, Wallet, Repeat, Paperclip, CalendarDays, X, Camera,\n} from 'lucide-react'\nimport {\n Modal, ModalContent, Button, DatePicker, toast,\n} from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport type { QuickTransactionType } from '../types'\nimport type { ChartOfAccountsNode, BankAccount } from '../types'\n\n// ---------------------------------------------------------------------------\n// Type theme — the header is context-colored so the user always knows what\n// kind of money they're logging (Mobills: red expense / green income / neutral\n// transfer).\n// ---------------------------------------------------------------------------\n\ninterface TypeTheme {\n header: string // header band background + text\n ring: string // focus/selected accent\n icon: React.ElementType\n}\n\nfunction typeTheme(type: QuickTransactionType): TypeTheme {\n switch (type) {\n case 'income':\n return { header: 'bg-success text-success-foreground', ring: 'ring-success', icon: ArrowDownCircle }\n case 'transfer':\n return { header: 'bg-muted text-foreground', ring: 'ring-ring', icon: ArrowLeftRight }\n case 'expense':\n default:\n return { header: 'bg-destructive text-destructive-foreground', ring: 'ring-destructive', icon: ArrowUpCircle }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Small popover-chip select (category / account). Thumb-friendly rows.\n// ---------------------------------------------------------------------------\n\nfunction ChipSelect({ icon: Icon, label, value, options, onChange, emptyLabel }: {\n icon: React.ElementType\n label: string\n value?: string\n options: Array<{ id: string; name: string; hint?: string }>\n onChange: (id: string | undefined) => void\n emptyLabel: string\n}) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n function onDoc(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n }, [open])\n\n const selected = options.find((o) => o.id === value)\n\n return (\n <div ref={ref} className=\"relative\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"mt-1 flex w-full items-center gap-2 rounded-input border border-input bg-card px-3 py-2.5 text-left text-sm shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] transition-colors hover:bg-muted/30\"\n >\n <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <span className={`flex-1 truncate ${selected ? '' : 'text-muted-foreground'}`}>\n {selected?.name ?? emptyLabel}\n </span>\n <ChevronDown className={`h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute bottom-full left-0 right-0 z-50 mb-1 max-h-56 overflow-auto rounded-lg border bg-popover py-1 shadow-lg\">\n {options.length === 0 ? (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">{emptyLabel}</p>\n ) : (\n <>\n {value != null && (\n <button\n onClick={() => { onChange(undefined); setOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2.5 text-left text-xs text-muted-foreground hover:bg-muted/50\"\n >\n <X className=\"h-3.5 w-3.5\" /> {emptyLabel}\n </button>\n )}\n {options.map((o) => (\n <button\n key={o.id}\n onClick={() => { onChange(o.id); setOpen(false) }}\n className={`flex w-full items-center gap-2 px-3 py-2.5 text-left text-sm hover:bg-muted/50 ${o.id === value ? 'bg-muted/30' : ''}`}\n >\n <span className=\"flex-1 truncate\">{o.name}</span>\n {o.hint && <span className=\"text-[10px] text-muted-foreground\">{o.hint}</span>}\n {o.id === value && <Check className=\"h-3.5 w-3.5 text-primary\" />}\n </button>\n ))}\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Toggle pill\n// ---------------------------------------------------------------------------\n\nfunction TogglePill({ icon: Icon, label, checked, onChange, accent }: {\n icon: React.ElementType\n label: string\n checked: boolean\n onChange: (v: boolean) => void\n accent?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={() => onChange(!checked)}\n className={`flex items-center gap-2 rounded-full border px-3 py-2 text-xs font-medium transition-colors ${\n checked\n ? `border-transparent ${accent ?? 'bg-primary text-primary-foreground'}`\n : 'border-input bg-card text-muted-foreground hover:bg-muted/40'\n }`}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n {label}\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Quick transaction form — responsive (mobile fullscreen sheet / desktop modal)\n// ---------------------------------------------------------------------------\n\nexport function QuickTransactionForm({ open, onOpenChange, defaultType = 'expense', defaultAccountId, focusReceipt = false }: {\n open: boolean\n onOpenChange: (open: boolean) => void\n defaultType?: QuickTransactionType\n /** Preselect an account (e.g. opening from a specific card tile → log an expense against it). */\n defaultAccountId?: string\n /**\n * FAY-1226 \"snap a receipt\": open with the attachment step foregrounded — a\n * prominent capture card at the top of the sheet + auto-open the image picker\n * (mobile offers the camera). Used by the \"Enviar recibo\" entry point.\n */\n focusReceipt?: boolean\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const createQuickTransaction = useFinancialStore((s) => s.createQuickTransaction)\n\n const [type, setType] = useState<QuickTransactionType>(defaultType)\n const [amount, setAmount] = useState(0)\n const [amountStr, setAmountStr] = useState('')\n const [paid, setPaid] = useState(true)\n const [date, setDate] = useState(() => new Date().toISOString().slice(0, 10))\n const [description, setDescription] = useState('')\n const [categoryId, setCategoryId] = useState<string | undefined>()\n const [accountId, setAccountId] = useState<string | undefined>()\n const [toAccountId, setToAccountId] = useState<string | undefined>()\n const [recurring, setRecurring] = useState(false)\n const [saving, setSaving] = useState(false)\n // FAY-1226: the snapped receipt image, held in-memory as a data URL.\n const [receiptUrl, setReceiptUrl] = useState<string | undefined>()\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const [accounts, setAccounts] = useState<BankAccount[]>([])\n const [categories, setCategories] = useState<ChartOfAccountsNode[]>([])\n\n // Reset to a clean slate each time the sheet opens.\n useEffect(() => {\n if (!open) return\n setType(defaultType)\n setAmount(0)\n setAmountStr('')\n setPaid(true)\n setDate(new Date().toISOString().slice(0, 10))\n setDescription('')\n setCategoryId(undefined)\n setAccountId(defaultAccountId)\n setToAccountId(undefined)\n setRecurring(false)\n setReceiptUrl(undefined)\n }, [open, defaultType, defaultAccountId])\n\n // \"Enviar recibo\" flow: auto-open the picker so the user goes straight to the\n // camera/gallery. Fires once per open; harmless if the browser needs a tap.\n useEffect(() => {\n if (open && focusReceipt) {\n const id = window.setTimeout(() => fileInputRef.current?.click(), 250)\n return () => window.clearTimeout(id)\n }\n }, [open, focusReceipt])\n\n // Read the selected image into a data URL (mock has no Supabase bucket).\n function onPickReceipt(e: React.ChangeEvent<HTMLInputElement>) {\n const file = e.target.files?.[0]\n // Reset the input so re-picking the same file still fires onChange.\n e.target.value = ''\n if (!file) return\n if (!file.type.startsWith('image/')) {\n toast.error(t('financial.quickTx.receiptInvalid'))\n return\n }\n const reader = new FileReader()\n reader.onload = () => {\n setReceiptUrl(typeof reader.result === 'string' ? reader.result : undefined)\n // TODO(FAY-1230): Claude-vision OCR auto-fill from the receipt image —\n // prefill amount / merchant (description) / category from `reader.result`.\n }\n reader.onerror = () => toast.error(t('financial.quickTx.receiptInvalid'))\n reader.readAsDataURL(file)\n }\n\n // Load pickers once when opened.\n useEffect(() => {\n if (!open) return\n let cancelled = false\n void (async () => {\n const [accs, coa] = await Promise.all([\n provider.getBankAccounts(),\n provider.getChartOfAccounts().catch(() => [] as ChartOfAccountsNode[]),\n ])\n if (cancelled) return\n setAccounts(accs)\n setCategories(coa)\n setAccountId((prev) => prev ?? accs[0]?.id)\n })()\n return () => { cancelled = true }\n }, [open, provider])\n\n const theme = typeTheme(type)\n const HeaderIcon = theme.icon\n\n const accountOptions = useMemo(\n () => accounts.map((a) => ({ id: a.id, name: a.name, hint: a.accountType === 'credit_card' ? t('financial.quickTx.card') : undefined })),\n [accounts, t],\n )\n const categoryOptions = useMemo(\n () => categories.filter((c) => c.isActive).map((c) => ({ id: c.id, name: c.name, hint: c.code })),\n [categories],\n )\n\n function onAmountChange(raw: string) {\n // Keep digits + a single separator; store the numeric value.\n const cleaned = raw.replace(/[^\\d.,]/g, '').replace(',', '.')\n setAmountStr(raw.replace(/[^\\d.,]/g, ''))\n const n = Number.parseFloat(cleaned)\n setAmount(Number.isFinite(n) ? n : 0)\n }\n\n const canSave =\n amount > 0 &&\n !saving &&\n (type === 'transfer'\n ? !!accountId && !!toAccountId && accountId !== toAccountId\n : true)\n\n async function handleSave() {\n if (!canSave) {\n if (type === 'transfer' && accountId && accountId === toAccountId) {\n toast.error(t('financial.transfer.sameAccount'))\n }\n return\n }\n setSaving(true)\n try {\n await createQuickTransaction({\n type,\n amount,\n date,\n paid: type === 'transfer' ? true : paid,\n description: description || undefined,\n categoryId: type === 'transfer' ? undefined : categoryId,\n bankAccountId: accountId,\n toAccountId: type === 'transfer' ? toAccountId : undefined,\n recurring: type === 'transfer' ? false : recurring,\n receiptUrl: type === 'transfer' ? undefined : receiptUrl,\n })\n onOpenChange(false)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const TYPES: Array<{ id: QuickTransactionType; label: string }> = [\n { id: 'expense', label: t('financial.quickTx.expense') },\n { id: 'income', label: t('financial.quickTx.income') },\n { id: 'transfer', label: t('financial.quickTx.transfer') },\n ]\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size=\"md\" noPadding hideClose className=\"overflow-hidden\">\n {/* Context-colored header */}\n <div className={`${theme.header} shrink-0 px-5 pb-5 pt-5`}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <HeaderIcon className=\"h-5 w-5\" />\n <h2 className=\"text-sm font-semibold\">{t('financial.quickTx.title')}</h2>\n </div>\n <button\n onClick={() => onOpenChange(false)}\n className=\"flex h-7 w-7 items-center justify-center rounded-full opacity-80 transition-colors hover:bg-black/10 hover:opacity-100\"\n aria-label={t('financial.quickTx.close')}\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Type segmented control */}\n <div className=\"mt-4 flex gap-1 rounded-full bg-black/15 p-1\">\n {TYPES.map((ty) => (\n <button\n key={ty.id}\n onClick={() => setType(ty.id)}\n className={`flex-1 rounded-full px-2 py-1.5 text-xs font-medium transition-colors ${\n type === ty.id ? 'bg-white/90 text-foreground shadow-sm' : 'opacity-90 hover:bg-white/10'\n }`}\n >\n {ty.label}\n </button>\n ))}\n </div>\n\n {/* Big amount input */}\n <div className=\"mt-5 flex items-baseline justify-center gap-2\">\n <span className=\"text-xl font-medium opacity-90\">{currency.symbol}</span>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n autoFocus\n value={amountStr}\n onChange={(e) => onAmountChange(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') void handleSave() }}\n placeholder=\"0,00\"\n className=\"w-full max-w-[220px] bg-transparent text-center text-4xl font-bold tracking-tight outline-none placeholder:opacity-40\"\n />\n </div>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 space-y-4 overflow-y-auto px-5 py-5\">\n {/* Paid / not paid (hidden for transfers — always settled) */}\n {type !== 'transfer' && (\n <div className=\"flex items-center justify-between rounded-input border border-input bg-card px-3 py-2.5 shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)]\">\n <span className=\"text-sm font-medium\">\n {type === 'income' ? t('financial.quickTx.received') : t('financial.quickTx.paid')}\n </span>\n <div className=\"flex gap-1\">\n <button\n onClick={() => setPaid(true)}\n className={`rounded-full px-3 py-1 text-xs font-medium transition-colors ${paid ? 'bg-success text-success-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {t('financial.quickTx.yes')}\n </button>\n <button\n onClick={() => setPaid(false)}\n className={`rounded-full px-3 py-1 text-xs font-medium transition-colors ${!paid ? 'bg-warning text-warning-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {t('financial.quickTx.no')}\n </button>\n </div>\n </div>\n )}\n\n {/* Date */}\n <div>\n <span className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <CalendarDays className=\"h-3.5 w-3.5\" /> {t('financial.invoiceForm.date')}\n </span>\n <DatePicker value={date} onChange={setDate} />\n </div>\n\n {/* Description */}\n <div>\n <span className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.description')}</span>\n <input\n type=\"text\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') void handleSave() }}\n placeholder={t('financial.quickTx.descriptionPlaceholder')}\n className=\"mt-1 w-full rounded-input border border-input bg-card px-3 py-2.5 text-sm shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n\n {/* FAY-1226 receipt attachment — snap/attach an image (data URL in mock).\n Hidden picker; `capture=environment` makes mobile offer the camera. */}\n {type !== 'transfer' && (\n <div>\n <span className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Paperclip className=\"h-3.5 w-3.5\" /> {t('financial.quickTx.receipt')}\n </span>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n className=\"hidden\"\n onChange={onPickReceipt}\n />\n {receiptUrl ? (\n <div className=\"flex items-center gap-3 rounded-input border border-input bg-card p-2 shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)]\">\n <img\n src={receiptUrl}\n alt={t('financial.quickTx.receipt')}\n className=\"h-16 w-16 shrink-0 rounded-md border object-cover\"\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{t('financial.quickTx.receiptAttached')}</p>\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className=\"text-xs text-primary hover:underline\"\n >\n {t('financial.quickTx.receiptReplace')}\n </button>\n </div>\n <button\n type=\"button\"\n onClick={() => setReceiptUrl(undefined)}\n aria-label={t('financial.quickTx.receiptRemove')}\n className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className={`flex w-full items-center justify-center gap-2 rounded-input border border-dashed px-3 py-3 text-sm font-medium transition-colors hover:bg-muted/30 ${\n focusReceipt ? 'border-primary text-primary ring-1 ring-primary/30' : 'border-input text-muted-foreground'\n }`}\n >\n <Camera className=\"h-4 w-4\" /> {t('financial.quickTx.receiptCapture')}\n </button>\n )}\n </div>\n )}\n\n {type === 'transfer' ? (\n <div className=\"grid grid-cols-1 gap-3\">\n <ChipSelect\n icon={Wallet}\n label={t('financial.quickTx.fromAccount')}\n value={accountId}\n options={accountOptions}\n onChange={setAccountId}\n emptyLabel={t('financial.quickTx.selectAccount')}\n />\n <ChipSelect\n icon={Wallet}\n label={t('financial.quickTx.toAccount')}\n value={toAccountId}\n options={accountOptions.filter((o) => o.id !== accountId)}\n onChange={setToAccountId}\n emptyLabel={t('financial.quickTx.selectAccount')}\n />\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-3\">\n <ChipSelect\n icon={Tag}\n label={t('financial.quickTx.category')}\n value={categoryId}\n options={categoryOptions}\n onChange={setCategoryId}\n emptyLabel={t('financial.quickTx.selectCategory')}\n />\n <ChipSelect\n icon={Wallet}\n label={t('financial.quickTx.account')}\n value={accountId}\n options={accountOptions}\n onChange={setAccountId}\n emptyLabel={t('financial.quickTx.selectAccount')}\n />\n </div>\n )}\n\n {/* Recurring + attachment (Anexo now opens the receipt picker — FAY-1226) */}\n {type !== 'transfer' && (\n <div className=\"flex flex-wrap gap-2\">\n <TogglePill\n icon={Repeat}\n label={t('financial.quickTx.recurring')}\n checked={recurring}\n onChange={setRecurring}\n />\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n title={t('financial.quickTx.attachment')}\n className={`flex items-center gap-2 rounded-full border px-3 py-2 text-xs font-medium transition-colors ${\n receiptUrl\n ? 'border-transparent bg-primary text-primary-foreground'\n : 'border-input bg-card text-muted-foreground hover:bg-muted/40'\n }`}\n >\n <Paperclip className=\"h-3.5 w-3.5\" /> {t('financial.quickTx.attachment')}\n {receiptUrl && <Check className=\"h-3.5 w-3.5\" />}\n </button>\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex shrink-0 items-center gap-3 border-t px-5 py-3\">\n <span className=\"text-xs text-muted-foreground\">\n {amount > 0 ? formatCurrency(amount, currency) : t('financial.quickTx.enterAmount')}\n </span>\n <Button\n className=\"ml-auto\"\n onClick={() => void handleSave()}\n disabled={!canSave}\n >\n <Check className=\"h-4 w-4\" />\n {saving ? t('financial.quickTx.saving') : t('financial.quickTx.save')}\n </Button>\n </div>\n </ModalContent>\n </Modal>\n )\n}\n","// ---------------------------------------------------------------------------\n// Global quick-add trigger (FAY-1242).\n//\n// A tiny module-level store so a \"log a transaction\" request can be fired from\n// ANYWHERE in the app (e.g. the app shell's elevated center \"+\" bottom-nav\n// button) without a shared React context. The FinancialPage subscribes and\n// opens its QuickTransactionForm when a request arrives; the request is a\n// one-shot (consumed on read) so re-mounting /financial doesn't re-open it.\n//\n// Flow: center \"+\" → openQuickAdd() → navigate to /financial → FinancialPage\n// mounts, sees the pending request, opens the sheet. If already on /financial\n// the subscription fires and the sheet opens instantly.\n// ---------------------------------------------------------------------------\n\nimport * as React from 'react'\nimport type { QuickTransactionType } from './types'\n\nexport interface QuickAddRequest {\n type: QuickTransactionType\n /** Foreground the receipt/attachment step + auto-open the picker. */\n receipt: boolean\n}\n\nlet pending: QuickAddRequest | null = null\nconst listeners = new Set<() => void>()\n\nfunction emit() {\n for (const l of listeners) l()\n}\n\n/** Fire a quick-add request from anywhere. Default = an expense. */\nexport function openQuickAdd(type: QuickTransactionType = 'expense', receipt = false): void {\n pending = { type, receipt }\n emit()\n}\n\n/** Read + clear the pending request (one-shot). */\nexport function consumeQuickAdd(): QuickAddRequest | null {\n const req = pending\n pending = null\n return req\n}\n\nfunction subscribe(cb: () => void): () => void {\n listeners.add(cb)\n return () => {\n listeners.delete(cb)\n }\n}\n\nfunction getSnapshot(): QuickAddRequest | null {\n return pending\n}\n\n/** React binding — returns the pending request (null when none). */\nexport function usePendingQuickAdd(): QuickAddRequest | null {\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { FileText, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, Ban } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { ListView } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, InvoiceStatus, Invoice, ChartOfAccountsNode, CostCenter } from '../types'\n\nconst STATUS_OPTIONS: { value: InvoiceStatus; labelKey: string; color: string; icon: React.ElementType }[] = [\n { value: 'open', labelKey: 'financial.invoice.statusOpen', color: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed },\n { value: 'partial', labelKey: 'financial.invoice.statusPartial', color: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis },\n { value: 'paid', labelKey: 'financial.invoice.statusPaid', color: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig },\n { value: 'overdue', labelKey: 'financial.invoice.statusOverdue', color: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert },\n { value: 'cancelled', labelKey: 'financial.invoice.statusCancelled', color: 'bg-muted text-muted-foreground', icon: Ban },\n]\n\nfunction StatusBadge({ status }: { status: string }) {\n const t = useTranslation()\n const opt = STATUS_OPTIONS.find((o) => o.value === status)\n const Icon = opt?.icon ?? CircleDashed\n return (\n <span className={`inline-flex items-center gap-0.5 rounded-full px-2 py-0.5 text-[10px] font-medium ${opt?.color ?? 'bg-muted text-muted-foreground'}`}>\n <Icon className=\"h-2.5 w-2.5\" /> {opt ? t(opt.labelKey) : status}\n </span>\n )\n}\n\nfunction useInvoiceColumns(currency: { code: string; locale: string; symbol: string }): ColumnDef<Invoice, any>[] {\n const t = useTranslation()\n return useMemo(() => [\n {\n accessorKey: 'fiscalNumber', header: '#', size: 110,\n cell: ({ getValue }) => {\n const num = getValue() as string | undefined\n return num ? <span className=\"text-xs font-mono text-muted-foreground\">#{num}</span> : <span className=\"text-muted-foreground\">—</span>\n },\n },\n {\n accessorKey: 'invoiceDate', header: t('financial.invoice.columnDate'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground text-xs\">{getValue() as string}</span>,\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div onClick={(e) => e.stopPropagation()}>\n {row.original.contactName ? (\n <PersonLink personId={row.original.contactId} name={row.original.contactName} size=\"sm\" className=\"text-sm font-medium\" />\n ) : (\n <p className=\"font-medium\">—</p>\n )}\n {row.original.itemsSummary && <p className=\"text-[10px] text-muted-foreground truncate max-w-[250px]\">{row.original.itemsSummary}</p>}\n </div>\n ),\n },\n {\n accessorKey: 'totalAmount', header: t('financial.invoice.columnAmount'), enableSorting: true,\n cell: ({ row }) => (\n <span className={`font-medium ${row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>\n {formatCurrency(row.original.totalAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'paidAmount', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => (\n <span className={row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : 'text-muted-foreground'}>\n {formatCurrency(row.original.paidAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'status', header: t('financial.invoice.columnStatus'),\n cell: ({ getValue }) => <StatusBadge status={getValue() as string} />,\n },\n {\n accessorKey: 'totalInstallments', header: t('financial.invoice.columnInst'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground\">{getValue() as number}</span>,\n },\n ], [currency, t])\n}\n\nexport function InvoiceListView({ direction, onNew, onEdit }: {\n direction: TransactionDirection\n onNew?: () => void\n onEdit?: (id: string) => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const invoices = useFinancialStore((s) => s.invoices)\n const invoicesTotal = useFinancialStore((s) => s.invoicesTotal)\n const invoicesLoading = useFinancialStore((s) => s.invoicesLoading)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n\n const [search, setSearch] = useState('')\n const [statusFilter, setStatusFilter] = useState<InvoiceStatus[]>([])\n const [accountId, setAccountId] = useState('')\n const [costCenterId, setCostCenterId] = useState('')\n const [accounts, setAccounts] = useState<ChartOfAccountsNode[]>([])\n const [costCenters, setCostCenters] = useState<CostCenter[]>([])\n\n useEffect(() => {\n let active = true\n Promise.all([provider.getChartOfAccounts(), provider.getCostCenters()])\n .then(([accountRows, costCenterRows]) => {\n if (!active) return\n setAccounts(accountRows.filter((account) => account.nodeType === 'leaf'))\n setCostCenters(costCenterRows)\n })\n .catch(() => {\n if (!active) return\n setAccounts([])\n setCostCenters([])\n })\n return () => { active = false }\n }, [provider])\n\n useEffect(() => {\n fetchInvoices({\n direction,\n status: statusFilter.length > 0 ? statusFilter : undefined,\n search: search || undefined,\n accountId: accountId || undefined,\n costCenterId: costCenterId || undefined,\n })\n }, [direction, statusFilter, search, accountId, costCenterId])\n\n const filtered = invoices.filter((inv) => inv.direction === direction)\n const listTitle = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const columns = useInvoiceColumns(currency)\n const tags = useMemo(\n () => STATUS_OPTIONS.filter((o) => o.value !== 'cancelled').map((o) => ({ value: o.value, label: t(o.labelKey) })),\n [t],\n )\n\n // Summary totals from currently visible data\n const summary = useMemo(() => {\n let totalAmount = 0\n let paidAmount = 0\n let openAmount = 0\n for (const inv of filtered) {\n if (inv.status === 'cancelled') continue\n totalAmount += inv.totalAmount\n paidAmount += inv.paidAmount\n }\n openAmount = totalAmount - paidAmount\n return { totalAmount, paidAmount, openAmount }\n }, [filtered])\n\n const receivedLabel = direction === 'debit' ? t('financial.invoice.summaryPaid') : t('financial.invoice.summaryReceived')\n const pendingLabel = direction === 'debit' ? t('financial.invoice.summaryPayable') : t('financial.invoice.summaryReceivable')\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={listTitle}\n subtitle={t('financial.invoice.invoices', { count: filtered.length })}\n />\n {(accounts.length > 0 || costCenters.length > 0) && (\n <div className=\"flex flex-wrap items-end gap-3 rounded-lg border bg-muted/20 px-4 py-3\">\n {accounts.length > 0 && (\n <label className=\"flex min-w-[220px] flex-col gap-1 text-xs font-medium text-muted-foreground\">\n {t('financial.invoice.filterAccount')}\n <select\n className=\"h-9 rounded-md border bg-background px-3 text-sm text-foreground\"\n value={accountId}\n onChange={(event) => setAccountId(event.target.value)}\n >\n <option value=\"\">{t('financial.invoice.filterAllAccounts')}</option>\n {accounts.map((account) => (\n <option key={account.id} value={account.id}>{account.code} - {account.name}</option>\n ))}\n </select>\n </label>\n )}\n {costCenters.length > 0 && (\n <label className=\"flex min-w-[220px] flex-col gap-1 text-xs font-medium text-muted-foreground\">\n {t('financial.invoice.filterCostCenter')}\n <select\n className=\"h-9 rounded-md border bg-background px-3 text-sm text-foreground\"\n value={costCenterId}\n onChange={(event) => setCostCenterId(event.target.value)}\n >\n <option value=\"\">{t('financial.invoice.filterAllCostCenters')}</option>\n {costCenters.map((costCenter) => (\n <option key={costCenter.id} value={costCenter.id}>{costCenter.code} - {costCenter.name}</option>\n ))}\n </select>\n </label>\n )}\n </div>\n )}\n <ListView<Invoice>\n columns={columns}\n data={filtered}\n loading={invoicesLoading}\n searchPlaceholder={t('financial.invoice.searchPlaceholder')}\n search={search}\n onSearchChange={setSearch}\n searchDebounce={0}\n tags={tags}\n activeTag={statusFilter.length === 1 ? statusFilter[0] : undefined}\n onTagChange={(v) => setStatusFilter(v ? [v as InvoiceStatus] : [])}\n newLabel={t('financial.invoice.new')}\n onNew={onNew}\n onRowClick={(row) => onEdit?.(row.id)}\n emptyIcon={FileText}\n emptyMessage={t('financial.invoice.noInvoices')}\n emptyActionLabel={onNew ? t('financial.invoice.createFirst') : undefined}\n onEmptyAction={onNew}\n />\n {filtered.length > 0 && !invoicesLoading && (\n <div className=\"flex items-center justify-end gap-6 rounded-lg border bg-muted/30 px-5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.summaryTotal')}</span>\n <span className=\"font-semibold\">{formatCurrency(summary.totalAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{receivedLabel}</span>\n <span className=\"font-semibold text-success\">{formatCurrency(summary.paidAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{pendingLabel}</span>\n <span className=\"font-semibold text-warning\">{formatCurrency(summary.openAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Plus, Trash2, Search, LayoutList, X, ChevronDown, Percent, Tag, Building2, Check, MoreVertical, Ban } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency } from '../FinancialContext'\nimport { SearchSelect } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { SubpageHeader, useSaveBar, toast } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, CreateInvoiceItemInput, CreateMovementInput } from '../types'\n\n// ---------------------------------------------------------------------------\n// Location / unit selector\n// ---------------------------------------------------------------------------\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nfunction LocationSelector({ locations, value, onChange }: {\n locations: LocationOption[]\n value: string\n onChange: (id: string) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n function handler(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n const selected = locations.find((l) => l.id === value)\n const filtered = locations.filter((l) =>\n !search.trim() || l.name.toLowerCase().includes(search.toLowerCase())\n )\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.unit')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"w-full mt-1 flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm text-left hover:bg-muted/30 transition-colors\"\n >\n <Building2 className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <span className=\"flex-1 truncate\">{selected?.name ?? t('financial.invoiceForm.selectUnit')}</span>\n <ChevronDown className={`h-3 w-3 text-muted-foreground transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 right-0 z-50 mt-1 rounded-lg border bg-popover shadow-lg overflow-hidden min-w-[260px]\">\n <div className=\"flex items-center gap-2 px-3 py-2 border-b\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">{t('financial.invoiceForm.selectUnitTitle')}</span>\n <button onClick={() => setOpen(false)} className=\"ml-auto text-muted-foreground hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n <div className=\"p-2 border-b\">\n <div className=\"flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5\">\n <Search className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <input\n type=\"text\"\n autoFocus\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t('financial.invoiceForm.searchUnit')}\n className=\"flex-1 bg-transparent text-sm outline-none\"\n />\n </div>\n </div>\n <div className=\"max-h-56 overflow-auto py-1\">\n {filtered.map((loc) => (\n <button\n key={loc.id}\n onClick={() => { onChange(loc.id); setOpen(false); setSearch('') }}\n className={`w-full flex items-center gap-3 px-3 py-2.5 text-left hover:bg-muted/50 transition-colors ${\n loc.id === value ? 'bg-muted/30' : ''\n }`}\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-muted shrink-0\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium truncate\">{loc.name}</p>\n {loc.isHQ && <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoiceForm.headquarters')}</p>}\n </div>\n </button>\n ))}\n {filtered.length === 0 && (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">{t('financial.invoiceForm.noUnitsFound')}</p>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ID helper\n// ---------------------------------------------------------------------------\n\nlet formId = 1\nfunction fid(): string { return `f${formId++}` }\n\n// ---------------------------------------------------------------------------\n// Item row — compact by default, expandable for details\n// ---------------------------------------------------------------------------\n\ninterface FormItem extends CreateInvoiceItemInput {\n _id: string\n}\n\nfunction ItemRow({ item, index, itemTypes, currency, expanded, onToggle, onUpdate, onRemove, entityLookups, showTypeSelector }: {\n item: FormItem\n index: number\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n currency: { code: string; locale: string; symbol: string }\n expanded: boolean\n onToggle: () => void\n onUpdate: (data: Partial<FormItem>) => void\n onRemove: () => void\n entityLookups: EntityLookupMap\n /** Whether to show the per-row Service/Product/Other type pills. Hidden when no item type is lookup-backed. */\n showTypeSelector: boolean\n}) {\n const t = useTranslation()\n const total = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n const kindLabel = itemTypes.find((tp) => tp.value === item.itemKind)?.label ?? item.itemKind\n const hasAdjustments = (item.discount ?? 0) > 0 || (item.surcharge ?? 0) > 0\n const [showAdjustments, setShowAdjustments] = useState(hasAdjustments)\n\n // Enter in any of the row's edit fields commits the row (same as \"Done\").\n function handleFieldKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onToggle()\n }\n }\n\n return (\n <div className=\"border-b last:border-0\">\n {/* Compact row — always visible */}\n <div\n className=\"flex items-center gap-2 px-4 py-3 cursor-pointer hover:bg-muted/30 transition-colors group\"\n onClick={onToggle}\n >\n <ChevronDown className={`h-3 w-3 text-muted-foreground shrink-0 transition-transform ${expanded ? 'rotate-0' : '-rotate-90'}`} />\n <span className=\"text-[10px] font-medium text-muted-foreground w-5 shrink-0\">{index + 1}.</span>\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground shrink-0\">\n {kindLabel}\n </span>\n <span className=\"text-sm truncate flex-1 min-w-0\">{item.description || <span className=\"text-muted-foreground italic\">{t('financial.invoiceForm.noDescription')}</span>}</span>\n <span className=\"text-xs text-muted-foreground shrink-0\">{item.quantity} x {formatCurrency(item.unitPrice, currency)}</span>\n {hasAdjustments && <Tag className=\"h-3 w-3 text-warning shrink-0\" />}\n <span className=\"text-sm font-semibold shrink-0 min-w-[80px] text-right\">{formatCurrency(total, currency)}</span>\n <button\n onClick={(e) => { e.stopPropagation(); onRemove() }}\n className=\"p-1 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-destructive transition-all shrink-0\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n </div>\n\n {/* Expanded detail — edit fields */}\n {expanded && (\n <div className=\"px-4 pb-4 pt-1 ml-8 space-y-3 bg-muted/10\">\n {/* Type selector — hidden when no item type is lookup-backed (manual-only entry) */}\n {showTypeSelector && (\n <div className=\"flex gap-1.5\">\n {itemTypes.map((tp) => (\n <button\n key={tp.value}\n onClick={() => onUpdate({ itemKind: tp.value })}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors ${\n item.itemKind === tp.value\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {tp.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Main fields */}\n <div className=\"grid gap-3 grid-cols-12\">\n <div className=\"col-span-6 sm:col-span-7\">\n {entityLookups[item.itemKind] ? (\n <SearchSelect\n label={t('financial.invoiceForm.item')}\n value={item.referenceId ?? ''}\n displayValue={item.description}\n loadOnOpen\n onChange={(id, opt) => {\n const price = (opt?.data as any)?.price\n onUpdate({\n referenceId: id || undefined,\n description: opt?.label ?? '',\n ...(price != null ? { unitPrice: price } : {}),\n })\n }}\n onSearch={async (q) => {\n const results = await entityLookups[item.itemKind].search(q)\n return results.map((r) => ({\n id: r.id,\n label: r.label,\n subtitle: r.subtitle,\n group: r.group,\n data: r,\n }))\n }}\n placeholder={`Search ${itemTypes.find((tp) => tp.value === item.itemKind)?.label?.toLowerCase() ?? 'item'}...`}\n renderOption={(opt) => (\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">{opt.label}</p>\n {opt.subtitle && <p className=\"text-[10px] text-muted-foreground\">{opt.subtitle}</p>}\n </div>\n )}\n />\n ) : (\n <>\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.description')}</label>\n <input\n type=\"text\"\n value={item.description}\n onChange={(e) => onUpdate({ description: e.target.value })}\n onKeyDown={handleFieldKeyDown}\n placeholder={t('financial.invoiceForm.itemDescription')}\n autoFocus\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </>\n )}\n </div>\n <div className=\"col-span-2 sm:col-span-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.qty')}</label>\n <input\n type=\"number\"\n min={1}\n value={item.quantity}\n onChange={(e) => onUpdate({ quantity: Number(e.target.value) || 1 })}\n onKeyDown={handleFieldKeyDown}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-sm text-center focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n <div className=\"col-span-4\" onKeyDown={handleFieldKeyDown}>\n <CurrencyInput\n label={t('financial.invoiceForm.unitPrice')}\n value={item.unitPrice}\n onChange={(v) => onUpdate({ unitPrice: v })}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n </div>\n </div>\n\n {/* Optional adjustments toggle */}\n {!showAdjustments ? (\n <button\n onClick={() => setShowAdjustments(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.discountSurcharge')}\n </button>\n ) : (\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.discount')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.discount ?? 0}\n onChange={(e) => onUpdate({ discount: Number(e.target.value) || 0 })}\n onKeyDown={handleFieldKeyDown}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.surcharge')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.surcharge ?? 0}\n onChange={(e) => onUpdate({ surcharge: Number(e.target.value) || 0 })}\n onKeyDown={handleFieldKeyDown}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <button\n onClick={() => { onUpdate({ discount: 0, surcharge: 0 }); setShowAdjustments(false) }}\n className=\"mt-3 p-1 text-muted-foreground hover:text-destructive transition-colors\"\n title={t('financial.invoiceForm.removeAdjustments')}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n\n {/* Done — collapse row */}\n <div className=\"flex justify-end pt-1\">\n <button\n onClick={onToggle}\n className=\"inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-[11px] text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors\"\n >\n <Check className=\"h-3 w-3\" /> {t('financial.invoiceForm.done')}\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Type selector step — shown when adding a new item\n// ---------------------------------------------------------------------------\n\nfunction AddItemStep({ itemTypes, onSelect, onCancel }: {\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n onSelect: (kind: string) => void\n onCancel: () => void\n}) {\n const t = useTranslation()\n return (\n <div className=\"border-b px-4 py-3 bg-primary/5 animate-in fade-in-0 slide-in-from-top-1\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">{t('financial.invoiceForm.selectItemType')}</p>\n <div className=\"flex gap-2 flex-wrap\">\n {itemTypes.map((t) => (\n <button\n key={t.value}\n onClick={() => onSelect(t.value)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border-2 border-transparent bg-card px-4 py-2 text-sm font-medium shadow-sm hover:border-primary hover:shadow-md transition-all\"\n >\n {t.label}\n </button>\n ))}\n <button\n onClick={onCancel}\n className=\"inline-flex items-center rounded-lg px-3 py-2 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.invoiceForm.cancel')}\n </button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Installment form\n// ---------------------------------------------------------------------------\n\ninterface FormInstallment {\n _id: string\n amount: number\n dueDate: string\n}\n\n// ---------------------------------------------------------------------------\n// Invoice form view\n// ---------------------------------------------------------------------------\n\nexport function InvoiceFormView({ direction, editId, onSaved }: {\n direction: TransactionDirection\n editId?: string\n onSaved?: (id?: string) => void\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency, itemTypes, locations } = config\n const provider = useFinancialProvider()\n\n // Whether any item type is backed by an entity lookup (product/service catalog).\n // When none are, item entry is manual-only: skip the type-select step and add\n // an \"Other\" line directly so the user can type the description right away.\n const hasItemLookups = itemTypes.some((tp) => config.entityLookups[tp.value])\n const defaultItemKind =\n itemTypes.find((tp) => tp.value === 'other')?.value ??\n itemTypes.find((tp) => !config.entityLookups[tp.value])?.value ??\n itemTypes[0]?.value ??\n 'other'\n const createInvoice = useFinancialStore((s) => s.createInvoice)\n const hasLocations = locations.length > 0\n const isEdit = !!editId\n\n const [loaded, setLoaded] = useState(!editId)\n const [loading, setLoading] = useState(!!editId)\n const [contactName, setContactName] = useState('')\n const [contactId, setContactId] = useState<string | undefined>()\n const [unitId, setUnitId] = useState(locations[0]?.id ?? '')\n const [invoiceDate, setInvoiceDate] = useState(new Date().toISOString().slice(0, 10))\n const [fiscalNumber, setFiscalNumber] = useState('')\n const [observations, setObservations] = useState('')\n const [items, setItems] = useState<FormItem[]>([])\n const [expandedItemId, setExpandedItemId] = useState<string | null>(null)\n const [addingItem, setAddingItem] = useState(false)\n const [installments, setInstallments] = useState<FormInstallment[]>([])\n const [saving, setSaving] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function handleCancelInvoice() {\n if (!editId) return\n setCancelling(true)\n try {\n await cancelInvoice(editId)\n onSaved?.()\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n // Load existing invoice for edit mode\n useEffect(() => {\n if (!editId || loaded) return\n setLoading(true)\n ;(async () => {\n const invoice = await provider.getInvoiceById(editId)\n if (!invoice) return\n setContactName(invoice.contactName ?? '')\n setContactId(invoice.contactId)\n setUnitId(invoice.unitId ?? locations[0]?.id ?? '')\n setInvoiceDate(invoice.invoiceDate)\n setFiscalNumber(invoice.fiscalNumber ?? '')\n setObservations(invoice.observations ?? '')\n\n const invoiceItems = await provider.getInvoiceItems(editId)\n setItems(invoiceItems.map((it) => ({\n _id: fid(),\n itemKind: it.itemKind,\n referenceId: it.referenceId,\n description: it.description,\n quantity: it.quantity,\n unitPrice: it.unitPrice,\n discount: it.discount,\n surcharge: it.surcharge,\n })))\n\n const movements = await provider.getMovements({ direction: invoice.direction })\n const invoiceMovements = movements.data\n .filter((m) => m.invoiceId === editId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n setInstallments(invoiceMovements.map((m) => ({\n _id: fid(),\n amount: m.amount,\n dueDate: m.dueDate,\n })))\n\n setLoaded(true)\n setLoading(false)\n })()\n }, [editId])\n\n const totalAmount = items.reduce((sum, it) => {\n return sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0)\n }, 0)\n\n // Auto-generate 1x installment when first item is added\n const prevItemCount = useRef(items.length)\n useEffect(() => {\n if (items.length > 0 && prevItemCount.current === 0 && installments.length === 0 && !isEdit) {\n // First item added — generate 1x installment\n const total = items.reduce((sum, it) => sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0), 0)\n if (total > 0) {\n setInstallments([{ _id: fid(), amount: total, dueDate: invoiceDate }])\n }\n }\n prevItemCount.current = items.length\n }, [items.length])\n\n // Recalculate installment amounts when total changes\n useEffect(() => {\n if (installments.length > 0 && totalAmount > 0 && !isEdit) {\n const count = installments.length\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n setInstallments((prev) => prev.map((inst, i) => ({\n ...inst,\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n })))\n }\n }, [totalAmount])\n\n function addItemOfKind(kind: string) {\n const newItem: FormItem = {\n _id: fid(),\n itemKind: kind,\n description: '',\n quantity: 1,\n unitPrice: 0,\n }\n setItems([...items, newItem])\n setExpandedItemId(newItem._id)\n setAddingItem(false)\n }\n\n // Entry point for the \"Add Item\" / \"Add your first item\" buttons. With\n // lookup-backed types we ask which type first; otherwise we add an \"Other\"\n // line straight away so the user types directly.\n function startAddItem() {\n if (hasItemLookups) setAddingItem(true)\n else addItemOfKind(defaultItemKind)\n }\n\n function updateItem(id: string, data: Partial<FormItem>) {\n setItems(items.map((it) => it._id === id ? { ...it, ...data } : it))\n }\n\n function removeItem(id: string) {\n setItems(items.filter((it) => it._id !== id))\n }\n\n function generateInstallments(count: number) {\n if (count < 1 || totalAmount <= 0) return\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n const base = new Date(invoiceDate)\n const inst: FormInstallment[] = []\n for (let i = 0; i < count; i++) {\n const due = new Date(base)\n due.setMonth(due.getMonth() + i + 1)\n inst.push({\n _id: fid(),\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n dueDate: due.toISOString().slice(0, 10),\n })\n }\n setInstallments(inst)\n }\n\n async function handleSave() {\n if (items.length === 0) { toast.error(t('common.formIncomplete')); return }\n setSaving(true)\n try {\n const movInputs: CreateMovementInput[] = installments.map((inst, i) => ({\n direction,\n movementKind: 'bill' as const,\n amount: inst.amount,\n dueDate: inst.dueDate,\n installmentNumber: i + 1,\n }))\n\n if (movInputs.length === 0) {\n movInputs.push({\n direction,\n movementKind: 'bill',\n amount: totalAmount,\n dueDate: invoiceDate,\n installmentNumber: 1,\n })\n }\n\n if (isEdit && editId) {\n await provider.updateInvoice(editId, {\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n totalAmount,\n })\n onSaved?.(editId)\n } else {\n const invoice = await createInvoice({\n direction,\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n items: items.map(({ _id, ...rest }) => rest),\n installments: movInputs,\n })\n onSaved?.(invoice.id)\n }\n } finally {\n setSaving(false)\n }\n }\n\n const fields = {\n contactName,\n contactId,\n unitId,\n invoiceDate,\n fiscalNumber,\n observations,\n items: items.map(({ _id, ...rest }) => rest),\n installments: installments.map(({ _id, ...rest }) => rest),\n }\n const snapshot = useRef<string | null>(null)\n useEffect(() => {\n if (loaded && snapshot.current === null) snapshot.current = JSON.stringify(fields)\n }, [loaded])\n const dirty = snapshot.current !== null && JSON.stringify(fields) !== snapshot.current\n useSaveBar({\n dirty,\n saving,\n onSave: () => { void handleSave() },\n onDiscard: () => onSaved?.(),\n saveLabel: t('financial.invoiceForm.save'),\n })\n\n const title = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const subtitle = isEdit ? t('financial.invoiceForm.editing') : t('financial.invoiceForm.creating')\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader\n title={title}\n subtitle={subtitle}\n onBack={onSaved}\n parentLabel={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')}\n actions={\n isEdit ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\" ref={menuRef}>\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setMenuOpen(!menuOpen)}\n aria-label=\"More actions\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoiceForm.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n </div>\n ) : null\n }\n />\n\n {/* Top fields: Pay to + Unit + Date + Fiscal Number */}\n <div className=\"rounded-lg border bg-card shadow-sm p-5\">\n <div className={`grid gap-4 ${hasLocations ? 'sm:grid-cols-12' : 'sm:grid-cols-10'}`}>\n <div className={hasLocations ? 'sm:col-span-4' : 'sm:col-span-4'}>\n <SearchSelect\n label={direction === 'debit' ? t('financial.invoiceForm.payTo') : t('financial.invoiceForm.receiveFrom')}\n required\n value={contactId ?? ''}\n displayValue={contactName}\n onChange={(id, opt) => { setContactId(id || undefined); setContactName(opt?.label ?? '') }}\n onSearch={async (q) => {\n if (!config.contactLookup) return []\n const results = await config.contactLookup.search(q)\n return results.map((r) => ({ id: r.id, label: r.label, subtitle: r.subtitle, group: r.group, data: r }))\n }}\n placeholder={t('financial.invoiceForm.searchType')}\n />\n </div>\n {hasLocations && (\n <div className=\"sm:col-span-3\">\n <LocationSelector\n locations={locations}\n value={unitId}\n onChange={setUnitId}\n />\n </div>\n )}\n <div className={hasLocations ? 'sm:col-span-2' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.date')}</label>\n <DatePicker value={invoiceDate} onChange={setInvoiceDate} className=\"mt-1\" />\n </div>\n <div className={hasLocations ? 'sm:col-span-3' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.fiscalNumber')}</label>\n <input\n type=\"text\"\n value={fiscalNumber}\n onChange={(e) => setFiscalNumber(e.target.value)}\n placeholder={t('financial.invoiceForm.fiscalNumber')}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n </div>\n </div>\n\n {/* Items + Installments side by side */}\n {loading ? (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-2 py-3\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-8 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 flex-1 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-20 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.installments')}</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"rounded border p-2.5 space-y-2\">\n <div className=\"flex justify-between\">\n <div className=\"h-3 w-6 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n <div className=\"h-7 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n {/* Items (left 2/3) */}\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n <button\n onClick={startAddItem}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.addItem')}\n </button>\n </div>\n\n {/* Content area — grows to push footer down */}\n <div className=\"flex-1\">\n {/* Type selector step */}\n {addingItem && (\n <AddItemStep\n itemTypes={itemTypes}\n onSelect={addItemOfKind}\n onCancel={() => setAddingItem(false)}\n />\n )}\n\n {/* Item rows */}\n {items.length === 0 && !addingItem ? (\n <div className=\"py-10 text-center\">\n <LayoutList className=\"h-8 w-8 text-muted-foreground/30 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoiceForm.noItems')}</p>\n <button onClick={startAddItem} className=\"text-xs text-primary hover:underline mt-1\">\n {t('financial.invoiceForm.addFirstItem')}\n </button>\n </div>\n ) : (\n items.map((item, i) => (\n <ItemRow\n key={item._id}\n item={item}\n index={i}\n itemTypes={itemTypes}\n currency={currency}\n expanded={expandedItemId === item._id}\n onToggle={() => setExpandedItemId(expandedItemId === item._id ? null : item._id)}\n onUpdate={(data) => updateItem(item._id, data)}\n onRemove={() => { removeItem(item._id); if (expandedItemId === item._id) setExpandedItemId(null) }}\n entityLookups={config.entityLookups}\n showTypeSelector={hasItemLookups}\n />\n ))\n )}\n </div>\n\n {/* Footer total — sticks to bottom */}\n {items.length > 0 && (\n <div className=\"px-4 py-3 border-t bg-muted/20 flex justify-between items-center mt-auto\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.itemCount', { count: items.length, plural: items.length !== 1 ? 's' : '' })}</span>\n <div className=\"text-right\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.total')} </span>\n <span className=\"text-lg font-bold\">{formatCurrency(totalAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n\n {/* Installments (right 1/3) */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">Installments</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {/* Quick split buttons */}\n <div className=\"flex gap-1.5 flex-wrap\">\n {[1, 2, 3, 6, 12].map((n) => (\n <button\n key={n}\n onClick={() => generateInstallments(n)}\n disabled={totalAmount <= 0}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors disabled:opacity-30 ${\n installments.length === n\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {n}x\n </button>\n ))}\n </div>\n\n {installments.length === 0 ? (\n <p className=\"text-xs text-muted-foreground py-4 text-center\">\n {totalAmount <= 0 ? t('financial.invoiceForm.addItemsFirst') : t('financial.invoiceForm.selectInstallments')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {installments.map((inst, i) => (\n <div key={inst._id} className=\"rounded border p-2.5 space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] font-medium text-muted-foreground\">#{i + 1}</span>\n <span className=\"text-sm font-semibold\">{formatCurrency(inst.amount, currency)}</span>\n </div>\n <DatePicker\n value={inst.dueDate}\n onChange={(v) => {\n const updated = [...installments]\n updated[i] = { ...inst, dueDate: v }\n setInstallments(updated)\n }}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Observations */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.observations')}</label>\n <textarea\n value={observations}\n onChange={(e) => setObservations(e.target.value)}\n placeholder={t('financial.invoiceForm.additionalNotes')}\n rows={2}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring resize-none\"\n />\n </div>\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoiceForm.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoiceForm.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancelInvoice} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoiceForm.cancelling') : t('financial.invoiceForm.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","import React, { useState, useEffect, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, Check, Banknote, QrCode, CreditCard, Building2, ArrowRightLeft, FileCheck, Pencil } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { FinancialMovement, PaymentMethodType, BankAccountType } from '../types'\n\n// Which bank-account types make sense for each payment type — mirrors beautyplace's\n// payment_method_types.allowed_account_types. Used to filter + default the destination\n// account so every payment lands in a real account (and shows up in that account's extract).\nconst ACCOUNT_TYPES_FOR_TX: Record<string, BankAccountType[]> = {\n cash: ['cash_register'],\n credit_card: ['credit_card', 'bank_account'],\n debit_card: ['bank_account', 'cash_register'],\n pix: ['bank_account', 'digital_wallet'],\n bank_transfer: ['bank_account'],\n check: ['bank_account'],\n voucher: ['bank_account', 'digital_wallet'],\n}\n\nconst TYPE_ICONS: Record<string, React.ElementType> = {\n cash: Banknote,\n pix: QrCode,\n credit_card: CreditCard,\n debit_card: CreditCard,\n bank_transfer: ArrowRightLeft,\n check: FileCheck,\n}\n\nconst TYPE_COLORS: Record<string, string> = {\n cash: 'border-success/30 bg-success/5 hover:bg-success/10 data-[active=true]:border-success data-[active=true]:bg-success/15',\n pix: 'border-teal-500/30 bg-teal-500/5 hover:bg-teal-500/10 data-[active=true]:border-teal-500 data-[active=true]:bg-teal-500/15',\n credit_card: 'border-info/30 bg-info/5 hover:bg-info/10 data-[active=true]:border-info data-[active=true]:bg-info/15',\n debit_card: 'border-magic/30 bg-magic/5 hover:bg-magic/10 data-[active=true]:border-magic data-[active=true]:bg-magic/15',\n bank_transfer: 'border-warning/30 bg-warning/5 hover:bg-warning/10 data-[active=true]:border-warning data-[active=true]:bg-warning/15',\n check: 'border-border bg-muted/40 hover:bg-muted/60 data-[active=true]:border-foreground data-[active=true]:bg-muted',\n}\n\nconst ICON_COLORS: Record<string, string> = {\n cash: 'text-success',\n pix: 'text-teal-500',\n credit_card: 'text-info',\n debit_card: 'text-magic',\n bank_transfer: 'text-warning',\n check: 'text-muted-foreground',\n}\n\nexport function PaymentModal({ movement, onClose, onPaid }: {\n movement: FinancialMovement\n onClose: () => void\n onPaid: () => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const payMovement = useFinancialStore((s) => s.payMovement)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n\n const remaining = movement.amount - movement.paidAmount\n const [amount, setAmount] = useState(remaining)\n const [paymentDate, setPaymentDate] = useState(new Date().toISOString().slice(0, 10))\n const [selectedTypeId, setSelectedTypeId] = useState('')\n const [paymentMethodId, setPaymentMethodId] = useState('')\n const [bankAccountId, setBankAccountId] = useState('')\n const [cardBrand, setCardBrand] = useState('')\n const [cardInstallments, setCardInstallments] = useState(1)\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n const [expandMethodPicker, setExpandMethodPicker] = useState(true)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchPaymentMethods()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n const selectedType = useMemo(() =>\n paymentMethodTypes.find((tp) => tp.id === selectedTypeId),\n [paymentMethodTypes, selectedTypeId]\n )\n\n const txType = selectedType?.transactionType ?? ''\n\n const filteredMethods = useMemo(() =>\n paymentMethods.filter((m) => m.paymentMethodTypeId === selectedTypeId),\n [paymentMethods, selectedTypeId]\n )\n\n const needsCard = txType === 'credit_card' || txType === 'debit_card'\n const needsCardInstallments = txType === 'credit_card'\n\n // Accounts eligible for the selected payment type. Prefer the type's configured\n // allowedAccountTypes, else the tx-type mapping, else all active accounts.\n const eligibleAccounts = useMemo(() => {\n const allowed = (selectedType?.allowedAccountTypes && selectedType.allowedAccountTypes.length)\n ? selectedType.allowedAccountTypes\n : ACCOUNT_TYPES_FOR_TX[txType]\n if (!allowed || !allowed.length) return bankAccounts\n const filtered = bankAccounts.filter((a) => allowed.includes(a.accountType))\n return filtered.length ? filtered : bankAccounts\n }, [bankAccounts, selectedType, txType])\n\n // Auto-pick a sensible destination account so the payment is always linked to one.\n useEffect(() => {\n if (selectedTypeId && !bankAccountId && eligibleAccounts.length) {\n setBankAccountId(eligibleAccounts[0].id)\n }\n }, [selectedTypeId, eligibleAccounts])\n\n function handleSelectType(typeId: string) {\n setSelectedTypeId(typeId)\n setExpandMethodPicker(false)\n setPaymentMethodId('')\n setBankAccountId('')\n setCardBrand('')\n setCardInstallments(1)\n }\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n // Enter anywhere in the modal submits (unless typing in a textarea / Shift+Enter).\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'Enter' || e.shiftKey) return\n if ((e.target as HTMLElement).tagName === 'TEXTAREA') return\n e.preventDefault()\n if (amount > 0 && selectedTypeId && bankAccountId && !saving) void handlePay()\n }\n\n async function handlePay() {\n if (amount <= 0 || !selectedTypeId || !bankAccountId) return\n setSaving(true)\n try {\n await payMovement({\n movementId: movement.id,\n amount,\n paymentDate,\n paymentMethodId: paymentMethodId || undefined,\n paymentMethodTypeId: selectedTypeId || undefined,\n bankAccountId: bankAccountId || undefined,\n cardBrand: needsCard ? cardBrand || undefined : undefined,\n cardInstallments: needsCardInstallments ? cardInstallments : undefined,\n notes: notes.trim() || undefined,\n })\n setVisible(false)\n setTimeout(onPaid, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const SelectedIcon = selectedType ? (TYPE_ICONS[txType] ?? Banknote) : null\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{\n opacity: visible ? 1 : 0,\n transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)',\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b sticky top-0 bg-card z-10\">\n <div>\n <h3 className=\"text-base font-semibold\">{t('financial.payment.title')}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.payment.installment', { number: String(movement.installmentNumber ?? 1) })} · {t('financial.payment.remaining', { amount: formatCurrency(remaining, currency) })}\n </p>\n </div>\n <button onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n {/* Payment method type selector */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.method')}</label>\n\n {/* Collapsed: show selected as inline chip */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: selectedTypeId && !expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {selectedType && (\n <button\n onClick={() => setExpandMethodPicker(true)}\n className={`flex items-center gap-2 mt-1.5 w-full rounded-lg border px-3 py-2.5 text-left transition-colors hover:bg-muted/30 ${TYPE_COLORS[txType] ?? ''}`}\n data-active=\"true\"\n >\n {SelectedIcon && <SelectedIcon className={`h-4 w-4 ${ICON_COLORS[txType] ?? ''}`} />}\n <span className=\"text-sm font-medium flex-1\">{selectedType?.name}</span>\n <Pencil className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Expanded: full grid */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {paymentMethodTypes.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-input bg-muted/30 px-3 py-3 text-center mt-1.5\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.payment.noMethods')}</p>\n <a href=\"#/financial/settings\" className=\"mt-1.5 inline-block text-xs font-medium text-primary hover:underline\">\n {t('financial.payment.configureMethods')} →\n </a>\n </div>\n ) : (\n <div className=\"grid grid-cols-3 gap-2 mt-1.5\">\n {paymentMethodTypes.map((type) => {\n const tt = type.transactionType ?? ''\n const Icon = TYPE_ICONS[tt] ?? Banknote\n const isActive = selectedTypeId === type.id\n return (\n <button\n key={type.id}\n data-active={isActive}\n onClick={() => handleSelectType(type.id)}\n className={`flex flex-col items-center gap-1.5 rounded-lg border px-2 py-3 text-center transition-all ${TYPE_COLORS[tt] ?? TYPE_COLORS.cash}`}\n >\n <Icon className={`h-5 w-5 ${isActive ? ICON_COLORS[tt] ?? '' : 'text-muted-foreground'}`} />\n <span className={`text-[11px] font-medium leading-tight ${isActive ? 'text-foreground' : 'text-muted-foreground'}`}>{type.name}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Form fields — only after method selected */}\n {selectedTypeId && (\n <div key={selectedTypeId} className=\"space-y-4\">\n {/* Amount + Date side by side */}\n <div className=\"grid grid-cols-2 gap-3 stagger-field\" style={{ animationDelay: '0ms' }}>\n <CurrencyInput\n label={t('financial.payment.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.date')}</label>\n <DatePicker value={paymentDate} onChange={setPaymentDate} className=\"mt-1\" />\n </div>\n </div>\n\n {/* Specific payment method */}\n {filteredMethods.length > 0 && (\n <div className=\"stagger-field\" style={{ animationDelay: '50ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {needsCard ? t('financial.payment.card') : t('financial.payment.account')}\n </label>\n <select value={paymentMethodId} onChange={(e) => setPaymentMethodId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.select')}</option>\n {filteredMethods.map((m) => <option key={m.id} value={m.id}>{m.name}</option>)}\n </select>\n </div>\n )}\n\n {/* Card fields side by side */}\n {needsCard && (\n <div className={`grid gap-3 stagger-field ${needsCardInstallments ? 'grid-cols-2' : 'grid-cols-1'}`} style={{ animationDelay: '100ms' }}>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardBrand')}</label>\n <select value={cardBrand} onChange={(e) => setCardBrand(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectBrand')}</option>\n {['Visa', 'Mastercard', 'American Express', 'Elo', 'Hipercard', 'Diners Club'].map((b) => (\n <option key={b} value={b}>{b}</option>\n ))}\n </select>\n </div>\n {needsCardInstallments && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardInstallments')}</label>\n <select value={cardInstallments} onChange={(e) => setCardInstallments(Number(e.target.value))} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n {Array.from({ length: 12 }, (_, i) => i + 1).map((n) => (\n <option key={n} value={n}>{n}x {n > 1 ? formatCurrency(amount / n, currency) : ''}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n )}\n\n {/* Destination account — always shown so every payment links to an account */}\n <div className=\"stagger-field\" style={{ animationDelay: '100ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.bankAccount')}</label>\n {eligibleAccounts.length === 0 ? (\n <div className=\"mt-1 rounded-lg border border-dashed border-input bg-muted/30 px-3 py-2.5 text-center\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.payment.noAccounts')}</p>\n <a href=\"#/settings/financial/bank-accounts\" className=\"mt-1 inline-block text-xs font-medium text-primary hover:underline\">\n {t('financial.payment.configureAccounts')} →\n </a>\n </div>\n ) : (\n <select value={bankAccountId} onChange={(e) => setBankAccountId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectAccount')}</option>\n {eligibleAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n )}\n </div>\n\n {/* Notes */}\n <div className=\"stagger-field\" style={{ animationDelay: '150ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.notes')}</label>\n <input type=\"text\" value={notes} onChange={(e) => setNotes(e.target.value)} placeholder={t('financial.payment.optionalNotes')} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\" />\n </div>\n </div>\n )}\n </div>\n\n {/* Keyframe for staggered field entrance */}\n <style>{`\n .stagger-field {\n animation: field-slide-in 250ms ease-out both;\n }\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t sticky bottom-0 bg-card\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.payment.cancel')}\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handlePay}\n disabled={amount <= 0 || !selectedTypeId || !bankAccountId || saving}\n >\n <Check className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.payment.processing') : t('financial.payment.payAmount', { amount: formatCurrency(amount, currency) })}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )\n}\n","import React, { useEffect, useState, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Pencil, DollarSign, FileText, Calendar, Hash, User, X, MoreVertical, Ban, ChevronDown, CreditCard, Banknote, Building2, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, CalendarDays, ExternalLink } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader, DataTable } from '@fayz-ai/ui'\nimport { PaymentModal } from '../components/PaymentModal'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\nimport type { Invoice, InvoiceItem, FinancialMovement, TransactionDirection } from '../types'\n\nconst STATUS_COLORS: Record<string, { bg: string; icon: React.ElementType; labelKey: string }> = {\n open: { bg: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusOpen' },\n pending: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusPending' },\n partial: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis, labelKey: 'financial.invoice.statusPartial' },\n paid: { bg: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig, labelKey: 'financial.invoice.statusPaid' },\n overdue: { bg: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert, labelKey: 'financial.invoice.statusOverdue' },\n draft: { bg: 'bg-muted text-muted-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusDraft' },\n cancelled: { bg: 'bg-muted text-muted-foreground', icon: Ban, labelKey: 'financial.invoice.statusCancelled' },\n}\n\nexport function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel }: {\n invoiceId: string\n direction: TransactionDirection\n onBack: () => void\n onEdit: () => void\n /** Label for the back link — defaults to the invoice's parent list (payables/receivables). */\n backLabel?: string\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency } = config\n // Back link target: where the user actually came from, else the parent list.\n const parentLabel = backLabel ?? (direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables'))\n const provider = useFinancialProvider()\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const [detailsLoaded, setDetailsLoaded] = useState(false)\n const [detailsLoading, setDetailsLoading] = useState(false)\n\n const [invoice, setInvoice] = useState<Invoice | null>(null)\n const [items, setItems] = useState<InvoiceItem[]>([])\n const [movements, setMovements] = useState<FinancialMovement[]>([])\n const [payments, setPayments] = useState<FinancialMovement[]>([])\n const [loading, setLoading] = useState(true)\n const [payingMovement, setPayingMovement] = useState<FinancialMovement | null>(null)\n const [expandedMovId, setExpandedMovId] = useState<string | null>(null)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n async function loadData() {\n setLoading(true)\n const [inv, invItems, movResult] = await Promise.all([\n provider.getInvoiceById(invoiceId),\n provider.getInvoiceItems(invoiceId),\n provider.getMovements({ direction }),\n ])\n setInvoice(inv)\n setItems(invItems)\n setMovements(\n movResult.data\n .filter((m) => m.invoiceId === invoiceId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n )\n // Individual cash events (one row per payment) — listed under each installment.\n setPayments(\n movResult.data\n .filter((m) => m.invoiceId === invoiceId && m.movementKind === 'payment')\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? ''))\n )\n setLoading(false)\n }\n\n useEffect(() => { loadData() }, [invoiceId])\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function loadPaymentDetails() {\n if (detailsLoaded || detailsLoading) return\n setDetailsLoading(true)\n await Promise.all([fetchPaymentMethods(), fetchBankAccounts()])\n setDetailsLoaded(true)\n setDetailsLoading(false)\n }\n\n function handleExpandMov(movId: string) {\n const opening = expandedMovId !== movId\n setExpandedMovId(opening ? movId : null)\n if (opening) loadPaymentDetails()\n }\n\n async function handleCancel() {\n setCancelling(true)\n try {\n await cancelInvoice(invoiceId)\n await loadData()\n setConfirmCancel(false)\n setMenuOpen(false)\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n if (loading) {\n return (\n <div className=\"space-y-5\">\n <SubpageHeader title=\"\" onBack={onBack} parentLabel={parentLabel} />\n\n {/* Invoice card skeleton */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n <div className=\"h-1 bg-muted animate-pulse\" />\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className=\"h-10 w-10 rounded-lg bg-muted/40 animate-pulse\" />\n <div className=\"space-y-2\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-6 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n <div className=\"h-6 w-20 rounded-full bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n {[1, 2, 3, 4].map((i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"space-y-1\">\n <div className=\"h-2 w-10 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Items table skeleton */}\n <div className=\"px-5 pt-3 pb-1.5\">\n <div className=\"h-3 w-12 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"px-5\">\n <div className=\"border-b py-2 flex justify-between\">\n <div className=\"h-2 w-24 rounded bg-muted/20 animate-pulse\" />\n <div className=\"h-2 w-16 rounded bg-muted/20 animate-pulse\" />\n </div>\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between py-2.5 border-b last:border-0\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-3 w-4 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-5 w-14 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-28 rounded bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n </div>\n ))}\n </div>\n <div className=\"px-5 py-3 border-t bg-muted/10 flex justify-end\">\n <div className=\"h-4 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n\n {/* Installments skeleton */}\n <div className=\"space-y-2\">\n <div className=\"h-4 w-28 rounded bg-muted/30 animate-pulse\" />\n <div className=\"rounded-lg border bg-card shadow-sm divide-y\">\n {[1].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3\">\n <div className=\"h-3 w-5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"flex-1 space-y-1.5\">\n <div className=\"h-4 w-24 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-2 w-32 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"h-7 w-16 rounded-lg bg-muted/30 animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n if (!invoice) {\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={t('financial.invoice.notFound')} onBack={onBack} parentLabel={parentLabel} />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoice.notFoundDesc')}</p>\n </div>\n )\n }\n\n const statusConfig = STATUS_COLORS[invoice.status] ?? STATUS_COLORS.pending\n const StatusIcon = statusConfig.icon\n const totalPaid = movements.reduce((sum, m) => sum + m.paidAmount, 0)\n const totalRemaining = invoice.totalAmount - totalPaid\n const subtotal = items.reduce((sum, it) => sum + it.quantity * it.unitPrice, 0)\n const totalDiscount = items.reduce((sum, it) => sum + it.discount, 0)\n const totalSurcharge = items.reduce((sum, it) => sum + it.surcharge, 0)\n\n const itemColumns: ColumnDef<InvoiceItem, any>[] = [\n {\n id: 'index', header: t('financial.invoice.columnNumber'),\n cell: ({ row }) => <span className=\"text-xs text-muted-foreground\">{row.index + 1}</span>,\n },\n {\n accessorKey: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground capitalize\">{row.original.itemKind}</span>\n <span className=\"truncate\">{row.original.description}</span>\n </div>\n ),\n },\n {\n accessorKey: 'quantity', header: () => <span className=\"block text-right\">{t('financial.invoice.columnQty')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{getValue() as number}</span>,\n },\n {\n accessorKey: 'unitPrice', header: () => <span className=\"block text-right\">{t('financial.invoice.columnUnitPrice')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n {\n accessorKey: 'totalAmount', header: () => <span className=\"block text-right\">{t('financial.invoice.columnTotal')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right font-medium tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n ]\n\n return (\n <div className=\"space-y-5\">\n <SubpageHeader\n title={invoice.fiscalNumber ? `#${invoice.fiscalNumber}` : invoice.contactName ?? invoice.invoiceDate}\n onBack={onBack}\n parentLabel={parentLabel}\n actions={\n <div className=\"flex items-center gap-1.5\">\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <Button variant=\"outline\" size=\"sm\" onClick={onEdit}>\n <Pencil className=\"h-3.5 w-3.5\" /> {t('financial.invoice.edit')}\n </Button>\n )}\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <div className=\"relative\" ref={menuRef}>\n <Button variant=\"outline\" size=\"icon\" onClick={() => setMenuOpen(!menuOpen)} aria-label=\"More actions\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoice.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n }\n />\n\n {/* Invoice document */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n {/* Top accent stripe */}\n <div className=\"h-1 bg-primary\" />\n\n {/* Invoice header */}\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n <FileText className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <p className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')}\n </p>\n <p className={`text-xl font-bold mt-0.5 ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</p>\n </div>\n </div>\n <span className={`inline-flex items-center gap-1 rounded-full px-2.5 py-1 text-[11px] font-semibold capitalize ${statusConfig.bg}`}>\n <StatusIcon className=\"h-3 w-3\" /> {t(statusConfig.labelKey)}\n </span>\n </div>\n\n {/* Meta grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n <div className=\"flex items-center gap-2\">\n <User className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.contact')}</p>\n {invoice.contactName ? (\n <PersonLink personId={invoice.contactId} name={invoice.contactName} size=\"sm\" />\n ) : (\n <p className=\"text-xs font-medium truncate\">—</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.date')}</p>\n <p className=\"text-xs font-medium\">{invoice.invoiceDate}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Hash className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.installments')}</p>\n <p className=\"text-xs font-medium\">{invoice.totalInstallments}x</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <DollarSign className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.columnPaid')}</p>\n <p className=\"text-xs font-medium\">{formatCurrency(totalPaid, currency)}</p>\n </div>\n </div>\n </div>\n\n {/* Booking link — shows when this order has a scheduled time */}\n {invoice.bookingStartsAt && (\n <div className=\"flex items-center gap-2 mt-3 pt-3 border-t\">\n <CalendarDays className=\"h-3.5 w-3.5 text-magic shrink-0\" />\n <div className=\"flex items-center gap-2 min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.booking')}</p>\n <button\n type=\"button\"\n onClick={() => config.onBookingClick?.(invoice.id)}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-magic hover:underline\"\n >\n {new Date(invoice.bookingStartsAt).toLocaleDateString(undefined, { weekday: 'short', day: '2-digit', month: 'short' })}\n {' '}\n {new Date(invoice.bookingStartsAt).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })}\n <ExternalLink className=\"h-2.5 w-2.5\" />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Items table */}\n {items.length > 0 && (\n <>\n <div className=\"px-5 pt-3 pb-1.5\">\n <h3 className=\"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider\">{t('financial.invoice.items')}</h3>\n </div>\n <div className=\"px-5\">\n <DataTable columns={itemColumns} data={items} variant=\"flat\" compact />\n </div>\n\n {/* Totals */}\n <div className=\"px-5 py-3 mt-1 border-t bg-muted/10\">\n <div className=\"flex flex-col items-end gap-0.5\">\n {(totalDiscount > 0 || totalSurcharge > 0) && (\n <div className=\"flex items-center gap-6 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.subtotal')}</span>\n <span className=\"tabular-nums w-24 text-right\">{formatCurrency(subtotal, currency)}</span>\n </div>\n )}\n {totalDiscount > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-success\">\n <span>{t('financial.invoice.discount')}</span>\n <span className=\"tabular-nums w-24 text-right\">-{formatCurrency(totalDiscount, currency)}</span>\n </div>\n )}\n {totalSurcharge > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-warning\">\n <span>{t('financial.invoice.surcharge')}</span>\n <span className=\"tabular-nums w-24 text-right\">+{formatCurrency(totalSurcharge, currency)}</span>\n </div>\n )}\n <div className=\"flex items-center gap-6 text-sm font-bold pt-1\">\n <span>{t('financial.invoice.total')}</span>\n <span className={`tabular-nums w-24 text-right ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</span>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Observations inside invoice */}\n {invoice.observations && (\n <div className=\"px-5 py-3 border-t\">\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase tracking-wider mb-1\">{t('financial.invoice.notes')}</p>\n <p className=\"text-xs text-muted-foreground\">{invoice.observations}</p>\n </div>\n )}\n </div>\n\n {/* Installments — outside the invoice card */}\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold text-muted-foreground\">{t('financial.invoice.paymentSchedule')}</h3>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n {movements.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.invoice.noInstallments')}</div>\n ) : (\n <div className=\"divide-y\">\n {movements.map((mov) => {\n const remaining = mov.amount - mov.paidAmount\n const isPaid = mov.status === 'paid'\n const isPartial = mov.status === 'partial'\n const hasPaidDetails = isPaid || isPartial\n const isExpanded = expandedMovId === mov.id\n const movStatus = STATUS_COLORS[mov.status] ?? STATUS_COLORS.pending\n const MovIcon = movStatus.icon\n\n // Cash events recorded against this installment (one per payment).\n const instPayments = payments.filter((p) => (p.installmentNumber ?? null) === (mov.installmentNumber ?? null))\n\n return (\n <div key={mov.id}>\n <div\n className={`flex items-center gap-3 px-4 py-3 ${hasPaidDetails ? 'cursor-pointer hover:bg-muted/20 transition-colors' : ''}`}\n onClick={hasPaidDetails ? () => handleExpandMov(mov.id) : undefined}\n >\n <span className=\"text-xs font-medium text-muted-foreground w-6 shrink-0\">#{mov.installmentNumber}</span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium tabular-nums\">{formatCurrency(mov.amount, currency)}</span>\n <span className={`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[9px] font-medium capitalize ${movStatus.bg}`}>\n <MovIcon className=\"h-2 w-2\" /> {t(movStatus.labelKey)}\n </span>\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n {t('financial.invoice.due')} {mov.dueDate}\n {mov.paidAmount > 0 && !isPaid && ` · ${t('financial.invoice.paidLabel')} ${formatCurrency(mov.paidAmount, currency)}`}\n {mov.paymentDate && ` · ${t('financial.invoice.paidOn')} ${mov.paymentDate}`}\n </p>\n </div>\n {!isPaid && !isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {remaining < mov.amount ? formatCurrency(remaining, currency) : ''}\n </button>\n )}\n {isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {formatCurrency(remaining, currency)}\n </button>\n )}\n {hasPaidDetails && (\n <ChevronDown className={`h-3.5 w-3.5 text-muted-foreground shrink-0 transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`} />\n )}\n </div>\n\n {/* Expanded payment details */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: isExpanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-4 pb-2.5 pl-14\">\n {detailsLoading ? (\n <div className=\"flex items-center gap-3\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted/40 animate-pulse\" />\n </div>\n ) : instPayments.length === 0 ? (\n <div className=\"text-[11px] text-muted-foreground\">{t('financial.invoice.noDetails')}</div>\n ) : (\n <div className=\"space-y-1\">\n {instPayments.map((p) => {\n const pMethod = paymentMethods.find((m) => m.id === p.paymentMethodId)\n const pType = paymentMethodTypes.find((tp) => tp.id === (pMethod?.paymentMethodTypeId ?? p.paymentMethodTypeId))\n const pAccount = bankAccounts.find((a) => a.id === p.bankAccountId)\n return (\n <div key={p.id} className=\"flex flex-wrap items-center gap-x-1 gap-y-0.5 text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-success\">{formatCurrency(p.paidAmount, currency)}</span>\n {pType && (\n <>\n <span>·</span>\n <span className=\"font-medium text-foreground\">{pType.name}</span>\n {pMethod && <span>({pMethod.name})</span>}\n </>\n )}\n {p.cardBrand && (\n <>\n <span>·</span>\n <CreditCard className=\"h-3 w-3 shrink-0\" />\n <span className=\"font-medium text-foreground\">{p.cardBrand}</span>\n {p.cardInstallments && <span>{p.cardInstallments}x</span>}\n </>\n )}\n {pAccount && (\n <>\n <span>·</span>\n <Building2 className=\"h-3 w-3 shrink-0\" />\n <span>{pAccount.name}</span>\n </>\n )}\n {(p.feeAmount ?? 0) > 0 && (\n <>\n <span>·</span>\n <span className=\"text-warning\">{t('financial.statements.columnFee')} {formatCurrency(p.feeAmount ?? 0, currency)}</span>\n </>\n )}\n {p.paymentDate && (\n <>\n <span>·</span>\n <span>{p.paymentDate}</span>\n </>\n )}\n {p.notes && (\n <>\n <span>·</span>\n <span className=\"italic truncate max-w-[200px]\">{p.notes}</span>\n </>\n )}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Payment summary bar */}\n {movements.length > 0 && (\n <div className=\"flex items-center justify-between rounded-lg border bg-muted/20 px-4 py-2.5\">\n <div className=\"flex items-center gap-4 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.paidLabel')} <span className=\"font-semibold text-success\">{formatCurrency(totalPaid, currency)}</span></span>\n {totalRemaining > 0 && (\n <span className=\"text-muted-foreground\">{t('financial.invoice.remaining')} <span className=\"font-semibold text-foreground\">{formatCurrency(totalRemaining, currency)}</span></span>\n )}\n </div>\n {totalRemaining <= 0 && (\n <span className=\"inline-flex items-center gap-1 text-xs font-medium text-success\">\n <CircleCheckBig className=\"h-3 w-3\" /> {t('financial.invoice.fullyPaid')}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Payment Modal */}\n {payingMovement && (\n <PaymentModal\n movement={payingMovement}\n onClose={() => setPayingMovement(null)}\n onPaid={() => { setPayingMovement(null); loadData() }}\n />\n )}\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoice.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoice.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoice.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoice.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancel} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoice.cancelling') : t('financial.invoice.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","type TFunc = (key: string, params?: Record<string, string | number>) => string\n\n// Maps a previous in-module view to the i18n key for its human label, used to\n// render a context-aware back link (\"Back to {where you came from}\") on detail\n// pages. Views not listed here (e.g. the edit/detail of the record we're\n// returning from, or unknown views) are not meaningful referrers — callers fall\n// back to the default parent label.\nconst REFERRER_LABEL_KEYS: Record<string, string> = {\n summary: 'financial.nav.summary',\n statements: 'financial.nav.statements',\n 'cash-registers': 'financial.nav.cashRegisters',\n reconciliation: 'financial.nav.reconciliation',\n commissions: 'financial.nav.commissions',\n cards: 'financial.nav.cards',\n 'receivables-list': 'financial.nav.receivables',\n 'payables-list': 'financial.nav.payables',\n}\n\n/** Human label for the page the user came from, or null when it isn't a meaningful referrer. */\nexport function referrerLabel(view: string | null | undefined, t: TFunc): string | null {\n if (!view) return null\n const key = REFERRER_LABEL_KEYS[view]\n return key ? t(key) : null\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function PayablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"debit\" onSaved={(id) => onNavigate(id ? `payables-detail:${id}` : 'payables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"debit\" editId={intent.editId} onSaved={() => onNavigate(`payables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"debit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('payables-list') : () => onNavigate('payables-list')}\n onEdit={() => onNavigate(`payables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"debit\"\n onNew={() => onNavigate('payables-new')}\n onEdit={(id) => onNavigate(`payables-detail:${id}`)}\n />\n )\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function ReceivablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"credit\" onSaved={(id) => onNavigate(id ? `receivables-detail:${id}` : 'receivables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"credit\" editId={intent.editId} onSaved={() => onNavigate(`receivables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"credit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('receivables-list') : () => onNavigate('receivables-list')}\n onEdit={() => onNavigate(`receivables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"credit\"\n onNew={() => onNavigate('receivables-new')}\n onEdit={(id) => onNavigate(`receivables-detail:${id}`)}\n />\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Landmark, Play, Square, Clock, ChevronDown, ChevronUp, Calculator, X, Check, StickyNote } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Denomination definitions (BRL default — overridden by currency config)\n// ---------------------------------------------------------------------------\n\ninterface Denomination {\n label: string\n value: number\n type: 'bill' | 'coin'\n}\n\nconst BRL_DENOMINATIONS: Denomination[] = [\n { label: 'R$ 200', value: 200, type: 'bill' },\n { label: 'R$ 100', value: 100, type: 'bill' },\n { label: 'R$ 50', value: 50, type: 'bill' },\n { label: 'R$ 20', value: 20, type: 'bill' },\n { label: 'R$ 10', value: 10, type: 'bill' },\n { label: 'R$ 5', value: 5, type: 'bill' },\n { label: 'R$ 2', value: 2, type: 'bill' },\n { label: 'R$ 1', value: 1, type: 'coin' },\n { label: 'R$ 0,50', value: 0.5, type: 'coin' },\n { label: 'R$ 0,25', value: 0.25, type: 'coin' },\n { label: 'R$ 0,10', value: 0.1, type: 'coin' },\n { label: 'R$ 0,05', value: 0.05, type: 'coin' },\n]\n\n// ---------------------------------------------------------------------------\n// Denomination counter sub-component\n// ---------------------------------------------------------------------------\n\nfunction DenominationCounter({\n denominations,\n counts,\n onChange,\n currency,\n}: {\n denominations: Denomination[]\n counts: Record<number, number>\n onChange: (counts: Record<number, number>) => void\n currency: { code: string; locale: string; symbol: string }\n}) {\n const t = useTranslation()\n const bills = denominations.filter((d) => d.type === 'bill')\n const coins = denominations.filter((d) => d.type === 'coin')\n\n function setCount(value: number, count: number) {\n onChange({ ...counts, [value]: Math.max(0, count) })\n }\n\n function renderRow(d: Denomination) {\n const qty = counts[d.value] ?? 0\n const subtotal = qty * d.value\n return (\n <div key={d.value} className=\"flex items-center gap-2 py-1\">\n <span className=\"w-20 text-xs font-medium text-muted-foreground\">{d.label}</span>\n <span className=\"text-muted-foreground text-xs\">×</span>\n <input\n type=\"number\"\n min={0}\n value={qty || ''}\n onChange={(e) => setCount(d.value, parseInt(e.target.value) || 0)}\n placeholder=\"0\"\n className=\"w-16 rounded border bg-background px-2 py-1 text-xs text-center tabular-nums\"\n />\n <span className=\"text-xs text-muted-foreground\">=</span>\n <span className=\"w-24 text-xs text-right tabular-nums font-medium\">\n {formatCurrency(subtotal, currency)}\n </span>\n </div>\n )\n }\n\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {bills.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.bills')}</p>\n {bills.map(renderRow)}\n </div>\n )}\n {coins.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.coins')}</p>\n {coins.map(renderRow)}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Opening panel (step-based)\n// ---------------------------------------------------------------------------\n\ntype OpenMode = 'quick' | 'count'\n\nfunction CashOpeningPanel({\n cashAccounts,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [selectedAccountId, setSelectedAccountId] = useState<string>(cashAccounts[0]?.id ?? '')\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [showNotes, setShowNotes] = useState(false)\n const [confirming, setConfirming] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n\n function resetForm() {\n setQuickBalance(0)\n setCounts({})\n setNotes('')\n setShowNotes(false)\n setConfirming(false)\n }\n\n async function handleConfirm() {\n setSubmitting(true)\n try {\n await onOpen(selectedAccountId, effectiveBalance, notes || undefined)\n resetForm()\n } finally {\n setSubmitting(false)\n }\n }\n\n if (cashAccounts.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground p-4\">\n {t('financial.cash.noAccounts')}\n </p>\n )\n }\n\n // Confirmation step\n if (confirming) {\n return (\n <div className=\"p-4 space-y-4\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-4 space-y-3\">\n <p className=\"text-sm font-semibold\">{t('financial.cash.confirmOpening')}</p>\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.cash.register')}</span>\n <span className=\"font-medium\">{cashAccounts.find((a) => a.id === selectedAccountId)?.name}</span>\n <span className=\"text-muted-foreground\">{t('financial.cash.openingBalance')}</span>\n <span className=\"font-bold text-base\">{formatCurrency(effectiveBalance, currency)}</span>\n {mode === 'count' && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.method')}</span>\n <span className=\"font-medium\">{t('financial.cash.denominationCount')}</span>\n </>\n )}\n {notes && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.notes')}</span>\n <span className=\"font-medium\">{notes}</span>\n </>\n )}\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirming(false)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n <X className=\"h-3 w-3\" /> {t('common.back')}\n </button>\n <button\n onClick={handleConfirm}\n disabled={submitting}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Check className=\"h-3 w-3\" /> {submitting ? t('financial.cash.opening') : t('financial.cash.confirmAndOpen')}\n </button>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"p-4 space-y-4\">\n {/* Account selector */}\n {cashAccounts.length > 1 && (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.register')}</label>\n <select\n value={selectedAccountId}\n onChange={(e) => setSelectedAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs\"\n >\n {cashAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.countBillsCoins')}\n </button>\n </div>\n\n {/* Quick mode */}\n {mode === 'quick' && (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.openingBalance')}\n />\n )}\n\n {/* Count mode */}\n {mode === 'count' && (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Notes toggle */}\n <div>\n {!showNotes ? (\n <button\n onClick={() => setShowNotes(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <StickyNote className=\"h-3 w-3\" /> {t('financial.cash.addNotes')}\n </button>\n ) : (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.notes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.openingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n )}\n </div>\n\n {/* Open button */}\n <button\n onClick={() => setConfirming(true)}\n disabled={effectiveBalance <= 0}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Play className=\"h-3 w-3\" /> {t('financial.cash.openSession')}\n </button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Closing panel (inline within open session card)\n// ---------------------------------------------------------------------------\n\nfunction CashClosingPanel({\n session,\n currency,\n onClose,\n}: {\n session: { id: string; openingBalance: number; bankAccountName?: string }\n currency: { code: string; locale: string; symbol: string }\n onClose: (sessionId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n const difference = effectiveBalance - session.openingBalance\n\n async function handleClose() {\n setSubmitting(true)\n try {\n await onClose(session.id, effectiveBalance, notes || undefined)\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n <div className=\"space-y-3 pt-3 border-t\">\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.count')}\n </button>\n </div>\n\n {mode === 'quick' ? (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.closingBalance')}\n />\n ) : (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Difference indicator */}\n {effectiveBalance > 0 && (\n <div className=\"flex items-center justify-between rounded-lg bg-muted/50 px-3 py-2\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.cash.differenceFromOpening')}</span>\n <span className={`text-sm font-bold tabular-nums ${\n difference > 0 ? 'text-success' : difference < 0 ? 'text-destructive' : 'text-muted-foreground'\n }`}>\n {difference >= 0 ? '+' : ''}{formatCurrency(difference, currency)}\n </span>\n </div>\n )}\n\n {/* Notes */}\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.closingNotes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.closingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={handleClose}\n disabled={submitting || effectiveBalance <= 0}\n >\n <Square className=\"h-3.5 w-3.5\" />\n {submitting ? t('financial.cash.closing') : t('financial.cash.closeSession')}\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main view\n// ---------------------------------------------------------------------------\n\nexport function CashRegistersView() {\n const t = useTranslation()\n const { currency, labels } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const cashSessions = useFinancialStore((s) => s.cashSessions)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchCashSessions = useFinancialStore((s) => s.fetchCashSessions)\n const openCashSession = useFinancialStore((s) => s.openCashSession)\n const closeCashSession = useFinancialStore((s) => s.closeCashSession)\n\n const [expandedClosing, setExpandedClosing] = useState<string | null>(null)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchCashSessions()\n }, [])\n\n const cashAccounts = bankAccounts.filter((a) => a.accountType === 'cash_register')\n const openSessions = cashSessions.filter((s) => s.status === 'open')\n const closedSessions = cashSessions.filter((s) => s.status === 'closed')\n\n async function handleOpen(accountId: string, balance: number, notes?: string) {\n await openCashSession({ bankAccountId: accountId, openingBalance: balance, notes })\n }\n\n async function handleClose(sessionId: string, balance: number, notes?: string) {\n await closeCashSession({ sessionId, closingBalance: balance, notes })\n setExpandedClosing(null)\n }\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={labels.cashRegisters ?? t('financial.cash.title')} subtitle={t('financial.cash.subtitle')} />\n\n {/* Open sessions */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <Landmark className=\"h-4 w-4 text-info\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.openSessions')}</h3>\n {openSessions.length > 0 && (\n <span className=\"rounded-full bg-info/10 text-info px-2 py-0.5 text-[10px] font-semibold\">\n {openSessions.length}\n </span>\n )}\n </div>\n </div>\n\n {openSessions.length === 0 ? (\n <CashOpeningPanel cashAccounts={cashAccounts} currency={currency} onOpen={handleOpen} />\n ) : (\n <div className=\"divide-y\">\n {openSessions.map((session) => (\n <div key={session.id} className=\"p-4 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.cash.opened')} {new Date(session.openedAt).toLocaleString()}\n {session.openedByName ? ` ${t('financial.cash.by')} ${session.openedByName}` : ''}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-[10px] text-muted-foreground uppercase\">{t('financial.cash.openingBalance')}</p>\n <p className=\"text-lg font-bold tabular-nums\">{formatCurrency(session.openingBalance, currency)}</p>\n </div>\n </div>\n\n {/* Expand/collapse closing controls */}\n {expandedClosing === session.id ? (\n <CashClosingPanel session={session} currency={currency} onClose={handleClose} />\n ) : (\n <button\n onClick={() => setExpandedClosing(session.id)}\n className=\"inline-flex items-center gap-1.5 text-xs text-destructive hover:text-destructive font-medium transition-colors\"\n >\n <ChevronDown className=\"h-3 w-3\" /> {t('financial.cash.closeThisSession')}\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Quick open — when sessions already exist but user may want another */}\n {openSessions.length > 0 && cashAccounts.length > openSessions.length && (\n <OpenAnotherCollapsible cashAccounts={cashAccounts} openSessions={openSessions} currency={currency} onOpen={handleOpen} />\n )}\n\n {/* Session history */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.sessionHistory')}</h3>\n </div>\n {closedSessions.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.cash.noClosedSessions')}</div>\n ) : (\n <div className=\"divide-y\">\n {closedSessions.map((session) => (\n <div key={session.id} className=\"px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {new Date(session.openedAt).toLocaleDateString()} — {session.closedAt ? new Date(session.closedAt).toLocaleDateString() : ''}\n </p>\n {session.openedByName && (\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.cash.by')} {session.openedByName}</p>\n )}\n </div>\n <div className=\"text-right\">\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span>{t('financial.cash.openLabel')}: {formatCurrency(session.openingBalance, currency)}</span>\n <span>{t('financial.cash.closeLabel')}: {formatCurrency(session.closingBalance ?? 0, currency)}</span>\n </div>\n {session.difference !== undefined && session.difference !== 0 && (\n <p className={`text-xs font-semibold tabular-nums mt-0.5 ${session.difference > 0 ? 'text-success' : 'text-destructive'}`}>\n {t('financial.cash.diff')}: {session.difference >= 0 ? '+' : ''}{formatCurrency(session.difference, currency)}\n </p>\n )}\n {session.notes && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5 max-w-[200px] truncate\" title={session.notes}>\n {session.notes}\n </p>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Collapsible \"Open another register\"\n// ---------------------------------------------------------------------------\n\nfunction OpenAnotherCollapsible({\n cashAccounts,\n openSessions,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n openSessions: { bankAccountId: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const t = useTranslation()\n const [expanded, setExpanded] = useState(false)\n const availableAccounts = cashAccounts.filter((a) => !openSessions.some((s) => s.bankAccountId === a.id))\n\n if (availableAccounts.length === 0) return null\n\n return (\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"w-full flex items-center justify-between px-4 py-3 text-xs font-medium hover:bg-muted/50 transition-colors\"\n >\n <span className=\"flex items-center gap-2\">\n <Play className=\"h-3 w-3 text-primary\" />\n {t('financial.cash.openAnother')}\n </span>\n {expanded ? <ChevronUp className=\"h-3 w-3\" /> : <ChevronDown className=\"h-3 w-3\" />}\n </button>\n {expanded && <CashOpeningPanel cashAccounts={availableAccounts} currency={currency} onOpen={onOpen} />}\n </div>\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, ArrowRightLeft } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput, DatePicker, Button } from '@fayz-ai/ui'\n\nexport function TransferModal({ onClose, onDone, defaultFromId }: {\n onClose: () => void\n onDone: () => void\n defaultFromId?: string\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const createTransfer = useFinancialStore((s) => s.createTransfer)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [fromAccountId, setFromAccountId] = useState(defaultFromId ?? '')\n const [toAccountId, setToAccountId] = useState('')\n const [amount, setAmount] = useState(0)\n const [date, setDate] = useState(new Date().toISOString().slice(0, 10))\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n fetchBankAccounts()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n const sameAccount = !!fromAccountId && fromAccountId === toAccountId\n const canSubmit = !!fromAccountId && !!toAccountId && !sameAccount && amount > 0 && !saving\n\n // Enter anywhere in the modal submits (unless typing in a textarea / Shift+Enter).\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'Enter' || e.shiftKey) return\n if ((e.target as HTMLElement).tagName === 'TEXTAREA') return\n e.preventDefault()\n if (canSubmit) void handleSubmit()\n }\n\n async function handleSubmit() {\n if (!canSubmit) return\n setSaving(true)\n try {\n await createTransfer({ fromAccountId, toAccountId, amount, date, notes: notes || undefined })\n setVisible(false)\n setTimeout(onDone, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const selectClass = 'w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm'\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{ opacity: visible ? 1 : 0, transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)' }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b\">\n <div className=\"flex items-center gap-2\">\n <ArrowRightLeft className=\"h-4 w-4 text-warning\" />\n <h3 className=\"text-base font-semibold\">{t('financial.transfer.title')}</h3>\n </div>\n <button onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.from')}</label>\n <select value={fromAccountId} onChange={(e) => setFromAccountId(e.target.value)} className={selectClass}>\n <option value=\"\">{t('financial.transfer.selectAccount')}</option>\n {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.to')}</label>\n <select value={toAccountId} onChange={(e) => setToAccountId(e.target.value)} className={selectClass}>\n <option value=\"\">{t('financial.transfer.selectAccount')}</option>\n {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n </div>\n\n {sameAccount && (\n <p className=\"text-xs text-destructive\">{t('financial.transfer.sameAccount')}</p>\n )}\n\n <div className=\"grid grid-cols-2 gap-3\">\n <CurrencyInput\n label={t('financial.transfer.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.date')}</label>\n <DatePicker value={date} onChange={setDate} className=\"mt-1\" />\n </div>\n </div>\n\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.notes')}</label>\n <input\n type=\"text\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n placeholder={t('financial.transfer.optionalNotes')}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.transfer.cancel')}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleSubmit} disabled={!canSubmit}>\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.transfer.processing') : t('financial.transfer.submit')}\n </Button>\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Receipt, ArrowRightLeft, CheckCheck, Landmark } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, SubpageHeader, DatePicker, Button, Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { PersonLink } from '@fayz-ai/saas'\nimport type { StatementEntry } from '../types'\nimport { TransferModal } from '../components/TransferModal'\n\nconst ALL = 'all'\n\n// Soft reconciliation marker for an extract row — a muted glyph with a hover\n// tooltip explaining what it means. Rendered only when the movement carries the\n// relevant state (reconciledAt / externalSource).\nfunction ReconcileMarker({ kind, label }: { kind: 'reconciled' | 'imported'; label: string }) {\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex shrink-0 cursor-default\">\n {kind === 'reconciled'\n ? <CheckCheck className=\"h-3 w-3 text-success/70\" />\n : <Landmark className=\"h-3 w-3 text-muted-foreground/40\" />}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\n// Reference to the internal transaction a reconciled bank line was matched to —\n// a small \"⇄ {ref}\" chip, clickable when the counterpart has an invoice to open.\nfunction ReconciledWithRef({ refLabel, tooltip, onOpen }: { refLabel: string; tooltip: string; onOpen?: () => void }) {\n const inner = (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] text-muted-foreground max-w-[160px]\">\n <ArrowRightLeft className=\"h-2.5 w-2.5 shrink-0\" />\n <span className=\"truncate\">{refLabel}</span>\n </span>\n )\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n {onOpen\n ? <button onClick={onOpen} className=\"hover:text-primary transition-colors\">{inner}</button>\n : <span className=\"cursor-default\">{inner}</span>}\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{tooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\nexport function StatementsView({ onNavigate }: { onNavigate?: (view: string) => void }) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const statement = useFinancialStore((s) => s.statement)\n const statementLoading = useFinancialStore((s) => s.statementLoading)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n\n const [accountId, setAccountId] = useState('')\n const [dateFrom, setDateFrom] = useState(() => {\n const d = new Date(); d.setMonth(d.getMonth() - 3)\n return d.toISOString().slice(0, 10)\n })\n const [dateTo, setDateTo] = useState(() => new Date().toISOString().slice(0, 10))\n const [showTransfer, setShowTransfer] = useState(false)\n\n useEffect(() => { fetchBankAccounts(); fetchPaymentMethods() }, [])\n\n // Resolve a human payment-method label for a movement (method → type → card brand).\n const methodName = useMemo(() => {\n const byId = new Map(paymentMethods.map((m) => [m.id, m.name]))\n const typeById = new Map(paymentMethodTypes.map((tp) => [tp.id, tp.name]))\n return (mov: StatementEntry['movement']): string => {\n if (mov.paymentMethodId && byId.has(mov.paymentMethodId)) return byId.get(mov.paymentMethodId)!\n if (mov.paymentMethodTypeId && typeById.has(mov.paymentMethodTypeId)) return typeById.get(mov.paymentMethodTypeId)!\n if (mov.cardBrand) return mov.cardBrand\n return '—'\n }\n }, [paymentMethods, paymentMethodTypes])\n\n // Open the linked invoice (receivable/payable detail) for a statement row.\n function openInvoice(e: StatementEntry) {\n if (!onNavigate || !e.movement.invoiceId) return\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n onNavigate(`${base}-detail:${e.movement.invoiceId}`)\n }\n\n useEffect(() => {\n if (accountId) {\n fetchStatement({\n bankAccountId: accountId === ALL ? undefined : accountId,\n dateRange: { from: dateFrom, to: dateTo },\n })\n }\n }, [accountId, dateFrom, dateTo])\n\n // Default to the consolidated \"All accounts\" view so paid invoices show up even\n // when payments weren't tied to a specific bank account.\n useEffect(() => {\n if (!accountId) setAccountId(ALL)\n }, [])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const columns: ColumnDef<StatementEntry, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.statements.columnDate'),\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-xs\">{row.original.movement.paymentDate ?? row.original.movement.dueDate}</span>\n ),\n },\n {\n id: 'description', header: t('financial.statements.columnDescription'),\n cell: ({ row }) => {\n const e = row.original\n const isTransfer = e.entryKind !== 'movement'\n const memo = e.movement.notes\n const title = e.invoice?.contactName\n || (isTransfer ? t('financial.statements.transfer') : (memo || 'Transaction'))\n // Show the memo on its own line unless it's already serving as the title.\n const memoLine = memo && memo !== title ? memo : undefined\n const doc = e.invoice?.fiscalNumber\n const inst = e.movement.installmentNumber\n const canOpen = !!onNavigate && !!e.movement.invoiceId\n return (\n <div>\n <div className=\"flex items-center gap-1.5\">\n {/* Person name → hovercard with contact details (plain text when no contact) */}\n <PersonLink personId={e.invoice?.contactId} name={title} size=\"sm\" />\n {/* Document reference → opens the linked invoice */}\n {doc && (canOpen ? (\n <button\n onClick={() => openInvoice(e)}\n className=\"text-[10px] text-muted-foreground font-mono hover:text-primary hover:underline\"\n title={t('financial.statements.viewInvoice')}\n >\n {doc}\n </button>\n ) : (\n <span className=\"text-[10px] text-muted-foreground font-mono\">{doc}</span>\n ))}\n {isTransfer && (\n <span className=\"text-[9px] uppercase tracking-wide px-1 py-px rounded bg-warning/15 text-warning font-semibold\">\n {t('financial.statements.transfer')}\n </span>\n )}\n {/* Soft reconciliation marker — optional, driven by what the plugin exposes:\n reconciledAt = matched/accepted (conciliado); externalSource = imported from a\n bank sync but not yet reconciled. Hover shows what it means. */}\n {e.movement.reconciledAt ? (\n <ReconcileMarker kind=\"reconciled\" label={t('financial.statements.reconciled')} />\n ) : e.movement.externalSource ? (\n <ReconcileMarker kind=\"imported\" label={t('financial.statements.imported')} />\n ) : null}\n {/* The transaction this bank line was conciliated with — link/id. */}\n {e.reconciledWith && (() => {\n const rw = e.reconciledWith\n const refLabel = rw.fiscalNumber || rw.contactName || rw.description || rw.movementId.slice(0, 8)\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n const onOpen = onNavigate && rw.invoiceId ? () => onNavigate(`${base}-detail:${rw.invoiceId}`) : undefined\n return (\n <ReconciledWithRef\n refLabel={refLabel}\n tooltip={t('financial.statements.reconciledWith', { ref: refLabel })}\n onOpen={onOpen}\n />\n )\n })()}\n </div>\n {memoLine && <p className=\"text-[11px] text-foreground/80\">{memoLine}</p>}\n <p className=\"text-[10px] text-muted-foreground\">\n <span className=\"capitalize\">\n {isTransfer && e.counterAccountName\n ? (e.entryKind === 'transfer-in' ? `← ${e.counterAccountName}` : `→ ${e.counterAccountName}`)\n : e.movement.movementKind}\n </span>\n {inst ? ` · ${t('financial.statements.installmentShort', { n: inst })}` : ''}\n </p>\n </div>\n )\n },\n },\n {\n id: 'method', header: t('financial.statements.columnMethod'),\n cell: ({ row }) => {\n const mov = row.original.movement\n const name = methodName(mov)\n return (\n <div>\n <p className=\"text-xs\">{name}</p>\n {mov.cardInstallments && mov.cardInstallments > 1 && (\n <p className=\"text-[10px] text-muted-foreground\">{mov.cardInstallments}x</p>\n )}\n </div>\n )\n },\n },\n {\n id: 'debit', header: t('financial.statements.columnDebit'),\n cell: ({ row }) => (\n <span className=\"text-right block text-destructive text-xs\">\n {row.original.movement.direction === 'debit' ? fmt(row.original.net) : ''}\n </span>\n ),\n },\n {\n id: 'credit', header: t('financial.statements.columnCredit'),\n cell: ({ row }) => {\n const e = row.original\n if (e.movement.direction !== 'credit') return <span className=\"block text-right\" />\n return (\n <div className=\"text-right\">\n <span className=\"block text-success text-xs\">{fmt(e.net)}</span>\n {e.fee > 0 && (\n <span className=\"block text-[10px] text-muted-foreground\">{fmt(e.gross)} − {fmt(e.fee)}</span>\n )}\n </div>\n )\n },\n },\n {\n id: 'fee', header: t('financial.statements.columnFee'),\n cell: ({ row }) => (\n <span className=\"text-right block text-warning text-xs\">\n {row.original.fee > 0 ? fmt(row.original.fee) : ''}\n </span>\n ),\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => (\n <span className=\"text-right block font-medium text-xs\">{fmt(row.original.runningBalance)}</span>\n ),\n },\n ], [currency, t, methodName, onNavigate])\n\n const entries = statement?.entries ?? []\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={t('financial.statements.title')}\n subtitle={t('financial.statements.subtitle')}\n actions={\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowTransfer(true)} disabled={bankAccounts.length < 2}>\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n {t('financial.statements.newTransfer')}\n </Button>\n }\n />\n\n {/* Filters */}\n <div className=\"flex flex-col sm:flex-row gap-3 sm:items-end\">\n <div className=\"flex-1 max-w-xs\">\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.account')}</label>\n <select\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\"\n >\n <option value={ALL}>{t('financial.summary.allAccounts')}</option>\n {bankAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.from')}</label>\n <DatePicker value={dateFrom} onChange={setDateFrom} className=\"mt-0.5\" />\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.to')}</label>\n <DatePicker value={dateTo} onChange={setDateTo} className=\"mt-0.5\" />\n </div>\n </div>\n\n {/* Summary header — standard bank-extract layout: opening → credits → debits → closing */}\n {accountId && statement && (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-2\">\n <SummaryStat label={t('financial.statements.opening')} value={fmt(statement.openingBalance)} />\n <SummaryStat label={t('financial.statements.totalCredits')} value={fmt(statement.totalCredits)} positive />\n <SummaryStat label={t('financial.statements.totalDebits')} value={fmt(statement.totalDebits)} negative />\n <SummaryStat label={t('financial.statements.closing')} value={fmt(statement.closingBalance)} accent />\n </div>\n )}\n\n {/* Statement table */}\n {!accountId ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted\">\n <Receipt className=\"h-8 w-8 text-muted-foreground mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.statements.selectToView')}</p>\n </div>\n ) : statementLoading ? (\n <DataTable columns={columns} data={[]} loading skeletonRows={8} compact />\n ) : entries.length === 0 ? (\n <DataTable columns={columns} data={[]} emptyMessage={t('financial.statements.noTransactions')} compact />\n ) : (\n <DataTable columns={columns} data={entries} compact />\n )}\n\n {showTransfer && (\n <TransferModal\n defaultFromId={accountId && accountId !== ALL ? accountId : undefined}\n onClose={() => setShowTransfer(false)}\n onDone={() => setShowTransfer(false)}\n />\n )}\n </div>\n )\n}\n\nfunction SummaryStat({ label, value, accent, positive, negative }: {\n label: string\n value: string\n accent?: boolean\n positive?: boolean\n negative?: boolean\n}) {\n const valueClass = positive ? 'text-success' : negative ? 'text-destructive' : accent ? 'text-foreground' : 'text-foreground'\n return (\n <div className={`rounded-lg border px-3 py-2 ${accent ? 'bg-muted/40' : 'bg-card'}`}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase truncate\">{label}</p>\n <p className={`text-sm font-semibold mt-0.5 ${valueClass}`}>{value}</p>\n </div>\n )\n}\n","import React from 'react'\nimport { useFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function CommissionsView() {\n const t = useTranslation()\n const { labels } = useFinancialConfig()\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={labels.commissions} subtitle={t('financial.commissions.subtitle')} />\n <div className=\"flex items-center justify-center rounded-lg border-2 border-dashed border-muted p-12\">\n <p className=\"text-sm text-muted-foreground\">{t('financial.commissions.comingSoon')}</p>\n </div>\n </div>\n )\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { CreditCard, Plus, CalendarClock } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { BankAccount } from '../types'\nimport { QuickTransactionForm } from './QuickTransactionForm'\n\n// ---------------------------------------------------------------------------\n// Per-card money math. Credit-card balances are stored as debt (negative), so\n// the current bill (fatura) is the magnitude owed; the available limit is what\n// remains of the credit line.\n// ---------------------------------------------------------------------------\n\nfunction cardMath(acc: BankAccount) {\n const limit = acc.creditLimit ?? 0\n const used = Math.max(0, -acc.currentBalance)\n const available = Math.max(0, limit - used)\n const pct = limit > 0 ? Math.min(100, (used / limit) * 100) : 0\n return { limit, used, available, pct }\n}\n\nexport function CardsView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const bankAccountsLoading = useFinancialStore((s) => s.bankAccountsLoading)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [tab, setTab] = useState<'open' | 'closed'>('open')\n const [addOpen, setAddOpen] = useState(false)\n const [addCardId, setAddCardId] = useState<string | undefined>()\n\n useEffect(() => { fetchBankAccounts() }, [])\n\n const cards = useMemo(\n () => bankAccounts.filter((a) => a.accountType === 'credit_card'),\n [bankAccounts],\n )\n const openCards = useMemo(() => cards.filter((c) => c.isActive), [cards])\n const closedCards = useMemo(() => cards.filter((c) => !c.isActive), [cards])\n const visibleCards = tab === 'open' ? openCards : closedCards\n\n // Summary strip is computed over the active (open) cards — the money that is\n // actually in play this cycle.\n const summary = useMemo(() => {\n let totalAvailable = 0\n let totalBills = 0\n for (const c of openCards) {\n const { available, used } = cardMath(c)\n totalAvailable += available\n totalBills += used\n }\n return { totalAvailable, totalBills }\n }, [openCards])\n\n function openAddExpense(cardId: string) {\n setAddCardId(cardId)\n setAddOpen(true)\n }\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.cards.title')} subtitle={t('financial.cards.subtitle')} />\n\n {bankAccountsLoading && cards.length === 0 ? (\n <div className=\"text-center py-12 text-sm text-muted-foreground\">Loading...</div>\n ) : cards.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-2xl border-2 border-dashed border-muted\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-amber-300 to-yellow-600 mb-3 text-white shadow-sm\">\n <CreditCard className=\"h-6 w-6\" />\n </div>\n <p className=\"text-sm font-medium\">{t('financial.cards.noCards')}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5 max-w-xs\">{t('financial.cards.noCardsHint')}</p>\n </div>\n ) : (\n <>\n {/* Summary strip — available limit + total bills across open cards */}\n <div className=\"grid grid-cols-2 gap-px overflow-hidden rounded-2xl border bg-border shadow-sm\">\n <div className=\"bg-card px-4 py-3\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.cards.availableLimit')}</p>\n <p className=\"mt-0.5 text-lg font-bold tabular-nums text-success\">\n {formatCurrency(summary.totalAvailable, currency)}\n </p>\n </div>\n <div className=\"bg-card px-4 py-3\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.cards.allBillsValue')}</p>\n <p className=\"mt-0.5 text-lg font-bold tabular-nums\">\n {formatCurrency(summary.totalBills, currency)}\n </p>\n </div>\n </div>\n\n {/* Open / Closed tabs (only when there are closed cards to switch to) */}\n {closedCards.length > 0 && (\n <div className=\"flex gap-1 rounded-full bg-muted p-1 w-full max-w-xs\">\n {(['open', 'closed'] as const).map((k) => (\n <button\n key={k}\n onClick={() => setTab(k)}\n className={`flex-1 rounded-full px-3 py-1.5 text-xs font-medium transition-colors ${\n tab === k ? 'bg-card text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n {k === 'open' ? t('financial.cards.tabOpen') : t('financial.cards.tabClosed')}\n </button>\n ))}\n </div>\n )}\n\n {/* Card tiles — stacked on mobile, grid on desktop */}\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {visibleCards.map((card) => {\n const { limit, used, available, pct } = cardMath(card)\n const over = pct >= 90\n // Per-brand color so cards match the bank (and the Home card), not a uniform gold.\n const brand = `${card.bankName ?? ''} ${card.name ?? ''}`.toLowerCase()\n const headerGrad =\n brand.includes('nubank') || brand.includes('nu ') ? 'from-purple-500 via-purple-600 to-indigo-700'\n : brand.includes('ita') ? 'from-orange-400 via-orange-500 to-amber-600'\n : brand.includes('inter') ? 'from-orange-500 via-orange-600 to-orange-700'\n : 'from-indigo-500 via-indigo-600 to-violet-700'\n const barGrad =\n brand.includes('nubank') || brand.includes('nu ') ? 'from-purple-500 to-indigo-600'\n : brand.includes('ita') ? 'from-orange-400 to-amber-500'\n : brand.includes('inter') ? 'from-orange-500 to-orange-600'\n : 'from-indigo-500 to-violet-600'\n return (\n <div key={card.id} className=\"overflow-hidden rounded-2xl border bg-card shadow-sm\">\n {/* Per-brand header */}\n <div className={`bg-gradient-to-br ${headerGrad} px-4 py-4 text-white`}>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-2\">\n <CreditCard className=\"h-5 w-5\" />\n <span className=\"text-sm font-semibold\">{card.name}</span>\n </div>\n {card.bankName && (\n <span className=\"text-[11px] font-medium uppercase tracking-wide opacity-80\">\n {card.bankName}\n </span>\n )}\n </div>\n <div className=\"mt-4\">\n <p className=\"text-[11px] uppercase tracking-wide opacity-80\">\n {t('financial.cards.currentBill')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums leading-tight\">\n {formatCurrency(used, currency)}\n </p>\n </div>\n </div>\n\n {/* Body */}\n <div className=\"space-y-3 px-4 py-3\">\n {/* Usage progress bar */}\n <div>\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span>{t('financial.cards.usedOfLimit', { percent: String(Math.round(pct)) })}</span>\n <span className=\"tabular-nums\">{formatCurrency(limit, currency)}</span>\n </div>\n <div className=\"mt-1 h-2 overflow-hidden rounded-full bg-muted\">\n <div\n className={`h-full rounded-full ${\n over ? 'bg-destructive' : `bg-gradient-to-r ${barGrad}`\n }`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n\n {/* Available limit + due date */}\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.cards.availableLimit')}</p>\n <p className=\"text-sm font-semibold tabular-nums\">{formatCurrency(available, currency)}</p>\n </div>\n {card.dueDay != null && (\n <div className=\"flex items-center gap-1.5 text-right text-xs text-muted-foreground\">\n <CalendarClock className=\"h-3.5 w-3.5\" />\n <span>{t('financial.cards.dueOn', { day: String(card.dueDay) })}</span>\n </div>\n )}\n </div>\n\n {/* Add expense against this card */}\n <button\n type=\"button\"\n onClick={() => openAddExpense(card.id)}\n className=\"flex w-full items-center justify-center gap-1.5 rounded-input border border-input bg-card px-3 py-2 text-xs font-medium text-foreground transition-colors hover:bg-muted/40\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n {t('financial.cards.addExpense')}\n </button>\n </div>\n </div>\n )\n })}\n </div>\n </>\n )}\n\n <QuickTransactionForm\n open={addOpen}\n onOpenChange={setAddOpen}\n defaultType=\"expense\"\n defaultAccountId={addCardId}\n />\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { Landmark, RefreshCw, Check, Link2, Sparkles, ArrowDownCircle, ArrowUpCircle } from 'lucide-react'\nimport { Button, toast } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { FinancialMovement, ReconciliationCandidate } from '../types'\n\n// ---------------------------------------------------------------------------\n// Reconciliation (conciliação) — match imported bank lines to internal movements\n//\n// Imported bank-statement lines live in financial_movements tagged with an\n// externalSource. This screen lets the operator link each pending line to the\n// internal movement it settles (suggested by amount + date proximity), or\n// accept it standalone. Reusable across apps — fed by any bank connector that\n// imports through the financial provider's reconciliation methods.\n// ---------------------------------------------------------------------------\n\nexport function ReconciliationView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const [lines, setLines] = useState<FinancialMovement[]>([])\n const [loading, setLoading] = useState(true)\n const [selectedId, setSelectedId] = useState<string | null>(null)\n const [candidates, setCandidates] = useState<ReconciliationCandidate[]>([])\n const [candidatesLoading, setCandidatesLoading] = useState(false)\n const [busy, setBusy] = useState(false)\n\n const supported = typeof provider.getUnreconciled === 'function'\n\n const load = useCallback(async () => {\n if (!provider.getUnreconciled) return\n setLoading(true)\n try {\n const data = await provider.getUnreconciled()\n setLines(data)\n // Keep the selection valid; otherwise drop the right panel.\n setSelectedId((prev) => (prev && data.some((l) => l.id === prev) ? prev : null))\n } finally {\n setLoading(false)\n }\n }, [provider])\n\n useEffect(() => { void load() }, [load])\n\n // Load suggestions whenever the selected line changes.\n useEffect(() => {\n if (!selectedId || !provider.suggestReconciliation) { setCandidates([]); return }\n let cancelled = false\n setCandidatesLoading(true)\n provider.suggestReconciliation(selectedId)\n .then((c) => { if (!cancelled) setCandidates(c) })\n .finally(() => { if (!cancelled) setCandidatesLoading(false) })\n return () => { cancelled = true }\n }, [selectedId, provider])\n\n async function match(bankMovementId: string, matchedMovementId?: string) {\n if (!provider.reconcileMovement) return\n setBusy(true)\n try {\n await provider.reconcileMovement({ bankMovementId, matchedMovementId })\n toast.success(t('financial.reconciliation.match'))\n await load()\n } catch {\n toast.error(t('common.error'))\n } finally {\n setBusy(false)\n }\n }\n\n if (!supported) {\n return (\n <div className=\"py-16 text-center\">\n <Landmark className=\"h-8 w-8 text-muted-foreground/30 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.empty')}</p>\n </div>\n )\n }\n\n const selected = lines.find((l) => l.id === selectedId) ?? null\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <h2 className=\"text-lg font-semibold tracking-tight\">{t('financial.reconciliation.title')}</h2>\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.subtitle')}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">\n {lines.length > 0\n ? t('financial.reconciliation.pending', { count: lines.length })\n : t('financial.reconciliation.allDone')}\n </span>\n <Button variant=\"outline\" size=\"sm\" onClick={() => void load()} disabled={loading || busy}>\n <RefreshCw className={`h-3.5 w-3.5 ${loading ? 'animate-spin' : ''}`} />\n {t('financial.reconciliation.refresh')}\n </Button>\n </div>\n </div>\n\n {lines.length === 0 && !loading ? (\n <div className=\"rounded-lg border bg-card shadow-sm py-16 text-center\">\n <Check className=\"h-8 w-8 text-success/40 mx-auto mb-2\" />\n <p className=\"text-sm font-medium\">{t('financial.reconciliation.empty')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('financial.reconciliation.emptyHint')}</p>\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-2\">\n {/* Left — pending bank lines */}\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Landmark className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.reconciliation.bankLines')}</h3>\n </div>\n <div className=\"divide-y max-h-[60vh] overflow-auto\">\n {lines.map((line) => {\n const isCredit = line.direction === 'credit'\n return (\n <button\n key={line.id}\n onClick={() => setSelectedId(line.id)}\n className={`w-full flex items-center gap-3 px-4 py-3 text-left hover:bg-muted/40 transition-colors ${\n selectedId === line.id ? 'bg-muted/50' : ''\n }`}\n >\n {isCredit\n ? <ArrowDownCircle className=\"h-4 w-4 text-success shrink-0\" />\n : <ArrowUpCircle className=\"h-4 w-4 text-destructive shrink-0\" />}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">{line.notes || line.externalId}</p>\n <p className=\"text-[10px] text-muted-foreground\">\n {line.paymentDate ?? line.dueDate}\n {line.externalSource && <span className=\"ml-1 uppercase tracking-wide\">· {line.externalSource}</span>}\n </p>\n </div>\n <span className={`text-sm font-semibold shrink-0 ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {fmt(line.amount)}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Right — suggested matches for the selected line */}\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Sparkles className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.reconciliation.candidates')}</h3>\n </div>\n\n {!selected ? (\n <p className=\"px-4 py-16 text-center text-sm text-muted-foreground\">\n {t('financial.reconciliation.selectLine')}\n </p>\n ) : (\n <div className=\"p-3 space-y-2\">\n {candidatesLoading ? (\n <div className=\"py-10 text-center text-xs text-muted-foreground\">…</div>\n ) : (\n <>\n {candidates.map((c) => (\n <div key={c.movement.id} className=\"flex items-center gap-3 rounded-md border p-2.5\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">\n {c.invoice?.contactName || c.movement.notes || c.invoice?.fiscalNumber || t('financial.reconciliation.match')}\n </p>\n <p className=\"text-[10px] text-muted-foreground\">\n {c.movement.dueDate}\n <span className=\"ml-1.5 inline-flex items-center rounded px-1 py-px bg-primary/10 text-primary font-medium\">\n {t('financial.reconciliation.matchScore', { score: Math.round(c.score * 100) })}\n </span>\n </p>\n </div>\n <span className=\"text-sm font-semibold shrink-0\">{fmt(c.movement.amount)}</span>\n <Button size=\"sm\" disabled={busy} onClick={() => match(selected.id, c.movement.id)}>\n <Link2 className=\"h-3.5 w-3.5\" />\n {t('financial.reconciliation.match')}\n </Button>\n </div>\n ))}\n {candidates.length === 0 && (\n <p className=\"py-6 text-center text-xs text-muted-foreground\">\n {t('financial.reconciliation.noCandidates')}\n </p>\n )}\n\n {/* Accept the line standalone (no internal counterpart) */}\n <div className=\"pt-2 mt-1 border-t\">\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\" disabled={busy} onClick={() => match(selected.id)}>\n <Check className=\"h-3.5 w-3.5\" />\n {t('financial.reconciliation.accept')}\n </Button>\n <p className=\"text-[10px] text-muted-foreground text-center mt-1\">\n {t('financial.reconciliation.acceptHint')}\n </p>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SettingsGroup, ToggleRow } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function FinancialGeneralSettings() {\n const t = useTranslation()\n return (\n <div className=\"space-y-4\">\n <SettingsGroup title={t('financial.settings.invoices')} description={t('financial.settings.invoicesDesc')}>\n <ToggleRow label={t('financial.settings.autoInstallments')} description={t('financial.settings.autoInstallmentsDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.requireDoc')} description={t('financial.settings.requireDocDesc')} checked={false} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.allowPartial')} description={t('financial.settings.allowPartialDesc')} checked={true} onChange={() => {}} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.cashRegister')} description={t('financial.settings.cashRegisterDesc')}>\n <ToggleRow label={t('financial.settings.requireOpening')} description={t('financial.settings.requireOpeningDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.autoClose')} description={t('financial.settings.autoCloseDesc')} checked={false} onChange={() => {}} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.notifications')} description={t('financial.settings.notificationsDesc')}>\n <ToggleRow label={t('financial.settings.overdueAlerts')} description={t('financial.settings.overdueAlertsDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.dailySummary')} description={t('financial.settings.dailySummaryDesc')} checked={false} onChange={() => {}} />\n </SettingsGroup>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { DollarSign, Landmark, CreditCard, BookOpen, ChevronRight, Check } from 'lucide-react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\n\nconst STEPS = [\n { id: 'welcome', icon: DollarSign, titleKey: 'financial.onboarding.welcome', descKey: 'financial.onboarding.description' },\n { id: 'accounts', icon: Landmark, titleKey: 'financial.onboarding.accounts.title', descKey: 'financial.onboarding.accounts.description' },\n { id: 'payments', icon: CreditCard, titleKey: 'financial.onboarding.payments.title', descKey: 'financial.onboarding.payments.description' },\n { id: 'chart', icon: BookOpen, titleKey: 'financial.onboarding.chart.title', descKey: 'financial.onboarding.chart.description' },\n]\n\nexport function FinancialOnboarding({ onComplete }: { onComplete: () => void }) {\n const t = useTranslation()\n const [step, setStep] = useState(0)\n const current = STEPS[step]\n const isLast = step === STEPS.length - 1\n const Icon = current.icon\n\n return (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"w-full max-w-lg\">\n {/* Progress */}\n <div className=\"flex items-center gap-1 mb-8\">\n {STEPS.map((s, i) => (\n <div\n key={s.id}\n className={`h-1 flex-1 rounded-full transition-colors ${\n i <= step ? 'bg-primary' : 'bg-muted'\n }`}\n />\n ))}\n </div>\n\n {/* Card */}\n <div className=\"rounded-card border bg-card p-8 text-center space-y-6 shadow-sm\">\n <div className=\"flex justify-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-primary/10\">\n <Icon className=\"h-8 w-8 text-primary\" />\n </div>\n </div>\n\n <div>\n <h2 className=\"text-xl font-bold\">{t(current.titleKey)}</h2>\n <p className=\"text-sm text-muted-foreground mt-2 max-w-sm mx-auto\">{t(current.descKey)}</p>\n </div>\n\n {/* Step-specific hint */}\n {step > 0 && step < STEPS.length - 1 && (\n <div className=\"rounded-lg bg-muted/30 px-4 py-3 text-xs text-muted-foreground\">\n {t('financial.onboarding.configureHint')}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center justify-center gap-3 pt-2\">\n {step > 0 && (\n <Button variant=\"outline\" size=\"lg\" onClick={() => setStep(step - 1)}>\n {t('financial.onboarding.back')}\n </Button>\n )}\n {isLast ? (\n <Button variant=\"default\" size=\"lg\" onClick={onComplete}>\n <Check className=\"h-4 w-4\" /> {t('financial.onboarding.startUsing')}\n </Button>\n ) : (\n <Button variant=\"default\" size=\"lg\" onClick={() => setStep(step + 1)}>\n {step === 0 ? t('financial.onboarding.getStarted') : t('financial.onboarding.next')}\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Skip */}\n {!isLast && step === 0 && (\n <button\n onClick={onComplete}\n className=\"text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.onboarding.skip')}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useState, useCallback, useMemo, useEffect } from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { useTranslation } from '@fayz-ai/core'\nimport { ModulePage, PageTransition, type ModuleNavItem } from '@fayz-ai/ui'\nimport { FinancialContextProvider, type ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\nimport type { PluginRegistryDef, PluginQuickAction } from '@fayz-ai/core'\nimport { useModuleNavigation, ModuleActionBar, parseViewId, PluginSettingsPanel } from '@fayz-ai/saas'\nimport { SummaryView } from './views/SummaryView'\nimport { QuickTransactionForm } from './views/QuickTransactionForm'\nimport { usePendingQuickAdd, consumeQuickAdd } from './quick-add'\nimport type { QuickTransactionType } from './types'\nimport { Plus } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport { PayablesView } from './views/PayablesView'\nimport { ReceivablesView } from './views/ReceivablesView'\nimport { CashRegistersView } from './views/CashRegistersView'\nimport { StatementsView } from './views/StatementsView'\nimport { CommissionsView } from './views/CommissionsView'\nimport { CardsView } from './views/CardsView'\nimport { ReconciliationView } from './views/ReconciliationView'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\nimport { FinancialOnboarding } from './components/FinancialOnboarding'\n\n// ---------------------------------------------------------------------------\n// View intent — what subpage + mode to show\n// ---------------------------------------------------------------------------\n\nexport interface ViewIntent {\n view: string\n mode?: 'list' | 'new' | 'edit' | 'detail'\n editId?: string\n}\n\nfunction parseIntent(activeView: string): ViewIntent {\n // `base` collapses 'payables-detail' / 'payables-edit' etc; `id` is the canonical :id param.\n const { base, id } = parseViewId(activeView)\n const m = base.match(/^(payables|receivables)-(new|list|detail|edit)$/)\n if (m) return { view: m[1], mode: m[2] as ViewIntent['mode'], editId: id }\n return { view: activeView }\n}\n\n// ---------------------------------------------------------------------------\n// Nav builder\n// ---------------------------------------------------------------------------\n\nfunction buildNav(\n config: ResolvedFinancialConfig,\n activeView: string,\n navigate: (view: string, hash?: string) => void,\n t: (key: string, params?: Record<string, string | number>) => string,\n): ModuleNavItem[] {\n const items: ModuleNavItem[] = [\n {\n id: 'summary',\n label: t('financial.nav.summary'),\n icon: 'BarChart3',\n active: activeView === 'summary',\n onClick: () => navigate('summary'),\n },\n ]\n\n if (config.modules.payables) {\n items.push({\n id: 'payables',\n label: t('financial.nav.payables'),\n icon: 'ArrowUpCircle',\n active: activeView.startsWith('payables'),\n children: [\n { id: 'payables-new', label: t('financial.nav.new'), active: activeView === 'payables-new', onClick: () => navigate('payables-new') },\n { id: 'payables-list', label: t('financial.nav.list'), active: activeView === 'payables-list', onClick: () => navigate('payables-list') },\n { id: 'payables-recurring', label: t('financial.nav.recurringExpenses'), active: activeView === 'payables-recurring', onClick: () => navigate('payables-recurring') },\n ],\n })\n }\n\n if (config.modules.receivables) {\n items.push({\n id: 'receivables',\n label: t('financial.nav.receivables'),\n icon: 'ArrowDownCircle',\n active: activeView.startsWith('receivables'),\n children: [\n { id: 'receivables-new', label: t('financial.nav.new'), active: activeView === 'receivables-new', onClick: () => navigate('receivables-new') },\n { id: 'receivables-list', label: t('financial.nav.list'), active: activeView === 'receivables-list', onClick: () => navigate('receivables-list') },\n ],\n })\n }\n\n if (config.modules.cashRegisters) {\n items.push({\n id: 'cash-registers',\n label: t('financial.nav.cashRegisters'),\n icon: 'Landmark',\n active: activeView === 'cash-registers',\n onClick: () => navigate('cash-registers'),\n })\n }\n\n // Statements (extract) is core to the financial module — always shown, not gated per app.\n items.push({\n id: 'statements',\n label: t('financial.nav.statements'),\n icon: 'Receipt',\n active: activeView === 'statements',\n onClick: () => navigate('statements'),\n })\n\n if (config.modules.reconciliation) {\n items.push({\n id: 'reconciliation',\n label: t('financial.nav.reconciliation'),\n icon: 'ArrowLeftRight',\n active: activeView === 'reconciliation',\n onClick: () => navigate('reconciliation'),\n })\n }\n\n if (config.modules.commissions) {\n items.push({\n id: 'commissions',\n label: t('financial.nav.commissions'),\n icon: 'Users',\n children: [\n { id: 'commissions-overview', label: t('financial.nav.overview'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n { id: 'commissions-rules', label: t('financial.nav.rules'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n ],\n })\n }\n\n if (config.modules.cards) {\n items.push({\n id: 'cards',\n label: t('financial.nav.cards'),\n icon: 'CreditCard',\n children: [\n { id: 'cards-overview', label: t('financial.nav.overview'), active: activeView === 'cards', onClick: () => navigate('cards') },\n { id: 'cards-reconciliation', label: t('financial.nav.reconciliation'), active: activeView === 'cards', onClick: () => navigate('cards') },\n ],\n })\n }\n\n return items\n}\n\n// ---------------------------------------------------------------------------\n// Main page component\n// ---------------------------------------------------------------------------\n\nexport function FinancialPage({ config, provider, store, registries }: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n registries?: PluginRegistryDef[]\n}) {\n const { view, direction, navigate, previousView, back } = useModuleNavigation('/financial', {\n summary: 0,\n 'payables-list': 0, 'payables-new': 1, 'receivables-list': 0, 'receivables-new': 1,\n 'cash-registers': 0, statements: 0, reconciliation: 0, commissions: 0, cards: 0,\n settings: 1,\n })\n\n const [onboardingComplete, setOnboardingComplete] = useState(() => {\n try { return localStorage.getItem('saas-core:financial-onboarded') === 'true' } catch { return false }\n })\n\n // Skip the welcome wizard when the provider already has transactions — a user\n // (or a seeded demo/dogfood provider) with existing data should land on the\n // populated Summary, not a \"let's get started\" flow.\n useEffect(() => {\n if (onboardingComplete) return\n let cancelled = false\n void provider.getMovements({ pageSize: 1 })\n .then((res) => { if (!cancelled && res.total > 0) setOnboardingComplete(true) })\n .catch(() => { /* leave onboarding as-is on error */ })\n return () => { cancelled = true }\n }, [onboardingComplete, provider])\n\n const t = useTranslation()\n const intent = parseIntent(view)\n const isSettings = view === 'settings'\n const nav = buildNav(config, view, navigate, t)\n\n // FAY-1225 \"log money in a few taps\": a reachable quick-add that opens the\n // Mobills-grade transaction sheet (default = expense). Prominent primary\n // button on desktop + a thumb-reachable FAB on mobile.\n const [quickAddOpen, setQuickAddOpen] = useState(false)\n const [quickAddType, setQuickAddType] = useState<QuickTransactionType>('expense')\n // FAY-1226 \"snap a receipt\": when true, the sheet foregrounds the attachment\n // step + auto-opens the camera/gallery picker.\n const [quickAddReceipt, setQuickAddReceipt] = useState(false)\n const openQuickAdd = useCallback((type: QuickTransactionType = 'expense') => {\n setQuickAddType(type)\n setQuickAddReceipt(false)\n setQuickAddOpen(true)\n }, [])\n\n // FAY-1242: open the sheet on a global quick-add request (the app shell's\n // elevated center \"+\" button). One-shot — consumed so it never re-fires.\n const pendingQuickAdd = usePendingQuickAdd()\n useEffect(() => {\n if (!pendingQuickAdd) return\n const req = consumeQuickAdd()\n if (!req) return\n setQuickAddType(req.type)\n setQuickAddReceipt(req.receipt)\n setQuickAddOpen(true)\n }, [pendingQuickAdd])\n\n // One-primary-action rule (FAY-1247): each module surfaces exactly ONE primary\n // add affordance and config picks its face — never both. When quickAdd is the\n // primary action (B2C, e.g. norman), suppress the ERP \"+ New\" menu here so the\n // header shows only the quick-add \"Nova transação\" button. Payables are still\n // covered: the quick-add sheet's \"Pago: Não\" creates an unpaid conta a pagar.\n // When quickAdd is off (ERP default, beauty) this returns the payable/receivable/\n // cash actions and no quick-add buttons render — exactly today's behavior.\n const quickActions = useMemo<PluginQuickAction[]>(() => {\n if (config.quickAdd) return []\n const actions: PluginQuickAction[] = []\n if (config.modules.payables) {\n actions.push({\n id: 'new-payable',\n label: t('financial.quickActions.newPayable'),\n icon: 'ArrowUpCircle',\n description: t('financial.quickActions.newPayableDesc'),\n action: () => navigate('payables-new'),\n })\n }\n if (config.modules.receivables) {\n actions.push({\n id: 'new-receivable',\n label: t('financial.quickActions.newReceivable'),\n icon: 'ArrowDownCircle',\n description: t('financial.quickActions.newReceivableDesc'),\n action: () => navigate('receivables-new'),\n })\n }\n if (config.modules.cashRegisters) {\n actions.push({\n id: 'open-cash',\n label: t('financial.quickActions.openCashRegister'),\n icon: 'Landmark',\n description: t('financial.quickActions.openCashRegisterDesc'),\n action: () => navigate('cash-registers'),\n })\n }\n return actions\n }, [config.modules, config.quickAdd])\n\n function handleOnboardingComplete() {\n setOnboardingComplete(true)\n try { localStorage.setItem('saas-core:financial-onboarded', 'true') } catch {}\n }\n\n // Show onboarding on first visit\n if (!onboardingComplete) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <FinancialOnboarding onComplete={handleOnboardingComplete} />\n </FinancialContextProvider>\n )\n }\n\n // Settings view\n if (isSettings && registries && registries.length > 0) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <PageTransition transitionKey=\"settings\" direction={direction}>\n <div style={{ padding: '24px' }}>\n <PluginSettingsPanel\n title={t('financial.settingsPage.title')}\n subtitle={t('financial.settingsPage.subtitle')}\n generalSettings={<FinancialGeneralSettings />}\n registries={registries}\n hostPluginId=\"financial\"\n routeBase=\"/settings/financial\"\n />\n </div>\n </PageTransition>\n </FinancialContextProvider>\n )\n }\n\n function renderView() {\n switch (intent.view) {\n case 'payables':\n return <PayablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'receivables':\n return <ReceivablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'cash-registers':\n return <CashRegistersView />\n case 'statements':\n return <StatementsView onNavigate={navigate} />\n case 'reconciliation':\n return <ReconciliationView />\n case 'commissions':\n return <CommissionsView />\n case 'cards':\n return <CardsView />\n default:\n return <SummaryView />\n }\n }\n\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <ModulePage\n title={config.labels.pageTitle}\n subtitle={config.labels.pageSubtitle}\n nav={nav}\n showHeader={intent.view === 'summary' || view === 'summary'}\n viewKey={view}\n direction={direction}\n headerAction={\n <div className=\"flex items-center gap-2\">\n {config.quickAdd && (\n // One-primary-action rule (FAY-1247): quick-add is the single primary\n // add affordance in B2C mode. The receipt entry point lives inside the\n // sheet's \"Fotografar ou anexar recibo\" attachment step, so no separate\n // \"Enviar recibo\" button is needed here.\n <Button\n size=\"sm\"\n className=\"hidden md:inline-flex\"\n onClick={() => openQuickAdd('expense')}\n >\n <Plus className=\"h-4 w-4\" />\n {t('financial.quickTx.newTransaction')}\n </Button>\n )}\n <ModuleActionBar\n quickActions={quickActions}\n settingsPath={registries && registries.length > 0 ? '/settings/financial' : undefined}\n settingsLabel={t('financial.settingsPage.title')}\n />\n </div>\n }\n >\n {renderView()}\n\n {/* FAY-1242: the mobile quick-add + receipt FAB stack was removed — the\n app shell's elevated center \"+\" bottom-nav button now owns global\n quick-add (via openQuickAdd), and receipts stay reachable through the\n form's Anexo step. Desktop keeps its header buttons above. */}\n\n <QuickTransactionForm\n open={quickAddOpen}\n onOpenChange={setQuickAddOpen}\n defaultType={quickAddType}\n focusReceipt={quickAddReceipt}\n />\n </ModulePage>\n </FinancialContextProvider>\n )\n}\n","import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle, CreditCard as CreditCardIcon, Eye, EyeOff } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n KpiCard, ChartWidget, TableWidget, Card, CardHeader, CardTitle, CardContent, GoldCard,\n defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, useDashboardNavigate,\n} from '@fayz-ai/ui'\nimport { FinancialContextProvider, useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { FinancialUIState } from '../store'\nimport type { Invoice, FinancialMovement } from '../types'\n\nfunction useEnsureSummary() {\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n useEffect(() => { void fetchSummary() }, [])\n}\n\n// ---------------------------------------------------------------------------\n// KPIs\n// ---------------------------------------------------------------------------\n\nfunction TotalBalanceKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const loading = useFinancialStore((s) => s.summaryLoading)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.totalBalance')} icon=\"Wallet\" value={formatCurrency(summary?.totalBalance ?? 0, currency)} sub={loading ? undefined : t('financial.summary.allAccounts')} />\n}\n\nfunction ReceivableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.receivable')} icon=\"TrendingUp\" value={formatCurrency(summary?.totalReceivable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overdueReceivableCount ?? 0) })} />\n}\n\nfunction PayableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.payable')} icon=\"TrendingDown\" value={formatCurrency(summary?.totalPayable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overduePayableCount ?? 0) })} />\n}\n\nfunction MonthlyFlowKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return <KpiCard label={t('financial.summary.monthlyFlow')} icon=\"BarChart3\" value={formatCurrency(inflow - outflow, currency)} sub={inflow >= outflow ? t('financial.summary.positiveBalance') : t('financial.summary.negativeBalance')} />\n}\n\n// ---------------------------------------------------------------------------\n// Cash flow (recharts) + breakdown + overdue alerts\n// ---------------------------------------------------------------------------\n\nfunction CashFlowChart() {\n const t = useTranslation()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const data = [{ name: t('financial.summary.cashFlow'), income: summary?.monthlyInflow ?? 0, expenses: summary?.monthlyOutflow ?? 0 }]\n return (\n <ChartWidget\n type=\"bar\" title={t('financial.summary.cashFlow')} icon=\"BarChart3\" categoryKey=\"name\" data={data}\n series={[\n { dataKey: 'income', label: t('financial.summary.income'), color: 'hsl(var(--success))' },\n { dataKey: 'expenses', label: t('financial.summary.expenses'), color: 'hsl(var(--destructive))' },\n ]}\n />\n )\n}\n\nfunction CashFlowBreakdown() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n const total = Math.max(inflow + outflow, 1)\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.summary.cashFlowBreakdown')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-success\" />{t('financial.summary.received')}</span>\n <span className=\"font-medium\">{formatCurrency(inflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-success\" style={{ width: `${(inflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-destructive\" />{t('financial.summary.paid')}</span>\n <span className=\"font-medium\">{formatCurrency(outflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-destructive\" style={{ width: `${(outflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"border-t pt-2\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.summary.net')}</span>\n <span className={`font-semibold ${inflow - outflow >= 0 ? 'text-success' : 'text-destructive'}`}>{formatCurrency(inflow - outflow, currency)}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction OverdueAlerts() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const items = [\n { label: t('financial.summary.overdueReceivable'), value: summary?.overdueReceivableAmount ?? 0, count: summary?.overdueReceivableCount ?? 0, Icon: ArrowUpRight, color: 'text-warning' },\n { label: t('financial.summary.overduePayable'), value: summary?.overduePayableAmount ?? 0, count: summary?.overduePayableCount ?? 0, Icon: ArrowDownRight, color: 'text-destructive' },\n ]\n return (\n <Card>\n <CardHeader><CardTitle className=\"flex items-center gap-2\"><AlertTriangle className=\"h-4 w-4 text-warning\" />{t('financial.summary.overdueTitle')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-3\">\n {items.map((item) => (\n <div key={item.label} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\"><item.Icon className={`h-3.5 w-3.5 ${item.color}`} /><span className=\"text-sm text-muted-foreground\">{item.label}</span></div>\n <span className=\"text-sm font-semibold\">{formatCurrency(item.value, currency)}</span>\n </div>\n ))}\n {items.every((i) => i.count === 0) ? <p className=\"border-t pt-3 text-xs text-muted-foreground\">{t('financial.summary.noOverdue')}</p> : null}\n </CardContent>\n </Card>\n )\n}\n\nfunction RecentTransactions() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const invoices = useFinancialStore((s) => s.invoices)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n useEffect(() => { void fetchInvoices({ pageSize: 5 }) }, [])\n const columns: ColumnDef<Invoice, unknown>[] = [\n { accessorKey: 'contactName', header: t('financial.summary.recentTransactions'), cell: ({ row }) => <span className=\"font-medium\">{row.original.contactName || 'Unknown'}</span> },\n { id: 'date', header: '', cell: ({ row }) => <span className=\"text-xs capitalize text-muted-foreground\">{row.original.direction} · {row.original.invoiceDate}</span> },\n { accessorKey: 'totalAmount', header: '', cell: ({ row }) => (\n <span className={`font-semibold ${row.original.direction === 'credit' ? 'text-success' : 'text-destructive'}`}>\n {row.original.direction === 'credit' ? '+' : '-'}{formatCurrency(row.original.totalAmount, currency)}\n </span>\n ) },\n ]\n return <TableWidget title={t('financial.summary.recentTransactions')} icon=\"CircleDollarSign\" columns={columns} data={invoices.slice(0, 5)} emptyMessage={t('financial.summary.noTransactions')} />\n}\n\n// ---------------------------------------------------------------------------\n// HOME surface (B2C) — a phone-first money dashboard that reflows into cells on\n// desktop. These render on surface=\"home\" only; the plugin-home Resumo widgets\n// above are untouched. Same store/provider, so figures match the Financeiro\n// module (FAY-1233 mobile-summary logic, generalized into reusable widgets).\n// ---------------------------------------------------------------------------\n\n/** Human \"due in N days\" label from a YYYY-MM-DD due date. */\nfunction useDueLabel() {\n const t = useTranslation()\n return (dueDate: string): string => {\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n const due = new Date(`${dueDate}T00:00:00`)\n const days = Math.round((due.getTime() - today.getTime()) / 86_400_000)\n if (days < 0) return t('financial.home.overdueDays', { count: String(Math.abs(days)) })\n if (days === 0) return t('financial.home.dueToday')\n if (days === 1) return t('financial.home.dueTomorrow')\n return t('financial.home.dueInDays', { count: String(days) })\n }\n}\n\n/** Branded balance hero — Saldo + eye-toggle + clickable Entradas/Saídas pills.\n * Compact band (span-4): tight padding so it never becomes a tall empty block on\n * desktop. Pills deep-link into the Financeiro module (receivables / payables). */\nfunction BalanceHero() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const navigate = useDashboardNavigate()\n useEnsureSummary()\n const [hidden, setHidden] = React.useState(false)\n const money = (v: number | null | undefined) => (hidden ? '••••••' : formatCurrency(v ?? 0, currency))\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return (\n <GoldCard branded className=\"px-5 py-4 text-center md:px-8 md:py-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide opacity-75\">{t('financial.home.balance')}</p>\n <div className=\"mt-0.5 flex items-center justify-center gap-2.5\">\n <span className=\"text-3xl font-bold tracking-tight tabular-nums md:text-4xl\">{money(summary?.totalBalance)}</span>\n <button\n type=\"button\"\n onClick={() => setHidden((h) => !h)}\n aria-label={hidden ? t('financial.home.showBalance') : t('financial.home.hideBalance')}\n className=\"rounded-full p-1.5 text-primary-foreground/80 transition-colors hover:bg-white/10\"\n >\n {hidden ? <EyeOff className=\"h-5 w-5\" /> : <Eye className=\"h-5 w-5\" />}\n </button>\n </div>\n <div className=\"mx-auto mt-3 grid max-w-lg grid-cols-2 gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate('/financial/receivables-list')}\n aria-label={t('financial.home.inflow')}\n className=\"flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-emerald-500/90\">\n <ArrowUpRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.inflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(inflow)}</span>\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => navigate('/financial/payables-list')}\n aria-label={t('financial.home.outflow')}\n className=\"flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-rose-500/90\">\n <ArrowDownRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.outflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(outflow)}</span>\n </span>\n </button>\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// HOME charts — spend-by-category (donut) + cash-flow (in vs out). Both read the\n// same provider/store as the module, so figures stay coherent. surface 'home'\n// only (the plugin-home Resumo keeps its own cash-flow chart untouched).\n// ---------------------------------------------------------------------------\n\n/** Provider-agnostic expense classifier: maps a movement's label to a spend\n * bucket by keyword (pt-BR + en). Checked in priority order; first hit wins. */\nconst SPEND_CATEGORIES: Array<{ key: string; keywords: string[] }> = [\n { key: 'subscriptions', keywords: ['netflix', 'spotify', 'prime video', 'disney', 'hbo', ' max', 'youtube', 'apple', 'assinatura', 'subscription'] },\n { key: 'groceries', keywords: ['supermercado', 'mercado', 'padaria', 'hortifruti', 'feira', 'açougue', 'grocery', 'market'] },\n { key: 'transport', keywords: ['uber', '99', 'taxi', 'posto', 'shell', 'ipiranga', 'combustível', 'gasolina', 'metrô', 'ônibus', 'transport', 'fuel'] },\n { key: 'dining', keywords: ['ifood', 'rappi', 'restaurante', 'outback', 'lanchonete', 'pizzaria', 'café', 'cafeteria', 'mcdonald', 'burger', 'food'] },\n { key: 'home', keywords: ['aluguel', 'condomínio', 'luz', 'enel', 'água', 'sabesp', 'internet', 'vivo', 'claro', 'gás', 'iptu', 'rent', 'utilit'] },\n { key: 'health', keywords: ['farmácia', 'farmacia', 'drogasil', 'drogaria', 'academia', 'smartfit', 'clínica', 'hospital', 'médico', 'saúde', 'gym', 'fitness', 'health', 'pharmac'] },\n { key: 'leisure', keywords: ['cinema', 'cinemark', 'ingresso', 'show', 'teatro', 'viagem', 'hotel', 'steam', 'leisure'] },\n { key: 'shopping', keywords: ['amazon', 'magalu', 'shopee', 'aliexpress', 'loja', 'shopping', 'zara', 'renner', 'store'] },\n]\n\nfunction categorizeSpend(notes: string | undefined): string {\n const s = (notes ?? '').toLowerCase()\n for (const c of SPEND_CATEGORIES) if (c.keywords.some((k) => s.includes(k))) return c.key\n return 'other'\n}\n\n/** \"Gastos por categoria\" — realized expenses grouped into a donut. */\nfunction SpendByCategoryChart() {\n const t = useTranslation()\n const provider = useFinancialProvider()\n const [rows, setRows] = React.useState<Array<{ name: string; value: number }>>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const res = await provider.getMovements({ status: 'paid', direction: 'debit' })\n if (!alive) return\n const totals = new Map<string, number>()\n for (const m of res.data) {\n if (m.movementKind === 'transfer') continue\n const key = categorizeSpend(m.notes)\n totals.set(key, (totals.get(key) ?? 0) + (m.paidAmount || m.amount))\n }\n setRows(\n [...totals.entries()]\n .sort((a, b) => b[1] - a[1])\n .map(([key, value]) => ({ name: t(`financial.home.category.${key}`), value: Math.round(value * 100) / 100 })),\n )\n })()\n return () => { alive = false }\n }, [provider])\n if (rows.length === 0) {\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.home.spendByCategory')}</CardTitle></CardHeader>\n <CardContent className=\"flex h-[200px] items-center justify-center text-sm text-muted-foreground\">\n {t('financial.home.noSpend')}\n </CardContent>\n </Card>\n )\n }\n return (\n <ChartWidget\n type=\"pie\" title={t('financial.home.spendByCategory')} icon=\"PieChart\" categoryKey=\"name\" data={rows}\n series={[{ dataKey: 'value', label: t('financial.home.spendByCategory') }]}\n />\n )\n}\n\n/** \"Próximas contas\" — pending payable bills, soonest due first. */\nfunction UpcomingBills() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const dueLabel = useDueLabel()\n const [bills, setBills] = React.useState<FinancialMovement[]>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const pending = await provider.getMovements({ status: 'pending' })\n if (!alive) return\n setBills(\n pending.data\n .filter((m) => m.direction === 'debit' && m.movementKind === 'bill')\n .sort((a, b) => a.dueDate.localeCompare(b.dueDate)),\n )\n })()\n return () => { alive = false }\n }, [provider])\n return (\n <GoldCard className=\"p-0 overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <h2 className=\"text-sm font-semibold text-foreground\">{t('financial.home.upcomingBills')}</h2>\n </div>\n <div className=\"mt-3\">\n {bills.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-xs text-muted-foreground\">{t('financial.home.noBills')}</div>\n ) : (\n bills.map((bill, i) => (\n <div key={bill.id} className={'flex items-center justify-between px-4 py-3.5' + (i > 0 ? ' border-t border-border' : '')}>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-foreground\">{bill.notes ?? t('financial.home.bill')}</p>\n <p className=\"text-xs text-muted-foreground\">{dueLabel(bill.dueDate)}</p>\n </div>\n <span className=\"shrink-0 text-sm font-semibold tabular-nums text-foreground\">\n {formatCurrency(bill.amount - bill.paidAmount, currency)}\n </span>\n </div>\n ))\n )}\n </div>\n </GoldCard>\n )\n}\n\n/** \"Cartões\" — credit-card accounts with current bill + available limit. */\nfunction CreditCards() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n useEffect(() => { void fetchBankAccounts() }, [])\n const cards = bankAccounts.filter((a) => a.accountType === 'credit_card')\n return (\n <GoldCard className=\"bg-transparent border-0 p-0 shadow-none\">\n <h2 className=\"mb-3 text-sm font-semibold text-foreground\">{t('financial.home.cards')}</h2>\n <div className=\"space-y-3\">\n {cards.map((card) => {\n const fatura = Math.abs(Math.min(0, card.currentBalance))\n const limite = Math.max(0, (card.creditLimit ?? 0) - fatura)\n return (\n <div key={card.id} className=\"rounded-2xl bg-gradient-to-br from-violet-600 to-indigo-700 p-4 text-white shadow-md\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-semibold\">{card.bankName ?? card.name}</span>\n <CreditCardIcon className=\"h-5 w-5 opacity-80\" />\n </div>\n <p className=\"mt-6 text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.currentBill')}</p>\n <p className=\"text-xl font-bold tabular-nums\">{formatCurrency(fatura, currency)}</p>\n <p className=\"mt-2 text-[11px] opacity-70\">{t('financial.home.availableLimit')} {formatCurrency(limite, currency)}</p>\n </div>\n )\n })}\n {cards.length === 0 ? (\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border py-6 text-sm font-medium text-muted-foreground\">\n + {t('financial.home.addCard')}\n </div>\n ) : null}\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Registry builder\n// ---------------------------------------------------------------------------\n\nexport function createFinancialDashboardWidgets(ctx: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <FinancialContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </FinancialContextProvider>\n )\n Wrapped.displayName = `FinancialWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Total balance is finance's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the financial plugin-home, addable via Customize).\n defineKpiWidget({ id: 'financial.kpi.total-balance', title: 'financial.summary.totalBalance', domain: 'financial', defaultOrder: 0, component: withCtx(TotalBalanceKpi) }),\n defineKpiWidget({ id: 'financial.kpi.receivable', title: 'financial.summary.receivable', domain: 'financial', defaultOrder: 1, defaultVisible: false, component: withCtx(ReceivableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.payable', title: 'financial.summary.payable', domain: 'financial', defaultOrder: 2, defaultVisible: false, component: withCtx(PayableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.monthly-flow', title: 'financial.summary.monthlyFlow', domain: 'financial', defaultOrder: 3, defaultVisible: false, component: withCtx(MonthlyFlowKpi) }),\n defineChartWidget({ id: 'financial.chart.cash-flow', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.panel.breakdown', title: 'financial.summary.cashFlowBreakdown', domain: 'financial', span: 1, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(CashFlowBreakdown) }),\n defineCustomWidget({ id: 'financial.panel.overdue', title: 'financial.summary.overdueTitle', domain: 'financial', span: 1, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(OverdueAlerts) }),\n defineTableWidget({ id: 'financial.table.recent', title: 'financial.summary.recentTransactions', domain: 'financial', span: 4, defaultOrder: 20, surfaces: ['plugin-home'], component: withCtx(RecentTransactions) }),\n\n // FINANCE-HOME surface (B2C phone-first dashboard) — a compact analytical\n // layout: hero band → charts row (spend-by-category + cash-flow) → bills +\n // cards. This is a dedicated consumer surface (norman-ai's money screen), NOT\n // the universal B2B 'home': a full-bleed balance hero and credit-card tiles\n // are personal-finance chrome that would leak into every app that merely\n // enables plugin-financial (e.g. the beauty-saas Painel). Apps that want them\n // opt in explicitly by rendering <DashboardCanvas surface=\"finance-home\">.\n defineCustomWidget({ id: 'financial.hero.balance', title: 'financial.home.balance', domain: 'financial', span: 4, defaultOrder: 0, surfaces: ['finance-home'], component: withCtx(BalanceHero) }),\n defineChartWidget({ id: 'financial.chart.spend-by-category', title: 'financial.home.spendByCategory', domain: 'financial', span: 2, defaultOrder: 1, surfaces: ['finance-home'], component: withCtx(SpendByCategoryChart) }),\n defineChartWidget({ id: 'financial.chart.cash-flow-home', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 2, surfaces: ['finance-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.list.upcoming-bills', title: 'financial.home.upcomingBills', domain: 'financial', span: 2, defaultOrder: 3, surfaces: ['finance-home'], component: withCtx(UpcomingBills) }),\n defineCustomWidget({ id: 'financial.cards', title: 'financial.home.cards', domain: 'financial', span: 2, defaultOrder: 4, surfaces: ['finance-home'], component: withCtx(CreditCards) }),\n ]\n}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CostCenter, CardTransaction,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput, TransferResult,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,\n DateRange, InvoiceStatus, MovementStatus,\n} from '../types'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet nextId = 1\nfunction uid(): string {\n return String(nextId++)\n}\n\nfunction now(): string {\n return new Date().toISOString()\n}\n\nfunction today(): string {\n return new Date().toISOString().slice(0, 10)\n}\n\nfunction round2(n: number): number {\n return Math.round(n * 100) / 100\n}\n\nfunction matchesDateRange(dateStr: string | undefined, range?: DateRange): boolean {\n if (!range || !dateStr) return true\n return dateStr >= range.from && dateStr <= range.to\n}\n\nfunction matchesStatus<T extends string>(status: T, filter?: T | T[]): boolean {\n if (!filter) return true\n if (Array.isArray(filter)) return filter.includes(status)\n return status === filter\n}\n\nfunction paginate<T>(items: T[], page?: number, pageSize?: number): PaginatedResult<T> {\n const p = page ?? 1\n const ps = pageSize ?? 50\n const start = (p - 1) * ps\n return { data: items.slice(start, start + ps), total: items.length }\n}\n\n// ---------------------------------------------------------------------------\n// In-memory store\n// ---------------------------------------------------------------------------\n\ninterface MockStore {\n invoices: Invoice[]\n invoiceItems: InvoiceItem[]\n movements: FinancialMovement[]\n bankAccounts: BankAccount[]\n cashSessions: CashSession[]\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n chartOfAccounts: ChartOfAccountsNode[]\n costCenters: CostCenter[]\n cardTransactions: CardTransaction[]\n}\n\nfunction createStore(options?: MockFinancialProviderOptions): MockStore {\n const tenantId = 'mock-tenant'\n const seed = options?.seed\n\n const defaultPMTypes: PaymentMethodType[] = (options?.paymentMethodTypes ?? [\n { name: 'Cash', transactionType: 'cash' },\n { name: 'Credit Card', transactionType: 'credit_card' },\n { name: 'Debit Card', transactionType: 'debit_card' },\n { name: 'PIX', transactionType: 'pix' },\n { name: 'Bank Transfer', transactionType: 'transfer' },\n ]).map((t) => ({\n id: uid(),\n name: t.name,\n transactionType: t.transactionType,\n isActive: true,\n tenantId,\n createdAt: now(),\n }))\n\n const cashAccount: BankAccount = {\n id: uid(),\n name: 'Main Cash Register',\n accountType: 'cash_register',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n const bankAccount: BankAccount = {\n id: uid(),\n name: 'Business Checking',\n accountType: 'bank_account',\n bankName: 'Main Bank',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n return {\n // Seeded data (when provided) makes the module render as if the user already\n // has accounts + transactions — a populated Summary/Statements instead of the\n // empty onboarding state. Seed arrays are copied so the caller's data is not mutated.\n invoices: seed?.invoices ? [...seed.invoices] : [],\n invoiceItems: seed?.invoiceItems ? [...seed.invoiceItems] : [],\n movements: seed?.movements ? [...seed.movements] : [],\n bankAccounts: seed?.bankAccounts ? [...seed.bankAccounts] : [cashAccount, bankAccount],\n cashSessions: [],\n paymentMethods: seed?.paymentMethods ? [...seed.paymentMethods] : [],\n paymentMethodTypes: defaultPMTypes,\n chartOfAccounts: [],\n costCenters: [],\n cardTransactions: [],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mock provider factory\n// ---------------------------------------------------------------------------\n\n/**\n * Pre-populated store data. Any omitted collection stays empty (except\n * bankAccounts, which fall back to the two default mock accounts when absent).\n * Pass full domain objects — the mock treats them as the existing ledger.\n */\nexport interface MockFinancialSeed {\n bankAccounts?: BankAccount[]\n invoices?: Invoice[]\n invoiceItems?: InvoiceItem[]\n movements?: FinancialMovement[]\n paymentMethods?: PaymentMethod[]\n}\n\nexport interface MockFinancialProviderOptions {\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n /** Pre-seed the in-memory store so the module renders populated (not the empty state). */\n seed?: MockFinancialSeed\n}\n\nexport function createMockFinancialProvider(options?: MockFinancialProviderOptions): FinancialDataProvider {\n const store = createStore(options)\n const tenantId = 'mock-tenant'\n\n function recalcInvoiceStatus(invoice: Invoice): void {\n if (invoice.paidAmount >= invoice.totalAmount) {\n invoice.status = 'paid'\n } else if (invoice.paidAmount > 0) {\n invoice.status = 'partial'\n } else {\n // Check if any movement is overdue\n const movements = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n const hasOverdue = movements.some((m) => m.status === 'overdue' || (m.status === 'pending' && m.dueDate < today()))\n invoice.status = hasOverdue ? 'overdue' : 'open'\n }\n invoice.updatedAt = now()\n }\n\n const provider: FinancialDataProvider = {\n // --- Invoices ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n let results = [...store.invoices]\n if (query.direction) results = results.filter((i) => i.direction === query.direction)\n if (query.status) results = results.filter((i) => matchesStatus(i.status, query.status as InvoiceStatus | InvoiceStatus[]))\n if (query.contactId) results = results.filter((i) => i.contactId === query.contactId)\n if (query.accountId) {\n const invoiceIds = new Set(store.invoiceItems.filter((item) => item.accountId === query.accountId).map((item) => item.invoiceId))\n results = results.filter((invoice) => invoiceIds.has(invoice.id))\n }\n if (query.costCenterId) {\n const invoiceIds = new Set(store.invoiceItems.filter((item) => item.costCenterId === query.costCenterId).map((item) => item.invoiceId))\n results = results.filter((invoice) => invoiceIds.has(invoice.id))\n }\n if (query.dateRange) results = results.filter((i) => matchesDateRange(i.invoiceDate, query.dateRange))\n if (query.search) {\n const s = query.search.toLowerCase()\n results = results.filter((i) =>\n i.contactName?.toLowerCase().includes(s) ||\n i.observations?.toLowerCase().includes(s) ||\n i.fiscalNumber?.toLowerCase().includes(s)\n )\n }\n results.sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n return paginate(results, query.page, query.pageSize)\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n return store.invoices.find((i) => i.id === id) ?? null\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n return store.invoiceItems.filter((i) => i.invoiceId === invoiceId)\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const invoiceId = uid()\n const totalAmount = input.items.reduce((sum, item) => {\n const itemTotal = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n return sum + itemTotal\n }, 0)\n\n const itemsSummary = input.items.map((i) => i.description).filter(Boolean).join(', ')\n\n const invoice: Invoice = {\n id: invoiceId,\n direction: input.direction,\n invoiceDate: input.invoiceDate,\n fiscalNumber: input.fiscalNumber,\n totalAmount,\n paidAmount: 0,\n status: 'open',\n totalInstallments: input.installments.length || 1,\n contactId: input.contactId,\n contactName: input.contactName,\n cashSessionId: input.cashSessionId,\n unitId: input.unitId,\n observations: input.observations,\n itemsSummary: itemsSummary || undefined,\n metadata: input.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.invoices.push(invoice)\n\n // Create items\n for (const itemInput of input.items) {\n const itemTotal = itemInput.quantity * itemInput.unitPrice - (itemInput.discount ?? 0) + (itemInput.surcharge ?? 0)\n const item: InvoiceItem = {\n id: uid(),\n invoiceId,\n itemKind: itemInput.itemKind,\n referenceId: itemInput.referenceId,\n description: itemInput.description,\n quantity: itemInput.quantity,\n unitPrice: itemInput.unitPrice,\n totalAmount: itemTotal,\n discount: itemInput.discount ?? 0,\n surcharge: itemInput.surcharge ?? 0,\n accountId: itemInput.accountId,\n costCenterId: itemInput.costCenterId,\n metadata: itemInput.metadata,\n createdAt: now(),\n }\n store.invoiceItems.push(item)\n }\n\n // Create installment movements\n for (const movInput of input.installments) {\n const movement: FinancialMovement = {\n id: uid(),\n invoiceId,\n direction: input.direction,\n movementKind: movInput.movementKind,\n amount: movInput.amount,\n paidAmount: 0,\n status: 'pending',\n dueDate: movInput.dueDate,\n installmentNumber: movInput.installmentNumber,\n paymentMethodId: movInput.paymentMethodId,\n bankAccountId: movInput.bankAccountId,\n notes: movInput.notes,\n metadata: movInput.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(movement)\n }\n\n return invoice\n },\n\n async updateInvoice(id: string, data: Partial<Invoice>): Promise<Invoice> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n Object.assign(invoice, data, { updatedAt: now() })\n return invoice\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n invoice.status = 'cancelled'\n invoice.updatedAt = now()\n // Cancel all pending movements\n store.movements\n .filter((m) => m.invoiceId === id && m.status === 'pending')\n .forEach((m) => { m.status = 'cancelled'; m.updatedAt = now() })\n },\n\n // --- Movements ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n let results = [...store.movements]\n if (query.direction) results = results.filter((m) => m.direction === query.direction)\n if (query.status) results = results.filter((m) => matchesStatus(m.status, query.status as MovementStatus | MovementStatus[]))\n if (query.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query.cashSessionId) results = results.filter((m) => m.cashSessionId === query.cashSessionId)\n if (query.dateRange) results = results.filter((m) => matchesDateRange(m.dueDate, query.dateRange))\n results.sort((a, b) => a.dueDate.localeCompare(b.dueDate))\n return paginate(results, query.page, query.pageSize)\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const bill = store.movements.find((m) => m.id === input.movementId)\n if (!bill) throw new Error(`Movement ${input.movementId} not found`)\n\n // Net card settlement: derive the processing/MDR fee from the payment method (credits only).\n const method = input.paymentMethodId ? store.paymentMethods.find((pm) => pm.id === input.paymentMethodId) : undefined\n const feePct = bill.direction === 'credit' ? (method?.discountValue ?? 0) : 0\n const thisFee = round2(input.amount * (feePct / 100))\n\n // 1. Record the cash event as its OWN payment movement (one row per payment).\n const payment: FinancialMovement = {\n id: uid(),\n invoiceId: bill.invoiceId,\n direction: bill.direction,\n movementKind: 'payment',\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: thisFee,\n status: 'paid',\n dueDate: bill.dueDate,\n paymentDate: input.paymentDate,\n installmentNumber: bill.installmentNumber,\n paymentMethodId: input.paymentMethodId,\n paymentMethodTypeId: input.paymentMethodTypeId,\n bankAccountId: input.bankAccountId,\n cashSessionId: input.cashSessionId,\n cardBrand: input.cardBrand,\n cardInstallments: input.cardInstallments,\n notes: input.notes,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(payment)\n\n // 2. Update the bill (obligation) cache: cumulative paid + status. Clear its cash\n // fields so it stops being a cash event (the payment row is now the cash event).\n bill.paidAmount = round2(bill.paidAmount + input.amount)\n bill.status = bill.paidAmount >= bill.amount ? 'paid' : 'partial'\n bill.paymentDate = undefined\n bill.bankAccountId = undefined\n bill.updatedAt = now()\n\n // Update bank account balance by the NET cash impact (credit nets the fee).\n if (input.bankAccountId) {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n if (account) {\n if (bill.direction === 'credit') {\n account.currentBalance = round2(account.currentBalance + (input.amount - thisFee))\n } else {\n account.currentBalance = round2(account.currentBalance - input.amount)\n }\n account.updatedAt = now()\n }\n }\n\n // 3. Recalculate invoice status from its bills\n if (bill.invoiceId) {\n const invoice = store.invoices.find((i) => i.id === bill.invoiceId)\n if (invoice) {\n const bills = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n invoice.paidAmount = bills.reduce((sum, m) => sum + m.paidAmount, 0)\n recalcInvoiceStatus(invoice)\n }\n }\n\n return payment\n },\n\n async cancelMovement(id: string): Promise<void> {\n const movement = store.movements.find((m) => m.id === id)\n if (!movement) throw new Error(`Movement ${id} not found`)\n movement.status = 'cancelled'\n movement.updatedAt = now()\n },\n\n // --- Transfers (between accounts) ---\n async createTransfer(input: CreateTransferInput): Promise<TransferResult> {\n if (!input.fromAccountId || !input.toAccountId || input.fromAccountId === input.toAccountId) {\n throw new Error('Source and destination accounts must differ')\n }\n if (!(input.amount > 0)) throw new Error('Amount must be greater than zero')\n const transferId = uid()\n const debitMovementId = uid()\n const creditMovementId = uid()\n const base = {\n movementKind: 'transfer' as const,\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: 0,\n status: 'paid' as const,\n dueDate: input.date,\n paymentDate: input.date,\n notes: input.notes,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push({\n ...base, id: debitMovementId, direction: 'debit', bankAccountId: input.fromAccountId,\n metadata: { transferId, transferRole: 'out', counterAccountId: input.toAccountId },\n } as FinancialMovement)\n store.movements.push({\n ...base, id: creditMovementId, direction: 'credit', bankAccountId: input.toAccountId,\n metadata: { transferId, transferRole: 'in', counterAccountId: input.fromAccountId },\n } as FinancialMovement)\n // Reflect in stored balances.\n const from = store.bankAccounts.find((a) => a.id === input.fromAccountId)\n const to = store.bankAccounts.find((a) => a.id === input.toAccountId)\n if (from) { from.currentBalance = round2(from.currentBalance - input.amount); from.updatedAt = now() }\n if (to) { to.currentBalance = round2(to.currentBalance + input.amount); to.updatedAt = now() }\n return { transferId, debitMovementId, creditMovementId }\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n return store.bankAccounts.filter((a) => a.isActive)\n },\n\n async createBankAccount(data: CreateBankAccountInput): Promise<BankAccount> {\n const account: BankAccount = {\n id: uid(),\n name: data.name,\n accountType: data.accountType,\n bankName: data.bankName,\n accountNumber: data.accountNumber,\n agencyNumber: data.agencyNumber,\n currentBalance: data.initialBalance ?? 0,\n initialBalance: data.initialBalance ?? 0,\n creditLimit: data.creditLimit,\n dueDay: data.dueDay,\n closingDay: data.closingDay,\n isActive: true,\n unitId: data.unitId,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.bankAccounts.push(account)\n return account\n },\n\n async updateBankAccount(id: string, data: Partial<BankAccount>): Promise<BankAccount> {\n const account = store.bankAccounts.find((a) => a.id === id)\n if (!account) throw new Error(`Bank account ${id} not found`)\n Object.assign(account, data, { updatedAt: now() })\n return account\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n let results = [...store.cashSessions]\n if (bankAccountId) results = results.filter((s) => s.bankAccountId === bankAccountId)\n return results.sort((a, b) => b.openedAt.localeCompare(a.openedAt))\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n return store.cashSessions.find((s) => s.bankAccountId === bankAccountId && s.status === 'open') ?? null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n const session: CashSession = {\n id: uid(),\n bankAccountId: input.bankAccountId,\n bankAccountName: account?.name,\n status: 'open',\n openedAt: now(),\n openedByUserId: input.openedByUserId,\n openedByName: input.openedByName,\n openingBalance: input.openingBalance,\n unitId: input.unitId,\n tenantId,\n createdAt: now(),\n }\n store.cashSessions.push(session)\n return session\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const session = store.cashSessions.find((s) => s.id === input.sessionId)\n if (!session) throw new Error(`Cash session ${input.sessionId} not found`)\n\n // Calculate expected balance\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === session.id && m.status === 'paid')\n const inflow = sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0)\n const outflow = sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0)\n const expectedBalance = session.openingBalance + inflow - outflow\n\n session.status = 'closed'\n session.closedAt = now()\n session.closedByUserId = input.closedByUserId\n session.closedByName = input.closedByName\n session.closingBalance = input.closingBalance\n session.expectedBalance = expectedBalance\n session.difference = input.closingBalance - expectedBalance\n session.notes = input.notes\n\n return session\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const session = store.cashSessions.find((s) => s.id === sessionId)\n if (!session) throw new Error(`Cash session ${sessionId} not found`)\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === sessionId && m.status === 'paid')\n return {\n session,\n movementCount: sessionMovements.length,\n totalInflow: sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n totalOutflow: sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n return store.paymentMethods.filter((pm) => pm.isActive)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n return store.paymentMethodTypes.filter((t) => t.isActive)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n return store.chartOfAccounts.filter((n) => n.isActive)\n },\n\n async getCostCenters(): Promise<CostCenter[]> {\n return store.costCenters.filter((c) => c.isActive)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n let results = [...store.cardTransactions]\n if (dateRange) results = results.filter((t) => matchesDateRange(t.expectedDate, dateRange))\n return results.sort((a, b) => a.expectedDate.localeCompare(b.expectedDate))\n },\n\n // --- Statements (ERP extract: opening balance + realized cash + per-row net/fee) ---\n async getStatement(query: StatementQuery): Promise<StatementResult> {\n const todayStr = today()\n // A cash event = any non-cancelled movement with a payment_date (payment, transfer,\n // or a legacy in-place-paid bill). Bills lose their payment_date once split.\n const isRealized = (m: FinancialMovement) => m.status !== 'cancelled' && !!m.paymentDate\n const consolidated = !query.bankAccountId\n const scopeAccounts = consolidated\n ? store.bankAccounts.filter((a) => a.isActive)\n : store.bankAccounts.filter((a) => a.id === query.bankAccountId)\n const accountIds = new Set(scopeAccounts.map((a) => a.id))\n const accountNameById = new Map(store.bankAccounts.map((a) => [a.id, a.name]))\n const initialSum = scopeAccounts.reduce((s, a) => s + a.initialBalance, 0)\n // Only bail when a specific account was asked for and not found.\n if (!consolidated && accountIds.size === 0) {\n return { entries: [], openingBalance: 0, closingBalance: 0, totalCredits: 0, totalDebits: 0, totalFees: 0, net: 0, accountId: query.bankAccountId }\n }\n\n const netOf = (m: FinancialMovement) => m.direction === 'credit'\n ? m.paidAmount - (m.feeAmount ?? 0)\n : -m.paidAmount\n\n // Consolidated => all realized movements (incl. those with no bank account).\n const inScope = store.movements.filter((m) =>\n isRealized(m) && (consolidated || (m.bankAccountId && accountIds.has(m.bankAccountId))))\n\n const openingBalance = round2(initialSum + inScope\n .filter((m) => (m.paymentDate ?? '') < query.dateRange.from)\n .reduce((s, m) => s + netOf(m), 0))\n\n const rangeMovs = inScope\n .filter((m) => matchesDateRange(m.paymentDate, query.dateRange))\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? '') || a.createdAt.localeCompare(b.createdAt))\n\n let balance = openingBalance\n let totalCredits = 0, totalDebits = 0, totalFees = 0\n const entries: StatementEntry[] = rangeMovs.map((movement) => {\n const gross = movement.paidAmount\n const isCredit = movement.direction === 'credit'\n const fee = isCredit ? (movement.feeAmount ?? 0) : 0\n const net = isCredit ? round2(gross - fee) : gross\n const isTransfer = movement.movementKind === 'transfer'\n const meta = (movement.metadata ?? {}) as any\n const entryKind: StatementEntry['entryKind'] = isTransfer\n ? (meta.transferRole === 'in' ? 'transfer-in' : 'transfer-out')\n : 'movement'\n const counterAccountId = isTransfer ? meta.counterAccountId : undefined\n balance = round2(isCredit ? balance + net : balance - net)\n if (!(consolidated && isTransfer)) {\n if (isCredit) totalCredits = round2(totalCredits + net)\n else totalDebits = round2(totalDebits + net)\n totalFees = round2(totalFees + fee)\n }\n return {\n movement,\n invoice: movement.invoiceId ? store.invoices.find((i) => i.id === movement.invoiceId) : undefined,\n runningBalance: balance,\n gross, fee, net, entryKind,\n counterAccountId,\n counterAccountName: counterAccountId ? accountNameById.get(counterAccountId) : undefined,\n } as StatementEntry\n })\n\n // Link reconciled bank lines to the internal movement they were matched to.\n for (const e of entries) {\n const mid = e.movement.matchedMovementId\n const mm = mid ? store.movements.find((m) => m.id === mid) : undefined\n if (!mm) continue\n const inv = mm.invoiceId ? store.invoices.find((i) => i.id === mm.invoiceId) : undefined\n e.reconciledWith = {\n movementId: mm.id,\n description: mm.notes ?? undefined,\n invoiceId: mm.invoiceId,\n fiscalNumber: inv?.fiscalNumber,\n contactName: inv?.contactName,\n }\n }\n\n const accountCurrentBalance = round2(initialSum + inScope\n .filter((m) => (m.paymentDate ?? '') <= todayStr)\n .reduce((s, m) => s + netOf(m), 0))\n\n return {\n entries,\n openingBalance,\n closingBalance: balance,\n totalCredits,\n totalDebits,\n totalFees,\n net: round2(totalCredits - totalDebits),\n accountId: query.bankAccountId,\n accountCurrentBalance,\n }\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n const totalBalance = store.bankAccounts\n .filter((a) => a.isActive)\n .reduce((sum, a) => sum + a.currentBalance, 0)\n\n const pendingReceivable = store.movements.filter((m) =>\n m.direction === 'credit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n const pendingPayable = store.movements.filter((m) =>\n m.direction === 'debit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n\n const todayStr = today()\n // \"Monthly\" cash flow uses a trailing 30-day window (rolling month), not\n // calendar month-to-date. Month-to-date collapses to near-empty in the\n // first days of a month — on the 1st it's a single day — so the cash-flow\n // chart and Fluxo Mensal KPI read empty even with a full month of realized\n // activity. A rolling window stays representative on every day of the month.\n const monthAgo = new Date()\n monthAgo.setDate(monthAgo.getDate() - 30)\n const monthStart = monthAgo.toISOString().slice(0, 10)\n const monthEnd = todayStr\n\n const monthMovements = store.movements.filter((m) =>\n m.movementKind === 'payment' && matchesDateRange(m.paymentDate, dateRange ?? { from: monthStart, to: monthEnd })\n )\n\n const overdueReceivable = pendingReceivable.filter((m) => m.dueDate < todayStr)\n const overduePayable = pendingPayable.filter((m) => m.dueDate < todayStr)\n\n return {\n totalBalance,\n totalReceivable: pendingReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n totalPayable: pendingPayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n monthlyInflow: monthMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n monthlyOutflow: monthMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n overdueReceivableCount: overdueReceivable.length,\n overdueReceivableAmount: overdueReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n overduePayableCount: overduePayable.length,\n overduePayableAmount: overduePayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n }\n },\n\n // --- Reconciliation (conciliação) ---\n async importBankTransactions(input) {\n let imported = 0, duplicates = 0\n for (const line of input.lines) {\n const dup = store.movements.some((m) => m.externalSource === line.externalSource && m.externalId === line.externalId)\n if (dup) { duplicates++; continue }\n store.movements.push({\n id: uid(),\n direction: line.direction,\n movementKind: 'payment',\n amount: line.amount,\n paidAmount: line.amount,\n status: 'paid',\n dueDate: line.date,\n paymentDate: line.date,\n bankAccountId: line.bankAccountId ?? input.bankAccountId,\n notes: line.description,\n externalId: line.externalId,\n externalSource: line.externalSource,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n } as FinancialMovement)\n imported++\n }\n return { imported, duplicates }\n },\n\n async getUnreconciled(query) {\n let results = store.movements.filter((m) => m.externalSource && !m.reconciledAt)\n if (query?.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query?.dateRange) results = results.filter((m) => matchesDateRange(m.paymentDate, query.dateRange))\n return results.sort((a, b) => (b.paymentDate ?? '').localeCompare(a.paymentDate ?? ''))\n },\n\n async suggestReconciliation(bankMovementId) {\n const line = store.movements.find((m) => m.id === bankMovementId)\n if (!line) return []\n const amount = line.amount\n const tol = Math.max(0.01, round2(amount * 0.02))\n const lineDate = line.paymentDate ?? line.dueDate\n return store.movements\n .filter((m) => !m.externalSource && !m.reconciledAt && m.direction === line.direction && m.id !== bankMovementId && Math.abs(m.amount - amount) <= tol)\n .map((m) => {\n const amtScore = amount > 0 ? Math.max(0, 1 - Math.abs(m.amount - amount) / amount) : 0\n const refDate = m.dueDate ?? m.paymentDate\n const days = lineDate && refDate ? Math.abs((new Date(lineDate).getTime() - new Date(refDate).getTime()) / 86400000) : 30\n const dateScore = Math.max(0, 1 - days / 30)\n return {\n movement: m,\n invoice: m.invoiceId ? store.invoices.find((i) => i.id === m.invoiceId) : undefined,\n score: round2(0.7 * amtScore + 0.3 * dateScore),\n }\n })\n .sort((a, b) => b.score - a.score)\n .slice(0, 25)\n },\n\n async reconcileMovement(input) {\n const line = store.movements.find((m) => m.id === input.bankMovementId)\n if (line) { line.reconciledAt = now(); line.matchedMovementId = input.matchedMovementId; line.updatedAt = now() }\n if (input.matchedMovementId) {\n const internal = store.movements.find((m) => m.id === input.matchedMovementId)\n if (internal) { internal.reconciledAt = now(); internal.updatedAt = now() }\n }\n },\n\n async unreconcileMovement(bankMovementId) {\n const line = store.movements.find((m) => m.id === bankMovementId)\n if (!line) return\n const matchedId = line.matchedMovementId\n line.reconciledAt = undefined; line.matchedMovementId = undefined; line.updatedAt = now()\n if (matchedId) {\n const internal = store.movements.find((m) => m.id === matchedId)\n if (internal) { internal.reconciledAt = undefined; internal.updatedAt = now() }\n }\n },\n }\n\n return provider\n}\n","// Central physical-table-name registry for plugin-financial. Providers import T so\n// the plg_financial_* strings live in one place.\nexport const T = {\n movements: 'plg_financial_movements',\n chartOfAccounts: 'plg_financial_chart_of_accounts',\n bankAccounts: 'plg_financial_bank_accounts',\n cardBrands: 'plg_financial_card_brands',\n costCenters: 'plg_financial_cost_centers',\n cashRegisterSessions: 'plg_financial_cash_register_sessions',\n paymentMethods: 'plg_financial_payment_methods',\n paymentMethodTypes: 'plg_financial_payment_method_types',\n} as const\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CostCenter, CardTransaction,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput, TransferResult,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,\n DateRange, ReconciliationCandidate,\n} from '../types'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport { getFinancialTenantId } from '../lib/tenant'\nimport { T } from './tables'\n\nfunction getTenantId(): string | undefined {\n // Local override wins; else use the app's active tenant so writes pass RLS.\n return getFinancialTenantId() ?? getActiveTenantId()\n}\n\nfunction snakeToCamel(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return result\n}\n\nfunction camelToSnake(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('_')) continue\n result[key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)] = value\n }\n return result\n}\n\nfunction getClients() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) throw new Error('Supabase not initialized')\n // Core tables now live in PUBLIC (legacy dedicated core schema is gone). Both\n // handles are the single public client; `core` retained for call-site readability.\n return { core: supabase, pub: supabase }\n}\n\n/** Map order stage to InvoiceStatus for the financial UI */\nfunction mapStageToInvoiceStatus(stage?: string): string {\n switch (stage) {\n case 'paid': return 'paid'\n case 'partial': return 'partial'\n case 'overdue': return 'overdue'\n case 'cancelled': return 'cancelled'\n case 'invoiced': return 'open'\n case 'booked': return 'open'\n default: return 'open'\n }\n}\n\nlet _overdueSwept = false\n\n/** Batch-mark overdue: pending/partial movements past due → 'overdue', then update parent invoices */\nasync function sweepOverdue() {\n if (_overdueSwept) return\n _overdueSwept = true\n try {\n const { core, pub } = getClients()\n const today = new Date().toISOString().slice(0, 10)\n\n // Mark overdue movements\n const { data: overdueMovs } = await pub.from(T.movements)\n .update({ status: 'overdue' })\n .in('status', ['pending', 'partial'])\n .lt('due_date', today)\n .select('invoice_id')\n\n // Collect unique invoice IDs and update their status\n if (overdueMovs && overdueMovs.length > 0) {\n const invoiceIds = [...new Set(overdueMovs.map((m: any) => m.invoice_id).filter(Boolean))]\n for (const invId of invoiceIds) {\n const { data: allMovs } = await pub.from(T.movements)\n .select('status')\n .eq('invoice_id', invId)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const hasOverdue = movs.some((m: any) => m.status === 'overdue')\n const allPaid = movs.every((m: any) => m.status === 'paid')\n const invoiceStatus = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'open'\n const invoiceStage = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'invoiced'\n // Only update financial stage — don't overwrite agenda status\n await core.from('orders').update({ stage: invoiceStage }).eq('id', invId)\n }\n }\n } catch {\n // Non-critical — don't block the UI\n }\n}\n\n// S2 (data-model refactor): paid amount, balance and status are DERIVED from the\n// append-only ledger via v_invoice_balances — the single source of truth — not\n// from stored order.stage / metadata.paidAmount (which drift). See\n// docs/DATA-MODEL.md.\nasync function fetchInvoiceBalances(\n pub: any,\n ids: string[],\n): Promise<Map<string, { paid: number; balance: number; status: string }>> {\n const map = new Map<string, { paid: number; balance: number; status: string }>()\n if (!ids.length) return map\n const { data } = await pub\n .from('v_invoice_balances')\n .select('invoice_id, paid, balance, status')\n .in('invoice_id', ids)\n for (const r of (data ?? []) as any[]) {\n map.set(r.invoice_id, { paid: Number(r.paid) || 0, balance: Number(r.balance) || 0, status: r.status })\n }\n return map\n}\n\nfunction round2(n: number): number {\n return Math.round(n * 100) / 100\n}\n\nasync function findOrderIdsByItemMetadata(\n core: any,\n filters: { accountId?: string; costCenterId?: string },\n): Promise<string[] | undefined> {\n if (!filters.accountId && !filters.costCenterId) return undefined\n\n let qb = core.from('order_items').select('order_id')\n if (filters.accountId) qb = qb.filter('metadata->>accountId', 'eq', filters.accountId)\n if (filters.costCenterId) qb = qb.filter('metadata->>costCenterId', 'eq', filters.costCenterId)\n\n const { data } = await qb\n const ids: string[] = []\n for (const row of (data ?? []) as Array<{ order_id?: unknown }>) {\n if (typeof row.order_id === 'string' && row.order_id.length > 0) ids.push(row.order_id)\n }\n return Array.from(new Set(ids))\n}\n\n/** Card/MDR fee percent for a configured payment method (0 when none / not a fee method). */\nasync function getMethodFeePct(pub: any, paymentMethodId?: string): Promise<number> {\n if (!paymentMethodId) return 0\n const { data } = await pub.from(T.paymentMethods).select('discount_value').eq('id', paymentMethodId).single()\n return Number(data?.discount_value) || 0\n}\n\n/** Generate a correlation id; falls back when crypto.randomUUID is unavailable. */\nfunction genId(): string {\n try {\n if (typeof crypto !== 'undefined' && (crypto as any).randomUUID) return (crypto as any).randomUUID()\n } catch { /* noop */ }\n return 'tr-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 10)\n}\n\nexport function createSupabaseFinancialProvider(): FinancialDataProvider {\n const provider: FinancialDataProvider = {\n // --- Invoices (orders at stage=invoiced/paid/partial/overdue/cancelled with direction) ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n const { core, pub } = getClients()\n let qb = core.from('orders').select('*', { count: 'exact' })\n\n // Show orders with financial relevance: booked (with amount) + invoiced stages\n qb = qb.in('stage', ['booked', 'invoiced', 'paid', 'partial', 'overdue', 'cancelled'])\n qb = qb.gt('total', 0)\n\n // Filter by direction (credit=receivable, debit=payable)\n if (query.direction) {\n qb = qb.eq('direction', query.direction)\n }\n\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n const itemScopedOrderIds = await findOrderIdsByItemMetadata(core, {\n accountId: query.accountId,\n costCenterId: query.costCenterId,\n })\n if (itemScopedOrderIds) {\n if (itemScopedOrderIds.length === 0) return { data: [], total: 0 }\n qb = qb.in('id', itemScopedOrderIds)\n }\n if (query.contactId) qb = qb.eq('party_id', query.contactId)\n if (query.search) qb = qb.ilike('notes', `%${query.search}%`)\n if (query.dateRange) qb = qb.gte('created_at', query.dateRange.from).lte('created_at', query.dateRange.to)\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('created_at', { ascending: false })\n const { data, count } = await qb\n\n const bal = await fetchInvoiceBalances(pub, (data ?? []).map((r: any) => r.id))\n const invoices: Invoice[] = (data ?? []).map((r: any) => {\n const meta = r.metadata ?? {}\n // Resolve direction from stage model or legacy kind\n const dir = r.direction ?? (r.kind === 'invoice_payable' ? 'debit' : 'credit')\n const b = bal.get(r.id)\n return {\n id: r.id,\n direction: dir,\n invoiceDate: r.created_at?.slice(0, 10) ?? '',\n fiscalNumber: r.reference_number,\n totalAmount: r.total ?? 0,\n paidAmount: b?.paid ?? meta.paidAmount ?? 0,\n status: b?.status ?? mapStageToInvoiceStatus(r.stage),\n totalInstallments: meta.installmentCount ?? 1,\n contactId: r.party_id,\n contactName: meta.contactName,\n observations: r.notes,\n itemsSummary: meta.itemsSummary,\n tenantId: r.tenant_id,\n createdAt: r.created_at,\n updatedAt: r.updated_at,\n } as Invoice\n })\n return { data: invoices, total: count ?? 0 }\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n const { core, pub } = getClients()\n const { data } = await core.from('orders').select('*').eq('id', id).single()\n if (!data) return null\n const o = snakeToCamel(data) as any\n const meta = data.metadata ?? {}\n // Paid amount + status are DERIVED from the ledger view (single source of truth).\n const balance = (await fetchInvoiceBalances(pub, [id])).get(id)\n const { data: movs } = await pub.from(T.movements)\n .select('paid_amount')\n .eq('invoice_id', id)\n .eq('movement_kind', 'bill')\n return {\n id: o.id,\n direction: o.direction ?? (o.kind === 'invoice_payable' ? 'debit' : 'credit'),\n invoiceDate: o.createdAt?.slice(0, 10) ?? '',\n fiscalNumber: o.referenceNumber,\n totalAmount: o.total ?? 0, paidAmount: balance?.paid ?? 0,\n status: balance?.status ?? mapStageToInvoiceStatus(o.stage),\n totalInstallments: (movs ?? []).length || 1, contactId: o.partyId,\n contactName: meta.contactName, itemsSummary: meta.itemsSummary,\n bookingStartsAt: o.startsAt ?? undefined,\n observations: o.notes,\n tenantId: o.tenantId, createdAt: o.createdAt, updatedAt: o.updatedAt,\n } as Invoice\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n const { core, pub } = getClients()\n const { data } = await core.from('order_items').select('*').eq('order_id', invoiceId).order('sort_order')\n return (data ?? []).map((r: any) => {\n const i = snakeToCamel(r) as any\n return {\n id: i.id, invoiceId, itemKind: i.metadata?.itemKind ?? 'other',\n description: i.name ?? '', quantity: i.quantity ?? 1,\n unitPrice: i.unitPrice ?? 0, totalAmount: i.total ?? 0,\n discount: i.discount ?? 0, surcharge: 0,\n referenceId: i.productId ?? i.serviceId,\n accountId: i.metadata?.accountId,\n costCenterId: i.metadata?.costCenterId,\n createdAt: i.createdAt,\n } as InvoiceItem\n })\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const kind = input.direction === 'debit' ? 'invoice_payable' : 'invoice_receivable'\n const totalAmount = input.items.reduce((sum, item) => sum + item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0), 0)\n const itemsSummary = input.items.map((i: any) => i.description).filter(Boolean).join(', ')\n\n // Auto-generate reference number if not provided\n let referenceNumber = input.fiscalNumber\n if (!referenceNumber && tenantId) {\n const prefix = input.direction === 'credit' ? 'REC' : 'PAG'\n const { data: seq } = await core.rpc('next_sequence', { p_tenant_id: tenantId, p_kind: kind })\n if (seq) referenceNumber = `${prefix}-${String(seq).padStart(5, '0')}`\n }\n\n const { data: order } = await core.from('orders').insert({\n tenant_id: tenantId, kind, status: 'open',\n stage: 'invoiced',\n direction: input.direction,\n reference_number: referenceNumber,\n total: totalAmount, party_id: input.contactId,\n notes: input.observations,\n currency: 'BRL',\n metadata: { itemsSummary, contactName: input.contactName, installmentCount: input.installments.length || 1 },\n }).select().single()\n\n if (order && input.items.length > 0) {\n await core.from('order_items').insert(\n input.items.map((item, i) => ({\n order_id: order.id, name: item.description,\n quantity: item.quantity, unit_price: item.unitPrice,\n discount: item.discount ?? 0,\n total: item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0),\n sort_order: i,\n metadata: {\n itemKind: item.itemKind,\n referenceId: item.referenceId,\n accountId: item.accountId,\n costCenterId: item.costCenterId,\n },\n }))\n )\n }\n\n // Create installment movements\n if (order && input.installments.length > 0) {\n await pub.from(T.movements).insert(\n input.installments.map((inst, i) => ({\n tenant_id: tenantId, invoice_id: order.id,\n direction: input.direction, movement_kind: inst.movementKind,\n amount: inst.amount, paid_amount: 0, status: 'pending',\n due_date: inst.dueDate, installment_number: inst.installmentNumber ?? i + 1,\n }))\n )\n }\n\n return {\n id: order!.id, direction: input.direction, invoiceDate: new Date().toISOString().slice(0, 10),\n fiscalNumber: referenceNumber,\n totalAmount, paidAmount: 0, status: 'open', totalInstallments: input.installments.length || 1,\n contactName: input.contactName, itemsSummary,\n tenantId: tenantId!, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(),\n } as Invoice\n },\n\n async updateInvoice(id: string, partial: Partial<Invoice>): Promise<Invoice> {\n const { core, pub } = getClients()\n const row: any = {}\n if (partial.observations) row.notes = partial.observations\n if (partial.totalAmount) row.total = partial.totalAmount\n if (partial.status) row.status = partial.status\n if (Object.keys(row).length > 0) await core.from('orders').update(row).eq('id', id)\n return (await provider.getInvoiceById(id))!\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const { core, pub } = getClients()\n await core.from('orders').update({ status: 'cancelled' }).eq('id', id)\n await pub.from(T.movements).update({ status: 'cancelled' }).eq('invoice_id', id).eq('status', 'pending')\n },\n\n // --- Movements (public.financial_movements) ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n const { core, pub } = getClients()\n let qb = pub.from(T.movements).select('*', { count: 'exact' })\n if (query.direction) qb = qb.eq('direction', query.direction)\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n if (query.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)\n if (query.cashSessionId) qb = qb.eq('cash_session_id', query.cashSessionId)\n if (query.dateRange) qb = qb.gte('due_date', query.dateRange.from).lte('due_date', query.dateRange.to)\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('due_date')\n const { data, count } = await qb\n return { data: (data ?? []).map((r: any) => snakeToCamel(r) as unknown as FinancialMovement), total: count ?? 0 }\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const { core, pub } = getClients()\n const { data: mov } = await pub.from(T.movements).select('*').eq('id', input.movementId).single()\n if (!mov) throw new Error('Movement not found')\n const tenantId = mov.tenant_id ?? getTenantId()\n\n // Net card settlement: derive the processing/MDR fee (inflows only in v1).\n const feePct = mov.direction === 'credit' ? await getMethodFeePct(pub, input.paymentMethodId) : 0\n const thisFee = round2(input.amount * (feePct / 100))\n\n // 1. Record the cash event as its OWN payment movement — NOT by mutating the\n // bill. Two payments on one installment → two distinct rows in the extract.\n const paymentRow: any = {\n tenant_id: tenantId,\n invoice_id: mov.invoice_id,\n direction: mov.direction,\n movement_kind: 'payment',\n amount: input.amount,\n paid_amount: input.amount,\n fee_amount: thisFee,\n status: 'paid',\n due_date: mov.due_date,\n payment_date: input.paymentDate,\n installment_number: mov.installment_number,\n payment_method_id: input.paymentMethodId ?? null,\n payment_method_type_id: input.paymentMethodTypeId ?? null,\n bank_account_id: input.bankAccountId ?? null,\n cash_session_id: input.cashSessionId ?? null,\n card_brand: input.cardBrand ?? null,\n card_installments: input.cardInstallments ?? null,\n notes: input.notes ?? null,\n }\n let { data, error } = await pub.from(T.movements).insert(paymentRow).select().single()\n // Graceful fallback if the fee_amount migration hasn't been applied yet.\n if (error && /fee_amount/i.test(error.message ?? '')) {\n const { fee_amount, ...rest } = paymentRow\n ;({ data, error } = await pub.from(T.movements).insert(rest).select().single())\n }\n if (error) throw error\n\n // 2. Update the bill (obligation) cache: cumulative paid + status. It stays a\n // pure obligation (no bank/method/date) — the cash lives on the payment row.\n // v_invoice_balances reads bill.paid_amount, so this keeps balances correct.\n const newPaid = round2((mov.paid_amount ?? 0) + input.amount)\n const billStatus = newPaid >= mov.amount ? 'paid' : 'partial'\n // Clear the bill's cash fields so it stops being a cash event (the payment row is now\n // the cash event) — prevents double-counting legacy in-place-paid bills.\n await pub.from(T.movements)\n .update({ paid_amount: newPaid, status: billStatus, payment_date: null, bank_account_id: null })\n .eq('id', mov.id)\n\n // 3. Update invoice (order) status based on its bills\n if (mov.invoice_id) {\n const { data: allMovs } = await pub.from(T.movements)\n .select('status, amount, paid_amount')\n .eq('invoice_id', mov.invoice_id)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const allPaid = movs.length > 0 && movs.every((m: any) => m.status === 'paid')\n const anyPaid = movs.some((m: any) => m.status === 'paid' || m.status === 'partial')\n const invoiceStatus = allPaid ? 'paid' : anyPaid ? 'partial' : 'open'\n const totalPaid = movs.reduce((sum: number, m: any) => sum + (m.paid_amount ?? 0), 0)\n // Store paid amount in metadata (orders table has no dedicated paid column)\n const { data: order } = await core.from('orders').select('metadata').eq('id', mov.invoice_id).single()\n const meta = (order?.metadata as any) ?? {}\n const invoiceStage = allPaid ? 'paid' : anyPaid ? 'partial' : 'invoiced'\n // Only update financial order status. Agenda status lives on public.appointments.\n await core.from('orders').update({\n status: invoiceStage,\n metadata: { ...meta, paidAmount: totalPaid },\n }).eq('id', mov.invoice_id)\n }\n\n return snakeToCamel(data!) as unknown as FinancialMovement\n },\n\n async cancelMovement(id: string): Promise<void> {\n const { core, pub } = getClients()\n await pub.from(T.movements).update({ status: 'cancelled' }).eq('id', id)\n },\n\n // --- Transfers (between accounts) ---\n async createTransfer(input: CreateTransferInput): Promise<TransferResult> {\n const { pub } = getClients()\n if (!input.fromAccountId || !input.toAccountId || input.fromAccountId === input.toAccountId) {\n throw new Error('Source and destination accounts must differ')\n }\n if (!(input.amount > 0)) throw new Error('Amount must be greater than zero')\n const tenantId = getTenantId()\n const transferId = genId()\n const base = {\n tenant_id: tenantId,\n movement_kind: 'transfer' as const,\n amount: input.amount,\n paid_amount: input.amount,\n fee_amount: 0,\n status: 'paid' as const,\n due_date: input.date,\n payment_date: input.date,\n notes: input.notes ?? null,\n }\n const rowsToInsert = [\n {\n ...base,\n direction: 'debit',\n bank_account_id: input.fromAccountId,\n metadata: { transferId, transferRole: 'out', counterAccountId: input.toAccountId },\n },\n {\n ...base,\n direction: 'credit',\n bank_account_id: input.toAccountId,\n metadata: { transferId, transferRole: 'in', counterAccountId: input.fromAccountId },\n },\n ]\n let { data, error } = await pub.from(T.movements).insert(rowsToInsert).select('id, direction')\n // Graceful fallback if the fee_amount migration hasn't been applied yet.\n if (error && /fee_amount/i.test(error.message ?? '')) {\n const stripped = rowsToInsert.map(({ fee_amount, ...rest }) => rest)\n ;({ data, error } = await pub.from(T.movements).insert(stripped).select('id, direction'))\n }\n if (error) throw error\n const rows = (data ?? []) as Array<{ id: string; direction: string }>\n const debitMovementId = rows.find((r) => r.direction === 'debit')?.id ?? ''\n const creditMovementId = rows.find((r) => r.direction === 'credit')?.id ?? ''\n return { transferId, debitMovementId, creditMovementId }\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.bankAccounts).select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as BankAccount)\n },\n\n async createBankAccount(input: CreateBankAccountInput): Promise<BankAccount> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from(T.bankAccounts).insert({\n ...camelToSnake(input as any), tenant_id: tenantId, current_balance: input.initialBalance ?? 0,\n }).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n async updateBankAccount(id: string, partial: Partial<BankAccount>): Promise<BankAccount> {\n const { core, pub } = getClients()\n const row = camelToSnake(partial as any)\n delete row.id; delete row.tenant_id\n const { data } = await pub.from(T.bankAccounts).update(row).eq('id', id).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n const { core, pub } = getClients()\n let qb = pub.from(T.cashRegisterSessions).select('*')\n if (bankAccountId) qb = qb.eq('bank_account_id', bankAccountId)\n const { data } = await qb.order('opened_at', { ascending: false })\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as CashSession)\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.cashRegisterSessions).select('*').eq('bank_account_id', bankAccountId).eq('status', 'open').single()\n return data ? snakeToCamel(data) as unknown as CashSession : null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from(T.cashRegisterSessions).insert({\n tenant_id: tenantId, bank_account_id: input.bankAccountId,\n status: 'open', opening_balance: input.openingBalance,\n opened_by_user_id: input.openedByUserId, opened_by_name: input.openedByName,\n unit_id: input.unitId,\n }).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.cashRegisterSessions).update({\n status: 'closed', closing_balance: input.closingBalance,\n closed_at: new Date().toISOString(),\n closed_by_user_id: input.closedByUserId, closed_by_name: input.closedByName,\n notes: input.notes,\n }).eq('id', input.sessionId).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const { core, pub } = getClients()\n const session = (await pub.from(T.cashRegisterSessions).select('*').eq('id', sessionId).single()).data\n const { data: movs } = await pub.from(T.movements).select('direction, paid_amount').eq('cash_session_id', sessionId).eq('status', 'paid')\n const movements = movs ?? []\n return {\n session: snakeToCamel(session!) as unknown as CashSession,\n movementCount: movements.length,\n totalInflow: movements.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n totalOutflow: movements.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.paymentMethods).select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethod)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.paymentMethodTypes).select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethodType)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.chartOfAccounts).select('*').eq('is_active', true).order('code')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as ChartOfAccountsNode)\n },\n\n async getCostCenters(): Promise<CostCenter[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.costCenters).select('*').eq('is_active', true).order('code')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as CostCenter)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n const { core, pub } = getClients()\n return [] // TODO: implement when card_transactions table exists\n },\n\n // --- Statements (ERP extract: opening balance + realized cash + per-row net/fee) ---\n async getStatement(query: StatementQuery): Promise<StatementResult> {\n const { core, pub } = getClients()\n const today = new Date().toISOString().slice(0, 10)\n // The extract = actual cash events. A cash event is any non-cancelled movement with\n // a payment_date: payment movements, transfers, and legacy in-place-paid bills (which\n // still carry a payment_date until the split migration backfills them). Once a payment\n // movement exists for a bill, payMovement clears the bill's payment_date, so a single\n // cash amount is represented by exactly one row — no double counting, no migration needed.\n\n // 1. Resolve in-scope accounts. No bankAccountId => consolidated: ALL realized cash\n // (including movements with no bank_account_id, e.g. cash/card payments not tied to an account).\n const { data: acctRows } = await pub.from(T.bankAccounts).select('id, name, initial_balance, is_active')\n const allAccounts = (acctRows ?? []) as any[]\n const consolidated = !query.bankAccountId\n const scopeAccounts = consolidated\n ? allAccounts.filter((a) => a.is_active)\n : allAccounts.filter((a) => a.id === query.bankAccountId)\n const accountIds = scopeAccounts.map((a) => a.id)\n const accountNameById = new Map<string, string>(allAccounts.map((a) => [a.id, a.name]))\n const initialSum = scopeAccounts.reduce((s, a) => s + (Number(a.initial_balance) || 0), 0)\n // Only bail when a specific account was asked for and not found.\n if (!consolidated && accountIds.length === 0) {\n return { entries: [], openingBalance: 0, closingBalance: 0, totalCredits: 0, totalDebits: 0, totalFees: 0, net: 0, accountId: query.bankAccountId }\n }\n // Consolidated => no account filter (catches NULL-account movements too).\n const scopeFilter = (qb: any) => consolidated ? qb : qb.in('bank_account_id', accountIds)\n\n const netOf = (r: any) => r.direction === 'credit'\n ? (Number(r.paid_amount) || 0) - (Number(r.fee_amount) || 0)\n : -(Number(r.paid_amount) || 0)\n\n // 2. Opening balance = Σ initial_balance + prior net (payment_date < from).\n // Select '*' so this still works before the fee_amount migration lands (fee → 0).\n const { data: priorRows } = await scopeFilter(pub.from(T.movements)\n .select('*')\n .neq('status', 'cancelled')\n .lt('payment_date', query.dateRange.from))\n const priorNet = (priorRows ?? []).reduce((s: number, r: any) => s + netOf(r), 0)\n const openingBalance = round2(initialSum + priorNet)\n\n // 3. In-range realized rows.\n const { data: movs } = await scopeFilter(pub.from(T.movements)\n .select('*')\n .neq('status', 'cancelled')\n .gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n .order('payment_date').order('created_at'))\n\n // 4. Join invoices for descriptions.\n const invoiceIds = [...new Set((movs ?? []).map((r: any) => r.invoice_id).filter(Boolean))]\n const invoiceById = new Map<string, Invoice>()\n if (invoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, party_id, reference_number, metadata').in('id', invoiceIds)\n for (const o of (orders ?? []) as any[]) {\n invoiceById.set(o.id, { id: o.id, contactId: o.party_id, contactName: (o.metadata as any)?.contactName, fiscalNumber: o.reference_number } as Invoice)\n }\n }\n\n // 5. Build entries with running NET balance.\n let balance = openingBalance\n let totalCredits = 0, totalDebits = 0, totalFees = 0\n const entries: StatementEntry[] = (movs ?? []).map((r: any) => {\n const movement = snakeToCamel(r) as unknown as FinancialMovement\n const gross = Number(r.paid_amount) || 0\n const isCredit = r.direction === 'credit'\n const fee = isCredit ? (Number(r.fee_amount) || 0) : 0\n const net = isCredit ? round2(gross - fee) : gross\n const meta = (r.metadata ?? {}) as any\n const isTransfer = r.movement_kind === 'transfer'\n const entryKind: StatementEntry['entryKind'] = isTransfer\n ? (meta.transferRole === 'in' ? 'transfer-in' : 'transfer-out')\n : 'movement'\n const counterAccountId = isTransfer ? meta.counterAccountId : undefined\n if (isCredit) balance = round2(balance + net)\n else balance = round2(balance - net)\n // Exclude internal transfers from consolidated totals (they net to zero across accounts).\n if (!(consolidated && isTransfer)) {\n if (isCredit) totalCredits = round2(totalCredits + net)\n else totalDebits = round2(totalDebits + net)\n totalFees = round2(totalFees + fee)\n }\n return {\n movement,\n invoice: r.invoice_id ? invoiceById.get(r.invoice_id) : undefined,\n runningBalance: balance,\n gross, fee, net, entryKind,\n counterAccountId,\n counterAccountName: counterAccountId ? accountNameById.get(counterAccountId) : undefined,\n }\n })\n\n // 5b. Resolve the reconciliation counterpart for matched bank lines, so the\n // extract row can link to the internal transaction it was conciliated with.\n const matchedIds = [...new Set(entries.map((e) => e.movement.matchedMovementId).filter(Boolean))] as string[]\n if (matchedIds.length) {\n const { data: matched } = await pub.from(T.movements).select('id, invoice_id, notes').in('id', matchedIds)\n const matchedById = new Map<string, any>((matched ?? []).map((m: any) => [m.id, m]))\n const matchedInvoiceIds = [...new Set((matched ?? []).map((m: any) => m.invoice_id).filter(Boolean))] as string[]\n const invById = new Map<string, any>()\n if (matchedInvoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, reference_number, metadata').in('id', matchedInvoiceIds)\n for (const o of (orders ?? []) as any[]) invById.set(o.id, o)\n }\n for (const e of entries) {\n const mid = e.movement.matchedMovementId\n const mm = mid ? matchedById.get(mid) : undefined\n if (!mm) continue\n const inv = mm.invoice_id ? invById.get(mm.invoice_id) : undefined\n e.reconciledWith = {\n movementId: mm.id,\n description: mm.notes ?? undefined,\n invoiceId: mm.invoice_id ?? undefined,\n fiscalNumber: inv?.reference_number ?? undefined,\n contactName: (inv?.metadata as any)?.contactName ?? undefined,\n }\n }\n }\n\n // 6. Account current balance (ledger as-of-today).\n const { data: todayRows } = await scopeFilter(pub.from(T.movements)\n .select('*')\n .neq('status', 'cancelled')\n .lte('payment_date', today))\n const accountCurrentBalance = round2(initialSum + (todayRows ?? []).reduce((s: number, r: any) => s + netOf(r), 0))\n\n return {\n entries,\n openingBalance,\n closingBalance: balance,\n totalCredits,\n totalDebits,\n totalFees,\n net: round2(totalCredits - totalDebits),\n accountId: query.bankAccountId,\n accountCurrentBalance,\n }\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n // Sweep overdue on first load (background, non-blocking)\n sweepOverdue()\n const { core, pub } = getClients()\n const { data: accounts } = await pub.from(T.bankAccounts).select('current_balance').eq('is_active', true)\n const totalBalance = (accounts ?? []).reduce((s: number, a: any) => s + (a.current_balance ?? 0), 0)\n\n const { data: movs } = await pub.from(T.movements).select('direction, movement_kind, amount, paid_amount, status, due_date, payment_date')\n const allMovs = movs ?? []\n const unpaid = allMovs.filter((m: any) => ['pending', 'partial', 'overdue'].includes(m.status))\n const today = new Date().toISOString().slice(0, 10)\n\n const unpaidCredit = unpaid.filter((m: any) => m.direction === 'credit')\n const unpaidDebit = unpaid.filter((m: any) => m.direction === 'debit')\n const overdueCredit = unpaidCredit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n const overdueDebit = unpaidDebit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n\n // Monthly cash flow = a trailing 30-day rolling window (not calendar\n // month-to-date, which reads empty in the first days of a month).\n const monthAgo = new Date()\n monthAgo.setDate(monthAgo.getDate() - 30)\n const monthStart = monthAgo.toISOString().slice(0, 10)\n // Monthly cash flow = payment cash events (one row per payment), never bills.\n const monthPaid = allMovs.filter((m: any) => m.movement_kind === 'payment' && m.payment_date >= monthStart)\n\n return {\n totalBalance,\n totalReceivable: unpaidCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n totalPayable: unpaidDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n monthlyInflow: monthPaid.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n monthlyOutflow: monthPaid.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n overdueReceivableCount: overdueCredit.length,\n overdueReceivableAmount: overdueCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n overduePayableCount: overdueDebit.length,\n overduePayableAmount: overdueDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n }\n },\n\n // --- Reconciliation (conciliação) ---\n // Imported bank-statement lines live in financial_movements tagged with\n // (external_source, external_id), status='paid'. Reconciling links a line\n // to the internal movement it settles (or accepts it standalone).\n async importBankTransactions(input) {\n const { pub } = getClients()\n const tenantId = getTenantId()\n let imported = 0, duplicates = 0\n for (const line of input.lines) {\n const { error } = await pub.from(T.movements).insert({\n tenant_id: tenantId,\n direction: line.direction,\n movement_kind: 'payment',\n amount: line.amount,\n paid_amount: line.amount,\n status: 'paid',\n due_date: line.date,\n payment_date: line.date,\n bank_account_id: line.bankAccountId ?? input.bankAccountId ?? null,\n notes: line.description,\n external_id: line.externalId,\n external_source: line.externalSource,\n })\n if (error) {\n // 23505 = unique violation on uq_financial_movements_external → already imported.\n if ((error as any).code === '23505') duplicates++\n else throw error\n } else imported++\n }\n return { imported, duplicates }\n },\n\n async getUnreconciled(query) {\n const { pub } = getClients()\n let qb = pub.from(T.movements).select('*')\n .not('external_source', 'is', null)\n .is('reconciled_at', null)\n if (query?.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)\n if (query?.dateRange) qb = qb.gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n const { data } = await qb.order('payment_date', { ascending: false })\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as FinancialMovement)\n },\n\n async suggestReconciliation(bankMovementId) {\n const { core, pub } = getClients()\n const { data: line } = await pub.from(T.movements).select('*').eq('id', bankMovementId).single()\n if (!line) return []\n const amount = Number(line.amount) || 0\n const lineDate = line.payment_date ?? line.due_date\n // Candidates: app-native (non-imported), same direction, not reconciled, amount within ±2%.\n const tol = Math.max(0.01, round2(amount * 0.02))\n const { data } = await pub.from(T.movements).select('*')\n .is('external_source', null)\n .is('reconciled_at', null)\n .eq('direction', line.direction)\n .gte('amount', round2(amount - tol))\n .lte('amount', round2(amount + tol))\n .neq('id', bankMovementId)\n .limit(25)\n const candidates = ((data ?? []) as any[]).map((r) => {\n const amtDiff = Math.abs((Number(r.amount) || 0) - amount)\n const amtScore = amount > 0 ? Math.max(0, 1 - amtDiff / amount) : 0\n const refDate = r.due_date ?? r.payment_date\n const days = lineDate && refDate\n ? Math.abs((new Date(lineDate).getTime() - new Date(refDate).getTime()) / 86400000)\n : 30\n const dateScore = Math.max(0, 1 - days / 30)\n return {\n movement: snakeToCamel(r) as unknown as FinancialMovement,\n score: round2(0.7 * amtScore + 0.3 * dateScore),\n } as ReconciliationCandidate\n }).sort((a, b) => b.score - a.score)\n // Attach invoice contact names for display.\n const invoiceIds = [...new Set(candidates.map((c) => c.movement.invoiceId).filter(Boolean))] as string[]\n if (invoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, reference_number, metadata').in('id', invoiceIds)\n const byId = new Map<string, any>((orders ?? []).map((o: any) => [o.id, o]))\n for (const c of candidates) {\n const o = c.movement.invoiceId ? byId.get(c.movement.invoiceId) : undefined\n if (o) c.invoice = { id: o.id, contactName: (o.metadata as any)?.contactName, fiscalNumber: o.reference_number } as Invoice\n }\n }\n return candidates\n },\n\n async reconcileMovement(input) {\n const { pub } = getClients()\n const now = new Date().toISOString()\n await pub.from(T.movements).update({\n reconciled_at: now,\n matched_movement_id: input.matchedMovementId ?? null,\n }).eq('id', input.bankMovementId)\n if (input.matchedMovementId) {\n // The internal movement is now settled+reconciled by the bank line.\n await pub.from(T.movements).update({ reconciled_at: now }).eq('id', input.matchedMovementId)\n }\n },\n\n async unreconcileMovement(bankMovementId) {\n const { pub } = getClients()\n const { data: line } = await pub.from(T.movements).select('matched_movement_id').eq('id', bankMovementId).single()\n await pub.from(T.movements).update({ reconciled_at: null, matched_movement_id: null }).eq('id', bankMovementId)\n if (line?.matched_movement_id) {\n await pub.from(T.movements).update({ reconciled_at: null }).eq('id', line.matched_movement_id)\n }\n },\n }\n\n return provider\n}\n","import { createStore, type StoreApi } from 'zustand/vanilla'\nimport { dedup } from '@fayz-ai/saas'\nimport { toast } from '@fayz-ai/ui'\nimport type { FinancialDataProvider } from './data/types'\nimport type {\n Invoice, FinancialMovement, BankAccount, CashSession,\n PaymentMethod, PaymentMethodType, CardTransaction,\n FinancialSummary, StatementResult,\n InvoiceQuery, MovementQuery, StatementQuery,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput,\n OpenCashSessionInput, CloseCashSessionInput,\n QuickTransactionInput,\n DateRange,\n} from './types'\n\n// ---------------------------------------------------------------------------\n// Store state\n// ---------------------------------------------------------------------------\n\nexport interface FinancialUIState {\n // Data cache\n invoices: Invoice[]\n invoicesTotal: number\n invoicesLoading: boolean\n invoiceQuery: InvoiceQuery\n\n movements: FinancialMovement[]\n movementsTotal: number\n movementsLoading: boolean\n\n bankAccounts: BankAccount[]\n bankAccountsLoading: boolean\n\n cashSessions: CashSession[]\n cashSessionsLoading: boolean\n\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n\n summary: FinancialSummary | null\n summaryLoading: boolean\n\n statement: StatementResult | null\n statementLoading: boolean\n statementQuery: StatementQuery | null\n\n cardTransactions: CardTransaction[]\n cardsLoading: boolean\n\n // Actions\n fetchSummary(dateRange?: DateRange): Promise<void>\n fetchInvoices(query: InvoiceQuery): Promise<void>\n fetchBankAccounts(): Promise<void>\n fetchCashSessions(bankAccountId?: string): Promise<void>\n fetchPaymentMethods(): Promise<void>\n fetchStatement(query: StatementQuery): Promise<void>\n fetchCardTransactions(dateRange?: DateRange): Promise<void>\n createInvoice(input: CreateInvoiceInput): Promise<Invoice>\n /** FAY-1225 \"log money in a few taps\": one call → the right provider plumbing + full surface refresh. */\n createQuickTransaction(input: QuickTransactionInput): Promise<void>\n payMovement(input: PayMovementInput): Promise<void>\n createTransfer(input: CreateTransferInput): Promise<void>\n cancelInvoice(invoiceId: string): Promise<void>\n openCashSession(input: OpenCashSessionInput): Promise<CashSession>\n closeCashSession(input: CloseCashSessionInput): Promise<CashSession>\n}\n\n// ---------------------------------------------------------------------------\n// Store factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialStore(provider: FinancialDataProvider): StoreApi<FinancialUIState> {\n return createStore<FinancialUIState>((set, get) => ({\n invoices: [],\n invoicesTotal: 0,\n invoicesLoading: false,\n invoiceQuery: {},\n\n movements: [],\n movementsTotal: 0,\n movementsLoading: false,\n\n bankAccounts: [],\n bankAccountsLoading: false,\n\n cashSessions: [],\n cashSessionsLoading: false,\n\n paymentMethods: [],\n paymentMethodTypes: [],\n\n summary: null,\n summaryLoading: false,\n\n statement: null,\n statementLoading: false,\n statementQuery: null,\n\n cardTransactions: [],\n cardsLoading: false,\n\n async fetchSummary(dateRange) {\n return dedup('fin:summary', async () => {\n set({ summaryLoading: true })\n const summary = await provider.getSummary(dateRange)\n set({ summary, summaryLoading: false })\n })\n },\n\n async fetchInvoices(query) {\n return dedup('fin:invoices:' + JSON.stringify(query), async () => {\n set({ invoicesLoading: true, invoiceQuery: query })\n const result = await provider.getInvoices(query)\n set({ invoices: result.data, invoicesTotal: result.total, invoicesLoading: false })\n })\n },\n\n async fetchBankAccounts() {\n return dedup('fin:bankAccounts', async () => {\n set({ bankAccountsLoading: true })\n const bankAccounts = await provider.getBankAccounts()\n set({ bankAccounts, bankAccountsLoading: false })\n })\n },\n\n async fetchCashSessions(bankAccountId) {\n return dedup('fin:cashSessions:' + (bankAccountId ?? ''), async () => {\n set({ cashSessionsLoading: true })\n const cashSessions = await provider.getCashSessions(bankAccountId)\n set({ cashSessions, cashSessionsLoading: false })\n })\n },\n\n async fetchPaymentMethods() {\n return dedup('fin:paymentMethods', async () => {\n const [paymentMethods, paymentMethodTypes] = await Promise.all([\n provider.getPaymentMethods(),\n provider.getPaymentMethodTypes(),\n ])\n set({ paymentMethods, paymentMethodTypes })\n })\n },\n\n async fetchStatement(query) {\n return dedup('fin:statement:' + JSON.stringify(query), async () => {\n set({ statementLoading: true, statementQuery: query })\n const statement = await provider.getStatement(query)\n set({ statement, statementLoading: false })\n })\n },\n\n async fetchCardTransactions(dateRange) {\n return dedup('fin:cards', async () => {\n set({ cardsLoading: true })\n const cardTransactions = await provider.getCardTransactions(dateRange)\n set({ cardTransactions, cardsLoading: false })\n })\n },\n\n async createInvoice(input) {\n try {\n const invoice = await provider.createInvoice(input)\n const query = get().invoiceQuery\n const result = await provider.getInvoices(query)\n const summary = await provider.getSummary()\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice created')\n return invoice\n } catch (err: any) {\n toast.error('Failed to create invoice', { description: err?.message })\n throw err\n }\n },\n\n async createQuickTransaction(input) {\n try {\n if (input.type === 'transfer') {\n if (!input.bankAccountId || !input.toAccountId) {\n throw new Error('Select source and destination accounts')\n }\n await provider.createTransfer({\n fromAccountId: input.bankAccountId,\n toAccountId: input.toAccountId,\n amount: input.amount,\n date: input.date,\n notes: input.description?.trim() || undefined,\n })\n } else {\n const direction: 'debit' | 'credit' = input.type === 'income' ? 'credit' : 'debit'\n const desc = input.description?.trim() || (input.type === 'income' ? 'Receita' : 'Despesa')\n // 1. The obligation (invoice + bill movement).\n // Persist the recurring flag + the snapped-receipt data URL (FAY-1226)\n // on the invoice metadata so the transaction feed can indicate/preview it.\n const invoiceMeta: Record<string, unknown> = {}\n if (input.recurring) invoiceMeta.recurring = true\n if (input.receiptUrl) invoiceMeta.receiptUrl = input.receiptUrl\n const invoice = await provider.createInvoice({\n direction,\n invoiceDate: input.date,\n contactName: desc,\n metadata: Object.keys(invoiceMeta).length > 0 ? invoiceMeta : undefined,\n items: [{\n itemKind: 'other',\n description: desc,\n quantity: 1,\n unitPrice: input.amount,\n accountId: input.categoryId,\n }],\n installments: [{\n direction,\n movementKind: 'bill',\n amount: input.amount,\n dueDate: input.date,\n installmentNumber: 1,\n bankAccountId: input.bankAccountId,\n notes: desc,\n }],\n })\n // 2. Settle it now when marked paid → a realized cash event that shows in\n // the statement/extract and feeds the monthly cash-flow KPIs.\n if (input.paid) {\n const movements = await provider.getMovements({ direction, status: 'pending' })\n const bill = movements.data.find((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n if (bill) {\n await provider.payMovement({\n movementId: bill.id,\n amount: input.amount,\n paymentDate: input.date,\n bankAccountId: input.bankAccountId,\n notes: desc,\n })\n }\n }\n }\n // Refresh every surface this store feeds: Home/Resumo KPIs (summary),\n // the mobile transaction list (statement), balances, and the payables/\n // receivables tables (invoices).\n const invoiceQuery = get().invoiceQuery\n const statementQuery = get().statementQuery\n const [summary, bankAccounts, invoicesRes, statement] = await Promise.all([\n provider.getSummary(),\n provider.getBankAccounts(),\n provider.getInvoices(invoiceQuery),\n statementQuery ? provider.getStatement(statementQuery) : Promise.resolve(get().statement),\n ])\n set({\n summary,\n bankAccounts,\n invoices: invoicesRes.data,\n invoicesTotal: invoicesRes.total,\n statement,\n })\n toast.success('Transaction saved')\n } catch (err: any) {\n toast.error('Failed to save transaction', { description: err?.message })\n throw err\n }\n },\n\n async payMovement(input) {\n try {\n await provider.payMovement(input)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Payment recorded')\n } catch (err: any) {\n toast.error('Failed to record payment', { description: err?.message })\n throw err\n }\n },\n\n async createTransfer(input) {\n try {\n await provider.createTransfer(input)\n const query = get().statementQuery\n const [bankAccounts, summary, statement] = await Promise.all([\n provider.getBankAccounts(),\n provider.getSummary(),\n query ? provider.getStatement(query) : Promise.resolve(get().statement),\n ])\n set({ bankAccounts, summary, statement })\n toast.success('Transfer recorded')\n } catch (err: any) {\n toast.error('Failed to record transfer', { description: err?.message })\n throw err\n }\n },\n\n async cancelInvoice(invoiceId) {\n try {\n await provider.cancelInvoice(invoiceId)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice cancelled')\n } catch (err: any) {\n toast.error('Failed to cancel invoice', { description: err?.message })\n throw err\n }\n },\n\n async openCashSession(input) {\n try {\n const session = await provider.openCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session opened')\n return session\n } catch (err: any) {\n toast.error('Failed to open session', { description: err?.message })\n throw err\n }\n },\n\n async closeCashSession(input) {\n try {\n const session = await provider.closeCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session closed')\n return session\n } catch (err: any) {\n toast.error('Failed to close session', { description: err?.message })\n throw err\n }\n },\n }))\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { T } from './data/tables'\n\n// ---------------------------------------------------------------------------\n// Payment Method Types (seeded — Cash, PIX, Credit Card, etc.)\n// ---------------------------------------------------------------------------\n\nconst paymentMethodTypeEntity: EntityDef = {\n name: 'Payment Type',\n namePlural: 'Payment Types',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'transactionType', label: 'Transaction Type', type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check', 'voucher'], showInTable: true, required: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.paymentMethodTypes, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Payment Methods (user-created — e.g. \"Visa 2x\", \"PIX Store\")\n// ---------------------------------------------------------------------------\n\nconst paymentMethodEntity: EntityDef = {\n name: 'Payment Method',\n namePlural: 'Payment Methods',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n // FK to the seeded payment_method_types catalog — load real ids at runtime\n // (a static enum select would write the string into the uuid column).\n { key: 'paymentMethodTypeId', label: 'Type', type: 'relation', relation: { table: T.paymentMethodTypes, labelField: 'name' }, showInTable: true, required: true },\n { key: 'discountValue', label: 'Discount %', type: 'number', showInTable: true },\n { key: 'interestValue', label: 'Interest %', type: 'number', showInTable: true },\n { key: 'minInstallments', label: 'Min Installments', type: 'number', defaultValue: 1 },\n { key: 'maxInstallments', label: 'Max Installments', type: 'number', defaultValue: 1, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.paymentMethods, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Chart of Accounts (tree structure)\n// ---------------------------------------------------------------------------\n\nconst chartOfAccountsEntity: EntityDef = {\n name: 'Ledger Account',\n namePlural: 'Chart of Accounts',\n icon: 'BookOpen',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'nodeType', label: 'Type', type: 'select', options: ['group', 'leaf'], showInTable: true, required: true, defaultValue: 'leaf' },\n { key: 'parentId', label: 'Parent', type: 'text', showInTable: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.chartOfAccounts, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Cost Centers\n// ---------------------------------------------------------------------------\n\nconst costCenterEntity: EntityDef = {\n name: 'Cost Center',\n namePlural: 'Cost Centers',\n icon: 'Target',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.costCenters, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Bank Accounts (physical cash, bank, credit card, digital wallet)\n// ---------------------------------------------------------------------------\n\nconst bankAccountEntity: EntityDef = {\n name: 'Bank Account',\n namePlural: 'Bank Accounts',\n icon: 'Landmark',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'accountType', label: 'Type', type: 'select', options: [\n { label: 'Bank Account', value: 'bank_account' },\n { label: 'Cash Register', value: 'cash_register' },\n { label: 'Credit Card', value: 'credit_card' },\n { label: 'Digital Wallet', value: 'digital_wallet' },\n ], showInTable: true, required: true },\n { key: 'bankName', label: 'Bank', type: 'text', showInTable: true },\n { key: 'accountNumber', label: 'Account Number', type: 'text' },\n { key: 'agencyNumber', label: 'Agency', type: 'text' },\n { key: 'initialBalance', label: 'Initial Balance', type: 'currency', defaultValue: 0 },\n { key: 'creditLimit', label: 'Credit Limit', type: 'currency' },\n { key: 'closingDay', label: 'Closing Day', type: 'number' },\n { key: 'dueDay', label: 'Due Day', type: 'number' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.bankAccounts, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Card Brands (seeded)\n// ---------------------------------------------------------------------------\n\nconst cardBrandEntity: EntityDef = {\n name: 'Card Brand',\n namePlural: 'Card Brands',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.cardBrands, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Commission Rules\n// ---------------------------------------------------------------------------\n\nconst commissionRuleEntity: EntityDef = {\n name: 'Commission Rule',\n namePlural: 'Commission Rules',\n icon: 'TrendingUp',\n displayField: 'name',\n defaultSort: 'priority',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'priority', label: 'Priority', type: 'number', required: true, showInTable: true, defaultValue: 1 },\n { key: 'valueType', label: 'Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, defaultValue: 'percentage' },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'description', label: 'Description', type: 'textarea' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'commission_rules', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Tables\n// ---------------------------------------------------------------------------\n\nconst priceTableEntity: EntityDef = {\n name: 'Price Table',\n namePlural: 'Price Tables',\n icon: 'Tag',\n displayField: 'description',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'description', label: 'Description', type: 'text', required: true, showInTable: true },\n { key: 'type', label: 'Type', type: 'select', options: ['sale', 'cost'], required: true, showInTable: true, defaultValue: 'sale' },\n { key: 'validFrom', label: 'Valid From', type: 'date', showInTable: true },\n { key: 'validUntil', label: 'Valid Until', type: 'date', showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_tables', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Variations\n// ---------------------------------------------------------------------------\n\nconst priceVariationEntity: EntityDef = {\n name: 'Price Variation',\n namePlural: 'Price Variations',\n icon: 'Percent',\n displayField: 'name',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'variationType', label: 'Type', type: 'select', options: ['discount', 'increase'], required: true, showInTable: true },\n { key: 'valueType', label: 'Value Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'firstAppointmentOnly', label: 'First Appointment Only', type: 'boolean', defaultValue: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_variations', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Export all registries\n// ---------------------------------------------------------------------------\n\nexport const financialRegistries: PluginRegistryDef[] = [\n // --- Editable registries (user manages) ---\n {\n id: 'payment-methods',\n entity: paymentMethodEntity,\n icon: 'Wallet',\n description: 'Configured payment methods with fees and installment rules',\n display: 'table',\n },\n {\n id: 'chart-of-accounts',\n entity: chartOfAccountsEntity,\n icon: 'BookOpen',\n description: 'Hierarchical chart of accounts for categorizing transactions',\n display: 'tree',\n seedData: [\n { id: 'coa-1', code: '1', name: 'Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-1.1', code: '1.1', name: 'Sales Revenue', nodeType: 'group', parentId: 'coa-1', isActive: true },\n { id: 'coa-1.1.01', code: '1.1.01', name: 'Services', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-1.1.02', code: '1.1.02', name: 'Products', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-2', code: '2', name: 'Other Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-2.1', code: '2.1', name: 'Financial Income', nodeType: 'leaf', parentId: 'coa-2', isActive: true },\n { id: 'coa-3', code: '3', name: 'Operational Costs', nodeType: 'group', isActive: true },\n { id: 'coa-3.1', code: '3.1', name: 'Materials & Supplies', nodeType: 'group', parentId: 'coa-3', isActive: true },\n { id: 'coa-3.1.01', code: '3.1.01', name: 'Raw Materials', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-3.1.02', code: '3.1.02', name: 'Consumables', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-4', code: '4', name: 'Expenses', nodeType: 'group', isActive: true },\n { id: 'coa-4.1', code: '4.1', name: 'Rent', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.2', code: '4.2', name: 'Utilities', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.3', code: '4.3', name: 'Payroll', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n ],\n },\n {\n id: 'cost-centers',\n entity: costCenterEntity,\n icon: 'Target',\n description: 'Cost centers for expense tracking and departmental budgets',\n display: 'table',\n seedData: [\n { id: 'cc-001', code: '001', name: 'General', isActive: true },\n ],\n },\n {\n id: 'bank-accounts',\n entity: bankAccountEntity,\n icon: 'Landmark',\n description: 'Bank accounts, cash registers, credit cards, and digital wallets',\n display: 'table',\n },\n {\n id: 'commission-rules',\n entity: commissionRuleEntity,\n icon: 'TrendingUp',\n description: 'Commission rules for service and product revenue sharing',\n display: 'table',\n },\n {\n id: 'price-tables',\n entity: priceTableEntity,\n icon: 'Tag',\n description: 'Price tables for sale and cost pricing',\n display: 'table',\n },\n {\n id: 'price-variations',\n entity: priceVariationEntity,\n icon: 'Percent',\n description: 'Discount and surcharge rules for pricing',\n display: 'table',\n },\n // --- Read-only registries (system / seeded data) ---\n {\n id: 'payment-method-types',\n entity: paymentMethodTypeEntity,\n icon: 'CreditCard',\n description: 'System payment types (cash, card, PIX, etc.)',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'pmt-cash', name: 'Cash', transactionType: 'cash', isActive: true },\n { id: 'pmt-pix', name: 'PIX', transactionType: 'pix', isActive: true },\n { id: 'pmt-credit', name: 'Credit Card', transactionType: 'credit_card', isActive: true },\n { id: 'pmt-debit', name: 'Debit Card', transactionType: 'debit_card', isActive: true },\n { id: 'pmt-transfer', name: 'Bank Transfer', transactionType: 'bank_transfer', isActive: true },\n { id: 'pmt-check', name: 'Check', transactionType: 'check', isActive: true },\n ],\n },\n {\n id: 'card-brands',\n entity: cardBrandEntity,\n icon: 'CreditCard',\n description: 'Credit and debit card brands',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'cb-visa', name: 'Visa', isActive: true },\n { id: 'cb-mastercard', name: 'Mastercard', isActive: true },\n { id: 'cb-amex', name: 'American Express', isActive: true },\n { id: 'cb-elo', name: 'Elo', isActive: true },\n { id: 'cb-hipercard', name: 'Hipercard', isActive: true },\n { id: 'cb-diners', name: 'Diners Club', isActive: true },\n { id: 'cb-discover', name: 'Discover', isActive: true },\n { id: 'cb-jcb', name: 'JCB', isActive: true },\n { id: 'cb-aura', name: 'Aura', isActive: true },\n { id: 'cb-hiper', name: 'Hiper', isActive: true },\n ],\n },\n]\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"financial.cards.addExpense\": \"Add expense\",\n \"financial.cards.allBillsValue\": \"All bills value\",\n \"financial.cards.availableLimit\": \"Available limit\",\n \"financial.cards.currentBill\": \"Current bill\",\n \"financial.cards.dueOn\": \"Due on the {{day}}\",\n \"financial.cards.installment\": \"Installment {{current}}/{{total}}\",\n \"financial.cards.noCards\": \"No cards yet\",\n \"financial.cards.noCardsHint\": \"Add a credit card in settings to track your bills here\",\n \"financial.cards.noTransactions\": \"No card transactions\",\n \"financial.cards.tabClosed\": \"Closed\",\n \"financial.cards.tabOpen\": \"Open\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% of limit used\",\n \"financial.cards.pending\": \"Pending\",\n \"financial.cards.received\": \"Received\",\n \"financial.cards.subtitle\": \"Credit and debit card transactions\",\n \"financial.cards.title\": \"Cards\",\n \"financial.cards.transactions\": \"({{count}} transactions)\",\n \"financial.cards.transactionsAppear\": \"Card transactions will appear here when payments are made via credit/debit cards\",\n \"financial.cashRegisters.addNotes\": \"Add notes\",\n \"financial.cashRegisters.back\": \"Back\",\n \"financial.cashRegisters.bills\": \"Bills\",\n \"financial.cashRegisters.closeSession\": \"Close Session\",\n \"financial.cashRegisters.closeThisSession\": \"Close this session\",\n \"financial.cashRegisters.closing\": \"Closing...\",\n \"financial.cashRegisters.closingBalance\": \"Closing Balance\",\n \"financial.cashRegisters.closingNotes\": \"Closing Notes\",\n \"financial.cashRegisters.coins\": \"Coins\",\n \"financial.cashRegisters.confirmOpen\": \"Confirm & Open\",\n \"financial.cashRegisters.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cashRegisters.count\": \"Count\",\n \"financial.cashRegisters.countBills\": \"Count Bills & Coins\",\n \"financial.cashRegisters.countedTotal\": \"Counted Total\",\n \"financial.cashRegisters.denominationCount\": \"Denomination count\",\n \"financial.cashRegisters.differenceFromOpening\": \"Difference from opening\",\n \"financial.cashRegisters.method\": \"Method\",\n \"financial.cashRegisters.noCashAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cashRegisters.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cashRegisters.openAnother\": \"Open another register\",\n \"financial.cashRegisters.openSession\": \"Open Session\",\n \"financial.cashRegisters.openSessions\": \"Open Sessions\",\n \"financial.cashRegisters.opened\": \"Opened\",\n \"financial.cashRegisters.opening\": \"Opening...\",\n \"financial.cashRegisters.openingBalance\": \"Opening Balance\",\n \"financial.cashRegisters.quickAmount\": \"Quick Amount\",\n \"financial.cashRegisters.register\": \"Register\",\n \"financial.cashRegisters.sessionHistory\": \"Session History\",\n \"financial.cashRegisters.subtitle\": \"Open, count and close cash sessions\",\n \"financial.commissions.comingSoon\": \"Coming soon\",\n \"financial.commissions.subtitle\": \"Team commissions\",\n \"financial.invoice.accountsPayable\": \"Accounts Payable\",\n \"financial.invoice.accountsReceivable\": \"Accounts Receivable\",\n \"financial.invoice.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoice.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled. This invoice will no longer count towards totals.\",\n \"financial.invoice.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoice.cancelling\": \"Cancelling...\",\n \"financial.invoice.contact\": \"Contact\",\n \"financial.invoice.createFirst\": \"Create your first invoice\",\n \"financial.invoice.date\": \"Date\",\n \"financial.invoice.booking\": \"Booking\",\n \"financial.invoice.discount\": \"Discount\",\n \"financial.invoice.due\": \"Due:\",\n \"financial.invoice.edit\": \"Edit Invoice\",\n \"financial.invoice.fullyPaid\": \"Fully paid\",\n \"financial.invoice.installments\": \"Installments\",\n \"financial.invoice.invoices\": \"{{count}} invoices\",\n \"financial.invoice.items\": \"Items\",\n \"financial.invoice.keepInvoice\": \"Keep Invoice\",\n \"financial.invoice.new\": \"New\",\n \"financial.invoice.noDetails\": \"No additional details recorded\",\n \"financial.invoice.noInstallments\": \"No installments\",\n \"financial.invoice.noInvoices\": \"No invoices yet\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Received\",\n \"financial.invoice.summaryReceivable\": \"Receivable\",\n \"financial.invoice.summaryPaid\": \"Paid\",\n \"financial.invoice.summaryPayable\": \"Payable\",\n \"financial.invoice.notFound\": \"Invoice not found\",\n \"financial.invoice.notFoundDesc\": \"This invoice could not be loaded.\",\n \"financial.invoice.notes\": \"Notes\",\n \"financial.invoice.paidLabel\": \"Paid:\",\n \"financial.invoice.paidOn\": \"Paid on:\",\n \"financial.invoice.pay\": \"Pay\",\n \"financial.invoice.paymentSchedule\": \"Payment Schedule\",\n \"financial.invoice.remaining\": \"Remaining:\",\n \"financial.invoice.searchPlaceholder\": \"Search by contact or description...\",\n \"financial.invoice.showing\": \"Showing {{shown}} of {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Surcharge\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.addFirstItem\": \"Add your first item\",\n \"financial.invoiceForm.addItem\": \"Add Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Add items first\",\n \"financial.invoiceForm.additionalNotes\": \"Additional notes...\",\n \"financial.invoiceForm.cancel\": \"Cancel\",\n \"financial.invoiceForm.close\": \"Close\",\n \"financial.invoiceForm.creating\": \"Creating new invoice\",\n \"financial.invoiceForm.date\": \"Date\",\n \"financial.invoiceForm.description\": \"Description\",\n \"financial.invoiceForm.discountSurcharge\": \"Discount / Surcharge\",\n \"financial.invoiceForm.done\": \"Done\",\n \"financial.invoiceForm.editing\": \"Editing invoice\",\n \"financial.invoiceForm.fiscalNumber\": \"Fiscal Number (optional)\",\n \"financial.invoiceForm.headquarters\": \"Headquarters\",\n \"financial.invoiceForm.installments\": \"Installments\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Item description\",\n \"financial.invoiceForm.items\": \"Items\",\n \"financial.invoiceForm.noDescription\": \"No description\",\n \"financial.invoiceForm.noItems\": \"No items added yet\",\n \"financial.invoiceForm.noUnitsFound\": \"No units found\",\n \"financial.invoiceForm.observations\": \"Observations\",\n \"financial.invoiceForm.payTo\": \"Pay to\",\n \"financial.invoiceForm.qty\": \"Qty\",\n \"financial.invoiceForm.receiveFrom\": \"Receive from\",\n \"financial.invoiceForm.save\": \"Save\",\n \"financial.invoiceForm.saving\": \"Saving...\",\n \"financial.invoiceForm.searchType\": \"Type to search...\",\n \"financial.invoiceForm.searchUnit\": \"Search unit...\",\n \"financial.invoiceForm.selectInstallments\": \"Select installment count above\",\n \"financial.invoiceForm.selectItemType\": \"Select item type:\",\n \"financial.invoiceForm.selectUnit\": \"Select unit\",\n \"financial.invoiceForm.selectUnitTitle\": \"Select Unit\",\n \"financial.invoiceForm.unit\": \"Unit\",\n \"financial.invoiceForm.unitPrice\": \"Unit Price\",\n \"financial.nav.cards\": \"Cards\",\n \"financial.nav.cashRegisters\": \"Cash Registers\",\n \"financial.nav.commissions\": \"Commissions\",\n \"financial.nav.list\": \"List\",\n \"financial.nav.new\": \"New\",\n \"financial.nav.overview\": \"Overview\",\n \"financial.nav.payables\": \"Accounts Payable\",\n \"financial.nav.receivables\": \"Accounts Receivable\",\n \"financial.nav.reconciliation\": \"Reconciliation\",\n \"financial.nav.recurringExpenses\": \"Recurring Expenses\",\n \"financial.nav.rules\": \"Rules\",\n \"financial.nav.statements\": \"Statements\",\n \"financial.nav.summary\": \"Summary\",\n \"financial.invoice.filterAccount\": \"Chart account\",\n \"financial.invoice.filterAllAccounts\": \"All accounts\",\n \"financial.invoice.filterCostCenter\": \"Cost center\",\n \"financial.invoice.filterAllCostCenters\": \"All cost centers\",\n \"financial.reconciliation.title\": \"Reconciliation\",\n \"financial.reconciliation.subtitle\": \"Match imported bank lines to your movements\",\n \"financial.reconciliation.pending\": \"{{count}} to reconcile\",\n \"financial.reconciliation.allDone\": \"All caught up\",\n \"financial.reconciliation.empty\": \"Nothing to reconcile\",\n \"financial.reconciliation.emptyHint\": \"Imported bank transactions will appear here for matching.\",\n \"financial.reconciliation.bankLines\": \"Bank lines\",\n \"financial.reconciliation.candidates\": \"Suggested matches\",\n \"financial.reconciliation.selectLine\": \"Select a bank line to see suggested matches\",\n \"financial.reconciliation.noCandidates\": \"No suggested matches for this line\",\n \"financial.reconciliation.match\": \"Match\",\n \"financial.reconciliation.accept\": \"Accept as new\",\n \"financial.reconciliation.acceptHint\": \"No internal counterpart — keep as a standalone entry\",\n \"financial.reconciliation.matchScore\": \"{{score}}% match\",\n \"financial.reconciliation.refresh\": \"Refresh\",\n \"financial.onboarding.back\": \"Back\",\n \"financial.onboarding.configureHint\": \"You can configure this in detail from the Settings gear icon inside the Financial module.\",\n \"financial.onboarding.getStarted\": \"Get Started\",\n \"financial.onboarding.next\": \"Next\",\n \"financial.onboarding.startUsing\": \"Start using Financial\",\n \"financial.onboarding.skip\": \"Skip setup\",\n \"financial.onboarding.welcome\": \"Welcome to Financial\",\n \"financial.onboarding.description\": \"Let's set up your financial module. This quick wizard will help you configure the essentials.\",\n \"financial.onboarding.accounts.title\": \"Bank Accounts\",\n \"financial.onboarding.accounts.description\": \"Add your bank accounts, cash registers, and credit cards. You can always add more later from Settings.\",\n \"financial.onboarding.payments.title\": \"Payment Methods\",\n \"financial.onboarding.payments.description\": \"Review which payment types you accept. Default types (Cash, PIX, Credit Card, etc.) are already set up.\",\n \"financial.onboarding.chart.title\": \"Chart of Accounts\",\n \"financial.onboarding.chart.description\": \"A default chart of accounts template has been created. You can customize it anytime from Settings.\",\n \"financial.page.newPayable\": \"New Payable\",\n \"financial.page.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.page.newReceivable\": \"New Receivable\",\n \"financial.page.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.page.openCash\": \"Open Cash Register\",\n \"financial.page.openCashDesc\": \"Start a new cash session\",\n \"financial.page.settingsSubtitle\": \"Preferences, payment methods, and accounts\",\n \"financial.page.settingsTitle\": \"Financial Settings\",\n \"financial.payment.amount\": \"Amount\",\n \"financial.payment.bankAccount\": \"Bank Account\",\n \"financial.payment.cancel\": \"Cancel\",\n \"financial.payment.card\": \"Card\",\n \"financial.payment.cardBrand\": \"Card Brand\",\n \"financial.payment.cardInstallments\": \"Installments\",\n \"financial.payment.date\": \"Date\",\n \"financial.payment.installment\": \"Installment #{{number}}\",\n \"financial.payment.method\": \"Payment Method\",\n \"financial.payment.notes\": \"Notes\",\n \"financial.payment.optionalNotes\": \"Optional notes...\",\n \"financial.payment.payAmount\": \"Pay {{amount}}\",\n \"financial.payment.processing\": \"Processing...\",\n \"financial.payment.remaining\": \"{{amount}} remaining\",\n \"financial.payment.select\": \"Select...\",\n \"financial.payment.selectAccount\": \"Select account...\",\n \"financial.payment.selectBrand\": \"Select brand...\",\n \"financial.payment.title\": \"Record Payment\",\n \"financial.settings.allowPartial\": \"Allow partial payments\",\n \"financial.settings.allowPartialDesc\": \"Accept payments less than the full installment amount\",\n \"financial.settings.autoClose\": \"Auto-close at end of day\",\n \"financial.settings.autoCloseDesc\": \"Remind to close open sessions at the end of business hours\",\n \"financial.settings.autoInstallments\": \"Auto-generate installments\",\n \"financial.settings.autoInstallmentsDesc\": \"Automatically split invoice total into equal installments\",\n \"financial.settings.cashRegister\": \"Cash Register\",\n \"financial.settings.cashRegisterDesc\": \"Cash session behavior\",\n \"financial.settings.dailySummary\": \"Daily financial summary\",\n \"financial.settings.dailySummaryDesc\": \"Send a daily email summary of receivables and payables\",\n \"financial.settings.invoices\": \"Invoices\",\n \"financial.settings.invoicesDesc\": \"How invoices and payments are handled\",\n \"financial.settings.notifications\": \"Notifications\",\n \"financial.settings.notificationsDesc\": \"Alerts and reminders\",\n \"financial.settings.overdueAlerts\": \"Overdue payment alerts\",\n \"financial.settings.overdueAlertsDesc\": \"Notify when invoices pass their due date\",\n \"financial.settings.requireDoc\": \"Require document number\",\n \"financial.settings.requireDocDesc\": \"Make document/invoice number mandatory on payments\",\n \"financial.settings.requireOpening\": \"Require opening balance\",\n \"financial.settings.requireOpeningDesc\": \"Opening balance must be confirmed before starting a session\",\n \"financial.settingsPage.subtitle\": \"Manage payment methods, accounts, and configurations\",\n \"financial.settingsPage.title\": \"Financial Settings\",\n \"financial.payment.noMethods\": \"No payment methods configured.\",\n \"financial.payment.configureMethods\": \"Set up payment methods\",\n \"financial.payment.noAccounts\": \"No compatible account. Create one in Settings.\",\n \"financial.payment.configureAccounts\": \"Set up accounts\",\n \"financial.statements.account\": \"Account\",\n \"financial.statements.from\": \"From\",\n \"financial.statements.noTransactions\": \"No transactions in this period\",\n \"financial.statements.selectAccount\": \"Select an account to view statement\",\n \"financial.statements.selectToView\": \"Select an account to view statement\",\n \"financial.statements.subtitle\": \"Bank account transactions and balances\",\n \"financial.statements.title\": \"Statements\",\n \"financial.statements.to\": \"To\",\n \"financial.summary.allAccounts\": \"All accounts\",\n \"financial.summary.cashFlow\": \"Cash Flow\",\n \"financial.summary.cashFlowBreakdown\": \"Cash Flow Breakdown\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Receivables vs. payables this month\",\n \"financial.summary.cashFlowSubtitle\": \"Monthly income vs expenses\",\n \"financial.summary.expenses\": \"Expenses\",\n \"financial.summary.income\": \"Income\",\n \"financial.summary.monthlyFlow\": \"Monthly Flow\",\n \"financial.summary.negativeBalance\": \"Negative balance\",\n \"financial.summary.net\": \"Net\",\n \"financial.summary.noOverdue\": \"No overdue transactions\",\n \"financial.summary.noTransactions\": \"No transactions yet\",\n \"financial.summary.overdue\": \"{{count}} overdue\",\n \"financial.summary.overduePayable\": \"Overdue payable\",\n \"financial.summary.overdueReceivable\": \"Overdue receivable\",\n \"financial.summary.overdueTitle\": \"Overdue\",\n \"financial.summary.paid\": \"Paid\",\n \"financial.summary.payable\": \"Payable\",\n \"financial.summary.positiveBalance\": \"Positive balance\",\n \"financial.summary.receivable\": \"Receivable\",\n \"financial.summary.received\": \"Received\",\n \"financial.summary.recentTransactions\": \"Recent Transactions\",\n \"financial.summary.totalBalance\": \"Total Balance\",\n \"financial.summary.transactionsAppear\": \"Transactions will appear here once recorded\",\n \"financial.summary.viewAll\": \"View all\",\n \"financial.summary.today\": \"Today\",\n \"financial.summary.yesterday\": \"Yesterday\",\n \"financial.summary.transactionsTitle\": \"Transactions\",\n \"financial.home.balance\": \"Balance\",\n \"financial.home.inflow\": \"Income\",\n \"financial.home.outflow\": \"Expenses\",\n \"financial.home.showBalance\": \"Show balance\",\n \"financial.home.hideBalance\": \"Hide balance\",\n \"financial.home.upcomingBills\": \"Upcoming bills\",\n \"financial.home.noBills\": \"No upcoming bills.\",\n \"financial.home.dueToday\": \"Due today\",\n \"financial.home.dueTomorrow\": \"Due tomorrow\",\n \"financial.home.dueInDays\": \"Due in {{count}} days\",\n \"financial.home.overdueDays\": \"Overdue by {{count}} days\",\n \"financial.home.cards\": \"Cards\",\n \"financial.home.currentBill\": \"Current bill\",\n \"financial.home.availableLimit\": \"Available limit\",\n \"financial.home.addCard\": \"New card\",\n \"financial.home.bill\": \"Bill\",\n \"financial.home.spendByCategory\": \"Spending by category\",\n \"financial.home.noSpend\": \"No spending this month.\",\n \"financial.home.category.groceries\": \"Groceries\",\n \"financial.home.category.transport\": \"Transport\",\n \"financial.home.category.subscriptions\": \"Subscriptions\",\n \"financial.home.category.dining\": \"Dining\",\n \"financial.home.category.home\": \"Home\",\n \"financial.home.category.health\": \"Health\",\n \"financial.home.category.leisure\": \"Leisure\",\n \"financial.home.category.shopping\": \"Shopping\",\n \"financial.home.category.other\": \"Other\",\n \"financial.quickActions.newPayable\": \"New Payable\",\n \"financial.quickActions.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.quickActions.newReceivable\": \"New Receivable\",\n \"financial.quickActions.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.quickActions.openCashRegister\": \"Open Cash Register\",\n \"financial.quickActions.openCashRegisterDesc\": \"Start a new cash session\",\n \"financial.cash.title\": \"Cash Registers\",\n \"financial.cash.subtitle\": \"Open, count and close cash sessions\",\n \"financial.cash.bills\": \"Bills\",\n \"financial.cash.coins\": \"Coins\",\n \"financial.cash.noAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cash.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cash.register\": \"Register\",\n \"financial.cash.openingBalance\": \"Opening Balance\",\n \"financial.cash.method\": \"Method\",\n \"financial.cash.denominationCount\": \"Denomination count\",\n \"financial.cash.notes\": \"Notes\",\n \"financial.cash.opening\": \"Opening...\",\n \"financial.cash.confirmAndOpen\": \"Confirm & Open\",\n \"financial.cash.quickAmount\": \"Quick Amount\",\n \"financial.cash.countBillsCoins\": \"Count Bills & Coins\",\n \"financial.cash.count\": \"Count\",\n \"financial.cash.countedTotal\": \"Counted Total\",\n \"financial.cash.addNotes\": \"Add notes\",\n \"financial.cash.openingObservations\": \"Opening observations...\",\n \"financial.cash.openSession\": \"Open Session\",\n \"financial.cash.closingBalance\": \"Closing Balance\",\n \"financial.cash.differenceFromOpening\": \"Difference from opening\",\n \"financial.cash.closingNotes\": \"Closing Notes\",\n \"financial.cash.closingObservations\": \"Closing observations...\",\n \"financial.cash.closing\": \"Closing...\",\n \"financial.cash.closeSession\": \"Close Session\",\n \"financial.cash.openSessions\": \"Open Sessions\",\n \"financial.cash.opened\": \"Opened\",\n \"financial.cash.by\": \"by\",\n \"financial.cash.closeThisSession\": \"Close this session\",\n \"financial.cash.sessionHistory\": \"Session History\",\n \"financial.cash.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cash.openLabel\": \"Open\",\n \"financial.cash.closeLabel\": \"Close\",\n \"financial.cash.diff\": \"Diff\",\n \"financial.cash.openAnother\": \"Open another register\",\n \"financial.invoice.statusOpen\": \"Open\",\n \"financial.invoice.statusPartial\": \"Partial\",\n \"financial.invoice.statusPaid\": \"Paid\",\n \"financial.invoice.statusOverdue\": \"Overdue\",\n \"financial.invoice.statusCancelled\": \"Cancelled\",\n \"financial.invoice.statusPending\": \"Pending\",\n \"financial.invoice.statusDraft\": \"Draft\",\n \"financial.invoice.columnDate\": \"Date\",\n \"financial.invoice.columnDescription\": \"Description\",\n \"financial.invoice.columnAmount\": \"Amount\",\n \"financial.invoice.columnPaid\": \"Paid\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Inst.\",\n \"financial.invoice.columnQty\": \"Qty\",\n \"financial.invoice.columnUnitPrice\": \"Unit Price\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Invoice\",\n \"financial.invoice.loading\": \"Loading...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoiceForm.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoiceForm.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled.\",\n \"financial.invoiceForm.keepInvoice\": \"Keep Invoice\",\n \"financial.invoiceForm.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.cancelling\": \"Cancelling...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remove adjustments\",\n \"financial.invoiceForm.discount\": \"Discount\",\n \"financial.invoiceForm.surcharge\": \"Surcharge\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Account\",\n \"financial.payment.due\": \"Due:\",\n \"financial.payment.paidAmount\": \"Paid:\",\n \"financial.payment.paidOn\": \"Paid on:\",\n \"financial.title\": \"Financial\",\n \"financial.summary.title\": \"Financial Summary\",\n \"financial.summary.revenue\": \"Revenue\",\n \"financial.invoice.title\": \"Invoices\",\n \"financial.invoice.create\": \"New Invoice\",\n \"financial.invoice.number\": \"Invoice #\",\n \"financial.invoice.client\": \"Client\",\n \"financial.invoice.amount\": \"Amount\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Due Date\",\n \"financial.invoice.addItem\": \"Add Item\",\n \"financial.invoice.tax\": \"Tax\",\n \"financial.invoice.save\": \"Save Invoice\",\n \"financial.invoice.saving\": \"Saving...\",\n \"financial.invoice.markPaid\": \"Mark as Paid\",\n \"financial.invoice.sendReminder\": \"Send Reminder\",\n \"financial.receivable.title\": \"Accounts Receivable\",\n \"financial.payable.title\": \"Accounts Payable\",\n \"financial.statements.loading\": \"Loading...\",\n \"financial.cards.empty\": \"No card transactions yet\",\n \"financial.commissions.title\": \"Commissions\",\n \"financial.cashRegister.title\": \"Cash Register\",\n \"financial.cashRegister.open\": \"Open Register\",\n \"financial.cashRegister.close\": \"Close Register\",\n \"financial.movements.title\": \"Movements\",\n \"financial.bankAccounts.title\": \"Bank Accounts\",\n \"financial.settings.title\": \"Financial Settings\",\n // Settings registry tabs\n \"registry.payment-methods\": \"Payment Methods\",\n \"registry.payment-methods.description\": \"Configured payment methods with fees and installment rules\",\n \"registry.bank-accounts\": \"Accounts\",\n \"registry.bank-accounts.description\": \"Bank accounts, cash registers, credit cards, and digital wallets\",\n \"registry.chart-of-accounts\": \"Chart of Accounts\",\n \"registry.chart-of-accounts.description\": \"Hierarchical chart of accounts for categorizing transactions\",\n \"registry.cost-centers\": \"Cost Centers\",\n \"registry.cost-centers.description\": \"Cost centers for expense tracking and departmental budgets\",\n \"registry.commission-rules\": \"Commission Rules\",\n \"registry.commission-rules.description\": \"Commission rules for service and product revenue sharing\",\n \"registry.price-tables\": \"Price Tables\",\n \"registry.price-tables.description\": \"Price tables for sale and cost pricing\",\n \"registry.price-variations\": \"Price Variations\",\n \"registry.price-variations.description\": \"Discount and surcharge rules for pricing\",\n \"registry.payment-method-types\": \"Payment Types\",\n \"registry.payment-method-types.description\": \"System payment types (cash, card, PIX, etc.)\",\n \"registry.card-brands\": \"Card Brands\",\n \"registry.card-brands.description\": \"Credit and debit card brands\",\n // Statements / extract\n \"financial.statements.columnDate\": \"Date\",\n \"financial.statements.columnDescription\": \"Description\",\n \"financial.statements.columnDebit\": \"Debit\",\n \"financial.statements.columnCredit\": \"Credit\",\n \"financial.statements.columnFee\": \"Fee\",\n \"financial.statements.columnBalance\": \"Balance\",\n \"financial.statements.columnMethod\": \"Method\",\n \"financial.statements.columnDoc\": \"Document\",\n \"financial.statements.installmentShort\": \"Inst. {{n}}\",\n \"financial.statements.viewInvoice\": \"View invoice\",\n \"financial.person.empty\": \"No financial activity for this contact yet\",\n \"financial.statements.opening\": \"Opening balance\",\n \"financial.statements.closing\": \"Closing balance\",\n \"financial.statements.currentBalance\": \"Current balance\",\n \"financial.statements.totalCredits\": \"Credits\",\n \"financial.statements.totalDebits\": \"Debits\",\n \"financial.statements.totalFees\": \"Fees\",\n \"financial.statements.net\": \"Net\",\n \"financial.statements.transfer\": \"Transfer\",\n \"financial.statements.reconciled\": \"Reconciled with the bank statement\",\n \"financial.statements.imported\": \"Imported from the bank · not reconciled\",\n \"financial.statements.reconciledWith\": \"Reconciled with {{ref}}\",\n \"financial.statements.newTransfer\": \"New Transfer\",\n // Transfer dialog\n \"financial.transfer.title\": \"Transfer Between Accounts\",\n \"financial.transfer.from\": \"From account\",\n \"financial.transfer.to\": \"To account\",\n \"financial.transfer.amount\": \"Amount\",\n \"financial.transfer.date\": \"Date\",\n \"financial.transfer.notes\": \"Notes\",\n \"financial.transfer.optionalNotes\": \"Optional notes...\",\n \"financial.transfer.selectAccount\": \"Select account...\",\n \"financial.transfer.submit\": \"Transfer\",\n \"financial.transfer.processing\": \"Transferring...\",\n \"financial.transfer.cancel\": \"Cancel\",\n \"financial.transfer.created\": \"Transfer recorded\",\n \"financial.transfer.failed\": \"Failed to record transfer\",\n \"financial.transfer.sameAccount\": \"Source and destination must differ\",\n \"financial.transfer.invalidAmount\": \"Amount must be greater than zero\",\n \"financial.quickTx.title\": \"New transaction\",\n \"financial.quickTx.close\": \"Close\",\n \"financial.quickTx.newTransaction\": \"New transaction\",\n \"financial.quickTx.expense\": \"Expense\",\n \"financial.quickTx.income\": \"Income\",\n \"financial.quickTx.transfer\": \"Transfer\",\n \"financial.quickTx.paid\": \"Paid\",\n \"financial.quickTx.received\": \"Received\",\n \"financial.quickTx.yes\": \"Yes\",\n \"financial.quickTx.no\": \"No\",\n \"financial.quickTx.category\": \"Category\",\n \"financial.quickTx.selectCategory\": \"No category\",\n \"financial.quickTx.account\": \"Account\",\n \"financial.quickTx.selectAccount\": \"Select account\",\n \"financial.quickTx.fromAccount\": \"From account\",\n \"financial.quickTx.toAccount\": \"To account\",\n \"financial.quickTx.card\": \"Card\",\n \"financial.quickTx.recurring\": \"Recurring\",\n \"financial.quickTx.attachment\": \"Attachment\",\n \"financial.quickTx.attachmentSoon\": \"Attachments coming soon\",\n \"financial.quickTx.receipt\": \"Receipt\",\n \"financial.quickTx.receiptCapture\": \"Snap or attach a receipt\",\n \"financial.quickTx.receiptAttached\": \"Receipt attached\",\n \"financial.quickTx.receiptReplace\": \"Replace\",\n \"financial.quickTx.receiptRemove\": \"Remove receipt\",\n \"financial.quickTx.receiptInvalid\": \"Please choose an image file\",\n \"financial.quickTx.sendReceipt\": \"Send receipt\",\n \"financial.quickTx.descriptionPlaceholder\": \"e.g. Groceries, Salary…\",\n \"financial.quickTx.enterAmount\": \"Enter an amount\",\n \"financial.quickTx.save\": \"Save\",\n \"financial.quickTx.saving\": \"Saving…\",\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"financial.cards.addExpense\": \"Adicionar despesa\",\n \"financial.cards.allBillsValue\": \"Total das faturas\",\n \"financial.cards.availableLimit\": \"Limite disponível\",\n \"financial.cards.currentBill\": \"Fatura atual\",\n \"financial.cards.dueOn\": \"Vence dia {{day}}\",\n \"financial.cards.installment\": \"Parcela {{current}}/{{total}}\",\n \"financial.cards.noCards\": \"Nenhum cartão cadastrado\",\n \"financial.cards.noCardsHint\": \"Adicione um cartão de crédito nas configurações para acompanhar suas faturas aqui\",\n \"financial.cards.noTransactions\": \"Nenhuma transação com cartão\",\n \"financial.cards.tabClosed\": \"Fechados\",\n \"financial.cards.tabOpen\": \"Abertos\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% do limite usado\",\n \"financial.cards.pending\": \"Pendente\",\n \"financial.cards.received\": \"Recebido\",\n \"financial.cards.subtitle\": \"Transações de cartão de crédito e débito\",\n \"financial.cards.title\": \"Cartões\",\n \"financial.cards.transactions\": \"({{count}} transações)\",\n \"financial.cards.transactionsAppear\": \"As transações com cartão aparecerão aqui quando pagamentos forem feitos via cartão de crédito/débito\",\n \"financial.cashRegisters.addNotes\": \"Adicionar observações\",\n \"financial.cashRegisters.back\": \"Voltar\",\n \"financial.cashRegisters.bills\": \"Notas\",\n \"financial.cashRegisters.closeSession\": \"Fechar Sessão\",\n \"financial.cashRegisters.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cashRegisters.closing\": \"Fechando...\",\n \"financial.cashRegisters.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cashRegisters.closingNotes\": \"Observações de Fechamento\",\n \"financial.cashRegisters.coins\": \"Moedas\",\n \"financial.cashRegisters.confirmOpen\": \"Confirmar e Abrir\",\n \"financial.cashRegisters.confirmOpening\": \"Confirmar Abertura do Caixa\",\n \"financial.cashRegisters.count\": \"Contagem\",\n \"financial.cashRegisters.countBills\": \"Contar Notas e Moedas\",\n \"financial.cashRegisters.countedTotal\": \"Total Contado\",\n \"financial.cashRegisters.denominationCount\": \"Contagem por denominação\",\n \"financial.cashRegisters.differenceFromOpening\": \"Diferença em relação à abertura\",\n \"financial.cashRegisters.method\": \"Método\",\n \"financial.cashRegisters.noCashAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cashRegisters.noClosedSessions\": \"Nenhuma sessão encerrada ainda\",\n \"financial.cashRegisters.openAnother\": \"Abrir outro caixa\",\n \"financial.cashRegisters.openSession\": \"Abrir Sessão\",\n \"financial.cashRegisters.openSessions\": \"Sessões Abertas\",\n \"financial.cashRegisters.opened\": \"Aberto\",\n \"financial.cashRegisters.opening\": \"Abrindo...\",\n \"financial.cashRegisters.openingBalance\": \"Saldo de Abertura\",\n \"financial.cashRegisters.quickAmount\": \"Valor Rápido\",\n \"financial.cashRegisters.register\": \"Caixa\",\n \"financial.cashRegisters.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cashRegisters.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.commissions.comingSoon\": \"Em breve\",\n \"financial.commissions.subtitle\": \"Comissões da equipe\",\n \"financial.invoice.accountsPayable\": \"Contas a Pagar\",\n \"financial.invoice.accountsReceivable\": \"Contas a Receber\",\n \"financial.invoice.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoice.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas. Esta fatura não contará mais nos totais.\",\n \"financial.invoice.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoice.cancelling\": \"Cancelando...\",\n \"financial.invoice.contact\": \"Contato\",\n \"financial.invoice.createFirst\": \"Crie sua primeira fatura\",\n \"financial.invoice.date\": \"Data\",\n \"financial.invoice.booking\": \"Agendamento\",\n \"financial.invoice.discount\": \"Desconto\",\n \"financial.invoice.due\": \"Vencimento:\",\n \"financial.invoice.edit\": \"Editar Fatura\",\n \"financial.invoice.fullyPaid\": \"Totalmente pago\",\n \"financial.invoice.installments\": \"Parcelas\",\n \"financial.invoice.invoices\": \"{{count}} faturas\",\n \"financial.invoice.items\": \"Itens\",\n \"financial.invoice.keepInvoice\": \"Manter Fatura\",\n \"financial.invoice.new\": \"Nova\",\n \"financial.invoice.noDetails\": \"Nenhum detalhe adicional registrado\",\n \"financial.invoice.noInstallments\": \"Sem parcelas\",\n \"financial.invoice.noInvoices\": \"Nenhuma fatura ainda\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Recebido\",\n \"financial.invoice.summaryReceivable\": \"A Receber\",\n \"financial.invoice.summaryPaid\": \"Pago\",\n \"financial.invoice.summaryPayable\": \"A Pagar\",\n \"financial.invoice.notFound\": \"Fatura não encontrada\",\n \"financial.invoice.notFoundDesc\": \"Esta fatura não pôde ser carregada.\",\n \"financial.invoice.notes\": \"Observações\",\n \"financial.invoice.paidLabel\": \"Pago:\",\n \"financial.invoice.paidOn\": \"Pago em:\",\n \"financial.invoice.pay\": \"Pagar\",\n \"financial.invoice.paymentSchedule\": \"Cronograma de Pagamento\",\n \"financial.invoice.remaining\": \"Restante:\",\n \"financial.invoice.searchPlaceholder\": \"Buscar por contato ou descrição...\",\n \"financial.invoice.showing\": \"Exibindo {{shown}} de {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Acréscimo\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.addFirstItem\": \"Adicione seu primeiro item\",\n \"financial.invoiceForm.addItem\": \"Adicionar Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Adicione itens primeiro\",\n \"financial.invoiceForm.additionalNotes\": \"Observações adicionais...\",\n \"financial.invoiceForm.cancel\": \"Cancelar\",\n \"financial.invoiceForm.close\": \"Fechar\",\n \"financial.invoiceForm.creating\": \"Criando nova fatura\",\n \"financial.invoiceForm.date\": \"Data\",\n \"financial.invoiceForm.description\": \"Descrição\",\n \"financial.invoiceForm.discountSurcharge\": \"Desconto / Acréscimo\",\n \"financial.invoiceForm.done\": \"Pronto\",\n \"financial.invoiceForm.editing\": \"Editando fatura\",\n \"financial.invoiceForm.fiscalNumber\": \"Número Fiscal (opcional)\",\n \"financial.invoiceForm.headquarters\": \"Sede\",\n \"financial.invoiceForm.installments\": \"Parcelas\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Descrição do item\",\n \"financial.invoiceForm.items\": \"Itens\",\n \"financial.invoiceForm.noDescription\": \"Sem descrição\",\n \"financial.invoiceForm.noItems\": \"Nenhum item adicionado ainda\",\n \"financial.invoiceForm.noUnitsFound\": \"Nenhuma unidade encontrada\",\n \"financial.invoiceForm.observations\": \"Observações\",\n \"financial.invoiceForm.payTo\": \"Pagar para\",\n \"financial.invoiceForm.qty\": \"Qtd\",\n \"financial.invoiceForm.receiveFrom\": \"Receber de\",\n \"financial.invoiceForm.save\": \"Salvar\",\n \"financial.invoiceForm.saving\": \"Salvando...\",\n \"financial.invoiceForm.searchType\": \"Digite para buscar...\",\n \"financial.invoiceForm.searchUnit\": \"Buscar unidade...\",\n \"financial.invoiceForm.selectInstallments\": \"Selecione a quantidade de parcelas acima\",\n \"financial.invoiceForm.selectItemType\": \"Selecione o tipo do item:\",\n \"financial.invoiceForm.selectUnit\": \"Selecionar unidade\",\n \"financial.invoiceForm.selectUnitTitle\": \"Selecionar Unidade\",\n \"financial.invoiceForm.unit\": \"Unidade\",\n \"financial.invoiceForm.unitPrice\": \"Preço Unitário\",\n \"financial.nav.cards\": \"Cartões\",\n \"financial.nav.cashRegisters\": \"Caixas\",\n \"financial.nav.commissions\": \"Comissões\",\n \"financial.nav.list\": \"Lista\",\n \"financial.nav.new\": \"Novo\",\n \"financial.nav.overview\": \"Visão Geral\",\n \"financial.nav.payables\": \"Contas a Pagar\",\n \"financial.nav.receivables\": \"Contas a Receber\",\n \"financial.nav.reconciliation\": \"Conciliação\",\n \"financial.nav.recurringExpenses\": \"Despesas Recorrentes\",\n \"financial.nav.rules\": \"Regras\",\n \"financial.nav.statements\": \"Extratos\",\n \"financial.nav.summary\": \"Resumo\",\n \"financial.invoice.filterAccount\": \"Plano de contas\",\n \"financial.invoice.filterAllAccounts\": \"Todos os planos\",\n \"financial.invoice.filterCostCenter\": \"Centro de custo\",\n \"financial.invoice.filterAllCostCenters\": \"Todos os centros\",\n \"financial.reconciliation.title\": \"Conciliação\",\n \"financial.reconciliation.subtitle\": \"Concilie as linhas importadas do banco com seus lançamentos\",\n \"financial.reconciliation.pending\": \"{{count}} para conciliar\",\n \"financial.reconciliation.allDone\": \"Tudo conciliado\",\n \"financial.reconciliation.empty\": \"Nada para conciliar\",\n \"financial.reconciliation.emptyHint\": \"As transações bancárias importadas aparecem aqui para conciliação.\",\n \"financial.reconciliation.bankLines\": \"Linhas do banco\",\n \"financial.reconciliation.candidates\": \"Correspondências sugeridas\",\n \"financial.reconciliation.selectLine\": \"Selecione uma linha do banco para ver as sugestões\",\n \"financial.reconciliation.noCandidates\": \"Nenhuma correspondência sugerida para esta linha\",\n \"financial.reconciliation.match\": \"Conciliar\",\n \"financial.reconciliation.accept\": \"Aceitar como novo\",\n \"financial.reconciliation.acceptHint\": \"Sem contrapartida interna — manter como lançamento avulso\",\n \"financial.reconciliation.matchScore\": \"{{score}}% compatível\",\n \"financial.reconciliation.refresh\": \"Atualizar\",\n \"financial.onboarding.back\": \"Voltar\",\n \"financial.onboarding.configureHint\": \"Você pode configurar isso em detalhes pelo ícone de Configurações dentro do módulo Financeiro.\",\n \"financial.onboarding.getStarted\": \"Começar\",\n \"financial.onboarding.next\": \"Próximo\",\n \"financial.onboarding.startUsing\": \"Começar a usar o Financeiro\",\n \"financial.onboarding.skip\": \"Pular configuração\",\n \"financial.onboarding.welcome\": \"Bem-vindo ao Financeiro\",\n \"financial.onboarding.description\": \"Vamos configurar seu módulo financeiro. Este assistente rápido ajudará a configurar o essencial.\",\n \"financial.onboarding.accounts.title\": \"Contas Bancárias\",\n \"financial.onboarding.accounts.description\": \"Adicione suas contas bancárias, caixas registradoras e cartões de crédito. Você pode adicionar mais depois em Configurações.\",\n \"financial.onboarding.payments.title\": \"Métodos de Pagamento\",\n \"financial.onboarding.payments.description\": \"Revise os tipos de pagamento que você aceita. Os tipos padrão (Dinheiro, PIX, Cartão de Crédito, etc.) já estão configurados.\",\n \"financial.onboarding.chart.title\": \"Plano de Contas\",\n \"financial.onboarding.chart.description\": \"Um modelo padrão de plano de contas foi criado. Você pode personalizá-lo a qualquer momento em Configurações.\",\n \"financial.page.newPayable\": \"Nova Conta a Pagar\",\n \"financial.page.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.page.newReceivable\": \"Nova Conta a Receber\",\n \"financial.page.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.page.openCash\": \"Abrir Caixa\",\n \"financial.page.openCashDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.page.settingsSubtitle\": \"Preferências, métodos de pagamento e contas\",\n \"financial.page.settingsTitle\": \"Configurações Financeiras\",\n \"financial.payment.amount\": \"Valor\",\n \"financial.payment.bankAccount\": \"Conta Bancária\",\n \"financial.payment.cancel\": \"Cancelar\",\n \"financial.payment.card\": \"Cartão\",\n \"financial.payment.cardBrand\": \"Bandeira do Cartão\",\n \"financial.payment.cardInstallments\": \"Parcelas\",\n \"financial.payment.date\": \"Data\",\n \"financial.payment.installment\": \"Parcela #{{number}}\",\n \"financial.payment.method\": \"Método de Pagamento\",\n \"financial.payment.notes\": \"Observações\",\n \"financial.payment.optionalNotes\": \"Observações opcionais...\",\n \"financial.payment.payAmount\": \"Pagar {{amount}}\",\n \"financial.payment.processing\": \"Processando...\",\n \"financial.payment.remaining\": \"{{amount}} restante\",\n \"financial.payment.select\": \"Selecionar...\",\n \"financial.payment.selectAccount\": \"Selecionar conta...\",\n \"financial.payment.selectBrand\": \"Selecionar bandeira...\",\n \"financial.payment.title\": \"Registrar Pagamento\",\n \"financial.settings.allowPartial\": \"Permitir pagamentos parciais\",\n \"financial.settings.allowPartialDesc\": \"Aceitar pagamentos menores que o valor total da parcela\",\n \"financial.settings.autoClose\": \"Fechamento automático no fim do dia\",\n \"financial.settings.autoCloseDesc\": \"Lembrar de fechar sessões abertas no fim do expediente\",\n \"financial.settings.autoInstallments\": \"Gerar parcelas automaticamente\",\n \"financial.settings.autoInstallmentsDesc\": \"Dividir automaticamente o total da fatura em parcelas iguais\",\n \"financial.settings.cashRegister\": \"Caixa Registradora\",\n \"financial.settings.cashRegisterDesc\": \"Comportamento da sessão de caixa\",\n \"financial.settings.dailySummary\": \"Resumo financeiro diário\",\n \"financial.settings.dailySummaryDesc\": \"Enviar um resumo diário por e-mail de contas a receber e a pagar\",\n \"financial.settings.invoices\": \"Faturas\",\n \"financial.settings.invoicesDesc\": \"Como faturas e pagamentos são processados\",\n \"financial.settings.notifications\": \"Notificações\",\n \"financial.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"financial.settings.overdueAlerts\": \"Alertas de pagamento atrasado\",\n \"financial.settings.overdueAlertsDesc\": \"Notificar quando faturas passarem da data de vencimento\",\n \"financial.settings.requireDoc\": \"Exigir número do documento\",\n \"financial.settings.requireDocDesc\": \"Tornar obrigatório o número do documento/fatura nos pagamentos\",\n \"financial.settings.requireOpening\": \"Exigir saldo de abertura\",\n \"financial.settings.requireOpeningDesc\": \"O saldo de abertura deve ser confirmado antes de iniciar uma sessão\",\n \"financial.settingsPage.subtitle\": \"Gerenciar métodos de pagamento, contas e configurações\",\n \"financial.settingsPage.title\": \"Configurações Financeiras\",\n \"financial.payment.noMethods\": \"Nenhuma forma de pagamento configurada.\",\n \"financial.payment.configureMethods\": \"Configurar formas de pagamento\",\n \"financial.payment.noAccounts\": \"Nenhuma conta compatível. Crie uma nas Configurações.\",\n \"financial.payment.configureAccounts\": \"Configurar contas\",\n \"financial.statements.account\": \"Conta\",\n \"financial.statements.from\": \"De\",\n \"financial.statements.noTransactions\": \"Sem transações neste período\",\n \"financial.statements.selectAccount\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.selectToView\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.subtitle\": \"Transações e saldos de contas bancárias\",\n \"financial.statements.title\": \"Extratos\",\n \"financial.statements.to\": \"Até\",\n \"financial.summary.allAccounts\": \"Todas as contas\",\n \"financial.summary.cashFlow\": \"Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdown\": \"Detalhamento do Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Contas a receber vs. contas a pagar neste mês\",\n \"financial.summary.cashFlowSubtitle\": \"Receitas vs despesas mensais\",\n \"financial.summary.expenses\": \"Despesas\",\n \"financial.summary.income\": \"Receita\",\n \"financial.summary.monthlyFlow\": \"Fluxo Mensal\",\n \"financial.summary.negativeBalance\": \"Saldo negativo\",\n \"financial.summary.net\": \"Líquido\",\n \"financial.summary.noOverdue\": \"Nenhuma transação atrasada\",\n \"financial.summary.noTransactions\": \"Nenhuma transação ainda\",\n \"financial.summary.overdue\": \"{{count}} atrasados\",\n \"financial.summary.overduePayable\": \"Conta a pagar atrasada\",\n \"financial.summary.overdueReceivable\": \"Conta a receber atrasada\",\n \"financial.summary.overdueTitle\": \"Atrasados\",\n \"financial.summary.paid\": \"Pago\",\n \"financial.summary.payable\": \"A Pagar\",\n \"financial.summary.positiveBalance\": \"Saldo positivo\",\n \"financial.summary.receivable\": \"A Receber\",\n \"financial.summary.received\": \"Recebido\",\n \"financial.summary.recentTransactions\": \"Transações Recentes\",\n \"financial.summary.totalBalance\": \"Saldo Total\",\n \"financial.summary.transactionsAppear\": \"As transações aparecerão aqui após serem registradas\",\n \"financial.summary.viewAll\": \"Ver todos\",\n \"financial.summary.today\": \"Hoje\",\n \"financial.summary.yesterday\": \"Ontem\",\n \"financial.summary.transactionsTitle\": \"Transações\",\n \"financial.home.balance\": \"Saldo\",\n \"financial.home.inflow\": \"Entradas\",\n \"financial.home.outflow\": \"Saídas\",\n \"financial.home.showBalance\": \"Mostrar saldo\",\n \"financial.home.hideBalance\": \"Ocultar saldo\",\n \"financial.home.upcomingBills\": \"Próximas contas\",\n \"financial.home.noBills\": \"Nenhuma conta a vencer.\",\n \"financial.home.dueToday\": \"Vence hoje\",\n \"financial.home.dueTomorrow\": \"Vence amanhã\",\n \"financial.home.dueInDays\": \"Vence em {{count}} dias\",\n \"financial.home.overdueDays\": \"Venceu há {{count}} dias\",\n \"financial.home.cards\": \"Cartões\",\n \"financial.home.currentBill\": \"Fatura atual\",\n \"financial.home.availableLimit\": \"Limite disponível\",\n \"financial.home.addCard\": \"Novo cartão\",\n \"financial.home.bill\": \"Conta\",\n \"financial.home.spendByCategory\": \"Gastos por categoria\",\n \"financial.home.noSpend\": \"Sem gastos neste mês.\",\n \"financial.home.category.groceries\": \"Mercado\",\n \"financial.home.category.transport\": \"Transporte\",\n \"financial.home.category.subscriptions\": \"Assinaturas\",\n \"financial.home.category.dining\": \"Alimentação\",\n \"financial.home.category.home\": \"Casa\",\n \"financial.home.category.health\": \"Saúde\",\n \"financial.home.category.leisure\": \"Lazer\",\n \"financial.home.category.shopping\": \"Compras\",\n \"financial.home.category.other\": \"Outros\",\n \"financial.quickActions.newPayable\": \"Nova Conta a Pagar\",\n \"financial.quickActions.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.quickActions.newReceivable\": \"Nova Conta a Receber\",\n \"financial.quickActions.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.quickActions.openCashRegister\": \"Abrir Caixa\",\n \"financial.quickActions.openCashRegisterDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.cash.title\": \"Caixa Registradora\",\n \"financial.cash.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.cash.bills\": \"Notas\",\n \"financial.cash.coins\": \"Moedas\",\n \"financial.cash.noAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cash.confirmOpening\": \"Confirmar Abertura de Caixa\",\n \"financial.cash.register\": \"Caixa\",\n \"financial.cash.openingBalance\": \"Saldo de Abertura\",\n \"financial.cash.method\": \"Método\",\n \"financial.cash.denominationCount\": \"Contagem de cédulas\",\n \"financial.cash.notes\": \"Observações\",\n \"financial.cash.opening\": \"Abrindo...\",\n \"financial.cash.confirmAndOpen\": \"Confirmar e Abrir\",\n \"financial.cash.quickAmount\": \"Valor Rápido\",\n \"financial.cash.countBillsCoins\": \"Contar Cédulas e Moedas\",\n \"financial.cash.count\": \"Contar\",\n \"financial.cash.countedTotal\": \"Total Contado\",\n \"financial.cash.addNotes\": \"Adicionar observações\",\n \"financial.cash.openingObservations\": \"Observações de abertura...\",\n \"financial.cash.openSession\": \"Abrir Sessão\",\n \"financial.cash.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cash.differenceFromOpening\": \"Diferença da abertura\",\n \"financial.cash.closingNotes\": \"Observações de Fechamento\",\n \"financial.cash.closingObservations\": \"Observações de fechamento...\",\n \"financial.cash.closing\": \"Fechando...\",\n \"financial.cash.closeSession\": \"Fechar Sessão\",\n \"financial.cash.openSessions\": \"Sessões Abertas\",\n \"financial.cash.opened\": \"Aberto\",\n \"financial.cash.by\": \"por\",\n \"financial.cash.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cash.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cash.noClosedSessions\": \"Nenhuma sessão fechada ainda\",\n \"financial.cash.openLabel\": \"Abertura\",\n \"financial.cash.closeLabel\": \"Fechamento\",\n \"financial.cash.diff\": \"Dif\",\n \"financial.cash.openAnother\": \"Abrir outro caixa\",\n \"financial.invoice.statusOpen\": \"Aberto\",\n \"financial.invoice.statusPartial\": \"Parcial\",\n \"financial.invoice.statusPaid\": \"Pago\",\n \"financial.invoice.statusOverdue\": \"Vencido\",\n \"financial.invoice.statusCancelled\": \"Cancelado\",\n \"financial.invoice.statusPending\": \"Pendente\",\n \"financial.invoice.statusDraft\": \"Rascunho\",\n \"financial.invoice.columnDate\": \"Data\",\n \"financial.invoice.columnDescription\": \"Descrição\",\n \"financial.invoice.columnAmount\": \"Valor\",\n \"financial.invoice.columnPaid\": \"Pago\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Parc.\",\n \"financial.invoice.columnQty\": \"Qtd\",\n \"financial.invoice.columnUnitPrice\": \"Preço Unit.\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Fatura\",\n \"financial.invoice.loading\": \"Carregando...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoiceForm.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoiceForm.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas.\",\n \"financial.invoiceForm.keepInvoice\": \"Manter Fatura\",\n \"financial.invoiceForm.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.cancelling\": \"Cancelando...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remover ajustes\",\n \"financial.invoiceForm.discount\": \"Desconto\",\n \"financial.invoiceForm.surcharge\": \"Acréscimo\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Conta\",\n \"financial.payment.due\": \"Venc.:\",\n \"financial.payment.paidAmount\": \"Pago:\",\n \"financial.payment.paidOn\": \"Pago em:\",\n \"financial.title\": \"Financeiro\",\n \"financial.summary.title\": \"Resumo Financeiro\",\n \"financial.summary.revenue\": \"Receita\",\n \"financial.invoice.title\": \"Faturas\",\n \"financial.invoice.create\": \"Nova Fatura\",\n \"financial.invoice.number\": \"Fatura #\",\n \"financial.invoice.client\": \"Cliente\",\n \"financial.invoice.amount\": \"Valor\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Vencimento\",\n \"financial.invoice.addItem\": \"Adicionar Item\",\n \"financial.invoice.tax\": \"Imposto\",\n \"financial.invoice.save\": \"Salvar Fatura\",\n \"financial.invoice.saving\": \"Salvando...\",\n \"financial.invoice.markPaid\": \"Marcar como Pago\",\n \"financial.invoice.sendReminder\": \"Enviar Lembrete\",\n \"financial.receivable.title\": \"Contas a Receber\",\n \"financial.payable.title\": \"Contas a Pagar\",\n \"financial.statements.loading\": \"Carregando...\",\n \"financial.cards.empty\": \"Nenhuma transação de cartão ainda\",\n \"financial.commissions.title\": \"Comissões\",\n \"financial.cashRegister.title\": \"Caixa\",\n \"financial.cashRegister.open\": \"Abrir Caixa\",\n \"financial.cashRegister.close\": \"Fechar Caixa\",\n \"financial.movements.title\": \"Movimentações\",\n \"financial.bankAccounts.title\": \"Contas Bancárias\",\n \"financial.settings.title\": \"Configurações Financeiras\",\n // Abas de registros nas configurações\n \"registry.payment-methods\": \"Formas de Pagamento\",\n \"registry.payment-methods.description\": \"Formas de pagamento configuradas com taxas e regras de parcelamento\",\n \"registry.bank-accounts\": \"Contas\",\n \"registry.bank-accounts.description\": \"Contas bancárias, caixas, cartões de crédito e carteiras digitais\",\n \"registry.chart-of-accounts\": \"Plano de Contas\",\n \"registry.chart-of-accounts.description\": \"Plano de contas hierárquico para categorizar transações\",\n \"registry.cost-centers\": \"Centros de Custo\",\n \"registry.cost-centers.description\": \"Centros de custo para controle de despesas e orçamentos por departamento\",\n \"registry.commission-rules\": \"Regras de Comissão\",\n \"registry.commission-rules.description\": \"Regras de comissão para serviços e produtos\",\n \"registry.price-tables\": \"Tabelas de Preço\",\n \"registry.price-tables.description\": \"Tabelas de preço de venda e custo\",\n \"registry.price-variations\": \"Variações de Preço\",\n \"registry.price-variations.description\": \"Regras de desconto e acréscimo de preços\",\n \"registry.payment-method-types\": \"Tipos de Pagamento\",\n \"registry.payment-method-types.description\": \"Tipos de pagamento do sistema (dinheiro, cartão, PIX, etc.)\",\n \"registry.card-brands\": \"Bandeiras de Cartão\",\n \"registry.card-brands.description\": \"Bandeiras de cartão de crédito e débito\",\n // Extrato\n \"financial.statements.columnDate\": \"Data\",\n \"financial.statements.columnDescription\": \"Descrição\",\n \"financial.statements.columnDebit\": \"Débito\",\n \"financial.statements.columnCredit\": \"Crédito\",\n \"financial.statements.columnFee\": \"Taxa\",\n \"financial.statements.columnBalance\": \"Saldo\",\n \"financial.statements.columnMethod\": \"Forma\",\n \"financial.statements.columnDoc\": \"Documento\",\n \"financial.statements.installmentShort\": \"Parc. {{n}}\",\n \"financial.statements.viewInvoice\": \"Ver fatura\",\n \"financial.person.empty\": \"Nenhuma atividade financeira para este contato ainda\",\n \"financial.statements.opening\": \"Saldo inicial\",\n \"financial.statements.closing\": \"Saldo final\",\n \"financial.statements.currentBalance\": \"Saldo atual\",\n \"financial.statements.totalCredits\": \"Créditos\",\n \"financial.statements.totalDebits\": \"Débitos\",\n \"financial.statements.totalFees\": \"Taxas\",\n \"financial.statements.net\": \"Líquido\",\n \"financial.statements.transfer\": \"Transferência\",\n \"financial.statements.reconciled\": \"Conciliado com o extrato bancário\",\n \"financial.statements.imported\": \"Importado do banco · não conciliado\",\n \"financial.statements.reconciledWith\": \"Conciliado com {{ref}}\",\n \"financial.statements.newTransfer\": \"Nova Transferência\",\n // Diálogo de transferência\n \"financial.transfer.title\": \"Transferência entre Contas\",\n \"financial.transfer.from\": \"Conta de origem\",\n \"financial.transfer.to\": \"Conta de destino\",\n \"financial.transfer.amount\": \"Valor\",\n \"financial.transfer.date\": \"Data\",\n \"financial.transfer.notes\": \"Observações\",\n \"financial.transfer.optionalNotes\": \"Observações opcionais...\",\n \"financial.transfer.selectAccount\": \"Selecione a conta...\",\n \"financial.transfer.submit\": \"Transferir\",\n \"financial.transfer.processing\": \"Transferindo...\",\n \"financial.transfer.cancel\": \"Cancelar\",\n \"financial.transfer.created\": \"Transferência registrada\",\n \"financial.transfer.failed\": \"Falha ao registrar transferência\",\n \"financial.transfer.sameAccount\": \"Origem e destino devem ser diferentes\",\n \"financial.transfer.invalidAmount\": \"O valor deve ser maior que zero\",\n \"financial.quickTx.title\": \"Nova transação\",\n \"financial.quickTx.close\": \"Fechar\",\n \"financial.quickTx.newTransaction\": \"Nova transação\",\n \"financial.quickTx.expense\": \"Despesa\",\n \"financial.quickTx.income\": \"Receita\",\n \"financial.quickTx.transfer\": \"Transferência\",\n \"financial.quickTx.paid\": \"Pago\",\n \"financial.quickTx.received\": \"Recebido\",\n \"financial.quickTx.yes\": \"Sim\",\n \"financial.quickTx.no\": \"Não\",\n \"financial.quickTx.category\": \"Categoria\",\n \"financial.quickTx.selectCategory\": \"Sem categoria\",\n \"financial.quickTx.account\": \"Conta\",\n \"financial.quickTx.selectAccount\": \"Selecione a conta\",\n \"financial.quickTx.fromAccount\": \"Conta de origem\",\n \"financial.quickTx.toAccount\": \"Conta de destino\",\n \"financial.quickTx.card\": \"Cartão\",\n \"financial.quickTx.recurring\": \"Recorrente\",\n \"financial.quickTx.attachment\": \"Anexo\",\n \"financial.quickTx.attachmentSoon\": \"Anexos em breve\",\n \"financial.quickTx.receipt\": \"Recibo\",\n \"financial.quickTx.receiptCapture\": \"Fotografar ou anexar recibo\",\n \"financial.quickTx.receiptAttached\": \"Recibo anexado\",\n \"financial.quickTx.receiptReplace\": \"Substituir\",\n \"financial.quickTx.receiptRemove\": \"Remover recibo\",\n \"financial.quickTx.receiptInvalid\": \"Escolha um arquivo de imagem\",\n \"financial.quickTx.sendReceipt\": \"Enviar recibo\",\n \"financial.quickTx.descriptionPlaceholder\": \"ex.: Mercado, Salário…\",\n \"financial.quickTx.enterAmount\": \"Informe um valor\",\n \"financial.quickTx.save\": \"Salvar\",\n \"financial.quickTx.saving\": \"Salvando…\",\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const financialLocales: Record<string, Record<string, string>> = {\n en,\n 'pt-BR': ptBR,\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { Wallet } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { Invoice } from '../types'\n\nconst STATUS_STYLE: Record<string, string> = {\n paid: 'bg-success/15 text-success',\n partial: 'bg-warning/15 text-warning',\n overdue: 'bg-destructive/15 text-destructive',\n open: 'bg-muted text-muted-foreground',\n cancelled: 'bg-muted text-muted-foreground line-through',\n}\n\n/**\n * Per-person financial statement (account_central-style extract): every invoice where\n * this person is the contact — a client paying receivables, or a professional receiving\n * commissions/payables. Rendered as a tab on the person detail page via the\n * `person.detail.financial` widget zone.\n */\nexport function PersonStatementWidget({ person, provider, config }: {\n person: { id?: string; name?: string }\n provider: FinancialDataProvider\n config: ResolvedFinancialConfig\n}) {\n const t = useTranslation()\n const currency = config.currency\n const [invoices, setInvoices] = useState<Invoice[]>([])\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n let alive = true\n if (!person?.id) { setLoading(false); return }\n setLoading(true)\n provider.getInvoices({ contactId: person.id, pageSize: 200 })\n .then((r) => { if (alive) { setInvoices(r.data); setLoading(false) } })\n .catch(() => { if (alive) setLoading(false) })\n return () => { alive = false }\n }, [person?.id, provider])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const totals = useMemo(() => {\n const active = invoices.filter((i) => i.status !== 'cancelled')\n const billed = active.reduce((s, i) => s + (i.totalAmount ?? 0), 0)\n const paid = active.reduce((s, i) => s + (i.paidAmount ?? 0), 0)\n return { billed, paid, balance: billed - paid }\n }, [invoices])\n\n const openInvoice = (inv: Invoice) => {\n const base = inv.direction === 'credit' ? 'receivables' : 'payables'\n window.location.hash = `/financial/${base}/detail/${inv.id}`\n }\n\n const columns: ColumnDef<Invoice, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.invoice.columnDate'),\n cell: ({ row }) => <span className=\"text-muted-foreground text-xs\">{row.original.invoiceDate}</span>,\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => {\n const inv = row.original\n return (\n <button onClick={() => openInvoice(inv)} className=\"text-left\">\n <span className=\"text-xs font-medium text-primary hover:underline\">\n {inv.itemsSummary || inv.contactName || t('financial.invoice.invoice')}\n </span>\n {inv.fiscalNumber && <span className=\"ml-1.5 text-[10px] text-muted-foreground font-mono\">{inv.fiscalNumber}</span>}\n </button>\n )\n },\n },\n {\n id: 'amount', header: t('financial.invoice.columnAmount'),\n cell: ({ row }) => (\n <span className={`text-right block text-xs ${row.original.direction === 'credit' ? 'text-success' : 'text-destructive'}`}>\n {fmt(row.original.totalAmount)}\n </span>\n ),\n },\n {\n id: 'paid', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => <span className=\"text-right block text-xs text-muted-foreground\">{fmt(row.original.paidAmount)}</span>,\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => <span className=\"text-right block text-xs font-medium\">{fmt((row.original.totalAmount ?? 0) - (row.original.paidAmount ?? 0))}</span>,\n },\n {\n id: 'status', header: t('financial.invoice.columnStatus'),\n cell: ({ row }) => (\n <span className={`inline-flex rounded-full px-1.5 py-0.5 text-[9px] font-medium capitalize ${STATUS_STYLE[row.original.status] ?? STATUS_STYLE.open}`}>\n {row.original.status}\n </span>\n ),\n },\n ], [currency, t])\n\n return (\n <div className=\"space-y-3\">\n {/* Totals */}\n <div className=\"grid grid-cols-3 gap-2\">\n <Stat label={t('financial.invoice.summaryTotal')} value={fmt(totals.billed)} />\n <Stat label={t('financial.invoice.summaryPaid')} value={fmt(totals.paid)} positive />\n <Stat label={t('financial.statements.columnBalance')} value={fmt(totals.balance)} accent />\n </div>\n\n {loading ? (\n <DataTable columns={columns} data={[]} loading skeletonRows={5} compact />\n ) : invoices.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-10 text-center rounded-lg border-2 border-dashed border-muted\">\n <Wallet className=\"h-7 w-7 text-muted-foreground mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.person.empty')}</p>\n </div>\n ) : (\n <DataTable columns={columns} data={invoices} compact />\n )}\n </div>\n )\n}\n\nfunction Stat({ label, value, accent, positive }: { label: string; value: string; accent?: boolean; positive?: boolean }) {\n return (\n <div className={`rounded-lg border px-3 py-2 ${accent ? 'bg-muted/40' : 'bg-card'}`}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase truncate\">{label}</p>\n <p className={`text-sm font-semibold mt-0.5 ${positive ? 'text-success' : 'text-foreground'}`}>{value}</p>\n </div>\n )\n}\n","import React from 'react'\nimport type { PluginManifest, PluginRegistryDef, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { FinancialPage } from './FinancialPage'\nimport { createFinancialDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport { createMockFinancialProvider } from './data/mock'\nimport { createSupabaseFinancialProvider } from './data/supabase'\nimport { createSafeDataProvider, registerTranslations } from '@fayz-ai/core'\nimport { createFinancialStore } from './store'\n\n/**\n * Public: a lazy supabase-or-mock financial provider. Apps use this to share one\n * provider between the plugin and a cross-plugin bridge (e.g. agenda's financial\n * bridge in beauty-saas). Thin wrapper over the shared createSafeDataProvider.\n */\nexport function createSafeFinancialProvider(): FinancialDataProvider {\n return createSafeDataProvider(\n () => createSupabaseFinancialProvider(),\n () => createMockFinancialProvider(),\n )\n}\nimport { financialRegistries } from './registries'\nimport { financialLocales } from './locales'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\nimport { PersonStatementWidget } from './components/PersonStatementWidget'\nimport { PluginSettingsPanel } from '@fayz-ai/saas'\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface FinancialPluginLabels {\n pageTitle: string\n pageSubtitle: string\n summary: string\n payables: string\n payablesNew: string\n payablesList: string\n payablesRecurring: string\n receivables: string\n receivablesNew: string\n receivablesList: string\n cashRegisters: string\n statements: string\n commissions: string\n commissionsOverview: string\n commissionsRules: string\n cards: string\n cardsOverview: string\n cardsReconciliation: string\n}\n\nexport interface ItemTypeOption {\n value: string\n label: string\n icon?: string\n}\n\nexport interface FinancialPluginOptions {\n modules?: {\n payables?: boolean\n receivables?: boolean\n cashRegisters?: boolean\n statements?: boolean\n commissions?: boolean\n cards?: boolean\n /** Bank reconciliation (conciliação). Defaults off — enable with a bank connector. */\n reconciliation?: boolean\n }\n labels?: Partial<FinancialPluginLabels>\n currency?: {\n code?: string\n locale?: string\n symbol?: string\n }\n /**\n * Show the plugin's own quick-add affordances (the \"New transaction\" + \"Send\n * receipt\" header buttons and, on mobile, the FAB). Opt-in (default: false) so\n * hosts that already surface a \"New\" menu / global center-action don't render\n * redundant controls. The shared quick-add sheet still opens via openQuickAdd().\n */\n quickAdd?: boolean\n navPosition?: number\n navSection?: 'main' | 'secondary'\n scope?: PluginScope\n verticalId?: VerticalId\n\n /** Data provider. Defaults to mock (in-memory) if not supplied. */\n dataProvider?: FinancialDataProvider\n\n /** Available item types for invoice lines. Default: product + service + other */\n itemTypes?: ItemTypeOption[]\n\n /** Enable service execution tracking on invoice items (default: false) */\n enableServiceExecution?: boolean\n\n /** Contact entity config — which person kind to use */\n contactEntity?: { archetypeKind: string; label?: string }\n\n /** Seed payment method types for mock provider */\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n\n /** Business units / locations. Unit selector only shows when 2+ locations are provided. */\n locations?: Array<{ id: string; name: string; isHQ?: boolean }>\n\n /**\n * Entity lookups for cross-plugin references.\n * Keys match `itemTypes` values (e.g., 'product', 'service').\n * When a lookup is provided, item forms show a search selector for that type.\n * When absent, users type descriptions manually.\n */\n entityLookups?: EntityLookupMap\n\n /** Contact/person lookup for \"Pay to\" / \"Receive from\" fields. Queries persons archetype. */\n contactLookup?: import('@fayz-ai/saas').EntityLookup\n\n /** App-owned registries shown under /settings/financial Properties. */\n settingsRegistries?: PluginRegistryDef[]\n\n /** Callback when user clicks a booking link on an invoice. Receives the order ID. */\n onBookingClick?: (orderId: string) => void\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_LABELS: FinancialPluginLabels = {\n pageTitle: 'Financial',\n pageSubtitle: 'Financial overview and cash flow management',\n summary: 'Summary',\n payables: 'Accounts Payable',\n payablesNew: 'New',\n payablesList: 'List',\n payablesRecurring: 'Recurring Expenses',\n receivables: 'Accounts Receivable',\n receivablesNew: 'New',\n receivablesList: 'List',\n cashRegisters: 'Cash Registers',\n statements: 'Statements',\n commissions: 'Commissions',\n commissionsOverview: 'Overview',\n commissionsRules: 'Rules',\n cards: 'Cards',\n cardsOverview: 'Overview',\n cardsReconciliation: 'Reconciliation',\n}\n\nconst DEFAULT_CURRENCY = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\nconst DEFAULT_ITEM_TYPES: ItemTypeOption[] = [\n { value: 'service', label: 'Service', icon: 'Briefcase' },\n { value: 'product', label: 'Product', icon: 'Package' },\n { value: 'other', label: 'Other', icon: 'MoreHorizontal' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: FinancialPluginOptions): ResolvedFinancialConfig {\n return {\n modules: {\n payables: options?.modules?.payables !== false,\n receivables: options?.modules?.receivables !== false,\n cashRegisters: options?.modules?.cashRegisters !== false,\n statements: options?.modules?.statements !== false,\n commissions: options?.modules?.commissions !== false,\n cards: options?.modules?.cards !== false,\n // Opt-in: only shown when an app explicitly enables reconciliation (bank connector present).\n reconciliation: options?.modules?.reconciliation === true,\n },\n // Opt-in: only render the plugin's own quick-add buttons/FAB when the host asks.\n quickAdd: options?.quickAdd === true,\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n itemTypes: options?.itemTypes ?? DEFAULT_ITEM_TYPES,\n enableServiceExecution: options?.enableServiceExecution ?? false,\n contactEntity: {\n archetypeKind: options?.contactEntity?.archetypeKind ?? 'client',\n label: options?.contactEntity?.label ?? 'Contact',\n },\n locations: options?.locations ?? [],\n entityLookups: options?.entityLookups ?? {},\n contactLookup: options?.contactLookup,\n onBookingClick: options?.onBookingClick,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialPlugin(options?: FinancialPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(financialLocales)\n\n const provider = options?.dataProvider ?? createSafeFinancialProvider()\n const store = createFinancialStore(provider)\n const dashboardWidgets = createFinancialDashboardWidgets({ config, provider, store })\n const registries = [...financialRegistries, ...(options?.settingsRegistries ?? [])]\n\n // Per-person statement tab (account_central-style): bound to this plugin's provider.\n const PersonStatementBound: React.FC<any> = (props) =>\n React.createElement(PersonStatementWidget, { person: props.item, provider, config })\n PersonStatementBound.displayName = 'FinancialPersonStatement'\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(FinancialPage, { config, provider, store, registries })\n\n return {\n id: 'financial',\n name: config.labels.pageTitle,\n icon: 'DollarSign',\n version: '1.0.0',\n scope: options?.scope ?? 'universal',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n dependencies: [],\n declaredFeatures: [\n { id: 'financial', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.receivables ? [{ id: 'financial.receivables', label: config.labels.receivables, group: config.labels.pageTitle }] : []),\n ...(config.modules.payables ? [{ id: 'financial.payables', label: config.labels.payables, group: config.labels.pageTitle }] : []),\n ...(config.modules.commissions ? [{ id: 'financial.commissions', label: config.labels.commissions, group: config.labels.pageTitle }] : []),\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 6,\n label: config.labels.pageTitle,\n route: '/financial',\n icon: 'DollarSign',\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n routes: [\n {\n path: '/financial',\n component: PageComponent,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n widgets: [\n {\n id: 'financial-person-statement',\n zone: 'person.detail.financial',\n component: PersonStatementBound as unknown as React.ComponentType<unknown>,\n order: 0,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n dashboardWidgets,\n aiTools: [\n {\n id: 'financial.get-revenue',\n name: 'getRevenue',\n description: 'Returns revenue for the business in a given period.',\n icon: 'DollarSign',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n period: { type: 'string' as const, description: 'today, week, month, or custom date range' },\n },\n },\n suggestions: [\n { label: 'How much did we make today?' },\n { label: \"What's this month's revenue?\" },\n { label: \"Compare this week's revenue to last week\" },\n ],\n },\n {\n id: 'financial.create-invoice',\n name: 'createInvoice',\n description: 'Creates a new invoice/payable for a contact.',\n icon: 'FileText',\n mode: 'persist' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n contact: { type: 'string' as const, description: 'Contact/customer name' },\n amount: { type: 'number' as const, description: 'Invoice amount' },\n description: { type: 'string' as const, description: 'Invoice description' },\n },\n required: ['contact', 'amount'],\n },\n suggestions: [\n { label: 'Create an invoice for a new client' },\n ],\n permission: { feature: 'financial', action: 'create' as const },\n },\n {\n id: 'financial.list-payables',\n name: 'listPayables',\n description: 'Lists outstanding payables/bills.',\n icon: 'FileDown',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n status: { type: 'string' as const, enum: ['pending', 'overdue', 'paid'] },\n contact: { type: 'string' as const, description: 'Filter by contact name' },\n },\n },\n permission: { feature: 'financial', action: 'read' as const },\n suggestions: [\n { label: 'Show me overdue bills' },\n { label: 'What bills are due this week?' },\n ],\n },\n ],\n registries,\n settings: [\n {\n id: 'financial',\n label: 'Financial',\n icon: 'DollarSign',\n component: (() => {\n const FinancialSettingsTab: React.FC = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Financial Settings',\n subtitle: 'Payment methods, accounts, and configurations',\n generalSettings: React.createElement(FinancialGeneralSettings),\n registries,\n hostPluginId: 'financial',\n routeBase: '/settings/financial',\n })\n FinancialSettingsTab.displayName = 'FinancialSettingsTab'\n return FinancialSettingsTab as unknown as React.ComponentType<unknown>\n })(),\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n locales: financialLocales,\n }\n}\n\n// Re-export types and factories for consumers\nexport type { FinancialDataProvider } from './data/types'\nexport type { ResolvedFinancialConfig } from './FinancialContext'\n// Seedable in-memory provider — apps pass a seed to render the module populated\n// (demo/dogfood data) instead of the empty onboarding state.\nexport { createMockFinancialProvider } from './data/mock'\nexport type { MockFinancialSeed, MockFinancialProviderOptions } from './data/mock'\n// FAY-1242: global quick-add trigger — apps wire this to a shell action (e.g.\n// the bottom-nav center \"+\") to open the transaction sheet from anywhere.\nexport { openQuickAdd } from './quick-add'\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/FinancialContext.tsx","../src/views/SummaryView.tsx","../src/views/QuickTransactionForm.tsx","../src/quick-add.ts","../src/views/InvoiceListView.tsx","../src/views/InvoiceFormView.tsx","../src/components/PaymentModal.tsx","../src/views/InvoiceDetailView.tsx","../src/views/navReferrer.ts","../src/views/PayablesView.tsx","../src/views/ReceivablesView.tsx","../src/views/CashRegistersView.tsx","../src/components/TransferModal.tsx","../src/views/StatementsView.tsx","../src/views/CommissionsView.tsx","../src/views/CardsView.tsx","../src/views/ReconciliationView.tsx","../src/components/FinancialGeneralSettings.tsx","../src/components/FinancialOnboarding.tsx","../src/FinancialPage.tsx","../src/views/dashboardWidgets.tsx","../src/data/mock.ts","../src/data/tables.ts","../src/data/supabase.ts","../src/store.ts","../src/registries.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/components/PersonStatementWidget.tsx","../src/index.ts"],"names":["createPluginContext","jsxs","Fragment","jsx","DashboardCanvas","ShoppingCart","Car","Home","Utensils","Zap","Film","HeartPulse","Dumbbell","Music","ShoppingBag","Landmark","Wallet","CircleDollarSign","t","useTranslation","useMemo","useEffect","formatCurrency","Paperclip","ArrowDownCircle","ArrowLeftRight","ArrowUpCircle","useState","useRef","ChevronDown","X","Check","useLimitGuard","usePermissionOptional","toast","invalidateLimit","Modal","ModalContent","CalendarDays","DatePicker","Camera","Tag","Repeat","Button","React3","CircleDashed","CircleEllipsis","CircleCheckBig","CircleAlert","Ban","now","PersonLink","SubpageHeader","ListView","FileText","Building2","Search","Trash2","SearchSelect","CurrencyInput","Plus","useSaveBar","MoreVertical","LayoutList","createPortal","Banknote","QrCode","CreditCard","ArrowRightLeft","FileCheck","Pencil","User","Calendar","Hash","DollarSign","ExternalLink","DataTable","Calculator","StickyNote","Play","Square","Clock","ChevronUp","TooltipProvider","Tooltip","TooltipTrigger","CheckCheck","TooltipContent","Receipt","CalendarClock","PermissionGate","useCallback","RefreshCw","Sparkles","Link2","useTenantPluginSettings","SettingsGroup","ToggleRow","BookOpen","ChevronRight","parseViewId","useModuleNavigation","useModuleNavAccess","openQuickAdd","PageTransition","PluginSettingsPanel","EntitlementGate","UpgradePrompt","ModulePage","ModuleActionBar","KpiCard","ChartWidget","Card","CardHeader","CardTitle","CardContent","ArrowUpRight","ArrowDownRight","AlertTriangle","TableWidget","today","useDashboardNavigate","React","GoldCard","EyeOff","Eye","pending","CreditCardIcon","ctx","defineKpiWidget","defineChartWidget","defineCustomWidget","defineTableWidget","getActiveTenantId","getSupabaseClientOptional","round2","createStore","dedup","createSafeDataProvider","registerTranslations"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createPluginContext, formatCurrency, type CurrencyConfig, type EntityLookupMap, type EntityLookup } from '@fayz-ai/saas'\nimport type { FinancialPluginLabels, ItemTypeOption } from './index'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\n\n// ---------------------------------------------------------------------------\n// Resolved config — fully merged, no optionals\n// ---------------------------------------------------------------------------\n\nexport interface FinancialModules {\n payables: boolean\n receivables: boolean\n cashRegisters: boolean\n statements: boolean\n commissions: boolean\n cards: boolean\n /** Bank reconciliation (conciliação). Opt-in — enable when a bank connector imports statements. */\n reconciliation: boolean\n}\n\nexport type FinancialCurrency = CurrencyConfig\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nexport interface ResolvedFinancialConfig {\n modules: FinancialModules\n /** Show the plugin's own quick-add header buttons / FAB. Opt-in (default false). */\n quickAdd: boolean\n labels: FinancialPluginLabels\n currency: FinancialCurrency\n itemTypes: ItemTypeOption[]\n enableServiceExecution: boolean\n contactEntity: { archetypeKind: string; label: string }\n locations: LocationOption[]\n entityLookups: EntityLookupMap\n contactLookup?: EntityLookup\n onBookingClick?: (orderId: string) => void\n /** Internal nav item id → access feature id, exactly as the APP declared it\n * (`options.navFeatureMap`; empty when the app gates nothing — the plugin\n * ships no defaults). Drives BOTH the sub-module link paywall\n * (`useModuleNavAccess`) and the matching content gate, so the two can't\n * drift. Unmapped ids are ungated. */\n navFeatureMap: Record<string, string>\n}\n\nconst ctx = createPluginContext<ResolvedFinancialConfig, FinancialDataProvider, FinancialUIState>('FinancialPage')\n\nexport const FinancialContextProvider = ctx.ContextProvider\nexport const useFinancialConfig = ctx.useConfig\nexport const useFinancialProvider = ctx.useProvider\nexport const useFinancialStore = ctx.useStore\n\nexport { formatCurrency }\n","import React, { useEffect, useMemo } from 'react'\nimport {\n ShoppingCart, Car, Home, Utensils, Zap, Film, HeartPulse, Dumbbell,\n Music, ShoppingBag, Landmark, Wallet, CircleDollarSign, Paperclip,\n} from 'lucide-react'\nimport { DashboardCanvas } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport type { StatementEntry } from '../types'\n\n/**\n * Financial summary. On desktop (md+) it renders the rich multi-column dashboard\n * (KPI cards + Fluxo de Caixa chart + breakdown + overdue alerts + recent-\n * transactions table) via the shared DashboardCanvas. On mobile (<md) it swaps\n * to a Mobills-grade experience: a compact KPI strip over a date-grouped\n * transaction list. The two paths share the same store — no forked screen.\n */\nexport function SummaryView() {\n return (\n <>\n {/* Mobile: Mobills-style transaction-led summary */}\n <div className=\"md:hidden\">\n <MobileSummary />\n </div>\n {/* Desktop: rich dashboard canvas (unchanged) */}\n <DashboardCanvas\n surface=\"plugin-home\"\n domain=\"financial\"\n showHeader={false}\n className=\"hidden space-y-6 md:block\"\n />\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Mobile summary (Mobills-grade)\n// ---------------------------------------------------------------------------\n\n// keyword → category glyph, so each row leads with a recognizable colored circle\n// (Mobills-style). Purely cosmetic and safe while categories aren't modeled yet;\n// falls back to a generic money glyph.\nfunction categoryIcon(label: string): React.ElementType {\n const s = label.toLowerCase()\n if (/(mercado|super|padaria|extra|p[aã]o|hortifr)/.test(s)) return ShoppingCart\n if (/(uber|99|posto|shell|gasol|combust|carro)/.test(s)) return Car\n if (/(aluguel|casa|condom|im[oó]vel)/.test(s)) return Home\n if (/(ifood|restaurante|outback|lanche|food|bar\\b)/.test(s)) return Utensils\n if (/(luz|energia|enel|internet|vivo|conta de|[aá]gua)/.test(s)) return Zap\n if (/(cinema|netflix|cinemark|filme|disney|prime)/.test(s)) return Film\n if (/(farm|drogasil|sa[uú]de|plano|hospital|m[eé]dic)/.test(s)) return HeartPulse\n if (/(academia|smartfit|gym|treino)/.test(s)) return Dumbbell\n if (/(spotify|music|deezer)/.test(s)) return Music\n if (/(amazon|shopping|loja|magaz|americanas|mercado livre)/.test(s)) return ShoppingBag\n if (/(fatura|cart[aã]o|nubank|banco|boleto)/.test(s)) return Landmark\n if (/(sal[aá]rio|freel|pix|reembolso|receb|renda|d[ií]vidend)/.test(s)) return Wallet\n return CircleDollarSign\n}\n\nfunction useDateLabel() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n return useMemo(() => {\n const todayStr = new Date().toISOString().slice(0, 10)\n const y = new Date(); y.setDate(y.getDate() - 1)\n const yesterdayStr = y.toISOString().slice(0, 10)\n return (dateStr: string): string => {\n if (dateStr === todayStr) return t('financial.summary.today')\n if (dateStr === yesterdayStr) return t('financial.summary.yesterday')\n try {\n return new Date(`${dateStr}T00:00:00`).toLocaleDateString(currency.locale, {\n weekday: 'short', day: '2-digit', month: 'short',\n })\n } catch {\n return dateStr\n }\n }\n }, [t, currency.locale])\n}\n\nfunction MobileSummary() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const statement = useFinancialStore((s) => s.statement)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n const dateLabel = useDateLabel()\n\n useEffect(() => {\n void fetchSummary()\n void fetchBankAccounts()\n const to = new Date().toISOString().slice(0, 10)\n const from = new Date(); from.setDate(from.getDate() - 90)\n void fetchStatement({ dateRange: { from: from.toISOString().slice(0, 10), to } })\n }, [])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n\n const accountName = useMemo(() => {\n const map = new Map(bankAccounts.map((a) => [a.id, a.name]))\n return (id?: string) => (id ? map.get(id) ?? '' : '')\n }, [bankAccounts])\n\n // Realized cash events grouped by day (most recent first). Transfers are\n // dropped — they're internal and would double-count in a personal feed.\n const groups = useMemo(() => {\n const entries = (statement?.entries ?? []).filter((e) => e.entryKind === 'movement')\n const byDate = new Map<string, StatementEntry[]>()\n for (const e of entries) {\n const d = e.movement.paymentDate ?? e.movement.dueDate\n const bucket = byDate.get(d)\n if (bucket) bucket.push(e)\n else byDate.set(d, [e])\n }\n return [...byDate.entries()].sort((a, b) => b[0].localeCompare(a[0]))\n }, [statement])\n\n return (\n <div className=\"space-y-4\">\n {/* Compact KPI strip */}\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"col-span-2 rounded-xl border bg-card p-4\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.summary.totalBalance')}</p>\n <p className=\"mt-0.5 text-2xl font-semibold\">{fmt(summary?.totalBalance ?? 0)}</p>\n </div>\n <div className=\"rounded-xl border bg-card p-3\">\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.summary.income')}</p>\n <p className=\"mt-0.5 text-base font-semibold text-success\">{fmt(inflow)}</p>\n </div>\n <div className=\"rounded-xl border bg-card p-3\">\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.summary.expenses')}</p>\n <p className=\"mt-0.5 text-base font-semibold text-destructive\">{fmt(outflow)}</p>\n </div>\n </div>\n\n {/* Date-grouped transaction list */}\n {groups.length === 0 ? (\n <div className=\"rounded-xl border border-dashed py-12 text-center text-sm text-muted-foreground\">\n {t('financial.summary.noTransactions')}\n </div>\n ) : (\n <div className=\"space-y-4\">\n {groups.map(([date, rows]) => (\n <div key={date} className=\"space-y-1.5\">\n <p className=\"px-1 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {dateLabel(date)}\n </p>\n <div className=\"divide-y overflow-hidden rounded-xl border bg-card\">\n {rows.map((e) => {\n const isCredit = e.movement.direction === 'credit'\n const title = e.invoice?.contactName || e.movement.notes || t('financial.summary.transactionsTitle')\n const Icon = categoryIcon(title)\n const category = isCredit ? t('financial.summary.income') : t('financial.summary.expenses')\n const acct = accountName(e.movement.bankAccountId)\n const subtitle = acct ? `${category} · ${acct}` : category\n // FAY-1226: a snapped receipt lives on the invoice metadata.\n const receiptUrl = (e.invoice?.metadata as { receiptUrl?: string } | undefined)?.receiptUrl\n return (\n <div key={e.movement.id} className=\"flex items-center gap-3 px-3 py-2.5\">\n <span\n className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-full ${\n isCredit\n ? 'bg-success-soft text-success-soft-foreground'\n : 'bg-destructive-soft text-destructive-soft-foreground'\n }`}\n >\n <Icon className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"flex items-center gap-1.5 truncate text-sm font-medium\">\n {title}\n {receiptUrl && (\n <Paperclip className=\"h-3 w-3 shrink-0 text-muted-foreground\" aria-label={t('financial.quickTx.receiptAttached')} />\n )}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">{subtitle}</p>\n </div>\n {receiptUrl && (\n <img\n src={receiptUrl}\n alt={t('financial.quickTx.receiptAttached')}\n className=\"h-9 w-9 shrink-0 rounded-md border object-cover\"\n />\n )}\n <span className={`shrink-0 text-sm font-semibold ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {isCredit ? '+' : '-'}{fmt(e.net)}\n </span>\n </div>\n )\n })}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowUpCircle, ArrowDownCircle, ArrowLeftRight, Check, ChevronDown,\n Tag, Wallet, Repeat, Paperclip, CalendarDays, X, Camera,\n} from 'lucide-react'\nimport {\n Modal, ModalContent, Button, DatePicker, toast,\n} from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useLimitGuard, invalidateLimit, usePermissionOptional } from '@fayz-ai/saas'\nimport { useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport type { QuickTransactionType } from '../types'\nimport type { ChartOfAccountsNode, BankAccount } from '../types'\n\n// ---------------------------------------------------------------------------\n// Type theme — the header is context-colored so the user always knows what\n// kind of money they're logging (Mobills: red expense / green income / neutral\n// transfer).\n// ---------------------------------------------------------------------------\n\ninterface TypeTheme {\n header: string // header band background + text\n ring: string // focus/selected accent\n icon: React.ElementType\n}\n\nfunction typeTheme(type: QuickTransactionType): TypeTheme {\n switch (type) {\n case 'income':\n return { header: 'bg-success text-success-foreground', ring: 'ring-success', icon: ArrowDownCircle }\n case 'transfer':\n return { header: 'bg-muted text-foreground', ring: 'ring-ring', icon: ArrowLeftRight }\n case 'expense':\n default:\n return { header: 'bg-destructive text-destructive-foreground', ring: 'ring-destructive', icon: ArrowUpCircle }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Small popover-chip select (category / account). Thumb-friendly rows.\n// ---------------------------------------------------------------------------\n\nfunction ChipSelect({ icon: Icon, label, value, options, onChange, emptyLabel }: {\n icon: React.ElementType\n label: string\n value?: string\n options: Array<{ id: string; name: string; hint?: string }>\n onChange: (id: string | undefined) => void\n emptyLabel: string\n}) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n function onDoc(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', onDoc)\n return () => document.removeEventListener('mousedown', onDoc)\n }, [open])\n\n const selected = options.find((o) => o.id === value)\n\n return (\n <div ref={ref} className=\"relative\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"mt-1 flex w-full items-center gap-2 rounded-input border border-input bg-card px-3 py-2.5 text-left text-sm shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] transition-colors hover:bg-muted/30\"\n >\n <Icon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <span className={`flex-1 truncate ${selected ? '' : 'text-muted-foreground'}`}>\n {selected?.name ?? emptyLabel}\n </span>\n <ChevronDown className={`h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute bottom-full left-0 right-0 z-50 mb-1 max-h-56 overflow-auto rounded-lg border bg-popover py-1 shadow-lg\">\n {options.length === 0 ? (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">{emptyLabel}</p>\n ) : (\n <>\n {value != null && (\n <button\n onClick={() => { onChange(undefined); setOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2.5 text-left text-xs text-muted-foreground hover:bg-muted/50\"\n >\n <X className=\"h-3.5 w-3.5\" /> {emptyLabel}\n </button>\n )}\n {options.map((o) => (\n <button\n key={o.id}\n onClick={() => { onChange(o.id); setOpen(false) }}\n className={`flex w-full items-center gap-2 px-3 py-2.5 text-left text-sm hover:bg-muted/50 ${o.id === value ? 'bg-muted/30' : ''}`}\n >\n <span className=\"flex-1 truncate\">{o.name}</span>\n {o.hint && <span className=\"text-[10px] text-muted-foreground\">{o.hint}</span>}\n {o.id === value && <Check className=\"h-3.5 w-3.5 text-primary\" />}\n </button>\n ))}\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Toggle pill\n// ---------------------------------------------------------------------------\n\nfunction TogglePill({ icon: Icon, label, checked, onChange, accent }: {\n icon: React.ElementType\n label: string\n checked: boolean\n onChange: (v: boolean) => void\n accent?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={() => onChange(!checked)}\n className={`flex items-center gap-2 rounded-full border px-3 py-2 text-xs font-medium transition-colors ${\n checked\n ? `border-transparent ${accent ?? 'bg-primary text-primary-foreground'}`\n : 'border-input bg-card text-muted-foreground hover:bg-muted/40'\n }`}\n >\n <Icon className=\"h-3.5 w-3.5\" />\n {label}\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Quick transaction form — responsive (mobile fullscreen sheet / desktop modal)\n// ---------------------------------------------------------------------------\n\nexport function QuickTransactionForm({ open, onOpenChange, defaultType = 'expense', defaultAccountId, focusReceipt = false }: {\n open: boolean\n onOpenChange: (open: boolean) => void\n defaultType?: QuickTransactionType\n /** Preselect an account (e.g. opening from a specific card tile → log an expense against it). */\n defaultAccountId?: string\n /**\n * FAY-1226 \"snap a receipt\": open with the attachment step foregrounded — a\n * prominent capture card at the top of the sheet + auto-open the image picker\n * (mobile offers the camera). Used by the \"Enviar recibo\" entry point.\n */\n focusReceipt?: boolean\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const createQuickTransaction = useFinancialStore((s) => s.createQuickTransaction)\n const guardMovements = useLimitGuard('movements_month')\n const can = usePermissionOptional()\n\n const [type, setType] = useState<QuickTransactionType>(defaultType)\n const [amount, setAmount] = useState(0)\n const [amountStr, setAmountStr] = useState('')\n const [paid, setPaid] = useState(true)\n const [date, setDate] = useState(() => new Date().toISOString().slice(0, 10))\n const [description, setDescription] = useState('')\n const [categoryId, setCategoryId] = useState<string | undefined>()\n const [accountId, setAccountId] = useState<string | undefined>()\n const [toAccountId, setToAccountId] = useState<string | undefined>()\n const [recurring, setRecurring] = useState(false)\n const [saving, setSaving] = useState(false)\n // FAY-1226: the snapped receipt image, held in-memory as a data URL.\n const [receiptUrl, setReceiptUrl] = useState<string | undefined>()\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const [accounts, setAccounts] = useState<BankAccount[]>([])\n const [categories, setCategories] = useState<ChartOfAccountsNode[]>([])\n\n // Reset to a clean slate each time the sheet opens.\n useEffect(() => {\n if (!open) return\n setType(defaultType)\n setAmount(0)\n setAmountStr('')\n setPaid(true)\n setDate(new Date().toISOString().slice(0, 10))\n setDescription('')\n setCategoryId(undefined)\n setAccountId(defaultAccountId)\n setToAccountId(undefined)\n setRecurring(false)\n setReceiptUrl(undefined)\n }, [open, defaultType, defaultAccountId])\n\n // \"Enviar recibo\" flow: auto-open the picker so the user goes straight to the\n // camera/gallery. Fires once per open; harmless if the browser needs a tap.\n useEffect(() => {\n if (open && focusReceipt) {\n const id = window.setTimeout(() => fileInputRef.current?.click(), 250)\n return () => window.clearTimeout(id)\n }\n }, [open, focusReceipt])\n\n // Read the selected image into a data URL (mock has no Supabase bucket).\n function onPickReceipt(e: React.ChangeEvent<HTMLInputElement>) {\n const file = e.target.files?.[0]\n // Reset the input so re-picking the same file still fires onChange.\n e.target.value = ''\n if (!file) return\n if (!file.type.startsWith('image/')) {\n toast.error(t('financial.quickTx.receiptInvalid'))\n return\n }\n const reader = new FileReader()\n reader.onload = () => {\n setReceiptUrl(typeof reader.result === 'string' ? reader.result : undefined)\n // TODO(FAY-1230): Claude-vision OCR auto-fill from the receipt image —\n // prefill amount / merchant (description) / category from `reader.result`.\n }\n reader.onerror = () => toast.error(t('financial.quickTx.receiptInvalid'))\n reader.readAsDataURL(file)\n }\n\n // Load pickers once when opened.\n useEffect(() => {\n if (!open) return\n let cancelled = false\n void (async () => {\n const [accs, coa] = await Promise.all([\n provider.getBankAccounts(),\n provider.getChartOfAccounts().catch(() => [] as ChartOfAccountsNode[]),\n ])\n if (cancelled) return\n setAccounts(accs)\n setCategories(coa)\n setAccountId((prev) => prev ?? accs[0]?.id)\n })()\n return () => { cancelled = true }\n }, [open, provider])\n\n const theme = typeTheme(type)\n const HeaderIcon = theme.icon\n\n const accountOptions = useMemo(\n () => accounts.map((a) => ({ id: a.id, name: a.name, hint: a.accountType === 'credit_card' ? t('financial.quickTx.card') : undefined })),\n [accounts, t],\n )\n const categoryOptions = useMemo(\n () => categories.filter((c) => c.isActive).map((c) => ({ id: c.id, name: c.name, hint: c.code })),\n [categories],\n )\n\n function onAmountChange(raw: string) {\n // Keep digits + a single separator; store the numeric value.\n const cleaned = raw.replace(/[^\\d.,]/g, '').replace(',', '.')\n setAmountStr(raw.replace(/[^\\d.,]/g, ''))\n const n = Number.parseFloat(cleaned)\n setAmount(Number.isFinite(n) ? n : 0)\n }\n\n const canSave =\n amount > 0 &&\n !saving &&\n (type === 'transfer'\n ? !!accountId && !!toAccountId && accountId !== toAccountId\n : true)\n\n async function handleSave() {\n // Defense in depth: never persist for a role without `create`, even if a\n // stray affordance slipped through.\n if (!can('financial', 'create')) return\n if (!canSave) {\n if (type === 'transfer' && accountId && accountId === toAccountId) {\n toast.error(t('financial.transfer.sameAccount'))\n }\n return\n }\n // Plan quantity guard (client-side): a transfer writes two movements (from +\n // to), other kinds one. Guard that many against the monthly cap before the\n // store call — the guard opens the global UpgradeModal when it would exceed.\n if ((await guardMovements(type === 'transfer' ? 2 : 1)) === 'blocked') return\n setSaving(true)\n try {\n await createQuickTransaction({\n type,\n amount,\n date,\n paid: type === 'transfer' ? true : paid,\n description: description || undefined,\n categoryId: type === 'transfer' ? undefined : categoryId,\n bankAccountId: accountId,\n toAccountId: type === 'transfer' ? toAccountId : undefined,\n recurring: type === 'transfer' ? false : recurring,\n receiptUrl: type === 'transfer' ? undefined : receiptUrl,\n })\n invalidateLimit('movements_month')\n onOpenChange(false)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const TYPES: Array<{ id: QuickTransactionType; label: string }> = [\n { id: 'expense', label: t('financial.quickTx.expense') },\n { id: 'income', label: t('financial.quickTx.income') },\n { id: 'transfer', label: t('financial.quickTx.transfer') },\n ]\n\n return (\n <Modal open={open} onOpenChange={onOpenChange}>\n <ModalContent size=\"md\" noPadding hideClose className=\"overflow-hidden\">\n {/* Context-colored header */}\n <div className={`${theme.header} shrink-0 px-5 pb-5 pt-5`}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <HeaderIcon className=\"h-5 w-5\" />\n <h2 className=\"text-sm font-semibold\">{t('financial.quickTx.title')}</h2>\n </div>\n <button\n onClick={() => onOpenChange(false)}\n className=\"flex h-7 w-7 items-center justify-center rounded-full opacity-80 transition-colors hover:bg-black/10 hover:opacity-100\"\n aria-label={t('financial.quickTx.close')}\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Type segmented control */}\n <div className=\"mt-4 flex gap-1 rounded-full bg-black/15 p-1\">\n {TYPES.map((ty) => (\n <button\n key={ty.id}\n onClick={() => setType(ty.id)}\n className={`flex-1 rounded-full px-2 py-1.5 text-xs font-medium transition-colors ${\n type === ty.id ? 'bg-white/90 text-foreground shadow-sm' : 'opacity-90 hover:bg-white/10'\n }`}\n >\n {ty.label}\n </button>\n ))}\n </div>\n\n {/* Big amount input */}\n <div className=\"mt-5 flex items-baseline justify-center gap-2\">\n <span className=\"text-xl font-medium opacity-90\">{currency.symbol}</span>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n autoFocus\n value={amountStr}\n onChange={(e) => onAmountChange(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') void handleSave() }}\n placeholder=\"0,00\"\n className=\"w-full max-w-[220px] bg-transparent text-center text-4xl font-bold tracking-tight outline-none placeholder:opacity-40\"\n />\n </div>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 space-y-4 overflow-y-auto px-5 py-5\">\n {/* Paid / not paid (hidden for transfers — always settled) */}\n {type !== 'transfer' && (\n <div className=\"flex items-center justify-between rounded-input border border-input bg-card px-3 py-2.5 shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)]\">\n <span className=\"text-sm font-medium\">\n {type === 'income' ? t('financial.quickTx.received') : t('financial.quickTx.paid')}\n </span>\n <div className=\"flex gap-1\">\n <button\n onClick={() => setPaid(true)}\n className={`rounded-full px-3 py-1 text-xs font-medium transition-colors ${paid ? 'bg-success text-success-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {t('financial.quickTx.yes')}\n </button>\n <button\n onClick={() => setPaid(false)}\n className={`rounded-full px-3 py-1 text-xs font-medium transition-colors ${!paid ? 'bg-warning text-warning-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {t('financial.quickTx.no')}\n </button>\n </div>\n </div>\n )}\n\n {/* Date */}\n <div>\n <span className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <CalendarDays className=\"h-3.5 w-3.5\" /> {t('financial.invoiceForm.date')}\n </span>\n <DatePicker value={date} onChange={setDate} />\n </div>\n\n {/* Description */}\n <div>\n <span className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.description')}</span>\n <input\n type=\"text\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') void handleSave() }}\n placeholder={t('financial.quickTx.descriptionPlaceholder')}\n className=\"mt-1 w-full rounded-input border border-input bg-card px-3 py-2.5 text-sm shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n\n {/* FAY-1226 receipt attachment — snap/attach an image (data URL in mock).\n Hidden picker; `capture=environment` makes mobile offer the camera. */}\n {type !== 'transfer' && (\n <div>\n <span className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Paperclip className=\"h-3.5 w-3.5\" /> {t('financial.quickTx.receipt')}\n </span>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n className=\"hidden\"\n onChange={onPickReceipt}\n />\n {receiptUrl ? (\n <div className=\"flex items-center gap-3 rounded-input border border-input bg-card p-2 shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)]\">\n <img\n src={receiptUrl}\n alt={t('financial.quickTx.receipt')}\n className=\"h-16 w-16 shrink-0 rounded-md border object-cover\"\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium\">{t('financial.quickTx.receiptAttached')}</p>\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className=\"text-xs text-primary hover:underline\"\n >\n {t('financial.quickTx.receiptReplace')}\n </button>\n </div>\n <button\n type=\"button\"\n onClick={() => setReceiptUrl(undefined)}\n aria-label={t('financial.quickTx.receiptRemove')}\n className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ) : (\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n className={`flex w-full items-center justify-center gap-2 rounded-input border border-dashed px-3 py-3 text-sm font-medium transition-colors hover:bg-muted/30 ${\n focusReceipt ? 'border-primary text-primary ring-1 ring-primary/30' : 'border-input text-muted-foreground'\n }`}\n >\n <Camera className=\"h-4 w-4\" /> {t('financial.quickTx.receiptCapture')}\n </button>\n )}\n </div>\n )}\n\n {type === 'transfer' ? (\n <div className=\"grid grid-cols-1 gap-3\">\n <ChipSelect\n icon={Wallet}\n label={t('financial.quickTx.fromAccount')}\n value={accountId}\n options={accountOptions}\n onChange={setAccountId}\n emptyLabel={t('financial.quickTx.selectAccount')}\n />\n <ChipSelect\n icon={Wallet}\n label={t('financial.quickTx.toAccount')}\n value={toAccountId}\n options={accountOptions.filter((o) => o.id !== accountId)}\n onChange={setToAccountId}\n emptyLabel={t('financial.quickTx.selectAccount')}\n />\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-3\">\n <ChipSelect\n icon={Tag}\n label={t('financial.quickTx.category')}\n value={categoryId}\n options={categoryOptions}\n onChange={setCategoryId}\n emptyLabel={t('financial.quickTx.selectCategory')}\n />\n <ChipSelect\n icon={Wallet}\n label={t('financial.quickTx.account')}\n value={accountId}\n options={accountOptions}\n onChange={setAccountId}\n emptyLabel={t('financial.quickTx.selectAccount')}\n />\n </div>\n )}\n\n {/* Recurring + attachment (Anexo now opens the receipt picker — FAY-1226) */}\n {type !== 'transfer' && (\n <div className=\"flex flex-wrap gap-2\">\n <TogglePill\n icon={Repeat}\n label={t('financial.quickTx.recurring')}\n checked={recurring}\n onChange={setRecurring}\n />\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n title={t('financial.quickTx.attachment')}\n className={`flex items-center gap-2 rounded-full border px-3 py-2 text-xs font-medium transition-colors ${\n receiptUrl\n ? 'border-transparent bg-primary text-primary-foreground'\n : 'border-input bg-card text-muted-foreground hover:bg-muted/40'\n }`}\n >\n <Paperclip className=\"h-3.5 w-3.5\" /> {t('financial.quickTx.attachment')}\n {receiptUrl && <Check className=\"h-3.5 w-3.5\" />}\n </button>\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex shrink-0 items-center gap-3 border-t px-5 py-3\">\n <span className=\"text-xs text-muted-foreground\">\n {amount > 0 ? formatCurrency(amount, currency) : t('financial.quickTx.enterAmount')}\n </span>\n <Button\n className=\"ml-auto\"\n onClick={() => void handleSave()}\n disabled={!canSave}\n >\n <Check className=\"h-4 w-4\" />\n {saving ? t('financial.quickTx.saving') : t('financial.quickTx.save')}\n </Button>\n </div>\n </ModalContent>\n </Modal>\n )\n}\n","// ---------------------------------------------------------------------------\n// Global quick-add trigger (FAY-1242).\n//\n// A tiny module-level store so a \"log a transaction\" request can be fired from\n// ANYWHERE in the app (e.g. the app shell's elevated center \"+\" bottom-nav\n// button) without a shared React context. The FinancialPage subscribes and\n// opens its QuickTransactionForm when a request arrives; the request is a\n// one-shot (consumed on read) so re-mounting /financial doesn't re-open it.\n//\n// Flow: center \"+\" → openQuickAdd() → navigate to /financial → FinancialPage\n// mounts, sees the pending request, opens the sheet. If already on /financial\n// the subscription fires and the sheet opens instantly.\n// ---------------------------------------------------------------------------\n\nimport * as React from 'react'\nimport type { QuickTransactionType } from './types'\n\nexport interface QuickAddRequest {\n type: QuickTransactionType\n /** Foreground the receipt/attachment step + auto-open the picker. */\n receipt: boolean\n}\n\nlet pending: QuickAddRequest | null = null\nconst listeners = new Set<() => void>()\n\nfunction emit() {\n for (const l of listeners) l()\n}\n\n/** Fire a quick-add request from anywhere. Default = an expense. */\nexport function openQuickAdd(type: QuickTransactionType = 'expense', receipt = false): void {\n pending = { type, receipt }\n emit()\n}\n\n/** Read + clear the pending request (one-shot). */\nexport function consumeQuickAdd(): QuickAddRequest | null {\n const req = pending\n pending = null\n return req\n}\n\nfunction subscribe(cb: () => void): () => void {\n listeners.add(cb)\n return () => {\n listeners.delete(cb)\n }\n}\n\nfunction getSnapshot(): QuickAddRequest | null {\n return pending\n}\n\n/** React binding — returns the pending request (null when none). */\nexport function usePendingQuickAdd(): QuickAddRequest | null {\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { FileText, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, Ban } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { ListView } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { PersonLink, usePermissionOptional } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, InvoiceStatus, Invoice, ChartOfAccountsNode, CostCenter } from '../types'\n\nconst STATUS_OPTIONS: { value: InvoiceStatus; labelKey: string; color: string; icon: React.ElementType }[] = [\n { value: 'open', labelKey: 'financial.invoice.statusOpen', color: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed },\n { value: 'partial', labelKey: 'financial.invoice.statusPartial', color: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis },\n { value: 'paid', labelKey: 'financial.invoice.statusPaid', color: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig },\n { value: 'overdue', labelKey: 'financial.invoice.statusOverdue', color: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert },\n { value: 'cancelled', labelKey: 'financial.invoice.statusCancelled', color: 'bg-muted text-muted-foreground', icon: Ban },\n]\n\nconst DATE_PRESETS = ['thisMonth', 'lastMonth', 'last30', 'thisYear'] as const\ntype DatePreset = (typeof DATE_PRESETS)[number]\n\nconst isoDate = (d: Date) =>\n `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n\n/** Local-time boundaries so \"this month\" means the user's month, not UTC's. */\nfunction presetRange(preset: DatePreset): { from: string; to: string } {\n const now = new Date()\n switch (preset) {\n case 'thisMonth':\n return { from: isoDate(new Date(now.getFullYear(), now.getMonth(), 1)), to: isoDate(new Date(now.getFullYear(), now.getMonth() + 1, 0)) }\n case 'lastMonth':\n return { from: isoDate(new Date(now.getFullYear(), now.getMonth() - 1, 1)), to: isoDate(new Date(now.getFullYear(), now.getMonth(), 0)) }\n case 'last30': {\n const from = new Date(now)\n from.setDate(from.getDate() - 29)\n return { from: isoDate(from), to: isoDate(now) }\n }\n case 'thisYear':\n return { from: isoDate(new Date(now.getFullYear(), 0, 1)), to: isoDate(new Date(now.getFullYear(), 11, 31)) }\n }\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const t = useTranslation()\n const opt = STATUS_OPTIONS.find((o) => o.value === status)\n const Icon = opt?.icon ?? CircleDashed\n return (\n <span className={`inline-flex items-center gap-0.5 rounded-full px-2 py-0.5 text-[10px] font-medium ${opt?.color ?? 'bg-muted text-muted-foreground'}`}>\n <Icon className=\"h-2.5 w-2.5\" /> {opt ? t(opt.labelKey) : status}\n </span>\n )\n}\n\nfunction useInvoiceColumns(currency: { code: string; locale: string; symbol: string }): ColumnDef<Invoice, any>[] {\n const t = useTranslation()\n return useMemo(() => [\n {\n accessorKey: 'fiscalNumber', header: '#', size: 110,\n cell: ({ getValue }) => {\n const num = getValue() as string | undefined\n return num ? <span className=\"text-xs font-mono text-muted-foreground\">#{num}</span> : <span className=\"text-muted-foreground\">—</span>\n },\n },\n {\n accessorKey: 'invoiceDate', header: t('financial.invoice.columnDate'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground text-xs\">{getValue() as string}</span>,\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div onClick={(e) => e.stopPropagation()}>\n {row.original.contactName ? (\n <PersonLink personId={row.original.contactId} name={row.original.contactName} size=\"sm\" className=\"text-sm font-medium\" />\n ) : (\n <p className=\"font-medium\">—</p>\n )}\n {row.original.itemsSummary && <p className=\"text-[10px] text-muted-foreground truncate max-w-[250px]\">{row.original.itemsSummary}</p>}\n </div>\n ),\n },\n {\n accessorKey: 'totalAmount', header: t('financial.invoice.columnAmount'), enableSorting: true,\n cell: ({ row }) => (\n <span className={`font-medium ${row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>\n {formatCurrency(row.original.totalAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'paidAmount', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => (\n <span className={row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : 'text-muted-foreground'}>\n {formatCurrency(row.original.paidAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'status', header: t('financial.invoice.columnStatus'),\n cell: ({ getValue }) => <StatusBadge status={getValue() as string} />,\n },\n {\n accessorKey: 'totalInstallments', header: t('financial.invoice.columnInst'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground\">{getValue() as number}</span>,\n },\n ], [currency, t])\n}\n\nexport function InvoiceListView({ direction, onNew, onEdit }: {\n direction: TransactionDirection\n onNew?: () => void\n onEdit?: (id: string) => void\n}) {\n const t = useTranslation()\n // Role-side create gate: hide the \"new invoice\" affordance (header + empty-state\n // action) when the role lacks `create` — the module's single route only guards read.\n const can = usePermissionOptional()\n const onNewGated = can('financial', 'create') ? onNew : undefined\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const invoices = useFinancialStore((s) => s.invoices)\n const invoicesTotal = useFinancialStore((s) => s.invoicesTotal)\n const invoicesLoading = useFinancialStore((s) => s.invoicesLoading)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n\n const [search, setSearch] = useState('')\n const [statusFilter, setStatusFilter] = useState<InvoiceStatus[]>([])\n const [accountId, setAccountId] = useState('')\n const [costCenterId, setCostCenterId] = useState('')\n const [accounts, setAccounts] = useState<ChartOfAccountsNode[]>([])\n const [costCenters, setCostCenters] = useState<CostCenter[]>([])\n const [datePreset, setDatePreset] = useState<DatePreset | 'all' | 'custom'>('all')\n const [dateFrom, setDateFrom] = useState('')\n const [dateTo, setDateTo] = useState('')\n\n // Open-ended on either side: a missing bound becomes a sentinel the providers can compare against.\n const dateRange = useMemo(() => {\n if (!dateFrom && !dateTo) return undefined\n return { from: dateFrom || '0001-01-01', to: dateTo || '9999-12-31' }\n }, [dateFrom, dateTo])\n\n const applyPreset = (value: DatePreset | 'all' | 'custom') => {\n setDatePreset(value)\n if (value === 'all') { setDateFrom(''); setDateTo(''); return }\n if (value === 'custom') return\n const range = presetRange(value)\n setDateFrom(range.from)\n setDateTo(range.to)\n }\n\n useEffect(() => {\n let active = true\n Promise.all([provider.getChartOfAccounts(), provider.getCostCenters()])\n .then(([accountRows, costCenterRows]) => {\n if (!active) return\n setAccounts(accountRows.filter((account) => account.nodeType === 'leaf'))\n setCostCenters(costCenterRows)\n })\n .catch(() => {\n if (!active) return\n setAccounts([])\n setCostCenters([])\n })\n return () => { active = false }\n }, [provider])\n\n useEffect(() => {\n fetchInvoices({\n direction,\n status: statusFilter.length > 0 ? statusFilter : undefined,\n search: search || undefined,\n accountId: accountId || undefined,\n costCenterId: costCenterId || undefined,\n dateRange,\n })\n }, [direction, statusFilter, search, accountId, costCenterId, dateRange])\n\n const filtered = invoices.filter((inv) => inv.direction === direction)\n const listTitle = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const columns = useInvoiceColumns(currency)\n const tags = useMemo(\n () => STATUS_OPTIONS.filter((o) => o.value !== 'cancelled').map((o) => ({ value: o.value, label: t(o.labelKey) })),\n [t],\n )\n\n // Summary totals from currently visible data\n const summary = useMemo(() => {\n let totalAmount = 0\n let paidAmount = 0\n let openAmount = 0\n for (const inv of filtered) {\n if (inv.status === 'cancelled') continue\n totalAmount += inv.totalAmount\n paidAmount += inv.paidAmount\n }\n openAmount = totalAmount - paidAmount\n return { totalAmount, paidAmount, openAmount }\n }, [filtered])\n\n const receivedLabel = direction === 'debit' ? t('financial.invoice.summaryPaid') : t('financial.invoice.summaryReceived')\n const pendingLabel = direction === 'debit' ? t('financial.invoice.summaryPayable') : t('financial.invoice.summaryReceivable')\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={listTitle}\n subtitle={t('financial.invoice.invoices', { count: filtered.length })}\n />\n <div className=\"flex flex-wrap items-end gap-3 rounded-lg border bg-muted/20 px-4 py-3\">\n <label className=\"flex min-w-[180px] flex-col gap-1 text-xs font-medium text-muted-foreground\">\n {t('financial.invoice.filterPeriod')}\n <select\n className=\"h-9 rounded-md border bg-background px-3 text-sm text-foreground\"\n value={datePreset}\n onChange={(event) => applyPreset(event.target.value as DatePreset | 'all' | 'custom')}\n >\n <option value=\"all\">{t('financial.invoice.filterAllPeriods')}</option>\n <option value=\"thisMonth\">{t('financial.invoice.filterThisMonth')}</option>\n <option value=\"lastMonth\">{t('financial.invoice.filterLastMonth')}</option>\n <option value=\"last30\">{t('financial.invoice.filterLast30')}</option>\n <option value=\"thisYear\">{t('financial.invoice.filterThisYear')}</option>\n <option value=\"custom\">{t('financial.invoice.filterCustom')}</option>\n </select>\n </label>\n <label className=\"flex flex-col gap-1 text-xs font-medium text-muted-foreground\">\n {t('financial.invoice.filterFrom')}\n <input\n type=\"date\"\n className=\"h-9 rounded-md border bg-background px-3 text-sm text-foreground\"\n value={dateFrom}\n max={dateTo || undefined}\n onChange={(event) => { setDateFrom(event.target.value); setDatePreset('custom') }}\n />\n </label>\n <label className=\"flex flex-col gap-1 text-xs font-medium text-muted-foreground\">\n {t('financial.invoice.filterTo')}\n <input\n type=\"date\"\n className=\"h-9 rounded-md border bg-background px-3 text-sm text-foreground\"\n value={dateTo}\n min={dateFrom || undefined}\n onChange={(event) => { setDateTo(event.target.value); setDatePreset('custom') }}\n />\n </label>\n {(dateFrom || dateTo) && (\n <button\n type=\"button\"\n className=\"h-9 rounded-md px-2 text-xs font-medium text-muted-foreground hover:text-foreground\"\n onClick={() => applyPreset('all')}\n >\n {t('financial.invoice.filterClear')}\n </button>\n )}\n {accounts.length > 0 && (\n <label className=\"flex min-w-[220px] flex-col gap-1 text-xs font-medium text-muted-foreground\">\n {t('financial.invoice.filterAccount')}\n <select\n className=\"h-9 rounded-md border bg-background px-3 text-sm text-foreground\"\n value={accountId}\n onChange={(event) => setAccountId(event.target.value)}\n >\n <option value=\"\">{t('financial.invoice.filterAllAccounts')}</option>\n {accounts.map((account) => (\n <option key={account.id} value={account.id}>{account.code} - {account.name}</option>\n ))}\n </select>\n </label>\n )}\n {costCenters.length > 0 && (\n <label className=\"flex min-w-[220px] flex-col gap-1 text-xs font-medium text-muted-foreground\">\n {t('financial.invoice.filterCostCenter')}\n <select\n className=\"h-9 rounded-md border bg-background px-3 text-sm text-foreground\"\n value={costCenterId}\n onChange={(event) => setCostCenterId(event.target.value)}\n >\n <option value=\"\">{t('financial.invoice.filterAllCostCenters')}</option>\n {costCenters.map((costCenter) => (\n <option key={costCenter.id} value={costCenter.id}>{costCenter.code} - {costCenter.name}</option>\n ))}\n </select>\n </label>\n )}\n </div>\n <ListView<Invoice>\n columns={columns}\n data={filtered}\n loading={invoicesLoading}\n searchPlaceholder={t('financial.invoice.searchPlaceholder')}\n search={search}\n onSearchChange={setSearch}\n searchDebounce={0}\n tags={tags}\n activeTag={statusFilter.length === 1 ? statusFilter[0] : undefined}\n onTagChange={(v) => setStatusFilter(v ? [v as InvoiceStatus] : [])}\n newLabel={t('financial.invoice.new')}\n onNew={onNewGated}\n onRowClick={(row) => onEdit?.(row.id)}\n emptyIcon={FileText}\n emptyMessage={t('financial.invoice.noInvoices')}\n emptyActionLabel={onNewGated ? t('financial.invoice.createFirst') : undefined}\n onEmptyAction={onNewGated}\n />\n {filtered.length > 0 && !invoicesLoading && (\n <div className=\"flex items-center justify-end gap-6 rounded-lg border bg-muted/30 px-5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.summaryTotal')}</span>\n <span className=\"font-semibold\">{formatCurrency(summary.totalAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{receivedLabel}</span>\n <span className=\"font-semibold text-success\">{formatCurrency(summary.paidAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{pendingLabel}</span>\n <span className=\"font-semibold text-warning\">{formatCurrency(summary.openAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Plus, Trash2, Search, LayoutList, X, ChevronDown, Percent, Tag, Building2, Check, MoreVertical, Ban } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency } from '../FinancialContext'\nimport { SearchSelect } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { useLimitGuard, invalidateLimit, usePermissionOptional } from '@fayz-ai/saas'\nimport { SubpageHeader, useSaveBar, toast } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, CreateInvoiceItemInput, CreateMovementInput } from '../types'\n\n// ---------------------------------------------------------------------------\n// Location / unit selector\n// ---------------------------------------------------------------------------\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nfunction LocationSelector({ locations, value, onChange }: {\n locations: LocationOption[]\n value: string\n onChange: (id: string) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n function handler(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n const selected = locations.find((l) => l.id === value)\n const filtered = locations.filter((l) =>\n !search.trim() || l.name.toLowerCase().includes(search.toLowerCase())\n )\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.unit')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"w-full mt-1 flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm text-left hover:bg-muted/30 transition-colors\"\n >\n <Building2 className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <span className=\"flex-1 truncate\">{selected?.name ?? t('financial.invoiceForm.selectUnit')}</span>\n <ChevronDown className={`h-3 w-3 text-muted-foreground transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 right-0 z-50 mt-1 rounded-lg border bg-popover shadow-lg overflow-hidden min-w-[260px]\">\n <div className=\"flex items-center gap-2 px-3 py-2 border-b\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">{t('financial.invoiceForm.selectUnitTitle')}</span>\n <button onClick={() => setOpen(false)} className=\"ml-auto text-muted-foreground hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n <div className=\"p-2 border-b\">\n <div className=\"flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5\">\n <Search className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <input\n type=\"text\"\n autoFocus\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t('financial.invoiceForm.searchUnit')}\n className=\"flex-1 bg-transparent text-sm outline-none\"\n />\n </div>\n </div>\n <div className=\"max-h-56 overflow-auto py-1\">\n {filtered.map((loc) => (\n <button\n key={loc.id}\n onClick={() => { onChange(loc.id); setOpen(false); setSearch('') }}\n className={`w-full flex items-center gap-3 px-3 py-2.5 text-left hover:bg-muted/50 transition-colors ${\n loc.id === value ? 'bg-muted/30' : ''\n }`}\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-muted shrink-0\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium truncate\">{loc.name}</p>\n {loc.isHQ && <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoiceForm.headquarters')}</p>}\n </div>\n </button>\n ))}\n {filtered.length === 0 && (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">{t('financial.invoiceForm.noUnitsFound')}</p>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ID helper\n// ---------------------------------------------------------------------------\n\nlet formId = 1\nfunction fid(): string { return `f${formId++}` }\n\n// ---------------------------------------------------------------------------\n// Item row — compact by default, expandable for details\n// ---------------------------------------------------------------------------\n\ninterface FormItem extends CreateInvoiceItemInput {\n _id: string\n}\n\nfunction ItemRow({ item, index, itemTypes, currency, expanded, onToggle, onUpdate, onRemove, entityLookups, showTypeSelector }: {\n item: FormItem\n index: number\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n currency: { code: string; locale: string; symbol: string }\n expanded: boolean\n onToggle: () => void\n onUpdate: (data: Partial<FormItem>) => void\n onRemove: () => void\n entityLookups: EntityLookupMap\n /** Whether to show the per-row Service/Product/Other type pills. Hidden when no item type is lookup-backed. */\n showTypeSelector: boolean\n}) {\n const t = useTranslation()\n const total = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n const kindLabel = itemTypes.find((tp) => tp.value === item.itemKind)?.label ?? item.itemKind\n const hasAdjustments = (item.discount ?? 0) > 0 || (item.surcharge ?? 0) > 0\n const [showAdjustments, setShowAdjustments] = useState(hasAdjustments)\n\n // Enter in any of the row's edit fields commits the row (same as \"Done\").\n function handleFieldKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onToggle()\n }\n }\n\n return (\n <div className=\"border-b last:border-0\">\n {/* Compact row — always visible */}\n <div\n className=\"flex items-center gap-2 px-4 py-3 cursor-pointer hover:bg-muted/30 transition-colors group\"\n onClick={onToggle}\n >\n <ChevronDown className={`h-3 w-3 text-muted-foreground shrink-0 transition-transform ${expanded ? 'rotate-0' : '-rotate-90'}`} />\n <span className=\"text-[10px] font-medium text-muted-foreground w-5 shrink-0\">{index + 1}.</span>\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground shrink-0\">\n {kindLabel}\n </span>\n <span className=\"text-sm truncate flex-1 min-w-0\">{item.description || <span className=\"text-muted-foreground italic\">{t('financial.invoiceForm.noDescription')}</span>}</span>\n <span className=\"text-xs text-muted-foreground shrink-0\">{item.quantity} x {formatCurrency(item.unitPrice, currency)}</span>\n {hasAdjustments && <Tag className=\"h-3 w-3 text-warning shrink-0\" />}\n <span className=\"text-sm font-semibold shrink-0 min-w-[80px] text-right\">{formatCurrency(total, currency)}</span>\n <button\n onClick={(e) => { e.stopPropagation(); onRemove() }}\n className=\"p-1 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-destructive transition-all shrink-0\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n </div>\n\n {/* Expanded detail — edit fields */}\n {expanded && (\n <div className=\"px-4 pb-4 pt-1 ml-8 space-y-3 bg-muted/10\">\n {/* Type selector — hidden when no item type is lookup-backed (manual-only entry) */}\n {showTypeSelector && (\n <div className=\"flex gap-1.5\">\n {itemTypes.map((tp) => (\n <button\n key={tp.value}\n onClick={() => onUpdate({ itemKind: tp.value })}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors ${\n item.itemKind === tp.value\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {tp.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Main fields */}\n <div className=\"grid gap-3 grid-cols-12\">\n <div className=\"col-span-6 sm:col-span-7\">\n {entityLookups[item.itemKind] ? (\n <SearchSelect\n label={t('financial.invoiceForm.item')}\n value={item.referenceId ?? ''}\n displayValue={item.description}\n loadOnOpen\n onChange={(id, opt) => {\n const price = (opt?.data as any)?.price\n onUpdate({\n referenceId: id || undefined,\n description: opt?.label ?? '',\n ...(price != null ? { unitPrice: price } : {}),\n })\n }}\n onSearch={async (q) => {\n const results = await entityLookups[item.itemKind].search(q)\n return results.map((r) => ({\n id: r.id,\n label: r.label,\n subtitle: r.subtitle,\n group: r.group,\n data: r,\n }))\n }}\n placeholder={`Search ${itemTypes.find((tp) => tp.value === item.itemKind)?.label?.toLowerCase() ?? 'item'}...`}\n renderOption={(opt) => (\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">{opt.label}</p>\n {opt.subtitle && <p className=\"text-[10px] text-muted-foreground\">{opt.subtitle}</p>}\n </div>\n )}\n />\n ) : (\n <>\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.description')}</label>\n <input\n type=\"text\"\n value={item.description}\n onChange={(e) => onUpdate({ description: e.target.value })}\n onKeyDown={handleFieldKeyDown}\n placeholder={t('financial.invoiceForm.itemDescription')}\n autoFocus\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </>\n )}\n </div>\n <div className=\"col-span-2 sm:col-span-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.qty')}</label>\n <input\n type=\"number\"\n min={1}\n value={item.quantity}\n onChange={(e) => onUpdate({ quantity: Number(e.target.value) || 1 })}\n onKeyDown={handleFieldKeyDown}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-sm text-center focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n <div className=\"col-span-4\" onKeyDown={handleFieldKeyDown}>\n <CurrencyInput\n label={t('financial.invoiceForm.unitPrice')}\n value={item.unitPrice}\n onChange={(v) => onUpdate({ unitPrice: v })}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n </div>\n </div>\n\n {/* Optional adjustments toggle */}\n {!showAdjustments ? (\n <button\n onClick={() => setShowAdjustments(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.discountSurcharge')}\n </button>\n ) : (\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.discount')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.discount ?? 0}\n onChange={(e) => onUpdate({ discount: Number(e.target.value) || 0 })}\n onKeyDown={handleFieldKeyDown}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.surcharge')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.surcharge ?? 0}\n onChange={(e) => onUpdate({ surcharge: Number(e.target.value) || 0 })}\n onKeyDown={handleFieldKeyDown}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <button\n onClick={() => { onUpdate({ discount: 0, surcharge: 0 }); setShowAdjustments(false) }}\n className=\"mt-3 p-1 text-muted-foreground hover:text-destructive transition-colors\"\n title={t('financial.invoiceForm.removeAdjustments')}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n\n {/* Done — collapse row */}\n <div className=\"flex justify-end pt-1\">\n <button\n onClick={onToggle}\n className=\"inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-[11px] text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors\"\n >\n <Check className=\"h-3 w-3\" /> {t('financial.invoiceForm.done')}\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Type selector step — shown when adding a new item\n// ---------------------------------------------------------------------------\n\nfunction AddItemStep({ itemTypes, onSelect, onCancel }: {\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n onSelect: (kind: string) => void\n onCancel: () => void\n}) {\n const t = useTranslation()\n return (\n <div className=\"border-b px-4 py-3 bg-primary/5 animate-in fade-in-0 slide-in-from-top-1\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">{t('financial.invoiceForm.selectItemType')}</p>\n <div className=\"flex gap-2 flex-wrap\">\n {itemTypes.map((t) => (\n <button\n key={t.value}\n onClick={() => onSelect(t.value)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border-2 border-transparent bg-card px-4 py-2 text-sm font-medium shadow-sm hover:border-primary hover:shadow-md transition-all\"\n >\n {t.label}\n </button>\n ))}\n <button\n onClick={onCancel}\n className=\"inline-flex items-center rounded-lg px-3 py-2 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.invoiceForm.cancel')}\n </button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Installment form\n// ---------------------------------------------------------------------------\n\ninterface FormInstallment {\n _id: string\n amount: number\n dueDate: string\n}\n\n// ---------------------------------------------------------------------------\n// Invoice form view\n// ---------------------------------------------------------------------------\n\nexport function InvoiceFormView({ direction, editId, onSaved }: {\n direction: TransactionDirection\n editId?: string\n onSaved?: (id?: string) => void\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency, itemTypes, locations } = config\n const provider = useFinancialProvider()\n\n // Whether any item type is backed by an entity lookup (product/service catalog).\n // When none are, item entry is manual-only: skip the type-select step and add\n // an \"Other\" line directly so the user can type the description right away.\n const hasItemLookups = itemTypes.some((tp) => config.entityLookups[tp.value])\n const defaultItemKind =\n itemTypes.find((tp) => tp.value === 'other')?.value ??\n itemTypes.find((tp) => !config.entityLookups[tp.value])?.value ??\n itemTypes[0]?.value ??\n 'other'\n const createInvoice = useFinancialStore((s) => s.createInvoice)\n const guardMovements = useLimitGuard('movements_month')\n const can = usePermissionOptional()\n const hasLocations = locations.length > 0\n const isEdit = !!editId\n\n const [loaded, setLoaded] = useState(!editId)\n const [loading, setLoading] = useState(!!editId)\n const [contactName, setContactName] = useState('')\n const [contactId, setContactId] = useState<string | undefined>()\n const [unitId, setUnitId] = useState(locations[0]?.id ?? '')\n const [invoiceDate, setInvoiceDate] = useState(new Date().toISOString().slice(0, 10))\n const [fiscalNumber, setFiscalNumber] = useState('')\n const [observations, setObservations] = useState('')\n const [items, setItems] = useState<FormItem[]>([])\n const [expandedItemId, setExpandedItemId] = useState<string | null>(null)\n const [addingItem, setAddingItem] = useState(false)\n const [installments, setInstallments] = useState<FormInstallment[]>([])\n const [saving, setSaving] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function handleCancelInvoice() {\n if (!editId) return\n setCancelling(true)\n try {\n await cancelInvoice(editId)\n onSaved?.()\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n // Load existing invoice for edit mode\n useEffect(() => {\n if (!editId || loaded) return\n setLoading(true)\n ;(async () => {\n const invoice = await provider.getInvoiceById(editId)\n if (!invoice) return\n setContactName(invoice.contactName ?? '')\n setContactId(invoice.contactId)\n setUnitId(invoice.unitId ?? locations[0]?.id ?? '')\n setInvoiceDate(invoice.invoiceDate)\n setFiscalNumber(invoice.fiscalNumber ?? '')\n setObservations(invoice.observations ?? '')\n\n const invoiceItems = await provider.getInvoiceItems(editId)\n setItems(invoiceItems.map((it) => ({\n _id: fid(),\n itemKind: it.itemKind,\n referenceId: it.referenceId,\n description: it.description,\n quantity: it.quantity,\n unitPrice: it.unitPrice,\n discount: it.discount,\n surcharge: it.surcharge,\n })))\n\n const movements = await provider.getMovements({ direction: invoice.direction })\n const invoiceMovements = movements.data\n .filter((m) => m.invoiceId === editId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n setInstallments(invoiceMovements.map((m) => ({\n _id: fid(),\n amount: m.amount,\n dueDate: m.dueDate,\n })))\n\n setLoaded(true)\n setLoading(false)\n })()\n }, [editId])\n\n const totalAmount = items.reduce((sum, it) => {\n return sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0)\n }, 0)\n\n // Auto-generate 1x installment when first item is added\n const prevItemCount = useRef(items.length)\n useEffect(() => {\n if (items.length > 0 && prevItemCount.current === 0 && installments.length === 0 && !isEdit) {\n // First item added — generate 1x installment\n const total = items.reduce((sum, it) => sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0), 0)\n if (total > 0) {\n setInstallments([{ _id: fid(), amount: total, dueDate: invoiceDate }])\n }\n }\n prevItemCount.current = items.length\n }, [items.length])\n\n // Recalculate installment amounts when total changes\n useEffect(() => {\n if (installments.length > 0 && totalAmount > 0 && !isEdit) {\n const count = installments.length\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n setInstallments((prev) => prev.map((inst, i) => ({\n ...inst,\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n })))\n }\n }, [totalAmount])\n\n function addItemOfKind(kind: string) {\n const newItem: FormItem = {\n _id: fid(),\n itemKind: kind,\n description: '',\n quantity: 1,\n unitPrice: 0,\n }\n setItems([...items, newItem])\n setExpandedItemId(newItem._id)\n setAddingItem(false)\n }\n\n // Entry point for the \"Add Item\" / \"Add your first item\" buttons. With\n // lookup-backed types we ask which type first; otherwise we add an \"Other\"\n // line straight away so the user types directly.\n function startAddItem() {\n if (hasItemLookups) setAddingItem(true)\n else addItemOfKind(defaultItemKind)\n }\n\n function updateItem(id: string, data: Partial<FormItem>) {\n setItems(items.map((it) => it._id === id ? { ...it, ...data } : it))\n }\n\n function removeItem(id: string) {\n setItems(items.filter((it) => it._id !== id))\n }\n\n function generateInstallments(count: number) {\n if (count < 1 || totalAmount <= 0) return\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n const base = new Date(invoiceDate)\n const inst: FormInstallment[] = []\n for (let i = 0; i < count; i++) {\n const due = new Date(base)\n due.setMonth(due.getMonth() + i + 1)\n inst.push({\n _id: fid(),\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n dueDate: due.toISOString().slice(0, 10),\n })\n }\n setInstallments(inst)\n }\n\n async function handleSave() {\n // Defense in depth: block creating a new invoice without the `create` action.\n if (!isEdit && !can('financial', 'create')) return\n if (items.length === 0) { toast.error(t('common.formIncomplete')); return }\n // Plan quantity guard (client-side): an invoice writes one financial movement\n // per installment (min 1). Guard that many against the monthly cap before the\n // store call — the guard opens the global UpgradeModal when it would exceed.\n if (!isEdit && (await guardMovements(Math.max(1, installments.length))) === 'blocked') return\n setSaving(true)\n try {\n const movInputs: CreateMovementInput[] = installments.map((inst, i) => ({\n direction,\n movementKind: 'bill' as const,\n amount: inst.amount,\n dueDate: inst.dueDate,\n installmentNumber: i + 1,\n }))\n\n if (movInputs.length === 0) {\n movInputs.push({\n direction,\n movementKind: 'bill',\n amount: totalAmount,\n dueDate: invoiceDate,\n installmentNumber: 1,\n })\n }\n\n if (isEdit && editId) {\n await provider.updateInvoice(editId, {\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n totalAmount,\n })\n onSaved?.(editId)\n } else {\n const invoice = await createInvoice({\n direction,\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n items: items.map(({ _id, ...rest }) => rest),\n installments: movInputs,\n })\n invalidateLimit('movements_month')\n onSaved?.(invoice.id)\n }\n } finally {\n setSaving(false)\n }\n }\n\n const fields = {\n contactName,\n contactId,\n unitId,\n invoiceDate,\n fiscalNumber,\n observations,\n items: items.map(({ _id, ...rest }) => rest),\n installments: installments.map(({ _id, ...rest }) => rest),\n }\n const snapshot = useRef<string | null>(null)\n useEffect(() => {\n if (loaded && snapshot.current === null) snapshot.current = JSON.stringify(fields)\n }, [loaded])\n const dirty = snapshot.current !== null && JSON.stringify(fields) !== snapshot.current\n useSaveBar({\n dirty,\n saving,\n onSave: () => { void handleSave() },\n onDiscard: () => onSaved?.(),\n saveLabel: t('financial.invoiceForm.save'),\n })\n\n const title = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const subtitle = isEdit ? t('financial.invoiceForm.editing') : t('financial.invoiceForm.creating')\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader\n title={title}\n subtitle={subtitle}\n onBack={onSaved}\n parentLabel={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')}\n actions={\n isEdit ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\" ref={menuRef}>\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setMenuOpen(!menuOpen)}\n aria-label=\"More actions\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoiceForm.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n </div>\n ) : null\n }\n />\n\n {/* Top fields: Pay to + Unit + Date + Fiscal Number */}\n <div className=\"rounded-lg border bg-card shadow-sm p-5\">\n <div className={`grid gap-4 ${hasLocations ? 'sm:grid-cols-12' : 'sm:grid-cols-10'}`}>\n <div className={hasLocations ? 'sm:col-span-4' : 'sm:col-span-4'}>\n <SearchSelect\n label={direction === 'debit' ? t('financial.invoiceForm.payTo') : t('financial.invoiceForm.receiveFrom')}\n required\n value={contactId ?? ''}\n displayValue={contactName}\n onChange={(id, opt) => { setContactId(id || undefined); setContactName(opt?.label ?? '') }}\n onSearch={async (q) => {\n if (!config.contactLookup) return []\n const results = await config.contactLookup.search(q)\n return results.map((r) => ({ id: r.id, label: r.label, subtitle: r.subtitle, group: r.group, data: r }))\n }}\n placeholder={t('financial.invoiceForm.searchType')}\n />\n </div>\n {hasLocations && (\n <div className=\"sm:col-span-3\">\n <LocationSelector\n locations={locations}\n value={unitId}\n onChange={setUnitId}\n />\n </div>\n )}\n <div className={hasLocations ? 'sm:col-span-2' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.date')}</label>\n <DatePicker value={invoiceDate} onChange={setInvoiceDate} className=\"mt-1\" />\n </div>\n <div className={hasLocations ? 'sm:col-span-3' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.fiscalNumber')}</label>\n <input\n type=\"text\"\n value={fiscalNumber}\n onChange={(e) => setFiscalNumber(e.target.value)}\n placeholder={t('financial.invoiceForm.fiscalNumber')}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n </div>\n </div>\n\n {/* Items + Installments side by side */}\n {loading ? (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-2 py-3\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-8 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 flex-1 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-20 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.installments')}</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"rounded border p-2.5 space-y-2\">\n <div className=\"flex justify-between\">\n <div className=\"h-3 w-6 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n <div className=\"h-7 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n {/* Items (left 2/3) */}\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n <button\n onClick={startAddItem}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.addItem')}\n </button>\n </div>\n\n {/* Content area — grows to push footer down */}\n <div className=\"flex-1\">\n {/* Type selector step */}\n {addingItem && (\n <AddItemStep\n itemTypes={itemTypes}\n onSelect={addItemOfKind}\n onCancel={() => setAddingItem(false)}\n />\n )}\n\n {/* Item rows */}\n {items.length === 0 && !addingItem ? (\n <div className=\"py-10 text-center\">\n <LayoutList className=\"h-8 w-8 text-muted-foreground/30 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoiceForm.noItems')}</p>\n <button onClick={startAddItem} className=\"text-xs text-primary hover:underline mt-1\">\n {t('financial.invoiceForm.addFirstItem')}\n </button>\n </div>\n ) : (\n items.map((item, i) => (\n <ItemRow\n key={item._id}\n item={item}\n index={i}\n itemTypes={itemTypes}\n currency={currency}\n expanded={expandedItemId === item._id}\n onToggle={() => setExpandedItemId(expandedItemId === item._id ? null : item._id)}\n onUpdate={(data) => updateItem(item._id, data)}\n onRemove={() => { removeItem(item._id); if (expandedItemId === item._id) setExpandedItemId(null) }}\n entityLookups={config.entityLookups}\n showTypeSelector={hasItemLookups}\n />\n ))\n )}\n </div>\n\n {/* Footer total — sticks to bottom */}\n {items.length > 0 && (\n <div className=\"px-4 py-3 border-t bg-muted/20 flex justify-between items-center mt-auto\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.itemCount', { count: items.length, plural: items.length !== 1 ? 's' : '' })}</span>\n <div className=\"text-right\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.total')} </span>\n <span className=\"text-lg font-bold\">{formatCurrency(totalAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n\n {/* Installments (right 1/3) */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">Installments</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {/* Quick split buttons */}\n <div className=\"flex gap-1.5 flex-wrap\">\n {[1, 2, 3, 6, 12].map((n) => (\n <button\n key={n}\n onClick={() => generateInstallments(n)}\n disabled={totalAmount <= 0}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors disabled:opacity-30 ${\n installments.length === n\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {n}x\n </button>\n ))}\n </div>\n\n {installments.length === 0 ? (\n <p className=\"text-xs text-muted-foreground py-4 text-center\">\n {totalAmount <= 0 ? t('financial.invoiceForm.addItemsFirst') : t('financial.invoiceForm.selectInstallments')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {installments.map((inst, i) => (\n <div key={inst._id} className=\"rounded border p-2.5 space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] font-medium text-muted-foreground\">#{i + 1}</span>\n <span className=\"text-sm font-semibold\">{formatCurrency(inst.amount, currency)}</span>\n </div>\n <DatePicker\n value={inst.dueDate}\n onChange={(v) => {\n const updated = [...installments]\n updated[i] = { ...inst, dueDate: v }\n setInstallments(updated)\n }}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Observations */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.observations')}</label>\n <textarea\n value={observations}\n onChange={(e) => setObservations(e.target.value)}\n placeholder={t('financial.invoiceForm.additionalNotes')}\n rows={2}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring resize-none\"\n />\n </div>\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoiceForm.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoiceForm.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancelInvoice} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoiceForm.cancelling') : t('financial.invoiceForm.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","import React, { useState, useEffect, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, Check, Banknote, QrCode, CreditCard, Building2, ArrowRightLeft, FileCheck, Pencil } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { FinancialMovement, PaymentMethodType, BankAccountType } from '../types'\n\n// Which bank-account types make sense for each payment type — mirrors beautyplace's\n// payment_method_types.allowed_account_types. Used to filter + default the destination\n// account so every payment lands in a real account (and shows up in that account's extract).\nconst ACCOUNT_TYPES_FOR_TX: Record<string, BankAccountType[]> = {\n cash: ['cash_register'],\n credit_card: ['credit_card', 'bank_account'],\n debit_card: ['bank_account', 'cash_register'],\n pix: ['bank_account', 'digital_wallet'],\n bank_transfer: ['bank_account'],\n check: ['bank_account'],\n voucher: ['bank_account', 'digital_wallet'],\n}\n\nconst TYPE_ICONS: Record<string, React.ElementType> = {\n cash: Banknote,\n pix: QrCode,\n credit_card: CreditCard,\n debit_card: CreditCard,\n bank_transfer: ArrowRightLeft,\n check: FileCheck,\n}\n\nconst TYPE_COLORS: Record<string, string> = {\n cash: 'border-success/30 bg-success/5 hover:bg-success/10 data-[active=true]:border-success data-[active=true]:bg-success/15',\n pix: 'border-teal-500/30 bg-teal-500/5 hover:bg-teal-500/10 data-[active=true]:border-teal-500 data-[active=true]:bg-teal-500/15',\n credit_card: 'border-info/30 bg-info/5 hover:bg-info/10 data-[active=true]:border-info data-[active=true]:bg-info/15',\n debit_card: 'border-magic/30 bg-magic/5 hover:bg-magic/10 data-[active=true]:border-magic data-[active=true]:bg-magic/15',\n bank_transfer: 'border-warning/30 bg-warning/5 hover:bg-warning/10 data-[active=true]:border-warning data-[active=true]:bg-warning/15',\n check: 'border-border bg-muted/40 hover:bg-muted/60 data-[active=true]:border-foreground data-[active=true]:bg-muted',\n}\n\nconst ICON_COLORS: Record<string, string> = {\n cash: 'text-success',\n pix: 'text-teal-500',\n credit_card: 'text-info',\n debit_card: 'text-magic',\n bank_transfer: 'text-warning',\n check: 'text-muted-foreground',\n}\n\nexport function PaymentModal({ movement, onClose, onPaid }: {\n movement: FinancialMovement\n onClose: () => void\n onPaid: () => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const payMovement = useFinancialStore((s) => s.payMovement)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n\n const remaining = movement.amount - movement.paidAmount\n const [amount, setAmount] = useState(remaining)\n const [paymentDate, setPaymentDate] = useState(new Date().toISOString().slice(0, 10))\n const [selectedTypeId, setSelectedTypeId] = useState('')\n const [paymentMethodId, setPaymentMethodId] = useState('')\n const [bankAccountId, setBankAccountId] = useState('')\n const [cardBrand, setCardBrand] = useState('')\n const [cardInstallments, setCardInstallments] = useState(1)\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n const [expandMethodPicker, setExpandMethodPicker] = useState(true)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchPaymentMethods()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n const selectedType = useMemo(() =>\n paymentMethodTypes.find((tp) => tp.id === selectedTypeId),\n [paymentMethodTypes, selectedTypeId]\n )\n\n const txType = selectedType?.transactionType ?? ''\n\n const filteredMethods = useMemo(() =>\n paymentMethods.filter((m) => m.paymentMethodTypeId === selectedTypeId),\n [paymentMethods, selectedTypeId]\n )\n\n const needsCard = txType === 'credit_card' || txType === 'debit_card'\n const needsCardInstallments = txType === 'credit_card'\n\n // Accounts eligible for the selected payment type. Prefer the type's configured\n // allowedAccountTypes, else the tx-type mapping, else all active accounts.\n const eligibleAccounts = useMemo(() => {\n const allowed = (selectedType?.allowedAccountTypes && selectedType.allowedAccountTypes.length)\n ? selectedType.allowedAccountTypes\n : ACCOUNT_TYPES_FOR_TX[txType]\n if (!allowed || !allowed.length) return bankAccounts\n const filtered = bankAccounts.filter((a) => allowed.includes(a.accountType))\n return filtered.length ? filtered : bankAccounts\n }, [bankAccounts, selectedType, txType])\n\n // Auto-pick a sensible destination account so the payment is always linked to one.\n useEffect(() => {\n if (selectedTypeId && !bankAccountId && eligibleAccounts.length) {\n setBankAccountId(eligibleAccounts[0].id)\n }\n }, [selectedTypeId, eligibleAccounts])\n\n function handleSelectType(typeId: string) {\n setSelectedTypeId(typeId)\n setExpandMethodPicker(false)\n setPaymentMethodId('')\n setBankAccountId('')\n setCardBrand('')\n setCardInstallments(1)\n }\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n // Enter anywhere in the modal submits (unless typing in a textarea / Shift+Enter).\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'Enter' || e.shiftKey) return\n if ((e.target as HTMLElement).tagName === 'TEXTAREA') return\n e.preventDefault()\n if (amount > 0 && selectedTypeId && bankAccountId && !saving) void handlePay()\n }\n\n async function handlePay() {\n if (amount <= 0 || !selectedTypeId || !bankAccountId) return\n setSaving(true)\n try {\n await payMovement({\n movementId: movement.id,\n amount,\n paymentDate,\n paymentMethodId: paymentMethodId || undefined,\n paymentMethodTypeId: selectedTypeId || undefined,\n bankAccountId: bankAccountId || undefined,\n cardBrand: needsCard ? cardBrand || undefined : undefined,\n cardInstallments: needsCardInstallments ? cardInstallments : undefined,\n notes: notes.trim() || undefined,\n })\n setVisible(false)\n setTimeout(onPaid, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const SelectedIcon = selectedType ? (TYPE_ICONS[txType] ?? Banknote) : null\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{\n opacity: visible ? 1 : 0,\n transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)',\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b sticky top-0 bg-card z-10\">\n <div>\n <h3 className=\"text-base font-semibold\">{t('financial.payment.title')}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.payment.installment', { number: String(movement.installmentNumber ?? 1) })} · {t('financial.payment.remaining', { amount: formatCurrency(remaining, currency) })}\n </p>\n </div>\n <button onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n {/* Payment method type selector */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.method')}</label>\n\n {/* Collapsed: show selected as inline chip */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: selectedTypeId && !expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {selectedType && (\n <button\n onClick={() => setExpandMethodPicker(true)}\n className={`flex items-center gap-2 mt-1.5 w-full rounded-lg border px-3 py-2.5 text-left transition-colors hover:bg-muted/30 ${TYPE_COLORS[txType] ?? ''}`}\n data-active=\"true\"\n >\n {SelectedIcon && <SelectedIcon className={`h-4 w-4 ${ICON_COLORS[txType] ?? ''}`} />}\n <span className=\"text-sm font-medium flex-1\">{selectedType?.name}</span>\n <Pencil className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Expanded: full grid */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {paymentMethodTypes.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-input bg-muted/30 px-3 py-3 text-center mt-1.5\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.payment.noMethods')}</p>\n <a href=\"#/financial/settings\" className=\"mt-1.5 inline-block text-xs font-medium text-primary hover:underline\">\n {t('financial.payment.configureMethods')} →\n </a>\n </div>\n ) : (\n <div className=\"grid grid-cols-3 gap-2 mt-1.5\">\n {paymentMethodTypes.map((type) => {\n const tt = type.transactionType ?? ''\n const Icon = TYPE_ICONS[tt] ?? Banknote\n const isActive = selectedTypeId === type.id\n return (\n <button\n key={type.id}\n data-active={isActive}\n onClick={() => handleSelectType(type.id)}\n className={`flex flex-col items-center gap-1.5 rounded-lg border px-2 py-3 text-center transition-all ${TYPE_COLORS[tt] ?? TYPE_COLORS.cash}`}\n >\n <Icon className={`h-5 w-5 ${isActive ? ICON_COLORS[tt] ?? '' : 'text-muted-foreground'}`} />\n <span className={`text-[11px] font-medium leading-tight ${isActive ? 'text-foreground' : 'text-muted-foreground'}`}>{type.name}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Form fields — only after method selected */}\n {selectedTypeId && (\n <div key={selectedTypeId} className=\"space-y-4\">\n {/* Amount + Date side by side */}\n <div className=\"grid grid-cols-2 gap-3 stagger-field\" style={{ animationDelay: '0ms' }}>\n <CurrencyInput\n label={t('financial.payment.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.date')}</label>\n <DatePicker value={paymentDate} onChange={setPaymentDate} className=\"mt-1\" />\n </div>\n </div>\n\n {/* Specific payment method */}\n {filteredMethods.length > 0 && (\n <div className=\"stagger-field\" style={{ animationDelay: '50ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {needsCard ? t('financial.payment.card') : t('financial.payment.account')}\n </label>\n <select value={paymentMethodId} onChange={(e) => setPaymentMethodId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.select')}</option>\n {filteredMethods.map((m) => <option key={m.id} value={m.id}>{m.name}</option>)}\n </select>\n </div>\n )}\n\n {/* Card fields side by side */}\n {needsCard && (\n <div className={`grid gap-3 stagger-field ${needsCardInstallments ? 'grid-cols-2' : 'grid-cols-1'}`} style={{ animationDelay: '100ms' }}>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardBrand')}</label>\n <select value={cardBrand} onChange={(e) => setCardBrand(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectBrand')}</option>\n {['Visa', 'Mastercard', 'American Express', 'Elo', 'Hipercard', 'Diners Club'].map((b) => (\n <option key={b} value={b}>{b}</option>\n ))}\n </select>\n </div>\n {needsCardInstallments && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardInstallments')}</label>\n <select value={cardInstallments} onChange={(e) => setCardInstallments(Number(e.target.value))} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n {Array.from({ length: 12 }, (_, i) => i + 1).map((n) => (\n <option key={n} value={n}>{n}x {n > 1 ? formatCurrency(amount / n, currency) : ''}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n )}\n\n {/* Destination account — always shown so every payment links to an account */}\n <div className=\"stagger-field\" style={{ animationDelay: '100ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.bankAccount')}</label>\n {eligibleAccounts.length === 0 ? (\n <div className=\"mt-1 rounded-lg border border-dashed border-input bg-muted/30 px-3 py-2.5 text-center\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.payment.noAccounts')}</p>\n <a href=\"#/settings/financial/bank-accounts\" className=\"mt-1 inline-block text-xs font-medium text-primary hover:underline\">\n {t('financial.payment.configureAccounts')} →\n </a>\n </div>\n ) : (\n <select value={bankAccountId} onChange={(e) => setBankAccountId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectAccount')}</option>\n {eligibleAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n )}\n </div>\n\n {/* Notes */}\n <div className=\"stagger-field\" style={{ animationDelay: '150ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.notes')}</label>\n <input type=\"text\" value={notes} onChange={(e) => setNotes(e.target.value)} placeholder={t('financial.payment.optionalNotes')} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\" />\n </div>\n </div>\n )}\n </div>\n\n {/* Keyframe for staggered field entrance */}\n <style>{`\n .stagger-field {\n animation: field-slide-in 250ms ease-out both;\n }\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t sticky bottom-0 bg-card\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.payment.cancel')}\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handlePay}\n disabled={amount <= 0 || !selectedTypeId || !bankAccountId || saving}\n >\n <Check className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.payment.processing') : t('financial.payment.payAmount', { amount: formatCurrency(amount, currency) })}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )\n}\n","import React, { useEffect, useState, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Pencil, DollarSign, FileText, Calendar, Hash, User, X, MoreVertical, Ban, ChevronDown, CreditCard, Banknote, Building2, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, CalendarDays, ExternalLink } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader, DataTable } from '@fayz-ai/ui'\nimport { PaymentModal } from '../components/PaymentModal'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\nimport type { Invoice, InvoiceItem, FinancialMovement, TransactionDirection } from '../types'\n\nconst STATUS_COLORS: Record<string, { bg: string; icon: React.ElementType; labelKey: string }> = {\n open: { bg: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusOpen' },\n pending: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusPending' },\n partial: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis, labelKey: 'financial.invoice.statusPartial' },\n paid: { bg: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig, labelKey: 'financial.invoice.statusPaid' },\n overdue: { bg: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert, labelKey: 'financial.invoice.statusOverdue' },\n draft: { bg: 'bg-muted text-muted-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusDraft' },\n cancelled: { bg: 'bg-muted text-muted-foreground', icon: Ban, labelKey: 'financial.invoice.statusCancelled' },\n}\n\nexport function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel }: {\n invoiceId: string\n direction: TransactionDirection\n onBack: () => void\n onEdit: () => void\n /** Label for the back link — defaults to the invoice's parent list (payables/receivables). */\n backLabel?: string\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency } = config\n // Back link target: where the user actually came from, else the parent list.\n const parentLabel = backLabel ?? (direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables'))\n const provider = useFinancialProvider()\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const [detailsLoaded, setDetailsLoaded] = useState(false)\n const [detailsLoading, setDetailsLoading] = useState(false)\n\n const [invoice, setInvoice] = useState<Invoice | null>(null)\n const [items, setItems] = useState<InvoiceItem[]>([])\n const [movements, setMovements] = useState<FinancialMovement[]>([])\n const [payments, setPayments] = useState<FinancialMovement[]>([])\n const [loading, setLoading] = useState(true)\n const [payingMovement, setPayingMovement] = useState<FinancialMovement | null>(null)\n const [expandedMovId, setExpandedMovId] = useState<string | null>(null)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n async function loadData() {\n setLoading(true)\n const [inv, invItems, movResult] = await Promise.all([\n provider.getInvoiceById(invoiceId),\n provider.getInvoiceItems(invoiceId),\n provider.getMovements({ direction }),\n ])\n setInvoice(inv)\n setItems(invItems)\n setMovements(\n movResult.data\n .filter((m) => m.invoiceId === invoiceId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n )\n // Individual cash events (one row per payment) — listed under each installment.\n setPayments(\n movResult.data\n .filter((m) => m.invoiceId === invoiceId && m.movementKind === 'payment')\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? ''))\n )\n setLoading(false)\n }\n\n useEffect(() => { loadData() }, [invoiceId])\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function loadPaymentDetails() {\n if (detailsLoaded || detailsLoading) return\n setDetailsLoading(true)\n await Promise.all([fetchPaymentMethods(), fetchBankAccounts()])\n setDetailsLoaded(true)\n setDetailsLoading(false)\n }\n\n function handleExpandMov(movId: string) {\n const opening = expandedMovId !== movId\n setExpandedMovId(opening ? movId : null)\n if (opening) loadPaymentDetails()\n }\n\n async function handleCancel() {\n setCancelling(true)\n try {\n await cancelInvoice(invoiceId)\n await loadData()\n setConfirmCancel(false)\n setMenuOpen(false)\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n if (loading) {\n return (\n <div className=\"space-y-5\">\n <SubpageHeader title=\"\" onBack={onBack} parentLabel={parentLabel} />\n\n {/* Invoice card skeleton */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n <div className=\"h-1 bg-muted animate-pulse\" />\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className=\"h-10 w-10 rounded-lg bg-muted/40 animate-pulse\" />\n <div className=\"space-y-2\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-6 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n <div className=\"h-6 w-20 rounded-full bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n {[1, 2, 3, 4].map((i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"space-y-1\">\n <div className=\"h-2 w-10 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Items table skeleton */}\n <div className=\"px-5 pt-3 pb-1.5\">\n <div className=\"h-3 w-12 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"px-5\">\n <div className=\"border-b py-2 flex justify-between\">\n <div className=\"h-2 w-24 rounded bg-muted/20 animate-pulse\" />\n <div className=\"h-2 w-16 rounded bg-muted/20 animate-pulse\" />\n </div>\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between py-2.5 border-b last:border-0\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-3 w-4 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-5 w-14 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-28 rounded bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n </div>\n ))}\n </div>\n <div className=\"px-5 py-3 border-t bg-muted/10 flex justify-end\">\n <div className=\"h-4 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n\n {/* Installments skeleton */}\n <div className=\"space-y-2\">\n <div className=\"h-4 w-28 rounded bg-muted/30 animate-pulse\" />\n <div className=\"rounded-lg border bg-card shadow-sm divide-y\">\n {[1].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3\">\n <div className=\"h-3 w-5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"flex-1 space-y-1.5\">\n <div className=\"h-4 w-24 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-2 w-32 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"h-7 w-16 rounded-lg bg-muted/30 animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n if (!invoice) {\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={t('financial.invoice.notFound')} onBack={onBack} parentLabel={parentLabel} />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoice.notFoundDesc')}</p>\n </div>\n )\n }\n\n const statusConfig = STATUS_COLORS[invoice.status] ?? STATUS_COLORS.pending\n const StatusIcon = statusConfig.icon\n const totalPaid = movements.reduce((sum, m) => sum + m.paidAmount, 0)\n const totalRemaining = invoice.totalAmount - totalPaid\n const subtotal = items.reduce((sum, it) => sum + it.quantity * it.unitPrice, 0)\n const totalDiscount = items.reduce((sum, it) => sum + it.discount, 0)\n const totalSurcharge = items.reduce((sum, it) => sum + it.surcharge, 0)\n\n const itemColumns: ColumnDef<InvoiceItem, any>[] = [\n {\n id: 'index', header: t('financial.invoice.columnNumber'),\n cell: ({ row }) => <span className=\"text-xs text-muted-foreground\">{row.index + 1}</span>,\n },\n {\n accessorKey: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground capitalize\">{row.original.itemKind}</span>\n <span className=\"truncate\">{row.original.description}</span>\n </div>\n ),\n },\n {\n accessorKey: 'quantity', header: () => <span className=\"block text-right\">{t('financial.invoice.columnQty')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{getValue() as number}</span>,\n },\n {\n accessorKey: 'unitPrice', header: () => <span className=\"block text-right\">{t('financial.invoice.columnUnitPrice')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n {\n accessorKey: 'totalAmount', header: () => <span className=\"block text-right\">{t('financial.invoice.columnTotal')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right font-medium tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n ]\n\n return (\n <div className=\"space-y-5\">\n <SubpageHeader\n title={invoice.fiscalNumber ? `#${invoice.fiscalNumber}` : invoice.contactName ?? invoice.invoiceDate}\n onBack={onBack}\n parentLabel={parentLabel}\n actions={\n <div className=\"flex items-center gap-1.5\">\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <Button variant=\"outline\" size=\"sm\" onClick={onEdit}>\n <Pencil className=\"h-3.5 w-3.5\" /> {t('financial.invoice.edit')}\n </Button>\n )}\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <div className=\"relative\" ref={menuRef}>\n <Button variant=\"outline\" size=\"icon\" onClick={() => setMenuOpen(!menuOpen)} aria-label=\"More actions\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoice.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n }\n />\n\n {/* Invoice document */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n {/* Top accent stripe */}\n <div className=\"h-1 bg-primary\" />\n\n {/* Invoice header */}\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n <FileText className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <p className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')}\n </p>\n <p className={`text-xl font-bold mt-0.5 ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</p>\n </div>\n </div>\n <span className={`inline-flex items-center gap-1 rounded-full px-2.5 py-1 text-[11px] font-semibold capitalize ${statusConfig.bg}`}>\n <StatusIcon className=\"h-3 w-3\" /> {t(statusConfig.labelKey)}\n </span>\n </div>\n\n {/* Meta grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n <div className=\"flex items-center gap-2\">\n <User className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.contact')}</p>\n {invoice.contactName ? (\n <PersonLink personId={invoice.contactId} name={invoice.contactName} size=\"sm\" />\n ) : (\n <p className=\"text-xs font-medium truncate\">—</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.date')}</p>\n <p className=\"text-xs font-medium\">{invoice.invoiceDate}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Hash className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.installments')}</p>\n <p className=\"text-xs font-medium\">{invoice.totalInstallments}x</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <DollarSign className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.columnPaid')}</p>\n <p className=\"text-xs font-medium\">{formatCurrency(totalPaid, currency)}</p>\n </div>\n </div>\n </div>\n\n {/* Booking link — shows when this order has a scheduled time */}\n {invoice.bookingStartsAt && (\n <div className=\"flex items-center gap-2 mt-3 pt-3 border-t\">\n <CalendarDays className=\"h-3.5 w-3.5 text-magic shrink-0\" />\n <div className=\"flex items-center gap-2 min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.booking')}</p>\n <button\n type=\"button\"\n onClick={() => config.onBookingClick?.(invoice.id)}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-magic hover:underline\"\n >\n {new Date(invoice.bookingStartsAt).toLocaleDateString(undefined, { weekday: 'short', day: '2-digit', month: 'short' })}\n {' '}\n {new Date(invoice.bookingStartsAt).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })}\n <ExternalLink className=\"h-2.5 w-2.5\" />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Items table */}\n {items.length > 0 && (\n <>\n <div className=\"px-5 pt-3 pb-1.5\">\n <h3 className=\"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider\">{t('financial.invoice.items')}</h3>\n </div>\n <div className=\"px-5\">\n <DataTable columns={itemColumns} data={items} variant=\"flat\" compact />\n </div>\n\n {/* Totals */}\n <div className=\"px-5 py-3 mt-1 border-t bg-muted/10\">\n <div className=\"flex flex-col items-end gap-0.5\">\n {(totalDiscount > 0 || totalSurcharge > 0) && (\n <div className=\"flex items-center gap-6 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.subtotal')}</span>\n <span className=\"tabular-nums w-24 text-right\">{formatCurrency(subtotal, currency)}</span>\n </div>\n )}\n {totalDiscount > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-success\">\n <span>{t('financial.invoice.discount')}</span>\n <span className=\"tabular-nums w-24 text-right\">-{formatCurrency(totalDiscount, currency)}</span>\n </div>\n )}\n {totalSurcharge > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-warning\">\n <span>{t('financial.invoice.surcharge')}</span>\n <span className=\"tabular-nums w-24 text-right\">+{formatCurrency(totalSurcharge, currency)}</span>\n </div>\n )}\n <div className=\"flex items-center gap-6 text-sm font-bold pt-1\">\n <span>{t('financial.invoice.total')}</span>\n <span className={`tabular-nums w-24 text-right ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</span>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Observations inside invoice */}\n {invoice.observations && (\n <div className=\"px-5 py-3 border-t\">\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase tracking-wider mb-1\">{t('financial.invoice.notes')}</p>\n <p className=\"text-xs text-muted-foreground\">{invoice.observations}</p>\n </div>\n )}\n </div>\n\n {/* Installments — outside the invoice card */}\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold text-muted-foreground\">{t('financial.invoice.paymentSchedule')}</h3>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n {movements.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.invoice.noInstallments')}</div>\n ) : (\n <div className=\"divide-y\">\n {movements.map((mov) => {\n const remaining = mov.amount - mov.paidAmount\n const isPaid = mov.status === 'paid'\n const isPartial = mov.status === 'partial'\n const hasPaidDetails = isPaid || isPartial\n const isExpanded = expandedMovId === mov.id\n const movStatus = STATUS_COLORS[mov.status] ?? STATUS_COLORS.pending\n const MovIcon = movStatus.icon\n\n // Cash events recorded against this installment (one per payment).\n const instPayments = payments.filter((p) => (p.installmentNumber ?? null) === (mov.installmentNumber ?? null))\n\n return (\n <div key={mov.id}>\n <div\n className={`flex items-center gap-3 px-4 py-3 ${hasPaidDetails ? 'cursor-pointer hover:bg-muted/20 transition-colors' : ''}`}\n onClick={hasPaidDetails ? () => handleExpandMov(mov.id) : undefined}\n >\n <span className=\"text-xs font-medium text-muted-foreground w-6 shrink-0\">#{mov.installmentNumber}</span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium tabular-nums\">{formatCurrency(mov.amount, currency)}</span>\n <span className={`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[9px] font-medium capitalize ${movStatus.bg}`}>\n <MovIcon className=\"h-2 w-2\" /> {t(movStatus.labelKey)}\n </span>\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n {t('financial.invoice.due')} {mov.dueDate}\n {mov.paidAmount > 0 && !isPaid && ` · ${t('financial.invoice.paidLabel')} ${formatCurrency(mov.paidAmount, currency)}`}\n {mov.paymentDate && ` · ${t('financial.invoice.paidOn')} ${mov.paymentDate}`}\n </p>\n </div>\n {!isPaid && !isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {remaining < mov.amount ? formatCurrency(remaining, currency) : ''}\n </button>\n )}\n {isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {formatCurrency(remaining, currency)}\n </button>\n )}\n {hasPaidDetails && (\n <ChevronDown className={`h-3.5 w-3.5 text-muted-foreground shrink-0 transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`} />\n )}\n </div>\n\n {/* Expanded payment details */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: isExpanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-4 pb-2.5 pl-14\">\n {detailsLoading ? (\n <div className=\"flex items-center gap-3\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted/40 animate-pulse\" />\n </div>\n ) : instPayments.length === 0 ? (\n <div className=\"text-[11px] text-muted-foreground\">{t('financial.invoice.noDetails')}</div>\n ) : (\n <div className=\"space-y-1\">\n {instPayments.map((p) => {\n const pMethod = paymentMethods.find((m) => m.id === p.paymentMethodId)\n const pType = paymentMethodTypes.find((tp) => tp.id === (pMethod?.paymentMethodTypeId ?? p.paymentMethodTypeId))\n const pAccount = bankAccounts.find((a) => a.id === p.bankAccountId)\n return (\n <div key={p.id} className=\"flex flex-wrap items-center gap-x-1 gap-y-0.5 text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-success\">{formatCurrency(p.paidAmount, currency)}</span>\n {pType && (\n <>\n <span>·</span>\n <span className=\"font-medium text-foreground\">{pType.name}</span>\n {pMethod && <span>({pMethod.name})</span>}\n </>\n )}\n {p.cardBrand && (\n <>\n <span>·</span>\n <CreditCard className=\"h-3 w-3 shrink-0\" />\n <span className=\"font-medium text-foreground\">{p.cardBrand}</span>\n {p.cardInstallments && <span>{p.cardInstallments}x</span>}\n </>\n )}\n {pAccount && (\n <>\n <span>·</span>\n <Building2 className=\"h-3 w-3 shrink-0\" />\n <span>{pAccount.name}</span>\n </>\n )}\n {(p.feeAmount ?? 0) > 0 && (\n <>\n <span>·</span>\n <span className=\"text-warning\">{t('financial.statements.columnFee')} {formatCurrency(p.feeAmount ?? 0, currency)}</span>\n </>\n )}\n {p.paymentDate && (\n <>\n <span>·</span>\n <span>{p.paymentDate}</span>\n </>\n )}\n {p.notes && (\n <>\n <span>·</span>\n <span className=\"italic truncate max-w-[200px]\">{p.notes}</span>\n </>\n )}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Payment summary bar */}\n {movements.length > 0 && (\n <div className=\"flex items-center justify-between rounded-lg border bg-muted/20 px-4 py-2.5\">\n <div className=\"flex items-center gap-4 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.paidLabel')} <span className=\"font-semibold text-success\">{formatCurrency(totalPaid, currency)}</span></span>\n {totalRemaining > 0 && (\n <span className=\"text-muted-foreground\">{t('financial.invoice.remaining')} <span className=\"font-semibold text-foreground\">{formatCurrency(totalRemaining, currency)}</span></span>\n )}\n </div>\n {totalRemaining <= 0 && (\n <span className=\"inline-flex items-center gap-1 text-xs font-medium text-success\">\n <CircleCheckBig className=\"h-3 w-3\" /> {t('financial.invoice.fullyPaid')}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Payment Modal */}\n {payingMovement && (\n <PaymentModal\n movement={payingMovement}\n onClose={() => setPayingMovement(null)}\n onPaid={() => { setPayingMovement(null); loadData() }}\n />\n )}\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoice.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoice.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoice.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoice.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancel} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoice.cancelling') : t('financial.invoice.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","type TFunc = (key: string, params?: Record<string, string | number>) => string\n\n// Maps a previous in-module view to the i18n key for its human label, used to\n// render a context-aware back link (\"Back to {where you came from}\") on detail\n// pages. Views not listed here (e.g. the edit/detail of the record we're\n// returning from, or unknown views) are not meaningful referrers — callers fall\n// back to the default parent label.\nconst REFERRER_LABEL_KEYS: Record<string, string> = {\n summary: 'financial.nav.summary',\n statements: 'financial.nav.statements',\n 'cash-registers': 'financial.nav.cashRegisters',\n reconciliation: 'financial.nav.reconciliation',\n commissions: 'financial.nav.commissions',\n cards: 'financial.nav.cards',\n 'receivables-list': 'financial.nav.receivables',\n 'payables-list': 'financial.nav.payables',\n}\n\n/** Human label for the page the user came from, or null when it isn't a meaningful referrer. */\nexport function referrerLabel(view: string | null | undefined, t: TFunc): string | null {\n if (!view) return null\n const key = REFERRER_LABEL_KEYS[view]\n return key ? t(key) : null\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function PayablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"debit\" onSaved={(id) => onNavigate(id ? `payables-detail:${id}` : 'payables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"debit\" editId={intent.editId} onSaved={() => onNavigate(`payables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"debit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('payables-list') : () => onNavigate('payables-list')}\n onEdit={() => onNavigate(`payables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"debit\"\n onNew={() => onNavigate('payables-new')}\n onEdit={(id) => onNavigate(`payables-detail:${id}`)}\n />\n )\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function ReceivablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"credit\" onSaved={(id) => onNavigate(id ? `receivables-detail:${id}` : 'receivables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"credit\" editId={intent.editId} onSaved={() => onNavigate(`receivables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"credit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('receivables-list') : () => onNavigate('receivables-list')}\n onEdit={() => onNavigate(`receivables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"credit\"\n onNew={() => onNavigate('receivables-new')}\n onEdit={(id) => onNavigate(`receivables-detail:${id}`)}\n />\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Landmark, Play, Square, Clock, ChevronDown, ChevronUp, Calculator, X, Check, StickyNote } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Denomination definitions (BRL default — overridden by currency config)\n// ---------------------------------------------------------------------------\n\ninterface Denomination {\n label: string\n value: number\n type: 'bill' | 'coin'\n}\n\nconst BRL_DENOMINATIONS: Denomination[] = [\n { label: 'R$ 200', value: 200, type: 'bill' },\n { label: 'R$ 100', value: 100, type: 'bill' },\n { label: 'R$ 50', value: 50, type: 'bill' },\n { label: 'R$ 20', value: 20, type: 'bill' },\n { label: 'R$ 10', value: 10, type: 'bill' },\n { label: 'R$ 5', value: 5, type: 'bill' },\n { label: 'R$ 2', value: 2, type: 'bill' },\n { label: 'R$ 1', value: 1, type: 'coin' },\n { label: 'R$ 0,50', value: 0.5, type: 'coin' },\n { label: 'R$ 0,25', value: 0.25, type: 'coin' },\n { label: 'R$ 0,10', value: 0.1, type: 'coin' },\n { label: 'R$ 0,05', value: 0.05, type: 'coin' },\n]\n\n// ---------------------------------------------------------------------------\n// Denomination counter sub-component\n// ---------------------------------------------------------------------------\n\nfunction DenominationCounter({\n denominations,\n counts,\n onChange,\n currency,\n}: {\n denominations: Denomination[]\n counts: Record<number, number>\n onChange: (counts: Record<number, number>) => void\n currency: { code: string; locale: string; symbol: string }\n}) {\n const t = useTranslation()\n const bills = denominations.filter((d) => d.type === 'bill')\n const coins = denominations.filter((d) => d.type === 'coin')\n\n function setCount(value: number, count: number) {\n onChange({ ...counts, [value]: Math.max(0, count) })\n }\n\n function renderRow(d: Denomination) {\n const qty = counts[d.value] ?? 0\n const subtotal = qty * d.value\n return (\n <div key={d.value} className=\"flex items-center gap-2 py-1\">\n <span className=\"w-20 text-xs font-medium text-muted-foreground\">{d.label}</span>\n <span className=\"text-muted-foreground text-xs\">×</span>\n <input\n type=\"number\"\n min={0}\n value={qty || ''}\n onChange={(e) => setCount(d.value, parseInt(e.target.value) || 0)}\n placeholder=\"0\"\n className=\"w-16 rounded border bg-background px-2 py-1 text-xs text-center tabular-nums\"\n />\n <span className=\"text-xs text-muted-foreground\">=</span>\n <span className=\"w-24 text-xs text-right tabular-nums font-medium\">\n {formatCurrency(subtotal, currency)}\n </span>\n </div>\n )\n }\n\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {bills.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.bills')}</p>\n {bills.map(renderRow)}\n </div>\n )}\n {coins.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.coins')}</p>\n {coins.map(renderRow)}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Opening panel (step-based)\n// ---------------------------------------------------------------------------\n\ntype OpenMode = 'quick' | 'count'\n\nfunction CashOpeningPanel({\n cashAccounts,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [selectedAccountId, setSelectedAccountId] = useState<string>(cashAccounts[0]?.id ?? '')\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [showNotes, setShowNotes] = useState(false)\n const [confirming, setConfirming] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n\n function resetForm() {\n setQuickBalance(0)\n setCounts({})\n setNotes('')\n setShowNotes(false)\n setConfirming(false)\n }\n\n async function handleConfirm() {\n setSubmitting(true)\n try {\n await onOpen(selectedAccountId, effectiveBalance, notes || undefined)\n resetForm()\n } finally {\n setSubmitting(false)\n }\n }\n\n if (cashAccounts.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground p-4\">\n {t('financial.cash.noAccounts')}\n </p>\n )\n }\n\n // Confirmation step\n if (confirming) {\n return (\n <div className=\"p-4 space-y-4\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-4 space-y-3\">\n <p className=\"text-sm font-semibold\">{t('financial.cash.confirmOpening')}</p>\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.cash.register')}</span>\n <span className=\"font-medium\">{cashAccounts.find((a) => a.id === selectedAccountId)?.name}</span>\n <span className=\"text-muted-foreground\">{t('financial.cash.openingBalance')}</span>\n <span className=\"font-bold text-base\">{formatCurrency(effectiveBalance, currency)}</span>\n {mode === 'count' && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.method')}</span>\n <span className=\"font-medium\">{t('financial.cash.denominationCount')}</span>\n </>\n )}\n {notes && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.notes')}</span>\n <span className=\"font-medium\">{notes}</span>\n </>\n )}\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirming(false)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n <X className=\"h-3 w-3\" /> {t('common.back')}\n </button>\n <button\n onClick={handleConfirm}\n disabled={submitting}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Check className=\"h-3 w-3\" /> {submitting ? t('financial.cash.opening') : t('financial.cash.confirmAndOpen')}\n </button>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"p-4 space-y-4\">\n {/* Account selector */}\n {cashAccounts.length > 1 && (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.register')}</label>\n <select\n value={selectedAccountId}\n onChange={(e) => setSelectedAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs\"\n >\n {cashAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.countBillsCoins')}\n </button>\n </div>\n\n {/* Quick mode */}\n {mode === 'quick' && (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.openingBalance')}\n />\n )}\n\n {/* Count mode */}\n {mode === 'count' && (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Notes toggle */}\n <div>\n {!showNotes ? (\n <button\n onClick={() => setShowNotes(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <StickyNote className=\"h-3 w-3\" /> {t('financial.cash.addNotes')}\n </button>\n ) : (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.notes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.openingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n )}\n </div>\n\n {/* Open button */}\n <button\n onClick={() => setConfirming(true)}\n disabled={effectiveBalance <= 0}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Play className=\"h-3 w-3\" /> {t('financial.cash.openSession')}\n </button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Closing panel (inline within open session card)\n// ---------------------------------------------------------------------------\n\nfunction CashClosingPanel({\n session,\n currency,\n onClose,\n}: {\n session: { id: string; openingBalance: number; bankAccountName?: string }\n currency: { code: string; locale: string; symbol: string }\n onClose: (sessionId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n const difference = effectiveBalance - session.openingBalance\n\n async function handleClose() {\n setSubmitting(true)\n try {\n await onClose(session.id, effectiveBalance, notes || undefined)\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n <div className=\"space-y-3 pt-3 border-t\">\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.count')}\n </button>\n </div>\n\n {mode === 'quick' ? (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.closingBalance')}\n />\n ) : (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Difference indicator */}\n {effectiveBalance > 0 && (\n <div className=\"flex items-center justify-between rounded-lg bg-muted/50 px-3 py-2\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.cash.differenceFromOpening')}</span>\n <span className={`text-sm font-bold tabular-nums ${\n difference > 0 ? 'text-success' : difference < 0 ? 'text-destructive' : 'text-muted-foreground'\n }`}>\n {difference >= 0 ? '+' : ''}{formatCurrency(difference, currency)}\n </span>\n </div>\n )}\n\n {/* Notes */}\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.closingNotes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.closingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={handleClose}\n disabled={submitting || effectiveBalance <= 0}\n >\n <Square className=\"h-3.5 w-3.5\" />\n {submitting ? t('financial.cash.closing') : t('financial.cash.closeSession')}\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main view\n// ---------------------------------------------------------------------------\n\nexport function CashRegistersView() {\n const t = useTranslation()\n const { currency, labels } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const cashSessions = useFinancialStore((s) => s.cashSessions)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchCashSessions = useFinancialStore((s) => s.fetchCashSessions)\n const openCashSession = useFinancialStore((s) => s.openCashSession)\n const closeCashSession = useFinancialStore((s) => s.closeCashSession)\n\n const [expandedClosing, setExpandedClosing] = useState<string | null>(null)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchCashSessions()\n }, [])\n\n const cashAccounts = bankAccounts.filter((a) => a.accountType === 'cash_register')\n const openSessions = cashSessions.filter((s) => s.status === 'open')\n const closedSessions = cashSessions.filter((s) => s.status === 'closed')\n\n async function handleOpen(accountId: string, balance: number, notes?: string) {\n await openCashSession({ bankAccountId: accountId, openingBalance: balance, notes })\n }\n\n async function handleClose(sessionId: string, balance: number, notes?: string) {\n await closeCashSession({ sessionId, closingBalance: balance, notes })\n setExpandedClosing(null)\n }\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={labels.cashRegisters ?? t('financial.cash.title')} subtitle={t('financial.cash.subtitle')} />\n\n {/* Open sessions */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <Landmark className=\"h-4 w-4 text-info\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.openSessions')}</h3>\n {openSessions.length > 0 && (\n <span className=\"rounded-full bg-info/10 text-info px-2 py-0.5 text-[10px] font-semibold\">\n {openSessions.length}\n </span>\n )}\n </div>\n </div>\n\n {openSessions.length === 0 ? (\n <CashOpeningPanel cashAccounts={cashAccounts} currency={currency} onOpen={handleOpen} />\n ) : (\n <div className=\"divide-y\">\n {openSessions.map((session) => (\n <div key={session.id} className=\"p-4 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.cash.opened')} {new Date(session.openedAt).toLocaleString()}\n {session.openedByName ? ` ${t('financial.cash.by')} ${session.openedByName}` : ''}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-[10px] text-muted-foreground uppercase\">{t('financial.cash.openingBalance')}</p>\n <p className=\"text-lg font-bold tabular-nums\">{formatCurrency(session.openingBalance, currency)}</p>\n </div>\n </div>\n\n {/* Expand/collapse closing controls */}\n {expandedClosing === session.id ? (\n <CashClosingPanel session={session} currency={currency} onClose={handleClose} />\n ) : (\n <button\n onClick={() => setExpandedClosing(session.id)}\n className=\"inline-flex items-center gap-1.5 text-xs text-destructive hover:text-destructive font-medium transition-colors\"\n >\n <ChevronDown className=\"h-3 w-3\" /> {t('financial.cash.closeThisSession')}\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Quick open — when sessions already exist but user may want another */}\n {openSessions.length > 0 && cashAccounts.length > openSessions.length && (\n <OpenAnotherCollapsible cashAccounts={cashAccounts} openSessions={openSessions} currency={currency} onOpen={handleOpen} />\n )}\n\n {/* Session history */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.sessionHistory')}</h3>\n </div>\n {closedSessions.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.cash.noClosedSessions')}</div>\n ) : (\n <div className=\"divide-y\">\n {closedSessions.map((session) => (\n <div key={session.id} className=\"px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {new Date(session.openedAt).toLocaleDateString()} — {session.closedAt ? new Date(session.closedAt).toLocaleDateString() : ''}\n </p>\n {session.openedByName && (\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.cash.by')} {session.openedByName}</p>\n )}\n </div>\n <div className=\"text-right\">\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span>{t('financial.cash.openLabel')}: {formatCurrency(session.openingBalance, currency)}</span>\n <span>{t('financial.cash.closeLabel')}: {formatCurrency(session.closingBalance ?? 0, currency)}</span>\n </div>\n {session.difference !== undefined && session.difference !== 0 && (\n <p className={`text-xs font-semibold tabular-nums mt-0.5 ${session.difference > 0 ? 'text-success' : 'text-destructive'}`}>\n {t('financial.cash.diff')}: {session.difference >= 0 ? '+' : ''}{formatCurrency(session.difference, currency)}\n </p>\n )}\n {session.notes && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5 max-w-[200px] truncate\" title={session.notes}>\n {session.notes}\n </p>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Collapsible \"Open another register\"\n// ---------------------------------------------------------------------------\n\nfunction OpenAnotherCollapsible({\n cashAccounts,\n openSessions,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n openSessions: { bankAccountId: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const t = useTranslation()\n const [expanded, setExpanded] = useState(false)\n const availableAccounts = cashAccounts.filter((a) => !openSessions.some((s) => s.bankAccountId === a.id))\n\n if (availableAccounts.length === 0) return null\n\n return (\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"w-full flex items-center justify-between px-4 py-3 text-xs font-medium hover:bg-muted/50 transition-colors\"\n >\n <span className=\"flex items-center gap-2\">\n <Play className=\"h-3 w-3 text-primary\" />\n {t('financial.cash.openAnother')}\n </span>\n {expanded ? <ChevronUp className=\"h-3 w-3\" /> : <ChevronDown className=\"h-3 w-3\" />}\n </button>\n {expanded && <CashOpeningPanel cashAccounts={availableAccounts} currency={currency} onOpen={onOpen} />}\n </div>\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, ArrowRightLeft } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput, DatePicker, Button } from '@fayz-ai/ui'\n\nexport function TransferModal({ onClose, onDone, defaultFromId }: {\n onClose: () => void\n onDone: () => void\n defaultFromId?: string\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const createTransfer = useFinancialStore((s) => s.createTransfer)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [fromAccountId, setFromAccountId] = useState(defaultFromId ?? '')\n const [toAccountId, setToAccountId] = useState('')\n const [amount, setAmount] = useState(0)\n const [date, setDate] = useState(new Date().toISOString().slice(0, 10))\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n fetchBankAccounts()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n const sameAccount = !!fromAccountId && fromAccountId === toAccountId\n const canSubmit = !!fromAccountId && !!toAccountId && !sameAccount && amount > 0 && !saving\n\n // Enter anywhere in the modal submits (unless typing in a textarea / Shift+Enter).\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'Enter' || e.shiftKey) return\n if ((e.target as HTMLElement).tagName === 'TEXTAREA') return\n e.preventDefault()\n if (canSubmit) void handleSubmit()\n }\n\n async function handleSubmit() {\n if (!canSubmit) return\n setSaving(true)\n try {\n await createTransfer({ fromAccountId, toAccountId, amount, date, notes: notes || undefined })\n setVisible(false)\n setTimeout(onDone, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const selectClass = 'w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm'\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{ opacity: visible ? 1 : 0, transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)' }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b\">\n <div className=\"flex items-center gap-2\">\n <ArrowRightLeft className=\"h-4 w-4 text-warning\" />\n <h3 className=\"text-base font-semibold\">{t('financial.transfer.title')}</h3>\n </div>\n <button onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.from')}</label>\n <select value={fromAccountId} onChange={(e) => setFromAccountId(e.target.value)} className={selectClass}>\n <option value=\"\">{t('financial.transfer.selectAccount')}</option>\n {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.to')}</label>\n <select value={toAccountId} onChange={(e) => setToAccountId(e.target.value)} className={selectClass}>\n <option value=\"\">{t('financial.transfer.selectAccount')}</option>\n {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n </div>\n\n {sameAccount && (\n <p className=\"text-xs text-destructive\">{t('financial.transfer.sameAccount')}</p>\n )}\n\n <div className=\"grid grid-cols-2 gap-3\">\n <CurrencyInput\n label={t('financial.transfer.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.date')}</label>\n <DatePicker value={date} onChange={setDate} className=\"mt-1\" />\n </div>\n </div>\n\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.notes')}</label>\n <input\n type=\"text\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n placeholder={t('financial.transfer.optionalNotes')}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.transfer.cancel')}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleSubmit} disabled={!canSubmit}>\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.transfer.processing') : t('financial.transfer.submit')}\n </Button>\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Receipt, ArrowRightLeft, CheckCheck, Landmark } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, SubpageHeader, DatePicker, Button, Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { PersonLink } from '@fayz-ai/saas'\nimport type { StatementEntry } from '../types'\nimport { TransferModal } from '../components/TransferModal'\n\nconst ALL = 'all'\n\n// Soft reconciliation marker for an extract row — a muted glyph with a hover\n// tooltip explaining what it means. Rendered only when the movement carries the\n// relevant state (reconciledAt / externalSource).\nfunction ReconcileMarker({ kind, label }: { kind: 'reconciled' | 'imported'; label: string }) {\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex shrink-0 cursor-default\">\n {kind === 'reconciled'\n ? <CheckCheck className=\"h-3 w-3 text-success/70\" />\n : <Landmark className=\"h-3 w-3 text-muted-foreground/40\" />}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\n// Reference to the internal transaction a reconciled bank line was matched to —\n// a small \"⇄ {ref}\" chip, clickable when the counterpart has an invoice to open.\nfunction ReconciledWithRef({ refLabel, tooltip, onOpen }: { refLabel: string; tooltip: string; onOpen?: () => void }) {\n const inner = (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] text-muted-foreground max-w-[160px]\">\n <ArrowRightLeft className=\"h-2.5 w-2.5 shrink-0\" />\n <span className=\"truncate\">{refLabel}</span>\n </span>\n )\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n {onOpen\n ? <button onClick={onOpen} className=\"hover:text-primary transition-colors\">{inner}</button>\n : <span className=\"cursor-default\">{inner}</span>}\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{tooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\nexport function StatementsView({ onNavigate }: { onNavigate?: (view: string) => void }) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const statement = useFinancialStore((s) => s.statement)\n const statementLoading = useFinancialStore((s) => s.statementLoading)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n\n const [accountId, setAccountId] = useState('')\n const [dateFrom, setDateFrom] = useState(() => {\n const d = new Date(); d.setMonth(d.getMonth() - 3)\n return d.toISOString().slice(0, 10)\n })\n const [dateTo, setDateTo] = useState(() => new Date().toISOString().slice(0, 10))\n const [showTransfer, setShowTransfer] = useState(false)\n\n useEffect(() => { fetchBankAccounts(); fetchPaymentMethods() }, [])\n\n // Resolve a human payment-method label for a movement (method → type → card brand).\n const methodName = useMemo(() => {\n const byId = new Map(paymentMethods.map((m) => [m.id, m.name]))\n const typeById = new Map(paymentMethodTypes.map((tp) => [tp.id, tp.name]))\n return (mov: StatementEntry['movement']): string => {\n if (mov.paymentMethodId && byId.has(mov.paymentMethodId)) return byId.get(mov.paymentMethodId)!\n if (mov.paymentMethodTypeId && typeById.has(mov.paymentMethodTypeId)) return typeById.get(mov.paymentMethodTypeId)!\n if (mov.cardBrand) return mov.cardBrand\n return '—'\n }\n }, [paymentMethods, paymentMethodTypes])\n\n // Open the linked invoice (receivable/payable detail) for a statement row.\n function openInvoice(e: StatementEntry) {\n if (!onNavigate || !e.movement.invoiceId) return\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n onNavigate(`${base}-detail:${e.movement.invoiceId}`)\n }\n\n useEffect(() => {\n if (accountId) {\n fetchStatement({\n bankAccountId: accountId === ALL ? undefined : accountId,\n dateRange: { from: dateFrom, to: dateTo },\n })\n }\n }, [accountId, dateFrom, dateTo])\n\n // Default to the consolidated \"All accounts\" view so paid invoices show up even\n // when payments weren't tied to a specific bank account.\n useEffect(() => {\n if (!accountId) setAccountId(ALL)\n }, [])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const columns: ColumnDef<StatementEntry, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.statements.columnDate'),\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-xs\">{row.original.movement.paymentDate ?? row.original.movement.dueDate}</span>\n ),\n },\n {\n id: 'description', header: t('financial.statements.columnDescription'),\n cell: ({ row }) => {\n const e = row.original\n const isTransfer = e.entryKind !== 'movement'\n const memo = e.movement.notes\n const title = e.invoice?.contactName\n || (isTransfer ? t('financial.statements.transfer') : (memo || 'Transaction'))\n // Show the memo on its own line unless it's already serving as the title.\n const memoLine = memo && memo !== title ? memo : undefined\n const doc = e.invoice?.fiscalNumber\n const inst = e.movement.installmentNumber\n const canOpen = !!onNavigate && !!e.movement.invoiceId\n return (\n <div>\n <div className=\"flex items-center gap-1.5\">\n {/* Person name → hovercard with contact details (plain text when no contact) */}\n <PersonLink personId={e.invoice?.contactId} name={title} size=\"sm\" />\n {/* Document reference → opens the linked invoice */}\n {doc && (canOpen ? (\n <button\n onClick={() => openInvoice(e)}\n className=\"text-[10px] text-muted-foreground font-mono hover:text-primary hover:underline\"\n title={t('financial.statements.viewInvoice')}\n >\n {doc}\n </button>\n ) : (\n <span className=\"text-[10px] text-muted-foreground font-mono\">{doc}</span>\n ))}\n {isTransfer && (\n <span className=\"text-[9px] uppercase tracking-wide px-1 py-px rounded bg-warning/15 text-warning font-semibold\">\n {t('financial.statements.transfer')}\n </span>\n )}\n {/* Soft reconciliation marker — optional, driven by what the plugin exposes:\n reconciledAt = matched/accepted (conciliado); externalSource = imported from a\n bank sync but not yet reconciled. Hover shows what it means. */}\n {e.movement.reconciledAt ? (\n <ReconcileMarker kind=\"reconciled\" label={t('financial.statements.reconciled')} />\n ) : e.movement.externalSource ? (\n <ReconcileMarker kind=\"imported\" label={t('financial.statements.imported')} />\n ) : null}\n {/* The transaction this bank line was conciliated with — link/id. */}\n {e.reconciledWith && (() => {\n const rw = e.reconciledWith\n const refLabel = rw.fiscalNumber || rw.contactName || rw.description || rw.movementId.slice(0, 8)\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n const onOpen = onNavigate && rw.invoiceId ? () => onNavigate(`${base}-detail:${rw.invoiceId}`) : undefined\n return (\n <ReconciledWithRef\n refLabel={refLabel}\n tooltip={t('financial.statements.reconciledWith', { ref: refLabel })}\n onOpen={onOpen}\n />\n )\n })()}\n </div>\n {memoLine && <p className=\"text-[11px] text-foreground/80\">{memoLine}</p>}\n <p className=\"text-[10px] text-muted-foreground\">\n <span className=\"capitalize\">\n {isTransfer && e.counterAccountName\n ? (e.entryKind === 'transfer-in' ? `← ${e.counterAccountName}` : `→ ${e.counterAccountName}`)\n : e.movement.movementKind}\n </span>\n {inst ? ` · ${t('financial.statements.installmentShort', { n: inst })}` : ''}\n </p>\n </div>\n )\n },\n },\n {\n id: 'method', header: t('financial.statements.columnMethod'),\n cell: ({ row }) => {\n const mov = row.original.movement\n const name = methodName(mov)\n return (\n <div>\n <p className=\"text-xs\">{name}</p>\n {mov.cardInstallments && mov.cardInstallments > 1 && (\n <p className=\"text-[10px] text-muted-foreground\">{mov.cardInstallments}x</p>\n )}\n </div>\n )\n },\n },\n {\n id: 'debit', header: t('financial.statements.columnDebit'),\n cell: ({ row }) => (\n <span className=\"text-right block text-destructive text-xs\">\n {row.original.movement.direction === 'debit' ? fmt(row.original.net) : ''}\n </span>\n ),\n },\n {\n id: 'credit', header: t('financial.statements.columnCredit'),\n cell: ({ row }) => {\n const e = row.original\n if (e.movement.direction !== 'credit') return <span className=\"block text-right\" />\n return (\n <div className=\"text-right\">\n <span className=\"block text-success text-xs\">{fmt(e.net)}</span>\n {e.fee > 0 && (\n <span className=\"block text-[10px] text-muted-foreground\">{fmt(e.gross)} − {fmt(e.fee)}</span>\n )}\n </div>\n )\n },\n },\n {\n id: 'fee', header: t('financial.statements.columnFee'),\n cell: ({ row }) => (\n <span className=\"text-right block text-warning text-xs\">\n {row.original.fee > 0 ? fmt(row.original.fee) : ''}\n </span>\n ),\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => (\n <span className=\"text-right block font-medium text-xs\">{fmt(row.original.runningBalance)}</span>\n ),\n },\n ], [currency, t, methodName, onNavigate])\n\n const entries = statement?.entries ?? []\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={t('financial.statements.title')}\n subtitle={t('financial.statements.subtitle')}\n actions={\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowTransfer(true)} disabled={bankAccounts.length < 2}>\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n {t('financial.statements.newTransfer')}\n </Button>\n }\n />\n\n {/* Filters */}\n <div className=\"flex flex-col sm:flex-row gap-3 sm:items-end\">\n <div className=\"flex-1 max-w-xs\">\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.account')}</label>\n <select\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\"\n >\n <option value={ALL}>{t('financial.summary.allAccounts')}</option>\n {bankAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.from')}</label>\n <DatePicker value={dateFrom} onChange={setDateFrom} className=\"mt-0.5\" />\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.to')}</label>\n <DatePicker value={dateTo} onChange={setDateTo} className=\"mt-0.5\" />\n </div>\n </div>\n\n {/* Summary header — standard bank-extract layout: opening → credits → debits → closing */}\n {accountId && statement && (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-2\">\n <SummaryStat label={t('financial.statements.opening')} value={fmt(statement.openingBalance)} />\n <SummaryStat label={t('financial.statements.totalCredits')} value={fmt(statement.totalCredits)} positive />\n <SummaryStat label={t('financial.statements.totalDebits')} value={fmt(statement.totalDebits)} negative />\n <SummaryStat label={t('financial.statements.closing')} value={fmt(statement.closingBalance)} accent />\n </div>\n )}\n\n {/* Statement table */}\n {!accountId ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted\">\n <Receipt className=\"h-8 w-8 text-muted-foreground mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.statements.selectToView')}</p>\n </div>\n ) : statementLoading ? (\n <DataTable columns={columns} data={[]} loading skeletonRows={8} compact />\n ) : entries.length === 0 ? (\n <DataTable columns={columns} data={[]} emptyMessage={t('financial.statements.noTransactions')} compact />\n ) : (\n <DataTable columns={columns} data={entries} compact />\n )}\n\n {showTransfer && (\n <TransferModal\n defaultFromId={accountId && accountId !== ALL ? accountId : undefined}\n onClose={() => setShowTransfer(false)}\n onDone={() => setShowTransfer(false)}\n />\n )}\n </div>\n )\n}\n\nfunction SummaryStat({ label, value, accent, positive, negative }: {\n label: string\n value: string\n accent?: boolean\n positive?: boolean\n negative?: boolean\n}) {\n const valueClass = positive ? 'text-success' : negative ? 'text-destructive' : accent ? 'text-foreground' : 'text-foreground'\n return (\n <div className={`rounded-lg border px-3 py-2 ${accent ? 'bg-muted/40' : 'bg-card'}`}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase truncate\">{label}</p>\n <p className={`text-sm font-semibold mt-0.5 ${valueClass}`}>{value}</p>\n </div>\n )\n}\n","import React from 'react'\nimport { useFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function CommissionsView() {\n const t = useTranslation()\n const { labels } = useFinancialConfig()\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={labels.commissions} subtitle={t('financial.commissions.subtitle')} />\n <div className=\"flex items-center justify-center rounded-lg border-2 border-dashed border-muted p-12\">\n <p className=\"text-sm text-muted-foreground\">{t('financial.commissions.comingSoon')}</p>\n </div>\n </div>\n )\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { CreditCard, Plus, CalendarClock } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { PermissionGate } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { BankAccount } from '../types'\nimport { QuickTransactionForm } from './QuickTransactionForm'\n\n// ---------------------------------------------------------------------------\n// Per-card money math. Credit-card balances are stored as debt (negative), so\n// the current bill (fatura) is the magnitude owed; the available limit is what\n// remains of the credit line.\n// ---------------------------------------------------------------------------\n\nfunction cardMath(acc: BankAccount) {\n const limit = acc.creditLimit ?? 0\n const used = Math.max(0, -acc.currentBalance)\n const available = Math.max(0, limit - used)\n const pct = limit > 0 ? Math.min(100, (used / limit) * 100) : 0\n return { limit, used, available, pct }\n}\n\nexport function CardsView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const bankAccountsLoading = useFinancialStore((s) => s.bankAccountsLoading)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [tab, setTab] = useState<'open' | 'closed'>('open')\n const [addOpen, setAddOpen] = useState(false)\n const [addCardId, setAddCardId] = useState<string | undefined>()\n\n useEffect(() => { fetchBankAccounts() }, [])\n\n const cards = useMemo(\n () => bankAccounts.filter((a) => a.accountType === 'credit_card'),\n [bankAccounts],\n )\n const openCards = useMemo(() => cards.filter((c) => c.isActive), [cards])\n const closedCards = useMemo(() => cards.filter((c) => !c.isActive), [cards])\n const visibleCards = tab === 'open' ? openCards : closedCards\n\n // Summary strip is computed over the active (open) cards — the money that is\n // actually in play this cycle.\n const summary = useMemo(() => {\n let totalAvailable = 0\n let totalBills = 0\n for (const c of openCards) {\n const { available, used } = cardMath(c)\n totalAvailable += available\n totalBills += used\n }\n return { totalAvailable, totalBills }\n }, [openCards])\n\n function openAddExpense(cardId: string) {\n setAddCardId(cardId)\n setAddOpen(true)\n }\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.cards.title')} subtitle={t('financial.cards.subtitle')} />\n\n {bankAccountsLoading && cards.length === 0 ? (\n <div className=\"text-center py-12 text-sm text-muted-foreground\">Loading...</div>\n ) : cards.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-2xl border-2 border-dashed border-muted\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-amber-300 to-yellow-600 mb-3 text-white shadow-sm\">\n <CreditCard className=\"h-6 w-6\" />\n </div>\n <p className=\"text-sm font-medium\">{t('financial.cards.noCards')}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5 max-w-xs\">{t('financial.cards.noCardsHint')}</p>\n </div>\n ) : (\n <>\n {/* Summary strip — available limit + total bills across open cards */}\n <div className=\"grid grid-cols-2 gap-px overflow-hidden rounded-2xl border bg-border shadow-sm\">\n <div className=\"bg-card px-4 py-3\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.cards.availableLimit')}</p>\n <p className=\"mt-0.5 text-lg font-bold tabular-nums text-success\">\n {formatCurrency(summary.totalAvailable, currency)}\n </p>\n </div>\n <div className=\"bg-card px-4 py-3\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.cards.allBillsValue')}</p>\n <p className=\"mt-0.5 text-lg font-bold tabular-nums\">\n {formatCurrency(summary.totalBills, currency)}\n </p>\n </div>\n </div>\n\n {/* Open / Closed tabs (only when there are closed cards to switch to) */}\n {closedCards.length > 0 && (\n <div className=\"flex gap-1 rounded-full bg-muted p-1 w-full max-w-xs\">\n {(['open', 'closed'] as const).map((k) => (\n <button\n key={k}\n onClick={() => setTab(k)}\n className={`flex-1 rounded-full px-3 py-1.5 text-xs font-medium transition-colors ${\n tab === k ? 'bg-card text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'\n }`}\n >\n {k === 'open' ? t('financial.cards.tabOpen') : t('financial.cards.tabClosed')}\n </button>\n ))}\n </div>\n )}\n\n {/* Card tiles — stacked on mobile, grid on desktop */}\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {visibleCards.map((card) => {\n const { limit, used, available, pct } = cardMath(card)\n const over = pct >= 90\n // Per-brand color so cards match the bank (and the Home card), not a uniform gold.\n const brand = `${card.bankName ?? ''} ${card.name ?? ''}`.toLowerCase()\n const headerGrad =\n brand.includes('nubank') || brand.includes('nu ') ? 'from-purple-500 via-purple-600 to-indigo-700'\n : brand.includes('ita') ? 'from-orange-400 via-orange-500 to-amber-600'\n : brand.includes('inter') ? 'from-orange-500 via-orange-600 to-orange-700'\n : 'from-indigo-500 via-indigo-600 to-violet-700'\n const barGrad =\n brand.includes('nubank') || brand.includes('nu ') ? 'from-purple-500 to-indigo-600'\n : brand.includes('ita') ? 'from-orange-400 to-amber-500'\n : brand.includes('inter') ? 'from-orange-500 to-orange-600'\n : 'from-indigo-500 to-violet-600'\n return (\n <div key={card.id} className=\"overflow-hidden rounded-2xl border bg-card shadow-sm\">\n {/* Per-brand header */}\n <div className={`bg-gradient-to-br ${headerGrad} px-4 py-4 text-white`}>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-2\">\n <CreditCard className=\"h-5 w-5\" />\n <span className=\"text-sm font-semibold\">{card.name}</span>\n </div>\n {card.bankName && (\n <span className=\"text-[11px] font-medium uppercase tracking-wide opacity-80\">\n {card.bankName}\n </span>\n )}\n </div>\n <div className=\"mt-4\">\n <p className=\"text-[11px] uppercase tracking-wide opacity-80\">\n {t('financial.cards.currentBill')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums leading-tight\">\n {formatCurrency(used, currency)}\n </p>\n </div>\n </div>\n\n {/* Body */}\n <div className=\"space-y-3 px-4 py-3\">\n {/* Usage progress bar */}\n <div>\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span>{t('financial.cards.usedOfLimit', { percent: String(Math.round(pct)) })}</span>\n <span className=\"tabular-nums\">{formatCurrency(limit, currency)}</span>\n </div>\n <div className=\"mt-1 h-2 overflow-hidden rounded-full bg-muted\">\n <div\n className={`h-full rounded-full ${\n over ? 'bg-destructive' : `bg-gradient-to-r ${barGrad}`\n }`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n\n {/* Available limit + due date */}\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.cards.availableLimit')}</p>\n <p className=\"text-sm font-semibold tabular-nums\">{formatCurrency(available, currency)}</p>\n </div>\n {card.dueDay != null && (\n <div className=\"flex items-center gap-1.5 text-right text-xs text-muted-foreground\">\n <CalendarClock className=\"h-3.5 w-3.5\" />\n <span>{t('financial.cards.dueOn', { day: String(card.dueDay) })}</span>\n </div>\n )}\n </div>\n\n {/* Add expense against this card — gated on the role's create action */}\n <PermissionGate feature=\"financial\" action=\"create\">\n <button\n type=\"button\"\n onClick={() => openAddExpense(card.id)}\n className=\"flex w-full items-center justify-center gap-1.5 rounded-input border border-input bg-card px-3 py-2 text-xs font-medium text-foreground transition-colors hover:bg-muted/40\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n {t('financial.cards.addExpense')}\n </button>\n </PermissionGate>\n </div>\n </div>\n )\n })}\n </div>\n </>\n )}\n\n <QuickTransactionForm\n open={addOpen}\n onOpenChange={setAddOpen}\n defaultType=\"expense\"\n defaultAccountId={addCardId}\n />\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { Landmark, RefreshCw, Check, Link2, Sparkles, ArrowDownCircle, ArrowUpCircle } from 'lucide-react'\nimport { Button, toast } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { FinancialMovement, ReconciliationCandidate } from '../types'\n\n// ---------------------------------------------------------------------------\n// Reconciliation (conciliação) — match imported bank lines to internal movements\n//\n// Imported bank-statement lines live in financial_movements tagged with an\n// externalSource. This screen lets the operator link each pending line to the\n// internal movement it settles (suggested by amount + date proximity), or\n// accept it standalone. Reusable across apps — fed by any bank connector that\n// imports through the financial provider's reconciliation methods.\n// ---------------------------------------------------------------------------\n\nexport function ReconciliationView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const [lines, setLines] = useState<FinancialMovement[]>([])\n const [loading, setLoading] = useState(true)\n const [selectedId, setSelectedId] = useState<string | null>(null)\n const [candidates, setCandidates] = useState<ReconciliationCandidate[]>([])\n const [candidatesLoading, setCandidatesLoading] = useState(false)\n const [busy, setBusy] = useState(false)\n\n const supported = typeof provider.getUnreconciled === 'function'\n\n const load = useCallback(async () => {\n if (!provider.getUnreconciled) return\n setLoading(true)\n try {\n const data = await provider.getUnreconciled()\n setLines(data)\n // Keep the selection valid; otherwise drop the right panel.\n setSelectedId((prev) => (prev && data.some((l) => l.id === prev) ? prev : null))\n } finally {\n setLoading(false)\n }\n }, [provider])\n\n useEffect(() => { void load() }, [load])\n\n // Load suggestions whenever the selected line changes.\n useEffect(() => {\n if (!selectedId || !provider.suggestReconciliation) { setCandidates([]); return }\n let cancelled = false\n setCandidatesLoading(true)\n provider.suggestReconciliation(selectedId)\n .then((c) => { if (!cancelled) setCandidates(c) })\n .finally(() => { if (!cancelled) setCandidatesLoading(false) })\n return () => { cancelled = true }\n }, [selectedId, provider])\n\n async function match(bankMovementId: string, matchedMovementId?: string) {\n if (!provider.reconcileMovement) return\n setBusy(true)\n try {\n await provider.reconcileMovement({ bankMovementId, matchedMovementId })\n toast.success(t('financial.reconciliation.match'))\n await load()\n } catch {\n toast.error(t('common.error'))\n } finally {\n setBusy(false)\n }\n }\n\n if (!supported) {\n return (\n <div className=\"py-16 text-center\">\n <Landmark className=\"h-8 w-8 text-muted-foreground/30 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.empty')}</p>\n </div>\n )\n }\n\n const selected = lines.find((l) => l.id === selectedId) ?? null\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <h2 className=\"text-lg font-semibold tracking-tight\">{t('financial.reconciliation.title')}</h2>\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.subtitle')}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">\n {lines.length > 0\n ? t('financial.reconciliation.pending', { count: lines.length })\n : t('financial.reconciliation.allDone')}\n </span>\n <Button variant=\"outline\" size=\"sm\" onClick={() => void load()} disabled={loading || busy}>\n <RefreshCw className={`h-3.5 w-3.5 ${loading ? 'animate-spin' : ''}`} />\n {t('financial.reconciliation.refresh')}\n </Button>\n </div>\n </div>\n\n {lines.length === 0 && !loading ? (\n <div className=\"rounded-lg border bg-card shadow-sm py-16 text-center\">\n <Check className=\"h-8 w-8 text-success/40 mx-auto mb-2\" />\n <p className=\"text-sm font-medium\">{t('financial.reconciliation.empty')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('financial.reconciliation.emptyHint')}</p>\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-2\">\n {/* Left — pending bank lines */}\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Landmark className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.reconciliation.bankLines')}</h3>\n </div>\n <div className=\"divide-y max-h-[60vh] overflow-auto\">\n {lines.map((line) => {\n const isCredit = line.direction === 'credit'\n return (\n <button\n key={line.id}\n onClick={() => setSelectedId(line.id)}\n className={`w-full flex items-center gap-3 px-4 py-3 text-left hover:bg-muted/40 transition-colors ${\n selectedId === line.id ? 'bg-muted/50' : ''\n }`}\n >\n {isCredit\n ? <ArrowDownCircle className=\"h-4 w-4 text-success shrink-0\" />\n : <ArrowUpCircle className=\"h-4 w-4 text-destructive shrink-0\" />}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">{line.notes || line.externalId}</p>\n <p className=\"text-[10px] text-muted-foreground\">\n {line.paymentDate ?? line.dueDate}\n {line.externalSource && <span className=\"ml-1 uppercase tracking-wide\">· {line.externalSource}</span>}\n </p>\n </div>\n <span className={`text-sm font-semibold shrink-0 ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {fmt(line.amount)}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Right — suggested matches for the selected line */}\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Sparkles className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.reconciliation.candidates')}</h3>\n </div>\n\n {!selected ? (\n <p className=\"px-4 py-16 text-center text-sm text-muted-foreground\">\n {t('financial.reconciliation.selectLine')}\n </p>\n ) : (\n <div className=\"p-3 space-y-2\">\n {candidatesLoading ? (\n <div className=\"py-10 text-center text-xs text-muted-foreground\">…</div>\n ) : (\n <>\n {candidates.map((c) => (\n <div key={c.movement.id} className=\"flex items-center gap-3 rounded-md border p-2.5\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">\n {c.invoice?.contactName || c.movement.notes || c.invoice?.fiscalNumber || t('financial.reconciliation.match')}\n </p>\n <p className=\"text-[10px] text-muted-foreground\">\n {c.movement.dueDate}\n <span className=\"ml-1.5 inline-flex items-center rounded px-1 py-px bg-primary/10 text-primary font-medium\">\n {t('financial.reconciliation.matchScore', { score: Math.round(c.score * 100) })}\n </span>\n </p>\n </div>\n <span className=\"text-sm font-semibold shrink-0\">{fmt(c.movement.amount)}</span>\n <Button size=\"sm\" disabled={busy} onClick={() => match(selected.id, c.movement.id)}>\n <Link2 className=\"h-3.5 w-3.5\" />\n {t('financial.reconciliation.match')}\n </Button>\n </div>\n ))}\n {candidates.length === 0 && (\n <p className=\"py-6 text-center text-xs text-muted-foreground\">\n {t('financial.reconciliation.noCandidates')}\n </p>\n )}\n\n {/* Accept the line standalone (no internal counterpart) */}\n <div className=\"pt-2 mt-1 border-t\">\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\" disabled={busy} onClick={() => match(selected.id)}>\n <Check className=\"h-3.5 w-3.5\" />\n {t('financial.reconciliation.accept')}\n </Button>\n <p className=\"text-[10px] text-muted-foreground text-center mt-1\">\n {t('financial.reconciliation.acceptHint')}\n </p>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SettingsGroup, ToggleRow, useTenantPluginSettings } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\n\n// Per-tenant defaults = the values that used to be hardcoded here. Persisted +\n// re-hydrated per tenant; behavioural consumption is a follow-up.\nconst FINANCIAL_DEFAULTS = {\n autoInstallments: true,\n requireDoc: false,\n allowPartial: true,\n requireOpening: true,\n autoClose: false,\n overdueAlerts: true,\n dailySummary: false,\n}\n\nexport function FinancialGeneralSettings() {\n const t = useTranslation()\n const s = useTenantPluginSettings('financial', FINANCIAL_DEFAULTS)\n return (\n <div className=\"space-y-4\">\n <SettingsGroup title={t('financial.settings.invoices')} description={t('financial.settings.invoicesDesc')}>\n <ToggleRow label={t('financial.settings.autoInstallments')} description={t('financial.settings.autoInstallmentsDesc')} checked={s.get('autoInstallments')} onChange={(v) => s.set('autoInstallments', v)} />\n <ToggleRow label={t('financial.settings.requireDoc')} description={t('financial.settings.requireDocDesc')} checked={s.get('requireDoc')} onChange={(v) => s.set('requireDoc', v)} />\n <ToggleRow label={t('financial.settings.allowPartial')} description={t('financial.settings.allowPartialDesc')} checked={s.get('allowPartial')} onChange={(v) => s.set('allowPartial', v)} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.cashRegister')} description={t('financial.settings.cashRegisterDesc')}>\n <ToggleRow label={t('financial.settings.requireOpening')} description={t('financial.settings.requireOpeningDesc')} checked={s.get('requireOpening')} onChange={(v) => s.set('requireOpening', v)} />\n <ToggleRow label={t('financial.settings.autoClose')} description={t('financial.settings.autoCloseDesc')} checked={s.get('autoClose')} onChange={(v) => s.set('autoClose', v)} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.notifications')} description={t('financial.settings.notificationsDesc')}>\n <ToggleRow label={t('financial.settings.overdueAlerts')} description={t('financial.settings.overdueAlertsDesc')} checked={s.get('overdueAlerts')} onChange={(v) => s.set('overdueAlerts', v)} />\n <ToggleRow label={t('financial.settings.dailySummary')} description={t('financial.settings.dailySummaryDesc')} checked={s.get('dailySummary')} onChange={(v) => s.set('dailySummary', v)} />\n </SettingsGroup>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { DollarSign, Landmark, CreditCard, BookOpen, ChevronRight, Check } from 'lucide-react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\n\nconst STEPS = [\n { id: 'welcome', icon: DollarSign, titleKey: 'financial.onboarding.welcome', descKey: 'financial.onboarding.description' },\n { id: 'accounts', icon: Landmark, titleKey: 'financial.onboarding.accounts.title', descKey: 'financial.onboarding.accounts.description' },\n { id: 'payments', icon: CreditCard, titleKey: 'financial.onboarding.payments.title', descKey: 'financial.onboarding.payments.description' },\n { id: 'chart', icon: BookOpen, titleKey: 'financial.onboarding.chart.title', descKey: 'financial.onboarding.chart.description' },\n]\n\nexport function FinancialOnboarding({ onComplete }: { onComplete: () => void }) {\n const t = useTranslation()\n const [step, setStep] = useState(0)\n const current = STEPS[step]\n const isLast = step === STEPS.length - 1\n const Icon = current.icon\n\n return (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"w-full max-w-lg\">\n {/* Progress */}\n <div className=\"flex items-center gap-1 mb-8\">\n {STEPS.map((s, i) => (\n <div\n key={s.id}\n className={`h-1 flex-1 rounded-full transition-colors ${\n i <= step ? 'bg-primary' : 'bg-muted'\n }`}\n />\n ))}\n </div>\n\n {/* Card */}\n <div className=\"rounded-card border bg-card p-8 text-center space-y-6 shadow-sm\">\n <div className=\"flex justify-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-primary/10\">\n <Icon className=\"h-8 w-8 text-primary\" />\n </div>\n </div>\n\n <div>\n <h2 className=\"text-xl font-bold\">{t(current.titleKey)}</h2>\n <p className=\"text-sm text-muted-foreground mt-2 max-w-sm mx-auto\">{t(current.descKey)}</p>\n </div>\n\n {/* Step-specific hint */}\n {step > 0 && step < STEPS.length - 1 && (\n <div className=\"rounded-lg bg-muted/30 px-4 py-3 text-xs text-muted-foreground\">\n {t('financial.onboarding.configureHint')}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center justify-center gap-3 pt-2\">\n {step > 0 && (\n <Button variant=\"outline\" size=\"lg\" onClick={() => setStep(step - 1)}>\n {t('financial.onboarding.back')}\n </Button>\n )}\n {isLast ? (\n <Button variant=\"default\" size=\"lg\" onClick={onComplete}>\n <Check className=\"h-4 w-4\" /> {t('financial.onboarding.startUsing')}\n </Button>\n ) : (\n <Button variant=\"default\" size=\"lg\" onClick={() => setStep(step + 1)}>\n {step === 0 ? t('financial.onboarding.getStarted') : t('financial.onboarding.next')}\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Skip */}\n {!isLast && step === 0 && (\n <button\n onClick={onComplete}\n className=\"text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.onboarding.skip')}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useState, useCallback, useMemo, useEffect } from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { useTranslation } from '@fayz-ai/core'\nimport { ModulePage, PageTransition, type ModuleNavItem } from '@fayz-ai/ui'\nimport { FinancialContextProvider, type ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\nimport type { PluginRegistryDef, PluginQuickAction } from '@fayz-ai/core'\nimport { useModuleNavigation, ModuleActionBar, parseViewId, PluginSettingsPanel, EntitlementGate, UpgradePrompt, useModuleNavAccess, PermissionGate, usePermissionOptional } from '@fayz-ai/saas'\nimport { SummaryView } from './views/SummaryView'\nimport { QuickTransactionForm } from './views/QuickTransactionForm'\nimport { usePendingQuickAdd, consumeQuickAdd } from './quick-add'\nimport type { QuickTransactionType } from './types'\nimport { Plus } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport { PayablesView } from './views/PayablesView'\nimport { ReceivablesView } from './views/ReceivablesView'\nimport { CashRegistersView } from './views/CashRegistersView'\nimport { StatementsView } from './views/StatementsView'\nimport { CommissionsView } from './views/CommissionsView'\nimport { CardsView } from './views/CardsView'\nimport { ReconciliationView } from './views/ReconciliationView'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\nimport { FinancialOnboarding } from './components/FinancialOnboarding'\n\n// ---------------------------------------------------------------------------\n// View intent — what subpage + mode to show\n// ---------------------------------------------------------------------------\n\nexport interface ViewIntent {\n view: string\n mode?: 'list' | 'new' | 'edit' | 'detail'\n editId?: string\n}\n\nfunction parseIntent(activeView: string): ViewIntent {\n // `base` collapses 'payables-detail' / 'payables-edit' etc; `id` is the canonical :id param.\n const { base, id } = parseViewId(activeView)\n const m = base.match(/^(payables|receivables)-(new|list|detail|edit)$/)\n if (m) return { view: m[1], mode: m[2] as ViewIntent['mode'], editId: id }\n return { view: activeView }\n}\n\n// ---------------------------------------------------------------------------\n// Nav builder\n// ---------------------------------------------------------------------------\n\nfunction buildNav(\n config: ResolvedFinancialConfig,\n activeView: string,\n navigate: (view: string, hash?: string) => void,\n t: (key: string, params?: Record<string, string | number>) => string,\n): ModuleNavItem[] {\n const items: ModuleNavItem[] = [\n {\n id: 'summary',\n label: t('financial.nav.summary'),\n icon: 'BarChart3',\n active: activeView === 'summary',\n onClick: () => navigate('summary'),\n },\n ]\n\n if (config.modules.payables) {\n items.push({\n id: 'payables',\n label: t('financial.nav.payables'),\n icon: 'ArrowUpCircle',\n active: activeView.startsWith('payables'),\n children: [\n { id: 'payables-new', label: t('financial.nav.new'), active: activeView === 'payables-new', onClick: () => navigate('payables-new') },\n { id: 'payables-list', label: t('financial.nav.list'), active: activeView === 'payables-list', onClick: () => navigate('payables-list') },\n { id: 'payables-recurring', label: t('financial.nav.recurringExpenses'), active: activeView === 'payables-recurring', onClick: () => navigate('payables-recurring') },\n ],\n })\n }\n\n if (config.modules.receivables) {\n items.push({\n id: 'receivables',\n label: t('financial.nav.receivables'),\n icon: 'ArrowDownCircle',\n active: activeView.startsWith('receivables'),\n children: [\n { id: 'receivables-new', label: t('financial.nav.new'), active: activeView === 'receivables-new', onClick: () => navigate('receivables-new') },\n { id: 'receivables-list', label: t('financial.nav.list'), active: activeView === 'receivables-list', onClick: () => navigate('receivables-list') },\n ],\n })\n }\n\n if (config.modules.cashRegisters) {\n items.push({\n id: 'cash-registers',\n label: t('financial.nav.cashRegisters'),\n icon: 'Landmark',\n active: activeView === 'cash-registers',\n onClick: () => navigate('cash-registers'),\n })\n }\n\n // Statements (extract) is core to the financial module — always shown, not gated per app.\n items.push({\n id: 'statements',\n label: t('financial.nav.statements'),\n icon: 'Receipt',\n active: activeView === 'statements',\n onClick: () => navigate('statements'),\n })\n\n if (config.modules.reconciliation) {\n items.push({\n id: 'reconciliation',\n label: t('financial.nav.reconciliation'),\n icon: 'ArrowLeftRight',\n active: activeView === 'reconciliation',\n onClick: () => navigate('reconciliation'),\n })\n }\n\n if (config.modules.commissions) {\n items.push({\n id: 'commissions',\n label: t('financial.nav.commissions'),\n icon: 'Users',\n children: [\n { id: 'commissions-overview', label: t('financial.nav.overview'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n { id: 'commissions-rules', label: t('financial.nav.rules'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n ],\n })\n }\n\n if (config.modules.cards) {\n items.push({\n id: 'cards',\n label: t('financial.nav.cards'),\n icon: 'CreditCard',\n children: [\n { id: 'cards-overview', label: t('financial.nav.overview'), active: activeView === 'cards', onClick: () => navigate('cards') },\n { id: 'cards-reconciliation', label: t('financial.nav.reconciliation'), active: activeView === 'cards', onClick: () => navigate('cards') },\n ],\n })\n }\n\n // Tag each nav item with its access feature id (item id → feature via the\n // resolved navFeatureMap). `useModuleNavAccess` then hides role-denied links\n // and Crown-badges plan-denied ones; ids absent from the map stay ungated.\n for (const item of items) {\n const feature = config.navFeatureMap[item.id]\n if (feature) item.feature = feature\n }\n\n return items\n}\n\n// ---------------------------------------------------------------------------\n// Main page component\n// ---------------------------------------------------------------------------\n\nexport function FinancialPage({ config, provider, store, registries }: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n registries?: PluginRegistryDef[]\n}) {\n const { view, direction, navigate, previousView, back } = useModuleNavigation('/financial', {\n summary: 0,\n 'payables-list': 0, 'payables-new': 1, 'receivables-list': 0, 'receivables-new': 1,\n 'cash-registers': 0, statements: 0, reconciliation: 0, commissions: 0, cards: 0,\n settings: 1,\n })\n\n const [onboardingComplete, setOnboardingComplete] = useState(() => {\n try { return localStorage.getItem('saas-core:financial-onboarded') === 'true' } catch { return false }\n })\n\n // Skip the welcome wizard when the provider already has transactions — a user\n // (or a seeded demo/dogfood provider) with existing data should land on the\n // populated Summary, not a \"let's get started\" flow.\n useEffect(() => {\n if (onboardingComplete) return\n let cancelled = false\n void provider.getMovements({ pageSize: 1 })\n .then((res) => { if (!cancelled && res.total > 0) setOnboardingComplete(true) })\n .catch(() => { /* leave onboarding as-is on error */ })\n return () => { cancelled = true }\n }, [onboardingComplete, provider])\n\n const t = useTranslation()\n // Role-side create gate (QA: create affordances in custom plugin UIs must honor\n // the role's `create` action, not just the route-level `read` guard). The\n // financial module owns a single `/financial` route gated on read, so every\n // in-page \"new\" affordance below is otherwise ungated.\n const can = usePermissionOptional()\n const canCreate = can('financial', 'create')\n const intent = parseIntent(view)\n const isSettings = view === 'settings'\n // Access-aware sub-nav: role denial hides the link, plan denial badges it with\n // a Crown (freemium discovery). The click still navigates — the gated CONTENT\n // renders the UpgradePrompt (see renderView's EntitlementGates below).\n const nav = useModuleNavAccess(buildNav(config, view, navigate, t))\n\n // FAY-1225 \"log money in a few taps\": a reachable quick-add that opens the\n // Mobills-grade transaction sheet (default = expense). Prominent primary\n // button on desktop + a thumb-reachable FAB on mobile.\n const [quickAddOpen, setQuickAddOpen] = useState(false)\n const [quickAddType, setQuickAddType] = useState<QuickTransactionType>('expense')\n // FAY-1226 \"snap a receipt\": when true, the sheet foregrounds the attachment\n // step + auto-opens the camera/gallery picker.\n const [quickAddReceipt, setQuickAddReceipt] = useState(false)\n const openQuickAdd = useCallback((type: QuickTransactionType = 'expense') => {\n setQuickAddType(type)\n setQuickAddReceipt(false)\n setQuickAddOpen(true)\n }, [])\n\n // FAY-1242: open the sheet on a global quick-add request (the app shell's\n // elevated center \"+\" button). One-shot — consumed so it never re-fires.\n const pendingQuickAdd = usePendingQuickAdd()\n useEffect(() => {\n if (!pendingQuickAdd) return\n const req = consumeQuickAdd()\n if (!req) return\n // Defense in depth: the app-shell global \"+\" can request a quick-add even for\n // a read-only member — swallow it when the role lacks `create`.\n if (!canCreate) return\n setQuickAddType(req.type)\n setQuickAddReceipt(req.receipt)\n setQuickAddOpen(true)\n }, [pendingQuickAdd])\n\n // One-primary-action rule (FAY-1247): each module surfaces exactly ONE primary\n // add affordance and config picks its face — never both. When quickAdd is the\n // primary action (B2C, e.g. norman), suppress the ERP \"+ New\" menu here so the\n // header shows only the quick-add \"Nova transação\" button. Payables are still\n // covered: the quick-add sheet's \"Pago: Não\" creates an unpaid conta a pagar.\n // When quickAdd is off (ERP default, beauty) this returns the payable/receivable/\n // cash actions and no quick-add buttons render — exactly today's behavior.\n const quickActions = useMemo<PluginQuickAction[]>(() => {\n if (config.quickAdd) return []\n // No `create` action → surface no \"new\" quick actions (payable/receivable/cash\n // are all create affordances under the one-primary-action rule).\n if (!canCreate) return []\n const actions: PluginQuickAction[] = []\n if (config.modules.payables) {\n actions.push({\n id: 'new-payable',\n label: t('financial.quickActions.newPayable'),\n icon: 'ArrowUpCircle',\n description: t('financial.quickActions.newPayableDesc'),\n action: () => navigate('payables-new'),\n })\n }\n if (config.modules.receivables) {\n actions.push({\n id: 'new-receivable',\n label: t('financial.quickActions.newReceivable'),\n icon: 'ArrowDownCircle',\n description: t('financial.quickActions.newReceivableDesc'),\n action: () => navigate('receivables-new'),\n })\n }\n if (config.modules.cashRegisters) {\n actions.push({\n id: 'open-cash',\n label: t('financial.quickActions.openCashRegister'),\n icon: 'Landmark',\n description: t('financial.quickActions.openCashRegisterDesc'),\n action: () => navigate('cash-registers'),\n })\n }\n return actions\n }, [config.modules, config.quickAdd, canCreate, navigate, t])\n\n function handleOnboardingComplete() {\n setOnboardingComplete(true)\n try { localStorage.setItem('saas-core:financial-onboarded', 'true') } catch {}\n }\n\n // Show onboarding on first visit\n if (!onboardingComplete) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <FinancialOnboarding onComplete={handleOnboardingComplete} />\n </FinancialContextProvider>\n )\n }\n\n // Settings view\n if (isSettings && registries && registries.length > 0) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <PageTransition transitionKey=\"settings\" direction={direction}>\n <div style={{ padding: '24px' }}>\n <PluginSettingsPanel\n title={t('financial.settingsPage.title')}\n subtitle={t('financial.settingsPage.subtitle')}\n generalSettings={<FinancialGeneralSettings />}\n registries={registries}\n hostPluginId=\"financial\"\n routeBase=\"/settings/financial\"\n />\n </div>\n </PageTransition>\n </FinancialContextProvider>\n )\n }\n\n function renderView() {\n switch (intent.view) {\n case 'payables':\n return <PayablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'receivables':\n return <ReceivablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'cash-registers':\n return <CashRegistersView />\n case 'statements':\n return <StatementsView onNavigate={navigate} />\n case 'reconciliation':\n return <ReconciliationView />\n case 'commissions':\n return <CommissionsView />\n case 'cards':\n return <CardsView />\n default:\n return <SummaryView />\n }\n }\n\n // Content side of the sub-module paywall. A sub-module is premium ONLY when\n // the app mapped its nav id to a feature (`navFeatureMap`) — the plugin ships\n // no default, so an unmapped view renders ungated. Symmetric with the nav\n // above: same map drives the Crown on the link and the gate on the content,\n // so an app can never end up with a free-looking link over locked content.\n // The gate must live here because an internal tab is not a shell route — the\n // route guard never sees it (QA finding B35). Full UpgradePrompt (not the\n // inline banner) fills the whole module panel.\n function renderGatedView() {\n const feature = config.navFeatureMap[intent.view]\n if (!feature) return renderView()\n return (\n <EntitlementGate feature={feature} fallback={<UpgradePrompt feature={feature} />}>\n {renderView()}\n </EntitlementGate>\n )\n }\n\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <ModulePage\n title={config.labels.pageTitle}\n subtitle={config.labels.pageSubtitle}\n nav={nav}\n showHeader={intent.view === 'summary' || view === 'summary'}\n viewKey={view}\n direction={direction}\n headerAction={\n <div className=\"flex items-center gap-2\">\n {config.quickAdd && (\n // One-primary-action rule (FAY-1247): quick-add is the single primary\n // add affordance in B2C mode. The receipt entry point lives inside the\n // sheet's \"Fotografar ou anexar recibo\" attachment step, so no separate\n // \"Enviar recibo\" button is needed here.\n // Gated on the role's `create` action so read-only members don't see it.\n <PermissionGate feature=\"financial\" action=\"create\">\n <Button\n size=\"sm\"\n className=\"hidden md:inline-flex\"\n onClick={() => openQuickAdd('expense')}\n >\n <Plus className=\"h-4 w-4\" />\n {t('financial.quickTx.newTransaction')}\n </Button>\n </PermissionGate>\n )}\n <ModuleActionBar\n quickActions={quickActions}\n settingsPath={registries && registries.length > 0 ? '/settings/financial' : undefined}\n settingsLabel={t('financial.settingsPage.title')}\n />\n </div>\n }\n >\n {renderGatedView()}\n\n {/* FAY-1242: the mobile quick-add + receipt FAB stack was removed — the\n app shell's elevated center \"+\" bottom-nav button now owns global\n quick-add (via openQuickAdd), and receipts stay reachable through the\n form's Anexo step. Desktop keeps its header buttons above. */}\n\n <QuickTransactionForm\n open={quickAddOpen}\n onOpenChange={setQuickAddOpen}\n defaultType={quickAddType}\n focusReceipt={quickAddReceipt}\n />\n </ModulePage>\n </FinancialContextProvider>\n )\n}\n","import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle, CreditCard as CreditCardIcon, Eye, EyeOff } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n KpiCard, ChartWidget, TableWidget, Card, CardHeader, CardTitle, CardContent, GoldCard,\n defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, useDashboardNavigate,\n} from '@fayz-ai/ui'\nimport { FinancialContextProvider, useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { FinancialUIState } from '../store'\nimport type { Invoice, FinancialMovement } from '../types'\n\nfunction useEnsureSummary() {\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n useEffect(() => { void fetchSummary() }, [])\n}\n\n// ---------------------------------------------------------------------------\n// KPIs\n// ---------------------------------------------------------------------------\n\nfunction TotalBalanceKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const loading = useFinancialStore((s) => s.summaryLoading)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.totalBalance')} icon=\"Wallet\" value={formatCurrency(summary?.totalBalance ?? 0, currency)} sub={loading ? undefined : t('financial.summary.allAccounts')} />\n}\n\nfunction ReceivableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.receivable')} icon=\"TrendingUp\" value={formatCurrency(summary?.totalReceivable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overdueReceivableCount ?? 0) })} />\n}\n\nfunction PayableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.payable')} icon=\"TrendingDown\" value={formatCurrency(summary?.totalPayable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overduePayableCount ?? 0) })} />\n}\n\nfunction MonthlyFlowKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return <KpiCard label={t('financial.summary.monthlyFlow')} icon=\"BarChart3\" value={formatCurrency(inflow - outflow, currency)} sub={inflow >= outflow ? t('financial.summary.positiveBalance') : t('financial.summary.negativeBalance')} />\n}\n\n// ---------------------------------------------------------------------------\n// Cash flow (recharts) + breakdown + overdue alerts\n// ---------------------------------------------------------------------------\n\nfunction CashFlowChart() {\n const t = useTranslation()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const data = [{ name: t('financial.summary.cashFlow'), income: summary?.monthlyInflow ?? 0, expenses: summary?.monthlyOutflow ?? 0 }]\n return (\n <ChartWidget\n type=\"bar\" title={t('financial.summary.cashFlow')} icon=\"BarChart3\" categoryKey=\"name\" data={data}\n series={[\n { dataKey: 'income', label: t('financial.summary.income'), color: 'hsl(var(--success))' },\n { dataKey: 'expenses', label: t('financial.summary.expenses'), color: 'hsl(var(--destructive))' },\n ]}\n />\n )\n}\n\nfunction CashFlowBreakdown() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n const total = Math.max(inflow + outflow, 1)\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.summary.cashFlowBreakdown')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-success\" />{t('financial.summary.received')}</span>\n <span className=\"font-medium\">{formatCurrency(inflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-success\" style={{ width: `${(inflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-destructive\" />{t('financial.summary.paid')}</span>\n <span className=\"font-medium\">{formatCurrency(outflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-destructive\" style={{ width: `${(outflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"border-t pt-2\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.summary.net')}</span>\n <span className={`font-semibold ${inflow - outflow >= 0 ? 'text-success' : 'text-destructive'}`}>{formatCurrency(inflow - outflow, currency)}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction OverdueAlerts() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const items = [\n { label: t('financial.summary.overdueReceivable'), value: summary?.overdueReceivableAmount ?? 0, count: summary?.overdueReceivableCount ?? 0, Icon: ArrowUpRight, color: 'text-warning' },\n { label: t('financial.summary.overduePayable'), value: summary?.overduePayableAmount ?? 0, count: summary?.overduePayableCount ?? 0, Icon: ArrowDownRight, color: 'text-destructive' },\n ]\n return (\n <Card>\n <CardHeader><CardTitle className=\"flex items-center gap-2\"><AlertTriangle className=\"h-4 w-4 text-warning\" />{t('financial.summary.overdueTitle')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-3\">\n {items.map((item) => (\n <div key={item.label} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\"><item.Icon className={`h-3.5 w-3.5 ${item.color}`} /><span className=\"text-sm text-muted-foreground\">{item.label}</span></div>\n <span className=\"text-sm font-semibold\">{formatCurrency(item.value, currency)}</span>\n </div>\n ))}\n {items.every((i) => i.count === 0) ? <p className=\"border-t pt-3 text-xs text-muted-foreground\">{t('financial.summary.noOverdue')}</p> : null}\n </CardContent>\n </Card>\n )\n}\n\nfunction RecentTransactions() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const invoices = useFinancialStore((s) => s.invoices)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n useEffect(() => { void fetchInvoices({ pageSize: 5 }) }, [])\n const columns: ColumnDef<Invoice, unknown>[] = [\n { accessorKey: 'contactName', header: t('financial.summary.recentTransactions'), cell: ({ row }) => <span className=\"font-medium\">{row.original.contactName || 'Unknown'}</span> },\n { id: 'date', header: '', cell: ({ row }) => <span className=\"text-xs capitalize text-muted-foreground\">{row.original.direction} · {row.original.invoiceDate}</span> },\n { accessorKey: 'totalAmount', header: '', cell: ({ row }) => (\n <span className={`font-semibold ${row.original.direction === 'credit' ? 'text-success' : 'text-destructive'}`}>\n {row.original.direction === 'credit' ? '+' : '-'}{formatCurrency(row.original.totalAmount, currency)}\n </span>\n ) },\n ]\n return <TableWidget title={t('financial.summary.recentTransactions')} icon=\"CircleDollarSign\" columns={columns} data={invoices.slice(0, 5)} emptyMessage={t('financial.summary.noTransactions')} />\n}\n\n// ---------------------------------------------------------------------------\n// HOME surface (B2C) — a phone-first money dashboard that reflows into cells on\n// desktop. These render on surface=\"home\" only; the plugin-home Resumo widgets\n// above are untouched. Same store/provider, so figures match the Financeiro\n// module (FAY-1233 mobile-summary logic, generalized into reusable widgets).\n// ---------------------------------------------------------------------------\n\n/** Human \"due in N days\" label from a YYYY-MM-DD due date. */\nfunction useDueLabel() {\n const t = useTranslation()\n return (dueDate: string): string => {\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n const due = new Date(`${dueDate}T00:00:00`)\n const days = Math.round((due.getTime() - today.getTime()) / 86_400_000)\n if (days < 0) return t('financial.home.overdueDays', { count: String(Math.abs(days)) })\n if (days === 0) return t('financial.home.dueToday')\n if (days === 1) return t('financial.home.dueTomorrow')\n return t('financial.home.dueInDays', { count: String(days) })\n }\n}\n\n/** Branded balance hero — Saldo + eye-toggle + clickable Entradas/Saídas pills.\n * Compact band (span-4): tight padding so it never becomes a tall empty block on\n * desktop. Pills deep-link into the Financeiro module (receivables / payables). */\nfunction BalanceHero() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const navigate = useDashboardNavigate()\n useEnsureSummary()\n const [hidden, setHidden] = React.useState(false)\n const money = (v: number | null | undefined) => (hidden ? '••••••' : formatCurrency(v ?? 0, currency))\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return (\n <GoldCard branded className=\"px-5 py-4 text-center md:px-8 md:py-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide opacity-75\">{t('financial.home.balance')}</p>\n <div className=\"mt-0.5 flex items-center justify-center gap-2.5\">\n <span className=\"text-3xl font-bold tracking-tight tabular-nums md:text-4xl\">{money(summary?.totalBalance)}</span>\n <button\n type=\"button\"\n onClick={() => setHidden((h) => !h)}\n aria-label={hidden ? t('financial.home.showBalance') : t('financial.home.hideBalance')}\n className=\"rounded-full p-1.5 text-primary-foreground/80 transition-colors hover:bg-white/10\"\n >\n {hidden ? <EyeOff className=\"h-5 w-5\" /> : <Eye className=\"h-5 w-5\" />}\n </button>\n </div>\n <div className=\"mx-auto mt-3 grid max-w-lg grid-cols-2 gap-3\">\n <button\n type=\"button\"\n onClick={() => navigate('/financial/receivables-list')}\n aria-label={t('financial.home.inflow')}\n className=\"flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-emerald-500/90\">\n <ArrowUpRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.inflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(inflow)}</span>\n </span>\n </button>\n <button\n type=\"button\"\n onClick={() => navigate('/financial/payables-list')}\n aria-label={t('financial.home.outflow')}\n className=\"flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-rose-500/90\">\n <ArrowDownRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.outflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(outflow)}</span>\n </span>\n </button>\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// HOME charts — spend-by-category (donut) + cash-flow (in vs out). Both read the\n// same provider/store as the module, so figures stay coherent. surface 'home'\n// only (the plugin-home Resumo keeps its own cash-flow chart untouched).\n// ---------------------------------------------------------------------------\n\n/** Provider-agnostic expense classifier: maps a movement's label to a spend\n * bucket by keyword (pt-BR + en). Checked in priority order; first hit wins. */\nconst SPEND_CATEGORIES: Array<{ key: string; keywords: string[] }> = [\n { key: 'subscriptions', keywords: ['netflix', 'spotify', 'prime video', 'disney', 'hbo', ' max', 'youtube', 'apple', 'assinatura', 'subscription'] },\n { key: 'groceries', keywords: ['supermercado', 'mercado', 'padaria', 'hortifruti', 'feira', 'açougue', 'grocery', 'market'] },\n { key: 'transport', keywords: ['uber', '99', 'taxi', 'posto', 'shell', 'ipiranga', 'combustível', 'gasolina', 'metrô', 'ônibus', 'transport', 'fuel'] },\n { key: 'dining', keywords: ['ifood', 'rappi', 'restaurante', 'outback', 'lanchonete', 'pizzaria', 'café', 'cafeteria', 'mcdonald', 'burger', 'food'] },\n { key: 'home', keywords: ['aluguel', 'condomínio', 'luz', 'enel', 'água', 'sabesp', 'internet', 'vivo', 'claro', 'gás', 'iptu', 'rent', 'utilit'] },\n { key: 'health', keywords: ['farmácia', 'farmacia', 'drogasil', 'drogaria', 'academia', 'smartfit', 'clínica', 'hospital', 'médico', 'saúde', 'gym', 'fitness', 'health', 'pharmac'] },\n { key: 'leisure', keywords: ['cinema', 'cinemark', 'ingresso', 'show', 'teatro', 'viagem', 'hotel', 'steam', 'leisure'] },\n { key: 'shopping', keywords: ['amazon', 'magalu', 'shopee', 'aliexpress', 'loja', 'shopping', 'zara', 'renner', 'store'] },\n]\n\nfunction categorizeSpend(notes: string | undefined): string {\n const s = (notes ?? '').toLowerCase()\n for (const c of SPEND_CATEGORIES) if (c.keywords.some((k) => s.includes(k))) return c.key\n return 'other'\n}\n\n/** \"Gastos por categoria\" — realized expenses grouped into a donut. */\nfunction SpendByCategoryChart() {\n const t = useTranslation()\n const provider = useFinancialProvider()\n const [rows, setRows] = React.useState<Array<{ name: string; value: number }>>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const res = await provider.getMovements({ status: 'paid', direction: 'debit' })\n if (!alive) return\n const totals = new Map<string, number>()\n for (const m of res.data) {\n if (m.movementKind === 'transfer') continue\n const key = categorizeSpend(m.notes)\n totals.set(key, (totals.get(key) ?? 0) + (m.paidAmount || m.amount))\n }\n setRows(\n [...totals.entries()]\n .sort((a, b) => b[1] - a[1])\n .map(([key, value]) => ({ name: t(`financial.home.category.${key}`), value: Math.round(value * 100) / 100 })),\n )\n })()\n return () => { alive = false }\n }, [provider])\n if (rows.length === 0) {\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.home.spendByCategory')}</CardTitle></CardHeader>\n <CardContent className=\"flex h-[200px] items-center justify-center text-sm text-muted-foreground\">\n {t('financial.home.noSpend')}\n </CardContent>\n </Card>\n )\n }\n return (\n <ChartWidget\n type=\"pie\" title={t('financial.home.spendByCategory')} icon=\"PieChart\" categoryKey=\"name\" data={rows}\n series={[{ dataKey: 'value', label: t('financial.home.spendByCategory') }]}\n />\n )\n}\n\n/** \"Próximas contas\" — pending payable bills, soonest due first. */\nfunction UpcomingBills() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const dueLabel = useDueLabel()\n const [bills, setBills] = React.useState<FinancialMovement[]>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const pending = await provider.getMovements({ status: 'pending' })\n if (!alive) return\n setBills(\n pending.data\n .filter((m) => m.direction === 'debit' && m.movementKind === 'bill')\n .sort((a, b) => a.dueDate.localeCompare(b.dueDate)),\n )\n })()\n return () => { alive = false }\n }, [provider])\n return (\n <GoldCard className=\"p-0 overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <h2 className=\"text-sm font-semibold text-foreground\">{t('financial.home.upcomingBills')}</h2>\n </div>\n <div className=\"mt-3\">\n {bills.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-xs text-muted-foreground\">{t('financial.home.noBills')}</div>\n ) : (\n bills.map((bill, i) => (\n <div key={bill.id} className={'flex items-center justify-between px-4 py-3.5' + (i > 0 ? ' border-t border-border' : '')}>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-foreground\">{bill.notes ?? t('financial.home.bill')}</p>\n <p className=\"text-xs text-muted-foreground\">{dueLabel(bill.dueDate)}</p>\n </div>\n <span className=\"shrink-0 text-sm font-semibold tabular-nums text-foreground\">\n {formatCurrency(bill.amount - bill.paidAmount, currency)}\n </span>\n </div>\n ))\n )}\n </div>\n </GoldCard>\n )\n}\n\n/** \"Cartões\" — credit-card accounts with current bill + available limit. */\nfunction CreditCards() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n useEffect(() => { void fetchBankAccounts() }, [])\n const cards = bankAccounts.filter((a) => a.accountType === 'credit_card')\n return (\n <GoldCard className=\"bg-transparent border-0 p-0 shadow-none\">\n <h2 className=\"mb-3 text-sm font-semibold text-foreground\">{t('financial.home.cards')}</h2>\n <div className=\"space-y-3\">\n {cards.map((card) => {\n const fatura = Math.abs(Math.min(0, card.currentBalance))\n const limite = Math.max(0, (card.creditLimit ?? 0) - fatura)\n return (\n <div key={card.id} className=\"rounded-2xl bg-gradient-to-br from-violet-600 to-indigo-700 p-4 text-white shadow-md\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-semibold\">{card.bankName ?? card.name}</span>\n <CreditCardIcon className=\"h-5 w-5 opacity-80\" />\n </div>\n <p className=\"mt-6 text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.currentBill')}</p>\n <p className=\"text-xl font-bold tabular-nums\">{formatCurrency(fatura, currency)}</p>\n <p className=\"mt-2 text-[11px] opacity-70\">{t('financial.home.availableLimit')} {formatCurrency(limite, currency)}</p>\n </div>\n )\n })}\n {cards.length === 0 ? (\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border py-6 text-sm font-medium text-muted-foreground\">\n + {t('financial.home.addCard')}\n </div>\n ) : null}\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Registry builder\n// ---------------------------------------------------------------------------\n\nexport function createFinancialDashboardWidgets(ctx: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <FinancialContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </FinancialContextProvider>\n )\n Wrapped.displayName = `FinancialWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Total balance is finance's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the financial plugin-home, addable via Customize).\n defineKpiWidget({ id: 'financial.kpi.total-balance', title: 'financial.summary.totalBalance', domain: 'financial', defaultOrder: 0, component: withCtx(TotalBalanceKpi) }),\n defineKpiWidget({ id: 'financial.kpi.receivable', title: 'financial.summary.receivable', domain: 'financial', defaultOrder: 1, defaultVisible: false, component: withCtx(ReceivableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.payable', title: 'financial.summary.payable', domain: 'financial', defaultOrder: 2, defaultVisible: false, component: withCtx(PayableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.monthly-flow', title: 'financial.summary.monthlyFlow', domain: 'financial', defaultOrder: 3, defaultVisible: false, component: withCtx(MonthlyFlowKpi) }),\n defineChartWidget({ id: 'financial.chart.cash-flow', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.panel.breakdown', title: 'financial.summary.cashFlowBreakdown', domain: 'financial', span: 1, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(CashFlowBreakdown) }),\n defineCustomWidget({ id: 'financial.panel.overdue', title: 'financial.summary.overdueTitle', domain: 'financial', span: 1, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(OverdueAlerts) }),\n defineTableWidget({ id: 'financial.table.recent', title: 'financial.summary.recentTransactions', domain: 'financial', span: 4, defaultOrder: 20, surfaces: ['plugin-home'], component: withCtx(RecentTransactions) }),\n\n // FINANCE-HOME surface (B2C phone-first dashboard) — a compact analytical\n // layout: hero band → charts row (spend-by-category + cash-flow) → bills +\n // cards. This is a dedicated consumer surface (norman-ai's money screen), NOT\n // the universal B2B 'home': a full-bleed balance hero and credit-card tiles\n // are personal-finance chrome that would leak into every app that merely\n // enables plugin-financial (e.g. the beauty-saas Painel). Apps that want them\n // opt in explicitly by rendering <DashboardCanvas surface=\"finance-home\">.\n defineCustomWidget({ id: 'financial.hero.balance', title: 'financial.home.balance', domain: 'financial', span: 4, defaultOrder: 0, surfaces: ['finance-home'], component: withCtx(BalanceHero) }),\n defineChartWidget({ id: 'financial.chart.spend-by-category', title: 'financial.home.spendByCategory', domain: 'financial', span: 2, defaultOrder: 1, surfaces: ['finance-home'], component: withCtx(SpendByCategoryChart) }),\n defineChartWidget({ id: 'financial.chart.cash-flow-home', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 2, surfaces: ['finance-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.list.upcoming-bills', title: 'financial.home.upcomingBills', domain: 'financial', span: 2, defaultOrder: 3, surfaces: ['finance-home'], component: withCtx(UpcomingBills) }),\n defineCustomWidget({ id: 'financial.cards', title: 'financial.home.cards', domain: 'financial', span: 2, defaultOrder: 4, surfaces: ['finance-home'], component: withCtx(CreditCards) }),\n ]\n}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CostCenter, CardTransaction,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput, TransferResult,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,\n DateRange, InvoiceStatus, MovementStatus,\n} from '../types'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet nextId = 1\nfunction uid(): string {\n return String(nextId++)\n}\n\nfunction now(): string {\n return new Date().toISOString()\n}\n\nfunction today(): string {\n return new Date().toISOString().slice(0, 10)\n}\n\nfunction round2(n: number): number {\n return Math.round(n * 100) / 100\n}\n\nfunction matchesDateRange(dateStr: string | undefined, range?: DateRange): boolean {\n if (!range || !dateStr) return true\n return dateStr >= range.from && dateStr <= range.to\n}\n\nfunction matchesStatus<T extends string>(status: T, filter?: T | T[]): boolean {\n if (!filter) return true\n if (Array.isArray(filter)) return filter.includes(status)\n return status === filter\n}\n\nfunction paginate<T>(items: T[], page?: number, pageSize?: number): PaginatedResult<T> {\n const p = page ?? 1\n const ps = pageSize ?? 50\n const start = (p - 1) * ps\n return { data: items.slice(start, start + ps), total: items.length }\n}\n\n// ---------------------------------------------------------------------------\n// In-memory store\n// ---------------------------------------------------------------------------\n\ninterface MockStore {\n invoices: Invoice[]\n invoiceItems: InvoiceItem[]\n movements: FinancialMovement[]\n bankAccounts: BankAccount[]\n cashSessions: CashSession[]\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n chartOfAccounts: ChartOfAccountsNode[]\n costCenters: CostCenter[]\n cardTransactions: CardTransaction[]\n}\n\nfunction createStore(options?: MockFinancialProviderOptions): MockStore {\n const tenantId = 'mock-tenant'\n const seed = options?.seed\n\n const defaultPMTypes: PaymentMethodType[] = (options?.paymentMethodTypes ?? [\n { name: 'Cash', transactionType: 'cash' },\n { name: 'Credit Card', transactionType: 'credit_card' },\n { name: 'Debit Card', transactionType: 'debit_card' },\n { name: 'PIX', transactionType: 'pix' },\n { name: 'Bank Transfer', transactionType: 'transfer' },\n ]).map((t) => ({\n id: uid(),\n name: t.name,\n transactionType: t.transactionType,\n isActive: true,\n tenantId,\n createdAt: now(),\n }))\n\n const cashAccount: BankAccount = {\n id: uid(),\n name: 'Main Cash Register',\n accountType: 'cash_register',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n const bankAccount: BankAccount = {\n id: uid(),\n name: 'Business Checking',\n accountType: 'bank_account',\n bankName: 'Main Bank',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n return {\n // Seeded data (when provided) makes the module render as if the user already\n // has accounts + transactions — a populated Summary/Statements instead of the\n // empty onboarding state. Seed arrays are copied so the caller's data is not mutated.\n invoices: seed?.invoices ? [...seed.invoices] : [],\n invoiceItems: seed?.invoiceItems ? [...seed.invoiceItems] : [],\n movements: seed?.movements ? [...seed.movements] : [],\n bankAccounts: seed?.bankAccounts ? [...seed.bankAccounts] : [cashAccount, bankAccount],\n cashSessions: [],\n paymentMethods: seed?.paymentMethods ? [...seed.paymentMethods] : [],\n paymentMethodTypes: defaultPMTypes,\n chartOfAccounts: [],\n costCenters: [],\n cardTransactions: [],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mock provider factory\n// ---------------------------------------------------------------------------\n\n/**\n * Pre-populated store data. Any omitted collection stays empty (except\n * bankAccounts, which fall back to the two default mock accounts when absent).\n * Pass full domain objects — the mock treats them as the existing ledger.\n */\nexport interface MockFinancialSeed {\n bankAccounts?: BankAccount[]\n invoices?: Invoice[]\n invoiceItems?: InvoiceItem[]\n movements?: FinancialMovement[]\n paymentMethods?: PaymentMethod[]\n}\n\nexport interface MockFinancialProviderOptions {\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n /** Pre-seed the in-memory store so the module renders populated (not the empty state). */\n seed?: MockFinancialSeed\n}\n\nexport function createMockFinancialProvider(options?: MockFinancialProviderOptions): FinancialDataProvider {\n const store = createStore(options)\n const tenantId = 'mock-tenant'\n\n function recalcInvoiceStatus(invoice: Invoice): void {\n if (invoice.paidAmount >= invoice.totalAmount) {\n invoice.status = 'paid'\n } else if (invoice.paidAmount > 0) {\n invoice.status = 'partial'\n } else {\n // Check if any movement is overdue\n const movements = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n const hasOverdue = movements.some((m) => m.status === 'overdue' || (m.status === 'pending' && m.dueDate < today()))\n invoice.status = hasOverdue ? 'overdue' : 'open'\n }\n invoice.updatedAt = now()\n }\n\n const provider: FinancialDataProvider = {\n // --- Invoices ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n let results = [...store.invoices]\n if (query.direction) results = results.filter((i) => i.direction === query.direction)\n if (query.status) results = results.filter((i) => matchesStatus(i.status, query.status as InvoiceStatus | InvoiceStatus[]))\n if (query.contactId) results = results.filter((i) => i.contactId === query.contactId)\n if (query.accountId) {\n const invoiceIds = new Set(store.invoiceItems.filter((item) => item.accountId === query.accountId).map((item) => item.invoiceId))\n results = results.filter((invoice) => invoiceIds.has(invoice.id))\n }\n if (query.costCenterId) {\n const invoiceIds = new Set(store.invoiceItems.filter((item) => item.costCenterId === query.costCenterId).map((item) => item.invoiceId))\n results = results.filter((invoice) => invoiceIds.has(invoice.id))\n }\n if (query.dateRange) results = results.filter((i) => matchesDateRange(i.invoiceDate, query.dateRange))\n if (query.search) {\n const s = query.search.toLowerCase()\n results = results.filter((i) =>\n i.contactName?.toLowerCase().includes(s) ||\n i.observations?.toLowerCase().includes(s) ||\n i.fiscalNumber?.toLowerCase().includes(s)\n )\n }\n results.sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n return paginate(results, query.page, query.pageSize)\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n return store.invoices.find((i) => i.id === id) ?? null\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n return store.invoiceItems.filter((i) => i.invoiceId === invoiceId)\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const invoiceId = uid()\n const totalAmount = input.items.reduce((sum, item) => {\n const itemTotal = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n return sum + itemTotal\n }, 0)\n\n const itemsSummary = input.items.map((i) => i.description).filter(Boolean).join(', ')\n\n const invoice: Invoice = {\n id: invoiceId,\n direction: input.direction,\n invoiceDate: input.invoiceDate,\n fiscalNumber: input.fiscalNumber,\n totalAmount,\n paidAmount: 0,\n status: 'open',\n totalInstallments: input.installments.length || 1,\n contactId: input.contactId,\n contactName: input.contactName,\n cashSessionId: input.cashSessionId,\n unitId: input.unitId,\n observations: input.observations,\n itemsSummary: itemsSummary || undefined,\n metadata: input.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.invoices.push(invoice)\n\n // Create items\n for (const itemInput of input.items) {\n const itemTotal = itemInput.quantity * itemInput.unitPrice - (itemInput.discount ?? 0) + (itemInput.surcharge ?? 0)\n const item: InvoiceItem = {\n id: uid(),\n invoiceId,\n itemKind: itemInput.itemKind,\n referenceId: itemInput.referenceId,\n description: itemInput.description,\n quantity: itemInput.quantity,\n unitPrice: itemInput.unitPrice,\n totalAmount: itemTotal,\n discount: itemInput.discount ?? 0,\n surcharge: itemInput.surcharge ?? 0,\n accountId: itemInput.accountId,\n costCenterId: itemInput.costCenterId,\n metadata: itemInput.metadata,\n createdAt: now(),\n }\n store.invoiceItems.push(item)\n }\n\n // Create installment movements\n for (const movInput of input.installments) {\n const movement: FinancialMovement = {\n id: uid(),\n invoiceId,\n direction: input.direction,\n movementKind: movInput.movementKind,\n amount: movInput.amount,\n paidAmount: 0,\n status: 'pending',\n dueDate: movInput.dueDate,\n installmentNumber: movInput.installmentNumber,\n paymentMethodId: movInput.paymentMethodId,\n bankAccountId: movInput.bankAccountId,\n notes: movInput.notes,\n metadata: movInput.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(movement)\n }\n\n return invoice\n },\n\n async updateInvoice(id: string, data: Partial<Invoice>): Promise<Invoice> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n Object.assign(invoice, data, { updatedAt: now() })\n return invoice\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n invoice.status = 'cancelled'\n invoice.updatedAt = now()\n // Cancel all pending movements\n store.movements\n .filter((m) => m.invoiceId === id && m.status === 'pending')\n .forEach((m) => { m.status = 'cancelled'; m.updatedAt = now() })\n },\n\n // --- Movements ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n let results = [...store.movements]\n if (query.direction) results = results.filter((m) => m.direction === query.direction)\n if (query.status) results = results.filter((m) => matchesStatus(m.status, query.status as MovementStatus | MovementStatus[]))\n if (query.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query.cashSessionId) results = results.filter((m) => m.cashSessionId === query.cashSessionId)\n if (query.dateRange) results = results.filter((m) => matchesDateRange(m.dueDate, query.dateRange))\n results.sort((a, b) => a.dueDate.localeCompare(b.dueDate))\n return paginate(results, query.page, query.pageSize)\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const bill = store.movements.find((m) => m.id === input.movementId)\n if (!bill) throw new Error(`Movement ${input.movementId} not found`)\n\n // Net card settlement: derive the processing/MDR fee from the payment method (credits only).\n const method = input.paymentMethodId ? store.paymentMethods.find((pm) => pm.id === input.paymentMethodId) : undefined\n const feePct = bill.direction === 'credit' ? (method?.discountValue ?? 0) : 0\n const thisFee = round2(input.amount * (feePct / 100))\n\n // 1. Record the cash event as its OWN payment movement (one row per payment).\n const payment: FinancialMovement = {\n id: uid(),\n invoiceId: bill.invoiceId,\n direction: bill.direction,\n movementKind: 'payment',\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: thisFee,\n status: 'paid',\n dueDate: bill.dueDate,\n paymentDate: input.paymentDate,\n installmentNumber: bill.installmentNumber,\n paymentMethodId: input.paymentMethodId,\n paymentMethodTypeId: input.paymentMethodTypeId,\n bankAccountId: input.bankAccountId,\n cashSessionId: input.cashSessionId,\n cardBrand: input.cardBrand,\n cardInstallments: input.cardInstallments,\n notes: input.notes,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(payment)\n\n // 2. Update the bill (obligation) cache: cumulative paid + status. Clear its cash\n // fields so it stops being a cash event (the payment row is now the cash event).\n bill.paidAmount = round2(bill.paidAmount + input.amount)\n bill.status = bill.paidAmount >= bill.amount ? 'paid' : 'partial'\n bill.paymentDate = undefined\n bill.bankAccountId = undefined\n bill.updatedAt = now()\n\n // Update bank account balance by the NET cash impact (credit nets the fee).\n if (input.bankAccountId) {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n if (account) {\n if (bill.direction === 'credit') {\n account.currentBalance = round2(account.currentBalance + (input.amount - thisFee))\n } else {\n account.currentBalance = round2(account.currentBalance - input.amount)\n }\n account.updatedAt = now()\n }\n }\n\n // 3. Recalculate invoice status from its bills\n if (bill.invoiceId) {\n const invoice = store.invoices.find((i) => i.id === bill.invoiceId)\n if (invoice) {\n const bills = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n invoice.paidAmount = bills.reduce((sum, m) => sum + m.paidAmount, 0)\n recalcInvoiceStatus(invoice)\n }\n }\n\n return payment\n },\n\n async cancelMovement(id: string): Promise<void> {\n const movement = store.movements.find((m) => m.id === id)\n if (!movement) throw new Error(`Movement ${id} not found`)\n movement.status = 'cancelled'\n movement.updatedAt = now()\n },\n\n // --- Transfers (between accounts) ---\n async createTransfer(input: CreateTransferInput): Promise<TransferResult> {\n if (!input.fromAccountId || !input.toAccountId || input.fromAccountId === input.toAccountId) {\n throw new Error('Source and destination accounts must differ')\n }\n if (!(input.amount > 0)) throw new Error('Amount must be greater than zero')\n const transferId = uid()\n const debitMovementId = uid()\n const creditMovementId = uid()\n const base = {\n movementKind: 'transfer' as const,\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: 0,\n status: 'paid' as const,\n dueDate: input.date,\n paymentDate: input.date,\n notes: input.notes,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push({\n ...base, id: debitMovementId, direction: 'debit', bankAccountId: input.fromAccountId,\n metadata: { transferId, transferRole: 'out', counterAccountId: input.toAccountId },\n } as FinancialMovement)\n store.movements.push({\n ...base, id: creditMovementId, direction: 'credit', bankAccountId: input.toAccountId,\n metadata: { transferId, transferRole: 'in', counterAccountId: input.fromAccountId },\n } as FinancialMovement)\n // Reflect in stored balances.\n const from = store.bankAccounts.find((a) => a.id === input.fromAccountId)\n const to = store.bankAccounts.find((a) => a.id === input.toAccountId)\n if (from) { from.currentBalance = round2(from.currentBalance - input.amount); from.updatedAt = now() }\n if (to) { to.currentBalance = round2(to.currentBalance + input.amount); to.updatedAt = now() }\n return { transferId, debitMovementId, creditMovementId }\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n return store.bankAccounts.filter((a) => a.isActive)\n },\n\n async createBankAccount(data: CreateBankAccountInput): Promise<BankAccount> {\n const account: BankAccount = {\n id: uid(),\n name: data.name,\n accountType: data.accountType,\n bankName: data.bankName,\n accountNumber: data.accountNumber,\n agencyNumber: data.agencyNumber,\n currentBalance: data.initialBalance ?? 0,\n initialBalance: data.initialBalance ?? 0,\n creditLimit: data.creditLimit,\n dueDay: data.dueDay,\n closingDay: data.closingDay,\n isActive: true,\n unitId: data.unitId,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.bankAccounts.push(account)\n return account\n },\n\n async updateBankAccount(id: string, data: Partial<BankAccount>): Promise<BankAccount> {\n const account = store.bankAccounts.find((a) => a.id === id)\n if (!account) throw new Error(`Bank account ${id} not found`)\n Object.assign(account, data, { updatedAt: now() })\n return account\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n let results = [...store.cashSessions]\n if (bankAccountId) results = results.filter((s) => s.bankAccountId === bankAccountId)\n return results.sort((a, b) => b.openedAt.localeCompare(a.openedAt))\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n return store.cashSessions.find((s) => s.bankAccountId === bankAccountId && s.status === 'open') ?? null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n const session: CashSession = {\n id: uid(),\n bankAccountId: input.bankAccountId,\n bankAccountName: account?.name,\n status: 'open',\n openedAt: now(),\n openedByUserId: input.openedByUserId,\n openedByName: input.openedByName,\n openingBalance: input.openingBalance,\n unitId: input.unitId,\n tenantId,\n createdAt: now(),\n }\n store.cashSessions.push(session)\n return session\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const session = store.cashSessions.find((s) => s.id === input.sessionId)\n if (!session) throw new Error(`Cash session ${input.sessionId} not found`)\n\n // Calculate expected balance\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === session.id && m.status === 'paid')\n const inflow = sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0)\n const outflow = sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0)\n const expectedBalance = session.openingBalance + inflow - outflow\n\n session.status = 'closed'\n session.closedAt = now()\n session.closedByUserId = input.closedByUserId\n session.closedByName = input.closedByName\n session.closingBalance = input.closingBalance\n session.expectedBalance = expectedBalance\n session.difference = input.closingBalance - expectedBalance\n session.notes = input.notes\n\n return session\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const session = store.cashSessions.find((s) => s.id === sessionId)\n if (!session) throw new Error(`Cash session ${sessionId} not found`)\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === sessionId && m.status === 'paid')\n return {\n session,\n movementCount: sessionMovements.length,\n totalInflow: sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n totalOutflow: sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n return store.paymentMethods.filter((pm) => pm.isActive)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n return store.paymentMethodTypes.filter((t) => t.isActive)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n return store.chartOfAccounts.filter((n) => n.isActive)\n },\n\n async getCostCenters(): Promise<CostCenter[]> {\n return store.costCenters.filter((c) => c.isActive)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n let results = [...store.cardTransactions]\n if (dateRange) results = results.filter((t) => matchesDateRange(t.expectedDate, dateRange))\n return results.sort((a, b) => a.expectedDate.localeCompare(b.expectedDate))\n },\n\n // --- Statements (ERP extract: opening balance + realized cash + per-row net/fee) ---\n async getStatement(query: StatementQuery): Promise<StatementResult> {\n const todayStr = today()\n // A cash event = any non-cancelled movement with a payment_date (payment, transfer,\n // or a legacy in-place-paid bill). Bills lose their payment_date once split.\n const isRealized = (m: FinancialMovement) => m.status !== 'cancelled' && !!m.paymentDate\n const consolidated = !query.bankAccountId\n const scopeAccounts = consolidated\n ? store.bankAccounts.filter((a) => a.isActive)\n : store.bankAccounts.filter((a) => a.id === query.bankAccountId)\n const accountIds = new Set(scopeAccounts.map((a) => a.id))\n const accountNameById = new Map(store.bankAccounts.map((a) => [a.id, a.name]))\n const initialSum = scopeAccounts.reduce((s, a) => s + a.initialBalance, 0)\n // Only bail when a specific account was asked for and not found.\n if (!consolidated && accountIds.size === 0) {\n return { entries: [], openingBalance: 0, closingBalance: 0, totalCredits: 0, totalDebits: 0, totalFees: 0, net: 0, accountId: query.bankAccountId }\n }\n\n const netOf = (m: FinancialMovement) => m.direction === 'credit'\n ? m.paidAmount - (m.feeAmount ?? 0)\n : -m.paidAmount\n\n // Consolidated => all realized movements (incl. those with no bank account).\n const inScope = store.movements.filter((m) =>\n isRealized(m) && (consolidated || (m.bankAccountId && accountIds.has(m.bankAccountId))))\n\n const openingBalance = round2(initialSum + inScope\n .filter((m) => (m.paymentDate ?? '') < query.dateRange.from)\n .reduce((s, m) => s + netOf(m), 0))\n\n const rangeMovs = inScope\n .filter((m) => matchesDateRange(m.paymentDate, query.dateRange))\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? '') || a.createdAt.localeCompare(b.createdAt))\n\n let balance = openingBalance\n let totalCredits = 0, totalDebits = 0, totalFees = 0\n const entries: StatementEntry[] = rangeMovs.map((movement) => {\n const gross = movement.paidAmount\n const isCredit = movement.direction === 'credit'\n const fee = isCredit ? (movement.feeAmount ?? 0) : 0\n const net = isCredit ? round2(gross - fee) : gross\n const isTransfer = movement.movementKind === 'transfer'\n const meta = (movement.metadata ?? {}) as any\n const entryKind: StatementEntry['entryKind'] = isTransfer\n ? (meta.transferRole === 'in' ? 'transfer-in' : 'transfer-out')\n : 'movement'\n const counterAccountId = isTransfer ? meta.counterAccountId : undefined\n balance = round2(isCredit ? balance + net : balance - net)\n if (!(consolidated && isTransfer)) {\n if (isCredit) totalCredits = round2(totalCredits + net)\n else totalDebits = round2(totalDebits + net)\n totalFees = round2(totalFees + fee)\n }\n return {\n movement,\n invoice: movement.invoiceId ? store.invoices.find((i) => i.id === movement.invoiceId) : undefined,\n runningBalance: balance,\n gross, fee, net, entryKind,\n counterAccountId,\n counterAccountName: counterAccountId ? accountNameById.get(counterAccountId) : undefined,\n } as StatementEntry\n })\n\n // Link reconciled bank lines to the internal movement they were matched to.\n for (const e of entries) {\n const mid = e.movement.matchedMovementId\n const mm = mid ? store.movements.find((m) => m.id === mid) : undefined\n if (!mm) continue\n const inv = mm.invoiceId ? store.invoices.find((i) => i.id === mm.invoiceId) : undefined\n e.reconciledWith = {\n movementId: mm.id,\n description: mm.notes ?? undefined,\n invoiceId: mm.invoiceId,\n fiscalNumber: inv?.fiscalNumber,\n contactName: inv?.contactName,\n }\n }\n\n const accountCurrentBalance = round2(initialSum + inScope\n .filter((m) => (m.paymentDate ?? '') <= todayStr)\n .reduce((s, m) => s + netOf(m), 0))\n\n return {\n entries,\n openingBalance,\n closingBalance: balance,\n totalCredits,\n totalDebits,\n totalFees,\n net: round2(totalCredits - totalDebits),\n accountId: query.bankAccountId,\n accountCurrentBalance,\n }\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n const totalBalance = store.bankAccounts\n .filter((a) => a.isActive)\n .reduce((sum, a) => sum + a.currentBalance, 0)\n\n const pendingReceivable = store.movements.filter((m) =>\n m.direction === 'credit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n const pendingPayable = store.movements.filter((m) =>\n m.direction === 'debit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n\n const todayStr = today()\n // \"Monthly\" cash flow uses a trailing 30-day window (rolling month), not\n // calendar month-to-date. Month-to-date collapses to near-empty in the\n // first days of a month — on the 1st it's a single day — so the cash-flow\n // chart and Fluxo Mensal KPI read empty even with a full month of realized\n // activity. A rolling window stays representative on every day of the month.\n const monthAgo = new Date()\n monthAgo.setDate(monthAgo.getDate() - 30)\n const monthStart = monthAgo.toISOString().slice(0, 10)\n const monthEnd = todayStr\n\n const monthMovements = store.movements.filter((m) =>\n m.movementKind === 'payment' && matchesDateRange(m.paymentDate, dateRange ?? { from: monthStart, to: monthEnd })\n )\n\n const overdueReceivable = pendingReceivable.filter((m) => m.dueDate < todayStr)\n const overduePayable = pendingPayable.filter((m) => m.dueDate < todayStr)\n\n return {\n totalBalance,\n totalReceivable: pendingReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n totalPayable: pendingPayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n monthlyInflow: monthMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n monthlyOutflow: monthMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n overdueReceivableCount: overdueReceivable.length,\n overdueReceivableAmount: overdueReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n overduePayableCount: overduePayable.length,\n overduePayableAmount: overduePayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n }\n },\n\n // --- Reconciliation (conciliação) ---\n async importBankTransactions(input) {\n let imported = 0, duplicates = 0\n for (const line of input.lines) {\n const dup = store.movements.some((m) => m.externalSource === line.externalSource && m.externalId === line.externalId)\n if (dup) { duplicates++; continue }\n store.movements.push({\n id: uid(),\n direction: line.direction,\n movementKind: 'payment',\n amount: line.amount,\n paidAmount: line.amount,\n status: 'paid',\n dueDate: line.date,\n paymentDate: line.date,\n bankAccountId: line.bankAccountId ?? input.bankAccountId,\n notes: line.description,\n externalId: line.externalId,\n externalSource: line.externalSource,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n } as FinancialMovement)\n imported++\n }\n return { imported, duplicates }\n },\n\n async getUnreconciled(query) {\n let results = store.movements.filter((m) => m.externalSource && !m.reconciledAt)\n if (query?.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query?.dateRange) results = results.filter((m) => matchesDateRange(m.paymentDate, query.dateRange))\n return results.sort((a, b) => (b.paymentDate ?? '').localeCompare(a.paymentDate ?? ''))\n },\n\n async suggestReconciliation(bankMovementId) {\n const line = store.movements.find((m) => m.id === bankMovementId)\n if (!line) return []\n const amount = line.amount\n const tol = Math.max(0.01, round2(amount * 0.02))\n const lineDate = line.paymentDate ?? line.dueDate\n return store.movements\n .filter((m) => !m.externalSource && !m.reconciledAt && m.direction === line.direction && m.id !== bankMovementId && Math.abs(m.amount - amount) <= tol)\n .map((m) => {\n const amtScore = amount > 0 ? Math.max(0, 1 - Math.abs(m.amount - amount) / amount) : 0\n const refDate = m.dueDate ?? m.paymentDate\n const days = lineDate && refDate ? Math.abs((new Date(lineDate).getTime() - new Date(refDate).getTime()) / 86400000) : 30\n const dateScore = Math.max(0, 1 - days / 30)\n return {\n movement: m,\n invoice: m.invoiceId ? store.invoices.find((i) => i.id === m.invoiceId) : undefined,\n score: round2(0.7 * amtScore + 0.3 * dateScore),\n }\n })\n .sort((a, b) => b.score - a.score)\n .slice(0, 25)\n },\n\n async reconcileMovement(input) {\n const line = store.movements.find((m) => m.id === input.bankMovementId)\n if (line) { line.reconciledAt = now(); line.matchedMovementId = input.matchedMovementId; line.updatedAt = now() }\n if (input.matchedMovementId) {\n const internal = store.movements.find((m) => m.id === input.matchedMovementId)\n if (internal) { internal.reconciledAt = now(); internal.updatedAt = now() }\n }\n },\n\n async unreconcileMovement(bankMovementId) {\n const line = store.movements.find((m) => m.id === bankMovementId)\n if (!line) return\n const matchedId = line.matchedMovementId\n line.reconciledAt = undefined; line.matchedMovementId = undefined; line.updatedAt = now()\n if (matchedId) {\n const internal = store.movements.find((m) => m.id === matchedId)\n if (internal) { internal.reconciledAt = undefined; internal.updatedAt = now() }\n }\n },\n }\n\n return provider\n}\n","// Central physical-table-name registry for plugin-financial. Providers import T so\n// the plg_financial_* strings live in one place.\nexport const T = {\n movements: 'plg_financial_movements',\n chartOfAccounts: 'plg_financial_chart_of_accounts',\n bankAccounts: 'plg_financial_bank_accounts',\n cardBrands: 'plg_financial_card_brands',\n costCenters: 'plg_financial_cost_centers',\n cashRegisterSessions: 'plg_financial_cash_register_sessions',\n paymentMethods: 'plg_financial_payment_methods',\n paymentMethodTypes: 'plg_financial_payment_method_types',\n} as const\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CostCenter, CardTransaction,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput, TransferResult,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,\n DateRange, ReconciliationCandidate,\n} from '../types'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport { getFinancialTenantId } from '../lib/tenant'\nimport { T } from './tables'\n\nfunction getTenantId(): string | undefined {\n // Local override wins; else use the app's active tenant so writes pass RLS.\n return getFinancialTenantId() ?? getActiveTenantId()\n}\n\nfunction snakeToCamel(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return result\n}\n\nfunction camelToSnake(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('_')) continue\n result[key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)] = value\n }\n return result\n}\n\nfunction getClients() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) throw new Error('Supabase not initialized')\n // Core tables now live in PUBLIC (legacy dedicated core schema is gone). Both\n // handles are the single public client; `core` retained for call-site readability.\n return { core: supabase, pub: supabase }\n}\n\n/** Map order stage to InvoiceStatus for the financial UI */\nfunction mapStageToInvoiceStatus(stage?: string): string {\n switch (stage) {\n case 'paid': return 'paid'\n case 'partial': return 'partial'\n case 'overdue': return 'overdue'\n case 'cancelled': return 'cancelled'\n case 'invoiced': return 'open'\n case 'booked': return 'open'\n default: return 'open'\n }\n}\n\nlet _overdueSwept = false\n\n/** Batch-mark overdue: pending/partial movements past due → 'overdue', then update parent invoices */\nasync function sweepOverdue() {\n if (_overdueSwept) return\n _overdueSwept = true\n try {\n const { core, pub } = getClients()\n const today = new Date().toISOString().slice(0, 10)\n\n // Mark overdue movements\n const { data: overdueMovs } = await pub.from(T.movements)\n .update({ status: 'overdue' })\n .in('status', ['pending', 'partial'])\n .lt('due_date', today)\n .select('invoice_id')\n\n // Collect unique invoice IDs and update their status\n if (overdueMovs && overdueMovs.length > 0) {\n const invoiceIds = [...new Set(overdueMovs.map((m: any) => m.invoice_id).filter(Boolean))]\n for (const invId of invoiceIds) {\n const { data: allMovs } = await pub.from(T.movements)\n .select('status')\n .eq('invoice_id', invId)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const hasOverdue = movs.some((m: any) => m.status === 'overdue')\n const allPaid = movs.every((m: any) => m.status === 'paid')\n const invoiceStatus = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'open'\n const invoiceStage = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'invoiced'\n // Only update financial stage — don't overwrite agenda status\n await core.from('orders').update({ stage: invoiceStage }).eq('id', invId)\n }\n }\n } catch {\n // Non-critical — don't block the UI\n }\n}\n\n// S2 (data-model refactor): paid amount, balance and status are DERIVED from the\n// append-only ledger via v_invoice_balances — the single source of truth — not\n// from stored order.stage / metadata.paidAmount (which drift). See\n// docs/DATA-MODEL.md.\nasync function fetchInvoiceBalances(\n pub: any,\n ids: string[],\n): Promise<Map<string, { paid: number; balance: number; status: string }>> {\n const map = new Map<string, { paid: number; balance: number; status: string }>()\n if (!ids.length) return map\n const { data } = await pub\n .from('v_invoice_balances')\n .select('invoice_id, paid, balance, status')\n .in('invoice_id', ids)\n for (const r of (data ?? []) as any[]) {\n map.set(r.invoice_id, { paid: Number(r.paid) || 0, balance: Number(r.balance) || 0, status: r.status })\n }\n return map\n}\n\nfunction round2(n: number): number {\n return Math.round(n * 100) / 100\n}\n\nasync function findOrderIdsByItemMetadata(\n core: any,\n filters: { accountId?: string; costCenterId?: string },\n): Promise<string[] | undefined> {\n if (!filters.accountId && !filters.costCenterId) return undefined\n\n let qb = core.from('order_items').select('order_id')\n if (filters.accountId) qb = qb.filter('metadata->>accountId', 'eq', filters.accountId)\n if (filters.costCenterId) qb = qb.filter('metadata->>costCenterId', 'eq', filters.costCenterId)\n\n const { data } = await qb\n const ids: string[] = []\n for (const row of (data ?? []) as Array<{ order_id?: unknown }>) {\n if (typeof row.order_id === 'string' && row.order_id.length > 0) ids.push(row.order_id)\n }\n return Array.from(new Set(ids))\n}\n\n/** Card/MDR fee percent for a configured payment method (0 when none / not a fee method). */\nasync function getMethodFeePct(pub: any, paymentMethodId?: string): Promise<number> {\n if (!paymentMethodId) return 0\n const { data } = await pub.from(T.paymentMethods).select('discount_value').eq('id', paymentMethodId).single()\n return Number(data?.discount_value) || 0\n}\n\n/** Generate a correlation id; falls back when crypto.randomUUID is unavailable. */\nfunction genId(): string {\n try {\n if (typeof crypto !== 'undefined' && (crypto as any).randomUUID) return (crypto as any).randomUUID()\n } catch { /* noop */ }\n return 'tr-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 10)\n}\n\nexport function createSupabaseFinancialProvider(): FinancialDataProvider {\n const provider: FinancialDataProvider = {\n // --- Invoices (orders at stage=invoiced/paid/partial/overdue/cancelled with direction) ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n const { core, pub } = getClients()\n let qb = core.from('orders').select('*', { count: 'exact' })\n\n // Show orders with financial relevance: booked (with amount) + invoiced stages\n qb = qb.in('stage', ['booked', 'invoiced', 'paid', 'partial', 'overdue', 'cancelled'])\n qb = qb.gt('total', 0)\n\n // Filter by direction (credit=receivable, debit=payable)\n if (query.direction) {\n qb = qb.eq('direction', query.direction)\n }\n\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n const itemScopedOrderIds = await findOrderIdsByItemMetadata(core, {\n accountId: query.accountId,\n costCenterId: query.costCenterId,\n })\n if (itemScopedOrderIds) {\n if (itemScopedOrderIds.length === 0) return { data: [], total: 0 }\n qb = qb.in('id', itemScopedOrderIds)\n }\n if (query.contactId) qb = qb.eq('party_id', query.contactId)\n if (query.search) qb = qb.ilike('notes', `%${query.search}%`)\n // `to` is a plain date from the UI filter — widen it to end-of-day so the\n // last day of the range isn't cut off at midnight.\n if (query.dateRange) {\n const to = query.dateRange.to.length === 10 ? `${query.dateRange.to}T23:59:59.999` : query.dateRange.to\n qb = qb.gte('created_at', query.dateRange.from).lte('created_at', to)\n }\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('created_at', { ascending: false })\n const { data, count } = await qb\n\n const bal = await fetchInvoiceBalances(pub, (data ?? []).map((r: any) => r.id))\n const invoices: Invoice[] = (data ?? []).map((r: any) => {\n const meta = r.metadata ?? {}\n // Resolve direction from stage model or legacy kind\n const dir = r.direction ?? (r.kind === 'invoice_payable' ? 'debit' : 'credit')\n const b = bal.get(r.id)\n return {\n id: r.id,\n direction: dir,\n invoiceDate: r.created_at?.slice(0, 10) ?? '',\n fiscalNumber: r.reference_number,\n totalAmount: r.total ?? 0,\n paidAmount: b?.paid ?? meta.paidAmount ?? 0,\n status: b?.status ?? mapStageToInvoiceStatus(r.stage),\n totalInstallments: meta.installmentCount ?? 1,\n contactId: r.party_id,\n contactName: meta.contactName,\n observations: r.notes,\n itemsSummary: meta.itemsSummary,\n tenantId: r.tenant_id,\n createdAt: r.created_at,\n updatedAt: r.updated_at,\n } as Invoice\n })\n return { data: invoices, total: count ?? 0 }\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n const { core, pub } = getClients()\n const { data } = await core.from('orders').select('*').eq('id', id).single()\n if (!data) return null\n const o = snakeToCamel(data) as any\n const meta = data.metadata ?? {}\n // Paid amount + status are DERIVED from the ledger view (single source of truth).\n const balance = (await fetchInvoiceBalances(pub, [id])).get(id)\n const { data: movs } = await pub.from(T.movements)\n .select('paid_amount')\n .eq('invoice_id', id)\n .eq('movement_kind', 'bill')\n return {\n id: o.id,\n direction: o.direction ?? (o.kind === 'invoice_payable' ? 'debit' : 'credit'),\n invoiceDate: o.createdAt?.slice(0, 10) ?? '',\n fiscalNumber: o.referenceNumber,\n totalAmount: o.total ?? 0, paidAmount: balance?.paid ?? 0,\n status: balance?.status ?? mapStageToInvoiceStatus(o.stage),\n totalInstallments: (movs ?? []).length || 1, contactId: o.partyId,\n contactName: meta.contactName, itemsSummary: meta.itemsSummary,\n bookingStartsAt: o.startsAt ?? undefined,\n observations: o.notes,\n tenantId: o.tenantId, createdAt: o.createdAt, updatedAt: o.updatedAt,\n } as Invoice\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n const { core, pub } = getClients()\n const { data } = await core.from('order_items').select('*').eq('order_id', invoiceId).order('sort_order')\n return (data ?? []).map((r: any) => {\n const i = snakeToCamel(r) as any\n return {\n id: i.id, invoiceId, itemKind: i.metadata?.itemKind ?? 'other',\n description: i.name ?? '', quantity: i.quantity ?? 1,\n unitPrice: i.unitPrice ?? 0, totalAmount: i.total ?? 0,\n discount: i.discount ?? 0, surcharge: 0,\n referenceId: i.productId ?? i.serviceId,\n accountId: i.metadata?.accountId,\n costCenterId: i.metadata?.costCenterId,\n createdAt: i.createdAt,\n } as InvoiceItem\n })\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const kind = input.direction === 'debit' ? 'invoice_payable' : 'invoice_receivable'\n const totalAmount = input.items.reduce((sum, item) => sum + item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0), 0)\n const itemsSummary = input.items.map((i: any) => i.description).filter(Boolean).join(', ')\n\n // Auto-generate reference number if not provided\n let referenceNumber = input.fiscalNumber\n if (!referenceNumber && tenantId) {\n const prefix = input.direction === 'credit' ? 'REC' : 'PAG'\n const { data: seq } = await core.rpc('next_sequence', { p_tenant_id: tenantId, p_kind: kind })\n if (seq) referenceNumber = `${prefix}-${String(seq).padStart(5, '0')}`\n }\n\n const { data: order } = await core.from('orders').insert({\n tenant_id: tenantId, kind, status: 'open',\n stage: 'invoiced',\n direction: input.direction,\n reference_number: referenceNumber,\n total: totalAmount, party_id: input.contactId,\n notes: input.observations,\n currency: 'BRL',\n metadata: { itemsSummary, contactName: input.contactName, installmentCount: input.installments.length || 1 },\n }).select().single()\n\n if (order && input.items.length > 0) {\n await core.from('order_items').insert(\n input.items.map((item, i) => ({\n order_id: order.id, name: item.description,\n quantity: item.quantity, unit_price: item.unitPrice,\n discount: item.discount ?? 0,\n total: item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0),\n sort_order: i,\n metadata: {\n itemKind: item.itemKind,\n referenceId: item.referenceId,\n accountId: item.accountId,\n costCenterId: item.costCenterId,\n },\n }))\n )\n }\n\n // Create installment movements\n if (order && input.installments.length > 0) {\n await pub.from(T.movements).insert(\n input.installments.map((inst, i) => ({\n tenant_id: tenantId, invoice_id: order.id,\n direction: input.direction, movement_kind: inst.movementKind,\n amount: inst.amount, paid_amount: 0, status: 'pending',\n due_date: inst.dueDate, installment_number: inst.installmentNumber ?? i + 1,\n }))\n )\n }\n\n return {\n id: order!.id, direction: input.direction, invoiceDate: new Date().toISOString().slice(0, 10),\n fiscalNumber: referenceNumber,\n totalAmount, paidAmount: 0, status: 'open', totalInstallments: input.installments.length || 1,\n contactName: input.contactName, itemsSummary,\n tenantId: tenantId!, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(),\n } as Invoice\n },\n\n async updateInvoice(id: string, partial: Partial<Invoice>): Promise<Invoice> {\n const { core, pub } = getClients()\n const row: any = {}\n if (partial.observations) row.notes = partial.observations\n if (partial.totalAmount) row.total = partial.totalAmount\n if (partial.status) row.status = partial.status\n if (Object.keys(row).length > 0) await core.from('orders').update(row).eq('id', id)\n return (await provider.getInvoiceById(id))!\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const { core, pub } = getClients()\n await core.from('orders').update({ status: 'cancelled' }).eq('id', id)\n await pub.from(T.movements).update({ status: 'cancelled' }).eq('invoice_id', id).eq('status', 'pending')\n },\n\n // --- Movements (public.financial_movements) ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n const { core, pub } = getClients()\n let qb = pub.from(T.movements).select('*', { count: 'exact' })\n if (query.direction) qb = qb.eq('direction', query.direction)\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n if (query.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)\n if (query.cashSessionId) qb = qb.eq('cash_session_id', query.cashSessionId)\n if (query.dateRange) qb = qb.gte('due_date', query.dateRange.from).lte('due_date', query.dateRange.to)\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('due_date')\n const { data, count } = await qb\n return { data: (data ?? []).map((r: any) => snakeToCamel(r) as unknown as FinancialMovement), total: count ?? 0 }\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const { core, pub } = getClients()\n const { data: mov } = await pub.from(T.movements).select('*').eq('id', input.movementId).single()\n if (!mov) throw new Error('Movement not found')\n const tenantId = mov.tenant_id ?? getTenantId()\n\n // Net card settlement: derive the processing/MDR fee (inflows only in v1).\n const feePct = mov.direction === 'credit' ? await getMethodFeePct(pub, input.paymentMethodId) : 0\n const thisFee = round2(input.amount * (feePct / 100))\n\n // 1. Record the cash event as its OWN payment movement — NOT by mutating the\n // bill. Two payments on one installment → two distinct rows in the extract.\n const paymentRow: any = {\n tenant_id: tenantId,\n invoice_id: mov.invoice_id,\n direction: mov.direction,\n movement_kind: 'payment',\n amount: input.amount,\n paid_amount: input.amount,\n fee_amount: thisFee,\n status: 'paid',\n due_date: mov.due_date,\n payment_date: input.paymentDate,\n installment_number: mov.installment_number,\n payment_method_id: input.paymentMethodId ?? null,\n payment_method_type_id: input.paymentMethodTypeId ?? null,\n bank_account_id: input.bankAccountId ?? null,\n cash_session_id: input.cashSessionId ?? null,\n card_brand: input.cardBrand ?? null,\n card_installments: input.cardInstallments ?? null,\n notes: input.notes ?? null,\n }\n let { data, error } = await pub.from(T.movements).insert(paymentRow).select().single()\n // Graceful fallback if the fee_amount migration hasn't been applied yet.\n if (error && /fee_amount/i.test(error.message ?? '')) {\n const { fee_amount, ...rest } = paymentRow\n ;({ data, error } = await pub.from(T.movements).insert(rest).select().single())\n }\n if (error) throw error\n\n // 2. Update the bill (obligation) cache: cumulative paid + status. It stays a\n // pure obligation (no bank/method/date) — the cash lives on the payment row.\n // v_invoice_balances reads bill.paid_amount, so this keeps balances correct.\n const newPaid = round2((mov.paid_amount ?? 0) + input.amount)\n const billStatus = newPaid >= mov.amount ? 'paid' : 'partial'\n // Clear the bill's cash fields so it stops being a cash event (the payment row is now\n // the cash event) — prevents double-counting legacy in-place-paid bills.\n await pub.from(T.movements)\n .update({ paid_amount: newPaid, status: billStatus, payment_date: null, bank_account_id: null })\n .eq('id', mov.id)\n\n // 3. Update invoice (order) status based on its bills\n if (mov.invoice_id) {\n const { data: allMovs } = await pub.from(T.movements)\n .select('status, amount, paid_amount')\n .eq('invoice_id', mov.invoice_id)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const allPaid = movs.length > 0 && movs.every((m: any) => m.status === 'paid')\n const anyPaid = movs.some((m: any) => m.status === 'paid' || m.status === 'partial')\n const invoiceStatus = allPaid ? 'paid' : anyPaid ? 'partial' : 'open'\n const totalPaid = movs.reduce((sum: number, m: any) => sum + (m.paid_amount ?? 0), 0)\n // Store paid amount in metadata (orders table has no dedicated paid column)\n const { data: order } = await core.from('orders').select('metadata').eq('id', mov.invoice_id).single()\n const meta = (order?.metadata as any) ?? {}\n const invoiceStage = allPaid ? 'paid' : anyPaid ? 'partial' : 'invoiced'\n // Only update financial order status. Agenda status lives on public.appointments.\n await core.from('orders').update({\n status: invoiceStage,\n metadata: { ...meta, paidAmount: totalPaid },\n }).eq('id', mov.invoice_id)\n }\n\n return snakeToCamel(data!) as unknown as FinancialMovement\n },\n\n async cancelMovement(id: string): Promise<void> {\n const { core, pub } = getClients()\n await pub.from(T.movements).update({ status: 'cancelled' }).eq('id', id)\n },\n\n // --- Transfers (between accounts) ---\n async createTransfer(input: CreateTransferInput): Promise<TransferResult> {\n const { pub } = getClients()\n if (!input.fromAccountId || !input.toAccountId || input.fromAccountId === input.toAccountId) {\n throw new Error('Source and destination accounts must differ')\n }\n if (!(input.amount > 0)) throw new Error('Amount must be greater than zero')\n const tenantId = getTenantId()\n const transferId = genId()\n const base = {\n tenant_id: tenantId,\n movement_kind: 'transfer' as const,\n amount: input.amount,\n paid_amount: input.amount,\n fee_amount: 0,\n status: 'paid' as const,\n due_date: input.date,\n payment_date: input.date,\n notes: input.notes ?? null,\n }\n const rowsToInsert = [\n {\n ...base,\n direction: 'debit',\n bank_account_id: input.fromAccountId,\n metadata: { transferId, transferRole: 'out', counterAccountId: input.toAccountId },\n },\n {\n ...base,\n direction: 'credit',\n bank_account_id: input.toAccountId,\n metadata: { transferId, transferRole: 'in', counterAccountId: input.fromAccountId },\n },\n ]\n let { data, error } = await pub.from(T.movements).insert(rowsToInsert).select('id, direction')\n // Graceful fallback if the fee_amount migration hasn't been applied yet.\n if (error && /fee_amount/i.test(error.message ?? '')) {\n const stripped = rowsToInsert.map(({ fee_amount, ...rest }) => rest)\n ;({ data, error } = await pub.from(T.movements).insert(stripped).select('id, direction'))\n }\n if (error) throw error\n const rows = (data ?? []) as Array<{ id: string; direction: string }>\n const debitMovementId = rows.find((r) => r.direction === 'debit')?.id ?? ''\n const creditMovementId = rows.find((r) => r.direction === 'credit')?.id ?? ''\n return { transferId, debitMovementId, creditMovementId }\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.bankAccounts).select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as BankAccount)\n },\n\n async createBankAccount(input: CreateBankAccountInput): Promise<BankAccount> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from(T.bankAccounts).insert({\n ...camelToSnake(input as any), tenant_id: tenantId, current_balance: input.initialBalance ?? 0,\n }).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n async updateBankAccount(id: string, partial: Partial<BankAccount>): Promise<BankAccount> {\n const { core, pub } = getClients()\n const row = camelToSnake(partial as any)\n delete row.id; delete row.tenant_id\n const { data } = await pub.from(T.bankAccounts).update(row).eq('id', id).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n const { core, pub } = getClients()\n let qb = pub.from(T.cashRegisterSessions).select('*')\n if (bankAccountId) qb = qb.eq('bank_account_id', bankAccountId)\n const { data } = await qb.order('opened_at', { ascending: false })\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as CashSession)\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.cashRegisterSessions).select('*').eq('bank_account_id', bankAccountId).eq('status', 'open').single()\n return data ? snakeToCamel(data) as unknown as CashSession : null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from(T.cashRegisterSessions).insert({\n tenant_id: tenantId, bank_account_id: input.bankAccountId,\n status: 'open', opening_balance: input.openingBalance,\n opened_by_user_id: input.openedByUserId, opened_by_name: input.openedByName,\n unit_id: input.unitId,\n }).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.cashRegisterSessions).update({\n status: 'closed', closing_balance: input.closingBalance,\n closed_at: new Date().toISOString(),\n closed_by_user_id: input.closedByUserId, closed_by_name: input.closedByName,\n notes: input.notes,\n }).eq('id', input.sessionId).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const { core, pub } = getClients()\n const session = (await pub.from(T.cashRegisterSessions).select('*').eq('id', sessionId).single()).data\n const { data: movs } = await pub.from(T.movements).select('direction, paid_amount').eq('cash_session_id', sessionId).eq('status', 'paid')\n const movements = movs ?? []\n return {\n session: snakeToCamel(session!) as unknown as CashSession,\n movementCount: movements.length,\n totalInflow: movements.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n totalOutflow: movements.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.paymentMethods).select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethod)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.paymentMethodTypes).select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethodType)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.chartOfAccounts).select('*').eq('is_active', true).order('code')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as ChartOfAccountsNode)\n },\n\n async getCostCenters(): Promise<CostCenter[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from(T.costCenters).select('*').eq('is_active', true).order('code')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as CostCenter)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n const { core, pub } = getClients()\n return [] // TODO: implement when card_transactions table exists\n },\n\n // --- Statements (ERP extract: opening balance + realized cash + per-row net/fee) ---\n async getStatement(query: StatementQuery): Promise<StatementResult> {\n const { core, pub } = getClients()\n const today = new Date().toISOString().slice(0, 10)\n // The extract = actual cash events. A cash event is any non-cancelled movement with\n // a payment_date: payment movements, transfers, and legacy in-place-paid bills (which\n // still carry a payment_date until the split migration backfills them). Once a payment\n // movement exists for a bill, payMovement clears the bill's payment_date, so a single\n // cash amount is represented by exactly one row — no double counting, no migration needed.\n\n // 1. Resolve in-scope accounts. No bankAccountId => consolidated: ALL realized cash\n // (including movements with no bank_account_id, e.g. cash/card payments not tied to an account).\n const { data: acctRows } = await pub.from(T.bankAccounts).select('id, name, initial_balance, is_active')\n const allAccounts = (acctRows ?? []) as any[]\n const consolidated = !query.bankAccountId\n const scopeAccounts = consolidated\n ? allAccounts.filter((a) => a.is_active)\n : allAccounts.filter((a) => a.id === query.bankAccountId)\n const accountIds = scopeAccounts.map((a) => a.id)\n const accountNameById = new Map<string, string>(allAccounts.map((a) => [a.id, a.name]))\n const initialSum = scopeAccounts.reduce((s, a) => s + (Number(a.initial_balance) || 0), 0)\n // Only bail when a specific account was asked for and not found.\n if (!consolidated && accountIds.length === 0) {\n return { entries: [], openingBalance: 0, closingBalance: 0, totalCredits: 0, totalDebits: 0, totalFees: 0, net: 0, accountId: query.bankAccountId }\n }\n // Consolidated => no account filter (catches NULL-account movements too).\n const scopeFilter = (qb: any) => consolidated ? qb : qb.in('bank_account_id', accountIds)\n\n const netOf = (r: any) => r.direction === 'credit'\n ? (Number(r.paid_amount) || 0) - (Number(r.fee_amount) || 0)\n : -(Number(r.paid_amount) || 0)\n\n // 2. Opening balance = Σ initial_balance + prior net (payment_date < from).\n // Select '*' so this still works before the fee_amount migration lands (fee → 0).\n const { data: priorRows } = await scopeFilter(pub.from(T.movements)\n .select('*')\n .neq('status', 'cancelled')\n .lt('payment_date', query.dateRange.from))\n const priorNet = (priorRows ?? []).reduce((s: number, r: any) => s + netOf(r), 0)\n const openingBalance = round2(initialSum + priorNet)\n\n // 3. In-range realized rows.\n const { data: movs } = await scopeFilter(pub.from(T.movements)\n .select('*')\n .neq('status', 'cancelled')\n .gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n .order('payment_date').order('created_at'))\n\n // 4. Join invoices for descriptions.\n const invoiceIds = [...new Set((movs ?? []).map((r: any) => r.invoice_id).filter(Boolean))]\n const invoiceById = new Map<string, Invoice>()\n if (invoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, party_id, reference_number, metadata').in('id', invoiceIds)\n for (const o of (orders ?? []) as any[]) {\n invoiceById.set(o.id, { id: o.id, contactId: o.party_id, contactName: (o.metadata as any)?.contactName, fiscalNumber: o.reference_number } as Invoice)\n }\n }\n\n // 5. Build entries with running NET balance.\n let balance = openingBalance\n let totalCredits = 0, totalDebits = 0, totalFees = 0\n const entries: StatementEntry[] = (movs ?? []).map((r: any) => {\n const movement = snakeToCamel(r) as unknown as FinancialMovement\n const gross = Number(r.paid_amount) || 0\n const isCredit = r.direction === 'credit'\n const fee = isCredit ? (Number(r.fee_amount) || 0) : 0\n const net = isCredit ? round2(gross - fee) : gross\n const meta = (r.metadata ?? {}) as any\n const isTransfer = r.movement_kind === 'transfer'\n const entryKind: StatementEntry['entryKind'] = isTransfer\n ? (meta.transferRole === 'in' ? 'transfer-in' : 'transfer-out')\n : 'movement'\n const counterAccountId = isTransfer ? meta.counterAccountId : undefined\n if (isCredit) balance = round2(balance + net)\n else balance = round2(balance - net)\n // Exclude internal transfers from consolidated totals (they net to zero across accounts).\n if (!(consolidated && isTransfer)) {\n if (isCredit) totalCredits = round2(totalCredits + net)\n else totalDebits = round2(totalDebits + net)\n totalFees = round2(totalFees + fee)\n }\n return {\n movement,\n invoice: r.invoice_id ? invoiceById.get(r.invoice_id) : undefined,\n runningBalance: balance,\n gross, fee, net, entryKind,\n counterAccountId,\n counterAccountName: counterAccountId ? accountNameById.get(counterAccountId) : undefined,\n }\n })\n\n // 5b. Resolve the reconciliation counterpart for matched bank lines, so the\n // extract row can link to the internal transaction it was conciliated with.\n const matchedIds = [...new Set(entries.map((e) => e.movement.matchedMovementId).filter(Boolean))] as string[]\n if (matchedIds.length) {\n const { data: matched } = await pub.from(T.movements).select('id, invoice_id, notes').in('id', matchedIds)\n const matchedById = new Map<string, any>((matched ?? []).map((m: any) => [m.id, m]))\n const matchedInvoiceIds = [...new Set((matched ?? []).map((m: any) => m.invoice_id).filter(Boolean))] as string[]\n const invById = new Map<string, any>()\n if (matchedInvoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, reference_number, metadata').in('id', matchedInvoiceIds)\n for (const o of (orders ?? []) as any[]) invById.set(o.id, o)\n }\n for (const e of entries) {\n const mid = e.movement.matchedMovementId\n const mm = mid ? matchedById.get(mid) : undefined\n if (!mm) continue\n const inv = mm.invoice_id ? invById.get(mm.invoice_id) : undefined\n e.reconciledWith = {\n movementId: mm.id,\n description: mm.notes ?? undefined,\n invoiceId: mm.invoice_id ?? undefined,\n fiscalNumber: inv?.reference_number ?? undefined,\n contactName: (inv?.metadata as any)?.contactName ?? undefined,\n }\n }\n }\n\n // 6. Account current balance (ledger as-of-today).\n const { data: todayRows } = await scopeFilter(pub.from(T.movements)\n .select('*')\n .neq('status', 'cancelled')\n .lte('payment_date', today))\n const accountCurrentBalance = round2(initialSum + (todayRows ?? []).reduce((s: number, r: any) => s + netOf(r), 0))\n\n return {\n entries,\n openingBalance,\n closingBalance: balance,\n totalCredits,\n totalDebits,\n totalFees,\n net: round2(totalCredits - totalDebits),\n accountId: query.bankAccountId,\n accountCurrentBalance,\n }\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n // Sweep overdue on first load (background, non-blocking)\n sweepOverdue()\n const { core, pub } = getClients()\n const { data: accounts } = await pub.from(T.bankAccounts).select('current_balance').eq('is_active', true)\n const totalBalance = (accounts ?? []).reduce((s: number, a: any) => s + (a.current_balance ?? 0), 0)\n\n const { data: movs } = await pub.from(T.movements).select('direction, movement_kind, amount, paid_amount, status, due_date, payment_date')\n const allMovs = movs ?? []\n const unpaid = allMovs.filter((m: any) => ['pending', 'partial', 'overdue'].includes(m.status))\n const today = new Date().toISOString().slice(0, 10)\n\n const unpaidCredit = unpaid.filter((m: any) => m.direction === 'credit')\n const unpaidDebit = unpaid.filter((m: any) => m.direction === 'debit')\n const overdueCredit = unpaidCredit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n const overdueDebit = unpaidDebit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n\n // Monthly cash flow = a trailing 30-day rolling window (not calendar\n // month-to-date, which reads empty in the first days of a month).\n const monthAgo = new Date()\n monthAgo.setDate(monthAgo.getDate() - 30)\n const monthStart = monthAgo.toISOString().slice(0, 10)\n // Monthly cash flow = payment cash events (one row per payment), never bills.\n const monthPaid = allMovs.filter((m: any) => m.movement_kind === 'payment' && m.payment_date >= monthStart)\n\n return {\n totalBalance,\n totalReceivable: unpaidCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n totalPayable: unpaidDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n monthlyInflow: monthPaid.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n monthlyOutflow: monthPaid.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n overdueReceivableCount: overdueCredit.length,\n overdueReceivableAmount: overdueCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n overduePayableCount: overdueDebit.length,\n overduePayableAmount: overdueDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n }\n },\n\n // --- Reconciliation (conciliação) ---\n // Imported bank-statement lines live in financial_movements tagged with\n // (external_source, external_id), status='paid'. Reconciling links a line\n // to the internal movement it settles (or accepts it standalone).\n async importBankTransactions(input) {\n const { pub } = getClients()\n const tenantId = getTenantId()\n let imported = 0, duplicates = 0\n for (const line of input.lines) {\n const { error } = await pub.from(T.movements).insert({\n tenant_id: tenantId,\n direction: line.direction,\n movement_kind: 'payment',\n amount: line.amount,\n paid_amount: line.amount,\n status: 'paid',\n due_date: line.date,\n payment_date: line.date,\n bank_account_id: line.bankAccountId ?? input.bankAccountId ?? null,\n notes: line.description,\n external_id: line.externalId,\n external_source: line.externalSource,\n })\n if (error) {\n // 23505 = unique violation on uq_financial_movements_external → already imported.\n if ((error as any).code === '23505') duplicates++\n else throw error\n } else imported++\n }\n return { imported, duplicates }\n },\n\n async getUnreconciled(query) {\n const { pub } = getClients()\n let qb = pub.from(T.movements).select('*')\n .not('external_source', 'is', null)\n .is('reconciled_at', null)\n if (query?.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)\n if (query?.dateRange) qb = qb.gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n const { data } = await qb.order('payment_date', { ascending: false })\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as FinancialMovement)\n },\n\n async suggestReconciliation(bankMovementId) {\n const { core, pub } = getClients()\n const { data: line } = await pub.from(T.movements).select('*').eq('id', bankMovementId).single()\n if (!line) return []\n const amount = Number(line.amount) || 0\n const lineDate = line.payment_date ?? line.due_date\n // Candidates: app-native (non-imported), same direction, not reconciled, amount within ±2%.\n const tol = Math.max(0.01, round2(amount * 0.02))\n const { data } = await pub.from(T.movements).select('*')\n .is('external_source', null)\n .is('reconciled_at', null)\n .eq('direction', line.direction)\n .gte('amount', round2(amount - tol))\n .lte('amount', round2(amount + tol))\n .neq('id', bankMovementId)\n .limit(25)\n const candidates = ((data ?? []) as any[]).map((r) => {\n const amtDiff = Math.abs((Number(r.amount) || 0) - amount)\n const amtScore = amount > 0 ? Math.max(0, 1 - amtDiff / amount) : 0\n const refDate = r.due_date ?? r.payment_date\n const days = lineDate && refDate\n ? Math.abs((new Date(lineDate).getTime() - new Date(refDate).getTime()) / 86400000)\n : 30\n const dateScore = Math.max(0, 1 - days / 30)\n return {\n movement: snakeToCamel(r) as unknown as FinancialMovement,\n score: round2(0.7 * amtScore + 0.3 * dateScore),\n } as ReconciliationCandidate\n }).sort((a, b) => b.score - a.score)\n // Attach invoice contact names for display.\n const invoiceIds = [...new Set(candidates.map((c) => c.movement.invoiceId).filter(Boolean))] as string[]\n if (invoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, reference_number, metadata').in('id', invoiceIds)\n const byId = new Map<string, any>((orders ?? []).map((o: any) => [o.id, o]))\n for (const c of candidates) {\n const o = c.movement.invoiceId ? byId.get(c.movement.invoiceId) : undefined\n if (o) c.invoice = { id: o.id, contactName: (o.metadata as any)?.contactName, fiscalNumber: o.reference_number } as Invoice\n }\n }\n return candidates\n },\n\n async reconcileMovement(input) {\n const { pub } = getClients()\n const now = new Date().toISOString()\n await pub.from(T.movements).update({\n reconciled_at: now,\n matched_movement_id: input.matchedMovementId ?? null,\n }).eq('id', input.bankMovementId)\n if (input.matchedMovementId) {\n // The internal movement is now settled+reconciled by the bank line.\n await pub.from(T.movements).update({ reconciled_at: now }).eq('id', input.matchedMovementId)\n }\n },\n\n async unreconcileMovement(bankMovementId) {\n const { pub } = getClients()\n const { data: line } = await pub.from(T.movements).select('matched_movement_id').eq('id', bankMovementId).single()\n await pub.from(T.movements).update({ reconciled_at: null, matched_movement_id: null }).eq('id', bankMovementId)\n if (line?.matched_movement_id) {\n await pub.from(T.movements).update({ reconciled_at: null }).eq('id', line.matched_movement_id)\n }\n },\n }\n\n return provider\n}\n","import { createStore, type StoreApi } from 'zustand/vanilla'\nimport { dedup } from '@fayz-ai/saas'\nimport { toast } from '@fayz-ai/ui'\nimport type { FinancialDataProvider } from './data/types'\nimport type {\n Invoice, FinancialMovement, BankAccount, CashSession,\n PaymentMethod, PaymentMethodType, CardTransaction,\n FinancialSummary, StatementResult,\n InvoiceQuery, MovementQuery, StatementQuery,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput,\n OpenCashSessionInput, CloseCashSessionInput,\n QuickTransactionInput,\n DateRange,\n} from './types'\n\n// ---------------------------------------------------------------------------\n// Store state\n// ---------------------------------------------------------------------------\n\nexport interface FinancialUIState {\n // Data cache\n invoices: Invoice[]\n invoicesTotal: number\n invoicesLoading: boolean\n invoiceQuery: InvoiceQuery\n\n movements: FinancialMovement[]\n movementsTotal: number\n movementsLoading: boolean\n\n bankAccounts: BankAccount[]\n bankAccountsLoading: boolean\n\n cashSessions: CashSession[]\n cashSessionsLoading: boolean\n\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n\n summary: FinancialSummary | null\n summaryLoading: boolean\n\n statement: StatementResult | null\n statementLoading: boolean\n statementQuery: StatementQuery | null\n\n cardTransactions: CardTransaction[]\n cardsLoading: boolean\n\n // Actions\n fetchSummary(dateRange?: DateRange): Promise<void>\n fetchInvoices(query: InvoiceQuery): Promise<void>\n fetchBankAccounts(): Promise<void>\n fetchCashSessions(bankAccountId?: string): Promise<void>\n fetchPaymentMethods(): Promise<void>\n fetchStatement(query: StatementQuery): Promise<void>\n fetchCardTransactions(dateRange?: DateRange): Promise<void>\n createInvoice(input: CreateInvoiceInput): Promise<Invoice>\n /** FAY-1225 \"log money in a few taps\": one call → the right provider plumbing + full surface refresh. */\n createQuickTransaction(input: QuickTransactionInput): Promise<void>\n payMovement(input: PayMovementInput): Promise<void>\n createTransfer(input: CreateTransferInput): Promise<void>\n cancelInvoice(invoiceId: string): Promise<void>\n openCashSession(input: OpenCashSessionInput): Promise<CashSession>\n closeCashSession(input: CloseCashSessionInput): Promise<CashSession>\n}\n\n// ---------------------------------------------------------------------------\n// Store factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialStore(provider: FinancialDataProvider): StoreApi<FinancialUIState> {\n return createStore<FinancialUIState>((set, get) => ({\n invoices: [],\n invoicesTotal: 0,\n invoicesLoading: false,\n invoiceQuery: {},\n\n movements: [],\n movementsTotal: 0,\n movementsLoading: false,\n\n bankAccounts: [],\n bankAccountsLoading: false,\n\n cashSessions: [],\n cashSessionsLoading: false,\n\n paymentMethods: [],\n paymentMethodTypes: [],\n\n summary: null,\n summaryLoading: false,\n\n statement: null,\n statementLoading: false,\n statementQuery: null,\n\n cardTransactions: [],\n cardsLoading: false,\n\n async fetchSummary(dateRange) {\n return dedup('fin:summary', async () => {\n set({ summaryLoading: true })\n const summary = await provider.getSummary(dateRange)\n set({ summary, summaryLoading: false })\n })\n },\n\n async fetchInvoices(query) {\n return dedup('fin:invoices:' + JSON.stringify(query), async () => {\n set({ invoicesLoading: true, invoiceQuery: query })\n const result = await provider.getInvoices(query)\n set({ invoices: result.data, invoicesTotal: result.total, invoicesLoading: false })\n })\n },\n\n async fetchBankAccounts() {\n return dedup('fin:bankAccounts', async () => {\n set({ bankAccountsLoading: true })\n const bankAccounts = await provider.getBankAccounts()\n set({ bankAccounts, bankAccountsLoading: false })\n })\n },\n\n async fetchCashSessions(bankAccountId) {\n return dedup('fin:cashSessions:' + (bankAccountId ?? ''), async () => {\n set({ cashSessionsLoading: true })\n const cashSessions = await provider.getCashSessions(bankAccountId)\n set({ cashSessions, cashSessionsLoading: false })\n })\n },\n\n async fetchPaymentMethods() {\n return dedup('fin:paymentMethods', async () => {\n const [paymentMethods, paymentMethodTypes] = await Promise.all([\n provider.getPaymentMethods(),\n provider.getPaymentMethodTypes(),\n ])\n set({ paymentMethods, paymentMethodTypes })\n })\n },\n\n async fetchStatement(query) {\n return dedup('fin:statement:' + JSON.stringify(query), async () => {\n set({ statementLoading: true, statementQuery: query })\n const statement = await provider.getStatement(query)\n set({ statement, statementLoading: false })\n })\n },\n\n async fetchCardTransactions(dateRange) {\n return dedup('fin:cards', async () => {\n set({ cardsLoading: true })\n const cardTransactions = await provider.getCardTransactions(dateRange)\n set({ cardTransactions, cardsLoading: false })\n })\n },\n\n async createInvoice(input) {\n try {\n const invoice = await provider.createInvoice(input)\n const query = get().invoiceQuery\n const result = await provider.getInvoices(query)\n const summary = await provider.getSummary()\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice created')\n return invoice\n } catch (err: any) {\n toast.error('Failed to create invoice', { description: err?.message })\n throw err\n }\n },\n\n async createQuickTransaction(input) {\n try {\n if (input.type === 'transfer') {\n if (!input.bankAccountId || !input.toAccountId) {\n throw new Error('Select source and destination accounts')\n }\n await provider.createTransfer({\n fromAccountId: input.bankAccountId,\n toAccountId: input.toAccountId,\n amount: input.amount,\n date: input.date,\n notes: input.description?.trim() || undefined,\n })\n } else {\n const direction: 'debit' | 'credit' = input.type === 'income' ? 'credit' : 'debit'\n const desc = input.description?.trim() || (input.type === 'income' ? 'Receita' : 'Despesa')\n // 1. The obligation (invoice + bill movement).\n // Persist the recurring flag + the snapped-receipt data URL (FAY-1226)\n // on the invoice metadata so the transaction feed can indicate/preview it.\n const invoiceMeta: Record<string, unknown> = {}\n if (input.recurring) invoiceMeta.recurring = true\n if (input.receiptUrl) invoiceMeta.receiptUrl = input.receiptUrl\n const invoice = await provider.createInvoice({\n direction,\n invoiceDate: input.date,\n contactName: desc,\n metadata: Object.keys(invoiceMeta).length > 0 ? invoiceMeta : undefined,\n items: [{\n itemKind: 'other',\n description: desc,\n quantity: 1,\n unitPrice: input.amount,\n accountId: input.categoryId,\n }],\n installments: [{\n direction,\n movementKind: 'bill',\n amount: input.amount,\n dueDate: input.date,\n installmentNumber: 1,\n bankAccountId: input.bankAccountId,\n notes: desc,\n }],\n })\n // 2. Settle it now when marked paid → a realized cash event that shows in\n // the statement/extract and feeds the monthly cash-flow KPIs.\n if (input.paid) {\n const movements = await provider.getMovements({ direction, status: 'pending' })\n const bill = movements.data.find((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n if (bill) {\n await provider.payMovement({\n movementId: bill.id,\n amount: input.amount,\n paymentDate: input.date,\n bankAccountId: input.bankAccountId,\n notes: desc,\n })\n }\n }\n }\n // Refresh every surface this store feeds: Home/Resumo KPIs (summary),\n // the mobile transaction list (statement), balances, and the payables/\n // receivables tables (invoices).\n const invoiceQuery = get().invoiceQuery\n const statementQuery = get().statementQuery\n const [summary, bankAccounts, invoicesRes, statement] = await Promise.all([\n provider.getSummary(),\n provider.getBankAccounts(),\n provider.getInvoices(invoiceQuery),\n statementQuery ? provider.getStatement(statementQuery) : Promise.resolve(get().statement),\n ])\n set({\n summary,\n bankAccounts,\n invoices: invoicesRes.data,\n invoicesTotal: invoicesRes.total,\n statement,\n })\n toast.success('Transaction saved')\n } catch (err: any) {\n toast.error('Failed to save transaction', { description: err?.message })\n throw err\n }\n },\n\n async payMovement(input) {\n try {\n await provider.payMovement(input)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Payment recorded')\n } catch (err: any) {\n toast.error('Failed to record payment', { description: err?.message })\n throw err\n }\n },\n\n async createTransfer(input) {\n try {\n await provider.createTransfer(input)\n const query = get().statementQuery\n const [bankAccounts, summary, statement] = await Promise.all([\n provider.getBankAccounts(),\n provider.getSummary(),\n query ? provider.getStatement(query) : Promise.resolve(get().statement),\n ])\n set({ bankAccounts, summary, statement })\n toast.success('Transfer recorded')\n } catch (err: any) {\n toast.error('Failed to record transfer', { description: err?.message })\n throw err\n }\n },\n\n async cancelInvoice(invoiceId) {\n try {\n await provider.cancelInvoice(invoiceId)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice cancelled')\n } catch (err: any) {\n toast.error('Failed to cancel invoice', { description: err?.message })\n throw err\n }\n },\n\n async openCashSession(input) {\n try {\n const session = await provider.openCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session opened')\n return session\n } catch (err: any) {\n toast.error('Failed to open session', { description: err?.message })\n throw err\n }\n },\n\n async closeCashSession(input) {\n try {\n const session = await provider.closeCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session closed')\n return session\n } catch (err: any) {\n toast.error('Failed to close session', { description: err?.message })\n throw err\n }\n },\n }))\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { T } from './data/tables'\n\n// ---------------------------------------------------------------------------\n// Payment Method Types (seeded — Cash, PIX, Credit Card, etc.)\n// ---------------------------------------------------------------------------\n\nconst paymentMethodTypeEntity: EntityDef = {\n name: 'Payment Type',\n namePlural: 'Payment Types',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'transactionType', label: 'Transaction Type', type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check', 'voucher'], showInTable: true, required: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.paymentMethodTypes, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Payment Methods (user-created — e.g. \"Visa 2x\", \"PIX Store\")\n// ---------------------------------------------------------------------------\n\nconst paymentMethodEntity: EntityDef = {\n name: 'Payment Method',\n namePlural: 'Payment Methods',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n // FK to the seeded payment_method_types catalog — load real ids at runtime\n // (a static enum select would write the string into the uuid column).\n { key: 'paymentMethodTypeId', label: 'Type', type: 'relation', relation: { table: T.paymentMethodTypes, labelField: 'name' }, showInTable: true, required: true },\n { key: 'discountValue', label: 'Discount %', type: 'number', showInTable: true },\n { key: 'interestValue', label: 'Interest %', type: 'number', showInTable: true },\n { key: 'minInstallments', label: 'Min Installments', type: 'number', defaultValue: 1 },\n { key: 'maxInstallments', label: 'Max Installments', type: 'number', defaultValue: 1, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.paymentMethods, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Chart of Accounts (tree structure)\n// ---------------------------------------------------------------------------\n\nconst chartOfAccountsEntity: EntityDef = {\n name: 'Ledger Account',\n namePlural: 'Chart of Accounts',\n icon: 'BookOpen',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'nodeType', label: 'Type', type: 'select', options: ['group', 'leaf'], showInTable: true, required: true, defaultValue: 'leaf' },\n { key: 'parentId', label: 'Parent', type: 'text', showInTable: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.chartOfAccounts, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Cost Centers\n// ---------------------------------------------------------------------------\n\nconst costCenterEntity: EntityDef = {\n name: 'Cost Center',\n namePlural: 'Cost Centers',\n icon: 'Target',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.costCenters, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Bank Accounts (physical cash, bank, credit card, digital wallet)\n// ---------------------------------------------------------------------------\n\nconst bankAccountEntity: EntityDef = {\n name: 'Bank Account',\n namePlural: 'Bank Accounts',\n icon: 'Landmark',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'accountType', label: 'Type', type: 'select', options: [\n { label: 'Bank Account', value: 'bank_account' },\n { label: 'Cash Register', value: 'cash_register' },\n { label: 'Credit Card', value: 'credit_card' },\n { label: 'Digital Wallet', value: 'digital_wallet' },\n ], showInTable: true, required: true },\n { key: 'bankName', label: 'Bank', type: 'text', showInTable: true },\n { key: 'accountNumber', label: 'Account Number', type: 'text' },\n { key: 'agencyNumber', label: 'Agency', type: 'text' },\n { key: 'initialBalance', label: 'Initial Balance', type: 'currency', defaultValue: 0 },\n { key: 'creditLimit', label: 'Credit Limit', type: 'currency' },\n { key: 'closingDay', label: 'Closing Day', type: 'number' },\n { key: 'dueDay', label: 'Due Day', type: 'number' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.bankAccounts, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Card Brands (seeded)\n// ---------------------------------------------------------------------------\n\nconst cardBrandEntity: EntityDef = {\n name: 'Card Brand',\n namePlural: 'Card Brands',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.cardBrands, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Commission Rules\n// ---------------------------------------------------------------------------\n\nconst commissionRuleEntity: EntityDef = {\n name: 'Commission Rule',\n namePlural: 'Commission Rules',\n icon: 'TrendingUp',\n displayField: 'name',\n defaultSort: 'priority',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'priority', label: 'Priority', type: 'number', required: true, showInTable: true, defaultValue: 1 },\n { key: 'valueType', label: 'Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, defaultValue: 'percentage' },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'description', label: 'Description', type: 'textarea' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'commission_rules', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Tables\n// ---------------------------------------------------------------------------\n\nconst priceTableEntity: EntityDef = {\n name: 'Price Table',\n namePlural: 'Price Tables',\n icon: 'Tag',\n displayField: 'description',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'description', label: 'Description', type: 'text', required: true, showInTable: true },\n { key: 'type', label: 'Type', type: 'select', options: ['sale', 'cost'], required: true, showInTable: true, defaultValue: 'sale' },\n { key: 'validFrom', label: 'Valid From', type: 'date', showInTable: true },\n { key: 'validUntil', label: 'Valid Until', type: 'date', showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_tables', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Variations\n// ---------------------------------------------------------------------------\n\nconst priceVariationEntity: EntityDef = {\n name: 'Price Variation',\n namePlural: 'Price Variations',\n icon: 'Percent',\n displayField: 'name',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'variationType', label: 'Type', type: 'select', options: ['discount', 'increase'], required: true, showInTable: true },\n { key: 'valueType', label: 'Value Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'firstAppointmentOnly', label: 'First Appointment Only', type: 'boolean', defaultValue: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_variations', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Export all registries\n// ---------------------------------------------------------------------------\n\nexport const financialRegistries: PluginRegistryDef[] = [\n // --- Editable registries (user manages) ---\n {\n id: 'payment-methods',\n entity: paymentMethodEntity,\n icon: 'Wallet',\n description: 'Configured payment methods with fees and installment rules',\n display: 'table',\n },\n {\n id: 'chart-of-accounts',\n entity: chartOfAccountsEntity,\n icon: 'BookOpen',\n description: 'Hierarchical chart of accounts for categorizing transactions',\n display: 'tree',\n seedData: [\n { id: 'coa-1', code: '1', name: 'Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-1.1', code: '1.1', name: 'Sales Revenue', nodeType: 'group', parentId: 'coa-1', isActive: true },\n { id: 'coa-1.1.01', code: '1.1.01', name: 'Services', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-1.1.02', code: '1.1.02', name: 'Products', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-2', code: '2', name: 'Other Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-2.1', code: '2.1', name: 'Financial Income', nodeType: 'leaf', parentId: 'coa-2', isActive: true },\n { id: 'coa-3', code: '3', name: 'Operational Costs', nodeType: 'group', isActive: true },\n { id: 'coa-3.1', code: '3.1', name: 'Materials & Supplies', nodeType: 'group', parentId: 'coa-3', isActive: true },\n { id: 'coa-3.1.01', code: '3.1.01', name: 'Raw Materials', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-3.1.02', code: '3.1.02', name: 'Consumables', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-4', code: '4', name: 'Expenses', nodeType: 'group', isActive: true },\n { id: 'coa-4.1', code: '4.1', name: 'Rent', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.2', code: '4.2', name: 'Utilities', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.3', code: '4.3', name: 'Payroll', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n ],\n },\n {\n id: 'cost-centers',\n entity: costCenterEntity,\n icon: 'Target',\n description: 'Cost centers for expense tracking and departmental budgets',\n display: 'table',\n seedData: [\n { id: 'cc-001', code: '001', name: 'General', isActive: true },\n ],\n },\n {\n id: 'bank-accounts',\n entity: bankAccountEntity,\n icon: 'Landmark',\n description: 'Bank accounts, cash registers, credit cards, and digital wallets',\n display: 'table',\n },\n {\n id: 'commission-rules',\n entity: commissionRuleEntity,\n icon: 'TrendingUp',\n description: 'Commission rules for service and product revenue sharing',\n display: 'table',\n },\n {\n id: 'price-tables',\n entity: priceTableEntity,\n icon: 'Tag',\n description: 'Price tables for sale and cost pricing',\n display: 'table',\n },\n {\n id: 'price-variations',\n entity: priceVariationEntity,\n icon: 'Percent',\n description: 'Discount and surcharge rules for pricing',\n display: 'table',\n },\n // --- Read-only registries (system / seeded data) ---\n {\n id: 'payment-method-types',\n entity: paymentMethodTypeEntity,\n icon: 'CreditCard',\n description: 'System payment types (cash, card, PIX, etc.)',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'pmt-cash', name: 'Cash', transactionType: 'cash', isActive: true },\n { id: 'pmt-pix', name: 'PIX', transactionType: 'pix', isActive: true },\n { id: 'pmt-credit', name: 'Credit Card', transactionType: 'credit_card', isActive: true },\n { id: 'pmt-debit', name: 'Debit Card', transactionType: 'debit_card', isActive: true },\n { id: 'pmt-transfer', name: 'Bank Transfer', transactionType: 'bank_transfer', isActive: true },\n { id: 'pmt-check', name: 'Check', transactionType: 'check', isActive: true },\n ],\n },\n {\n id: 'card-brands',\n entity: cardBrandEntity,\n icon: 'CreditCard',\n description: 'Credit and debit card brands',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'cb-visa', name: 'Visa', isActive: true },\n { id: 'cb-mastercard', name: 'Mastercard', isActive: true },\n { id: 'cb-amex', name: 'American Express', isActive: true },\n { id: 'cb-elo', name: 'Elo', isActive: true },\n { id: 'cb-hipercard', name: 'Hipercard', isActive: true },\n { id: 'cb-diners', name: 'Diners Club', isActive: true },\n { id: 'cb-discover', name: 'Discover', isActive: true },\n { id: 'cb-jcb', name: 'JCB', isActive: true },\n { id: 'cb-aura', name: 'Aura', isActive: true },\n { id: 'cb-hiper', name: 'Hiper', isActive: true },\n ],\n },\n]\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"financial.cards.addExpense\": \"Add expense\",\n \"financial.cards.allBillsValue\": \"All bills value\",\n \"financial.cards.availableLimit\": \"Available limit\",\n \"financial.cards.currentBill\": \"Current bill\",\n \"financial.cards.dueOn\": \"Due on the {{day}}\",\n \"financial.cards.installment\": \"Installment {{current}}/{{total}}\",\n \"financial.cards.noCards\": \"No cards yet\",\n \"financial.cards.noCardsHint\": \"Add a credit card in settings to track your bills here\",\n \"financial.cards.noTransactions\": \"No card transactions\",\n \"financial.cards.tabClosed\": \"Closed\",\n \"financial.cards.tabOpen\": \"Open\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% of limit used\",\n \"financial.cards.pending\": \"Pending\",\n \"financial.cards.received\": \"Received\",\n \"financial.cards.subtitle\": \"Credit and debit card transactions\",\n \"financial.cards.title\": \"Cards\",\n \"financial.cards.transactions\": \"({{count}} transactions)\",\n \"financial.cards.transactionsAppear\": \"Card transactions will appear here when payments are made via credit/debit cards\",\n \"financial.cashRegisters.addNotes\": \"Add notes\",\n \"financial.cashRegisters.back\": \"Back\",\n \"financial.cashRegisters.bills\": \"Bills\",\n \"financial.cashRegisters.closeSession\": \"Close Session\",\n \"financial.cashRegisters.closeThisSession\": \"Close this session\",\n \"financial.cashRegisters.closing\": \"Closing...\",\n \"financial.cashRegisters.closingBalance\": \"Closing Balance\",\n \"financial.cashRegisters.closingNotes\": \"Closing Notes\",\n \"financial.cashRegisters.coins\": \"Coins\",\n \"financial.cashRegisters.confirmOpen\": \"Confirm & Open\",\n \"financial.cashRegisters.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cashRegisters.count\": \"Count\",\n \"financial.cashRegisters.countBills\": \"Count Bills & Coins\",\n \"financial.cashRegisters.countedTotal\": \"Counted Total\",\n \"financial.cashRegisters.denominationCount\": \"Denomination count\",\n \"financial.cashRegisters.differenceFromOpening\": \"Difference from opening\",\n \"financial.cashRegisters.method\": \"Method\",\n \"financial.cashRegisters.noCashAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cashRegisters.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cashRegisters.openAnother\": \"Open another register\",\n \"financial.cashRegisters.openSession\": \"Open Session\",\n \"financial.cashRegisters.openSessions\": \"Open Sessions\",\n \"financial.cashRegisters.opened\": \"Opened\",\n \"financial.cashRegisters.opening\": \"Opening...\",\n \"financial.cashRegisters.openingBalance\": \"Opening Balance\",\n \"financial.cashRegisters.quickAmount\": \"Quick Amount\",\n \"financial.cashRegisters.register\": \"Register\",\n \"financial.cashRegisters.sessionHistory\": \"Session History\",\n \"financial.cashRegisters.subtitle\": \"Open, count and close cash sessions\",\n \"financial.commissions.comingSoon\": \"Coming soon\",\n \"financial.commissions.subtitle\": \"Team commissions\",\n \"financial.invoice.accountsPayable\": \"Accounts Payable\",\n \"financial.invoice.accountsReceivable\": \"Accounts Receivable\",\n \"financial.invoice.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoice.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled. This invoice will no longer count towards totals.\",\n \"financial.invoice.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoice.cancelling\": \"Cancelling...\",\n \"financial.invoice.contact\": \"Contact\",\n \"financial.invoice.createFirst\": \"Create your first invoice\",\n \"financial.invoice.date\": \"Date\",\n \"financial.invoice.booking\": \"Booking\",\n \"financial.invoice.discount\": \"Discount\",\n \"financial.invoice.due\": \"Due:\",\n \"financial.invoice.edit\": \"Edit Invoice\",\n \"financial.invoice.fullyPaid\": \"Fully paid\",\n \"financial.invoice.installments\": \"Installments\",\n \"financial.invoice.invoices\": \"{{count}} invoices\",\n \"financial.invoice.items\": \"Items\",\n \"financial.invoice.keepInvoice\": \"Keep Invoice\",\n \"financial.invoice.new\": \"New\",\n \"financial.invoice.noDetails\": \"No additional details recorded\",\n \"financial.invoice.noInstallments\": \"No installments\",\n \"financial.invoice.noInvoices\": \"No invoices yet\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Received\",\n \"financial.invoice.summaryReceivable\": \"Receivable\",\n \"financial.invoice.summaryPaid\": \"Paid\",\n \"financial.invoice.summaryPayable\": \"Payable\",\n \"financial.invoice.notFound\": \"Invoice not found\",\n \"financial.invoice.notFoundDesc\": \"This invoice could not be loaded.\",\n \"financial.invoice.notes\": \"Notes\",\n \"financial.invoice.paidLabel\": \"Paid:\",\n \"financial.invoice.paidOn\": \"Paid on:\",\n \"financial.invoice.pay\": \"Pay\",\n \"financial.invoice.paymentSchedule\": \"Payment Schedule\",\n \"financial.invoice.remaining\": \"Remaining:\",\n \"financial.invoice.searchPlaceholder\": \"Search by contact or description...\",\n \"financial.invoice.showing\": \"Showing {{shown}} of {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Surcharge\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.addFirstItem\": \"Add your first item\",\n \"financial.invoiceForm.addItem\": \"Add Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Add items first\",\n \"financial.invoiceForm.additionalNotes\": \"Additional notes...\",\n \"financial.invoiceForm.cancel\": \"Cancel\",\n \"financial.invoiceForm.close\": \"Close\",\n \"financial.invoiceForm.creating\": \"Creating new invoice\",\n \"financial.invoiceForm.date\": \"Date\",\n \"financial.invoiceForm.description\": \"Description\",\n \"financial.invoiceForm.discountSurcharge\": \"Discount / Surcharge\",\n \"financial.invoiceForm.done\": \"Done\",\n \"financial.invoiceForm.editing\": \"Editing invoice\",\n \"financial.invoiceForm.fiscalNumber\": \"Fiscal Number (optional)\",\n \"financial.invoiceForm.headquarters\": \"Headquarters\",\n \"financial.invoiceForm.installments\": \"Installments\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Item description\",\n \"financial.invoiceForm.items\": \"Items\",\n \"financial.invoiceForm.noDescription\": \"No description\",\n \"financial.invoiceForm.noItems\": \"No items added yet\",\n \"financial.invoiceForm.noUnitsFound\": \"No units found\",\n \"financial.invoiceForm.observations\": \"Observations\",\n \"financial.invoiceForm.payTo\": \"Pay to\",\n \"financial.invoiceForm.qty\": \"Qty\",\n \"financial.invoiceForm.receiveFrom\": \"Receive from\",\n \"financial.invoiceForm.save\": \"Save\",\n \"financial.invoiceForm.saving\": \"Saving...\",\n \"financial.invoiceForm.searchType\": \"Type to search...\",\n \"financial.invoiceForm.searchUnit\": \"Search unit...\",\n \"financial.invoiceForm.selectInstallments\": \"Select installment count above\",\n \"financial.invoiceForm.selectItemType\": \"Select item type:\",\n \"financial.invoiceForm.selectUnit\": \"Select unit\",\n \"financial.invoiceForm.selectUnitTitle\": \"Select Unit\",\n \"financial.invoiceForm.unit\": \"Unit\",\n \"financial.invoiceForm.unitPrice\": \"Unit Price\",\n \"financial.nav.cards\": \"Cards\",\n \"financial.nav.cashRegisters\": \"Cash Registers\",\n \"financial.nav.commissions\": \"Commissions\",\n \"financial.nav.list\": \"List\",\n \"financial.nav.new\": \"New\",\n \"financial.nav.overview\": \"Overview\",\n \"financial.nav.payables\": \"Accounts Payable\",\n \"financial.nav.receivables\": \"Accounts Receivable\",\n \"financial.nav.reconciliation\": \"Reconciliation\",\n \"financial.nav.recurringExpenses\": \"Recurring Expenses\",\n \"financial.nav.rules\": \"Rules\",\n \"financial.nav.statements\": \"Statements\",\n \"financial.nav.summary\": \"Summary\",\n \"financial.invoice.filterAccount\": \"Chart account\",\n \"financial.invoice.filterAllAccounts\": \"All accounts\",\n \"financial.invoice.filterCostCenter\": \"Cost center\",\n \"financial.invoice.filterAllCostCenters\": \"All cost centers\",\n \"financial.invoice.filterPeriod\": \"Period\",\n \"financial.invoice.filterAllPeriods\": \"All time\",\n \"financial.invoice.filterThisMonth\": \"This month\",\n \"financial.invoice.filterLastMonth\": \"Last month\",\n \"financial.invoice.filterLast30\": \"Last 30 days\",\n \"financial.invoice.filterThisYear\": \"This year\",\n \"financial.invoice.filterCustom\": \"Custom\",\n \"financial.invoice.filterFrom\": \"From\",\n \"financial.invoice.filterTo\": \"To\",\n \"financial.invoice.filterClear\": \"Clear\",\n \"financial.reconciliation.title\": \"Reconciliation\",\n \"financial.reconciliation.subtitle\": \"Match imported bank lines to your movements\",\n \"financial.reconciliation.pending\": \"{{count}} to reconcile\",\n \"financial.reconciliation.allDone\": \"All caught up\",\n \"financial.reconciliation.empty\": \"Nothing to reconcile\",\n \"financial.reconciliation.emptyHint\": \"Imported bank transactions will appear here for matching.\",\n \"financial.reconciliation.bankLines\": \"Bank lines\",\n \"financial.reconciliation.candidates\": \"Suggested matches\",\n \"financial.reconciliation.selectLine\": \"Select a bank line to see suggested matches\",\n \"financial.reconciliation.noCandidates\": \"No suggested matches for this line\",\n \"financial.reconciliation.match\": \"Match\",\n \"financial.reconciliation.accept\": \"Accept as new\",\n \"financial.reconciliation.acceptHint\": \"No internal counterpart — keep as a standalone entry\",\n \"financial.reconciliation.matchScore\": \"{{score}}% match\",\n \"financial.reconciliation.refresh\": \"Refresh\",\n \"financial.onboarding.back\": \"Back\",\n \"financial.onboarding.configureHint\": \"You can configure this in detail from the Settings gear icon inside the Financial module.\",\n \"financial.onboarding.getStarted\": \"Get Started\",\n \"financial.onboarding.next\": \"Next\",\n \"financial.onboarding.startUsing\": \"Start using Financial\",\n \"financial.onboarding.skip\": \"Skip setup\",\n \"financial.onboarding.welcome\": \"Welcome to Financial\",\n \"financial.onboarding.description\": \"Let's set up your financial module. This quick wizard will help you configure the essentials.\",\n \"financial.onboarding.accounts.title\": \"Bank Accounts\",\n \"financial.onboarding.accounts.description\": \"Add your bank accounts, cash registers, and credit cards. You can always add more later from Settings.\",\n \"financial.onboarding.payments.title\": \"Payment Methods\",\n \"financial.onboarding.payments.description\": \"Review which payment types you accept. Default types (Cash, PIX, Credit Card, etc.) are already set up.\",\n \"financial.onboarding.chart.title\": \"Chart of Accounts\",\n \"financial.onboarding.chart.description\": \"A default chart of accounts template has been created. You can customize it anytime from Settings.\",\n \"financial.page.newPayable\": \"New Payable\",\n \"financial.page.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.page.newReceivable\": \"New Receivable\",\n \"financial.page.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.page.openCash\": \"Open Cash Register\",\n \"financial.page.openCashDesc\": \"Start a new cash session\",\n \"financial.page.settingsSubtitle\": \"Preferences, payment methods, and accounts\",\n \"financial.page.settingsTitle\": \"Financial Settings\",\n \"financial.payment.amount\": \"Amount\",\n \"financial.payment.bankAccount\": \"Bank Account\",\n \"financial.payment.cancel\": \"Cancel\",\n \"financial.payment.card\": \"Card\",\n \"financial.payment.cardBrand\": \"Card Brand\",\n \"financial.payment.cardInstallments\": \"Installments\",\n \"financial.payment.date\": \"Date\",\n \"financial.payment.installment\": \"Installment #{{number}}\",\n \"financial.payment.method\": \"Payment Method\",\n \"financial.payment.notes\": \"Notes\",\n \"financial.payment.optionalNotes\": \"Optional notes...\",\n \"financial.payment.payAmount\": \"Pay {{amount}}\",\n \"financial.payment.processing\": \"Processing...\",\n \"financial.payment.remaining\": \"{{amount}} remaining\",\n \"financial.payment.select\": \"Select...\",\n \"financial.payment.selectAccount\": \"Select account...\",\n \"financial.payment.selectBrand\": \"Select brand...\",\n \"financial.payment.title\": \"Record Payment\",\n \"financial.settings.allowPartial\": \"Allow partial payments\",\n \"financial.settings.allowPartialDesc\": \"Accept payments less than the full installment amount\",\n \"financial.settings.autoClose\": \"Auto-close at end of day\",\n \"financial.settings.autoCloseDesc\": \"Remind to close open sessions at the end of business hours\",\n \"financial.settings.autoInstallments\": \"Auto-generate installments\",\n \"financial.settings.autoInstallmentsDesc\": \"Automatically split invoice total into equal installments\",\n \"financial.settings.cashRegister\": \"Cash Register\",\n \"financial.settings.cashRegisterDesc\": \"Cash session behavior\",\n \"financial.settings.dailySummary\": \"Daily financial summary\",\n \"financial.settings.dailySummaryDesc\": \"Send a daily email summary of receivables and payables\",\n \"financial.settings.invoices\": \"Invoices\",\n \"financial.settings.invoicesDesc\": \"How invoices and payments are handled\",\n \"financial.settings.notifications\": \"Notifications\",\n \"financial.settings.notificationsDesc\": \"Alerts and reminders\",\n \"financial.settings.overdueAlerts\": \"Overdue payment alerts\",\n \"financial.settings.overdueAlertsDesc\": \"Notify when invoices pass their due date\",\n \"financial.settings.requireDoc\": \"Require document number\",\n \"financial.settings.requireDocDesc\": \"Make document/invoice number mandatory on payments\",\n \"financial.settings.requireOpening\": \"Require opening balance\",\n \"financial.settings.requireOpeningDesc\": \"Opening balance must be confirmed before starting a session\",\n \"financial.settingsPage.subtitle\": \"Manage payment methods, accounts, and configurations\",\n \"financial.settingsPage.title\": \"Financial Settings\",\n \"financial.payment.noMethods\": \"No payment methods configured.\",\n \"financial.payment.configureMethods\": \"Set up payment methods\",\n \"financial.payment.noAccounts\": \"No compatible account. Create one in Settings.\",\n \"financial.payment.configureAccounts\": \"Set up accounts\",\n \"financial.statements.account\": \"Account\",\n \"financial.statements.from\": \"From\",\n \"financial.statements.noTransactions\": \"No transactions in this period\",\n \"financial.statements.selectAccount\": \"Select an account to view statement\",\n \"financial.statements.selectToView\": \"Select an account to view statement\",\n \"financial.statements.subtitle\": \"Bank account transactions and balances\",\n \"financial.statements.title\": \"Statements\",\n \"financial.statements.to\": \"To\",\n \"financial.summary.allAccounts\": \"All accounts\",\n \"financial.summary.cashFlow\": \"Cash Flow\",\n \"financial.summary.cashFlowBreakdown\": \"Cash Flow Breakdown\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Receivables vs. payables this month\",\n \"financial.summary.cashFlowSubtitle\": \"Monthly income vs expenses\",\n \"financial.summary.expenses\": \"Expenses\",\n \"financial.summary.income\": \"Income\",\n \"financial.summary.monthlyFlow\": \"Monthly Flow\",\n \"financial.summary.negativeBalance\": \"Negative balance\",\n \"financial.summary.net\": \"Net\",\n \"financial.summary.noOverdue\": \"No overdue transactions\",\n \"financial.summary.noTransactions\": \"No transactions yet\",\n \"financial.summary.overdue\": \"{{count}} overdue\",\n \"financial.summary.overduePayable\": \"Overdue payable\",\n \"financial.summary.overdueReceivable\": \"Overdue receivable\",\n \"financial.summary.overdueTitle\": \"Overdue\",\n \"financial.summary.paid\": \"Paid\",\n \"financial.summary.payable\": \"Payable\",\n \"financial.summary.positiveBalance\": \"Positive balance\",\n \"financial.summary.receivable\": \"Receivable\",\n \"financial.summary.received\": \"Received\",\n \"financial.summary.recentTransactions\": \"Recent Transactions\",\n \"financial.summary.totalBalance\": \"Total Balance\",\n \"financial.summary.transactionsAppear\": \"Transactions will appear here once recorded\",\n \"financial.summary.viewAll\": \"View all\",\n \"financial.summary.today\": \"Today\",\n \"financial.summary.yesterday\": \"Yesterday\",\n \"financial.summary.transactionsTitle\": \"Transactions\",\n \"financial.home.balance\": \"Balance\",\n \"financial.home.inflow\": \"Income\",\n \"financial.home.outflow\": \"Expenses\",\n \"financial.home.showBalance\": \"Show balance\",\n \"financial.home.hideBalance\": \"Hide balance\",\n \"financial.home.upcomingBills\": \"Upcoming bills\",\n \"financial.home.noBills\": \"No upcoming bills.\",\n \"financial.home.dueToday\": \"Due today\",\n \"financial.home.dueTomorrow\": \"Due tomorrow\",\n \"financial.home.dueInDays\": \"Due in {{count}} days\",\n \"financial.home.overdueDays\": \"Overdue by {{count}} days\",\n \"financial.home.cards\": \"Cards\",\n \"financial.home.currentBill\": \"Current bill\",\n \"financial.home.availableLimit\": \"Available limit\",\n \"financial.home.addCard\": \"New card\",\n \"financial.home.bill\": \"Bill\",\n \"financial.home.spendByCategory\": \"Spending by category\",\n \"financial.home.noSpend\": \"No spending this month.\",\n \"financial.home.category.groceries\": \"Groceries\",\n \"financial.home.category.transport\": \"Transport\",\n \"financial.home.category.subscriptions\": \"Subscriptions\",\n \"financial.home.category.dining\": \"Dining\",\n \"financial.home.category.home\": \"Home\",\n \"financial.home.category.health\": \"Health\",\n \"financial.home.category.leisure\": \"Leisure\",\n \"financial.home.category.shopping\": \"Shopping\",\n \"financial.home.category.other\": \"Other\",\n \"financial.quickActions.newPayable\": \"New Payable\",\n \"financial.quickActions.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.quickActions.newReceivable\": \"New Receivable\",\n \"financial.quickActions.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.quickActions.openCashRegister\": \"Open Cash Register\",\n \"financial.quickActions.openCashRegisterDesc\": \"Start a new cash session\",\n \"financial.cash.title\": \"Cash Registers\",\n \"financial.cash.subtitle\": \"Open, count and close cash sessions\",\n \"financial.cash.bills\": \"Bills\",\n \"financial.cash.coins\": \"Coins\",\n \"financial.cash.noAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cash.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cash.register\": \"Register\",\n \"financial.cash.openingBalance\": \"Opening Balance\",\n \"financial.cash.method\": \"Method\",\n \"financial.cash.denominationCount\": \"Denomination count\",\n \"financial.cash.notes\": \"Notes\",\n \"financial.cash.opening\": \"Opening...\",\n \"financial.cash.confirmAndOpen\": \"Confirm & Open\",\n \"financial.cash.quickAmount\": \"Quick Amount\",\n \"financial.cash.countBillsCoins\": \"Count Bills & Coins\",\n \"financial.cash.count\": \"Count\",\n \"financial.cash.countedTotal\": \"Counted Total\",\n \"financial.cash.addNotes\": \"Add notes\",\n \"financial.cash.openingObservations\": \"Opening observations...\",\n \"financial.cash.openSession\": \"Open Session\",\n \"financial.cash.closingBalance\": \"Closing Balance\",\n \"financial.cash.differenceFromOpening\": \"Difference from opening\",\n \"financial.cash.closingNotes\": \"Closing Notes\",\n \"financial.cash.closingObservations\": \"Closing observations...\",\n \"financial.cash.closing\": \"Closing...\",\n \"financial.cash.closeSession\": \"Close Session\",\n \"financial.cash.openSessions\": \"Open Sessions\",\n \"financial.cash.opened\": \"Opened\",\n \"financial.cash.by\": \"by\",\n \"financial.cash.closeThisSession\": \"Close this session\",\n \"financial.cash.sessionHistory\": \"Session History\",\n \"financial.cash.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cash.openLabel\": \"Open\",\n \"financial.cash.closeLabel\": \"Close\",\n \"financial.cash.diff\": \"Diff\",\n \"financial.cash.openAnother\": \"Open another register\",\n \"financial.invoice.statusOpen\": \"Open\",\n \"financial.invoice.statusPartial\": \"Partial\",\n \"financial.invoice.statusPaid\": \"Paid\",\n \"financial.invoice.statusOverdue\": \"Overdue\",\n \"financial.invoice.statusCancelled\": \"Cancelled\",\n \"financial.invoice.statusPending\": \"Pending\",\n \"financial.invoice.statusDraft\": \"Draft\",\n \"financial.invoice.columnDate\": \"Date\",\n \"financial.invoice.columnDescription\": \"Description\",\n \"financial.invoice.columnAmount\": \"Amount\",\n \"financial.invoice.columnPaid\": \"Paid\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Inst.\",\n \"financial.invoice.columnQty\": \"Qty\",\n \"financial.invoice.columnUnitPrice\": \"Unit Price\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Invoice\",\n \"financial.invoice.loading\": \"Loading...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoiceForm.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoiceForm.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled.\",\n \"financial.invoiceForm.keepInvoice\": \"Keep Invoice\",\n \"financial.invoiceForm.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.cancelling\": \"Cancelling...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remove adjustments\",\n \"financial.invoiceForm.discount\": \"Discount\",\n \"financial.invoiceForm.surcharge\": \"Surcharge\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Account\",\n \"financial.payment.due\": \"Due:\",\n \"financial.payment.paidAmount\": \"Paid:\",\n \"financial.payment.paidOn\": \"Paid on:\",\n \"financial.title\": \"Financial\",\n \"financial.summary.title\": \"Financial Summary\",\n \"financial.summary.revenue\": \"Revenue\",\n \"financial.invoice.title\": \"Invoices\",\n \"financial.invoice.create\": \"New Invoice\",\n \"financial.invoice.number\": \"Invoice #\",\n \"financial.invoice.client\": \"Client\",\n \"financial.invoice.amount\": \"Amount\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Due Date\",\n \"financial.invoice.addItem\": \"Add Item\",\n \"financial.invoice.tax\": \"Tax\",\n \"financial.invoice.save\": \"Save Invoice\",\n \"financial.invoice.saving\": \"Saving...\",\n \"financial.invoice.markPaid\": \"Mark as Paid\",\n \"financial.invoice.sendReminder\": \"Send Reminder\",\n \"financial.receivable.title\": \"Accounts Receivable\",\n \"financial.payable.title\": \"Accounts Payable\",\n \"financial.statements.loading\": \"Loading...\",\n \"financial.cards.empty\": \"No card transactions yet\",\n \"financial.commissions.title\": \"Commissions\",\n \"financial.cashRegister.title\": \"Cash Register\",\n \"financial.cashRegister.open\": \"Open Register\",\n \"financial.cashRegister.close\": \"Close Register\",\n \"financial.movements.title\": \"Movements\",\n \"financial.bankAccounts.title\": \"Bank Accounts\",\n \"financial.settings.title\": \"Financial Settings\",\n // Settings registry tabs\n \"registry.payment-methods\": \"Payment Methods\",\n \"registry.payment-methods.description\": \"Configured payment methods with fees and installment rules\",\n \"registry.bank-accounts\": \"Accounts\",\n \"registry.bank-accounts.description\": \"Bank accounts, cash registers, credit cards, and digital wallets\",\n \"registry.chart-of-accounts\": \"Chart of Accounts\",\n \"registry.chart-of-accounts.description\": \"Hierarchical chart of accounts for categorizing transactions\",\n \"registry.cost-centers\": \"Cost Centers\",\n \"registry.cost-centers.description\": \"Cost centers for expense tracking and departmental budgets\",\n \"registry.commission-rules\": \"Commission Rules\",\n \"registry.commission-rules.description\": \"Commission rules for service and product revenue sharing\",\n \"registry.price-tables\": \"Price Tables\",\n \"registry.price-tables.description\": \"Price tables for sale and cost pricing\",\n \"registry.price-variations\": \"Price Variations\",\n \"registry.price-variations.description\": \"Discount and surcharge rules for pricing\",\n \"registry.payment-method-types\": \"Payment Types\",\n \"registry.payment-method-types.description\": \"System payment types (cash, card, PIX, etc.)\",\n \"registry.card-brands\": \"Card Brands\",\n \"registry.card-brands.description\": \"Credit and debit card brands\",\n // Statements / extract\n \"financial.statements.columnDate\": \"Date\",\n \"financial.statements.columnDescription\": \"Description\",\n \"financial.statements.columnDebit\": \"Debit\",\n \"financial.statements.columnCredit\": \"Credit\",\n \"financial.statements.columnFee\": \"Fee\",\n \"financial.statements.columnBalance\": \"Balance\",\n \"financial.statements.columnMethod\": \"Method\",\n \"financial.statements.columnDoc\": \"Document\",\n \"financial.statements.installmentShort\": \"Inst. {{n}}\",\n \"financial.statements.viewInvoice\": \"View invoice\",\n \"financial.person.empty\": \"No financial activity for this contact yet\",\n \"financial.statements.opening\": \"Opening balance\",\n \"financial.statements.closing\": \"Closing balance\",\n \"financial.statements.currentBalance\": \"Current balance\",\n \"financial.statements.totalCredits\": \"Credits\",\n \"financial.statements.totalDebits\": \"Debits\",\n \"financial.statements.totalFees\": \"Fees\",\n \"financial.statements.net\": \"Net\",\n \"financial.statements.transfer\": \"Transfer\",\n \"financial.statements.reconciled\": \"Reconciled with the bank statement\",\n \"financial.statements.imported\": \"Imported from the bank · not reconciled\",\n \"financial.statements.reconciledWith\": \"Reconciled with {{ref}}\",\n \"financial.statements.newTransfer\": \"New Transfer\",\n // Transfer dialog\n \"financial.transfer.title\": \"Transfer Between Accounts\",\n \"financial.transfer.from\": \"From account\",\n \"financial.transfer.to\": \"To account\",\n \"financial.transfer.amount\": \"Amount\",\n \"financial.transfer.date\": \"Date\",\n \"financial.transfer.notes\": \"Notes\",\n \"financial.transfer.optionalNotes\": \"Optional notes...\",\n \"financial.transfer.selectAccount\": \"Select account...\",\n \"financial.transfer.submit\": \"Transfer\",\n \"financial.transfer.processing\": \"Transferring...\",\n \"financial.transfer.cancel\": \"Cancel\",\n \"financial.transfer.created\": \"Transfer recorded\",\n \"financial.transfer.failed\": \"Failed to record transfer\",\n \"financial.transfer.sameAccount\": \"Source and destination must differ\",\n \"financial.transfer.invalidAmount\": \"Amount must be greater than zero\",\n \"financial.quickTx.title\": \"New transaction\",\n \"financial.quickTx.close\": \"Close\",\n \"financial.quickTx.newTransaction\": \"New transaction\",\n \"financial.quickTx.expense\": \"Expense\",\n \"financial.quickTx.income\": \"Income\",\n \"financial.quickTx.transfer\": \"Transfer\",\n \"financial.quickTx.paid\": \"Paid\",\n \"financial.quickTx.received\": \"Received\",\n \"financial.quickTx.yes\": \"Yes\",\n \"financial.quickTx.no\": \"No\",\n \"financial.quickTx.category\": \"Category\",\n \"financial.quickTx.selectCategory\": \"No category\",\n \"financial.quickTx.account\": \"Account\",\n \"financial.quickTx.selectAccount\": \"Select account\",\n \"financial.quickTx.fromAccount\": \"From account\",\n \"financial.quickTx.toAccount\": \"To account\",\n \"financial.quickTx.card\": \"Card\",\n \"financial.quickTx.recurring\": \"Recurring\",\n \"financial.quickTx.attachment\": \"Attachment\",\n \"financial.quickTx.attachmentSoon\": \"Attachments coming soon\",\n \"financial.quickTx.receipt\": \"Receipt\",\n \"financial.quickTx.receiptCapture\": \"Snap or attach a receipt\",\n \"financial.quickTx.receiptAttached\": \"Receipt attached\",\n \"financial.quickTx.receiptReplace\": \"Replace\",\n \"financial.quickTx.receiptRemove\": \"Remove receipt\",\n \"financial.quickTx.receiptInvalid\": \"Please choose an image file\",\n \"financial.quickTx.sendReceipt\": \"Send receipt\",\n \"financial.quickTx.descriptionPlaceholder\": \"e.g. Groceries, Salary…\",\n \"financial.quickTx.enterAmount\": \"Enter an amount\",\n \"financial.quickTx.save\": \"Save\",\n \"financial.quickTx.saving\": \"Saving…\",\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"financial.cards.addExpense\": \"Adicionar despesa\",\n \"financial.cards.allBillsValue\": \"Total das faturas\",\n \"financial.cards.availableLimit\": \"Limite disponível\",\n \"financial.cards.currentBill\": \"Fatura atual\",\n \"financial.cards.dueOn\": \"Vence dia {{day}}\",\n \"financial.cards.installment\": \"Parcela {{current}}/{{total}}\",\n \"financial.cards.noCards\": \"Nenhum cartão cadastrado\",\n \"financial.cards.noCardsHint\": \"Adicione um cartão de crédito nas configurações para acompanhar suas faturas aqui\",\n \"financial.cards.noTransactions\": \"Nenhuma transação com cartão\",\n \"financial.cards.tabClosed\": \"Fechados\",\n \"financial.cards.tabOpen\": \"Abertos\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% do limite usado\",\n \"financial.cards.pending\": \"Pendente\",\n \"financial.cards.received\": \"Recebido\",\n \"financial.cards.subtitle\": \"Transações de cartão de crédito e débito\",\n \"financial.cards.title\": \"Cartões\",\n \"financial.cards.transactions\": \"({{count}} transações)\",\n \"financial.cards.transactionsAppear\": \"As transações com cartão aparecerão aqui quando pagamentos forem feitos via cartão de crédito/débito\",\n \"financial.cashRegisters.addNotes\": \"Adicionar observações\",\n \"financial.cashRegisters.back\": \"Voltar\",\n \"financial.cashRegisters.bills\": \"Notas\",\n \"financial.cashRegisters.closeSession\": \"Fechar Sessão\",\n \"financial.cashRegisters.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cashRegisters.closing\": \"Fechando...\",\n \"financial.cashRegisters.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cashRegisters.closingNotes\": \"Observações de Fechamento\",\n \"financial.cashRegisters.coins\": \"Moedas\",\n \"financial.cashRegisters.confirmOpen\": \"Confirmar e Abrir\",\n \"financial.cashRegisters.confirmOpening\": \"Confirmar Abertura do Caixa\",\n \"financial.cashRegisters.count\": \"Contagem\",\n \"financial.cashRegisters.countBills\": \"Contar Notas e Moedas\",\n \"financial.cashRegisters.countedTotal\": \"Total Contado\",\n \"financial.cashRegisters.denominationCount\": \"Contagem por denominação\",\n \"financial.cashRegisters.differenceFromOpening\": \"Diferença em relação à abertura\",\n \"financial.cashRegisters.method\": \"Método\",\n \"financial.cashRegisters.noCashAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cashRegisters.noClosedSessions\": \"Nenhuma sessão encerrada ainda\",\n \"financial.cashRegisters.openAnother\": \"Abrir outro caixa\",\n \"financial.cashRegisters.openSession\": \"Abrir Sessão\",\n \"financial.cashRegisters.openSessions\": \"Sessões Abertas\",\n \"financial.cashRegisters.opened\": \"Aberto\",\n \"financial.cashRegisters.opening\": \"Abrindo...\",\n \"financial.cashRegisters.openingBalance\": \"Saldo de Abertura\",\n \"financial.cashRegisters.quickAmount\": \"Valor Rápido\",\n \"financial.cashRegisters.register\": \"Caixa\",\n \"financial.cashRegisters.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cashRegisters.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.commissions.comingSoon\": \"Em breve\",\n \"financial.commissions.subtitle\": \"Comissões da equipe\",\n \"financial.invoice.accountsPayable\": \"Contas a Pagar\",\n \"financial.invoice.accountsReceivable\": \"Contas a Receber\",\n \"financial.invoice.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoice.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas. Esta fatura não contará mais nos totais.\",\n \"financial.invoice.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoice.cancelling\": \"Cancelando...\",\n \"financial.invoice.contact\": \"Contato\",\n \"financial.invoice.createFirst\": \"Crie sua primeira fatura\",\n \"financial.invoice.date\": \"Data\",\n \"financial.invoice.booking\": \"Agendamento\",\n \"financial.invoice.discount\": \"Desconto\",\n \"financial.invoice.due\": \"Vencimento:\",\n \"financial.invoice.edit\": \"Editar Fatura\",\n \"financial.invoice.fullyPaid\": \"Totalmente pago\",\n \"financial.invoice.installments\": \"Parcelas\",\n \"financial.invoice.invoices\": \"{{count}} faturas\",\n \"financial.invoice.items\": \"Itens\",\n \"financial.invoice.keepInvoice\": \"Manter Fatura\",\n \"financial.invoice.new\": \"Nova\",\n \"financial.invoice.noDetails\": \"Nenhum detalhe adicional registrado\",\n \"financial.invoice.noInstallments\": \"Sem parcelas\",\n \"financial.invoice.noInvoices\": \"Nenhuma fatura ainda\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Recebido\",\n \"financial.invoice.summaryReceivable\": \"A Receber\",\n \"financial.invoice.summaryPaid\": \"Pago\",\n \"financial.invoice.summaryPayable\": \"A Pagar\",\n \"financial.invoice.notFound\": \"Fatura não encontrada\",\n \"financial.invoice.notFoundDesc\": \"Esta fatura não pôde ser carregada.\",\n \"financial.invoice.notes\": \"Observações\",\n \"financial.invoice.paidLabel\": \"Pago:\",\n \"financial.invoice.paidOn\": \"Pago em:\",\n \"financial.invoice.pay\": \"Pagar\",\n \"financial.invoice.paymentSchedule\": \"Cronograma de Pagamento\",\n \"financial.invoice.remaining\": \"Restante:\",\n \"financial.invoice.searchPlaceholder\": \"Buscar por contato ou descrição...\",\n \"financial.invoice.showing\": \"Exibindo {{shown}} de {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Acréscimo\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.addFirstItem\": \"Adicione seu primeiro item\",\n \"financial.invoiceForm.addItem\": \"Adicionar Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Adicione itens primeiro\",\n \"financial.invoiceForm.additionalNotes\": \"Observações adicionais...\",\n \"financial.invoiceForm.cancel\": \"Cancelar\",\n \"financial.invoiceForm.close\": \"Fechar\",\n \"financial.invoiceForm.creating\": \"Criando nova fatura\",\n \"financial.invoiceForm.date\": \"Data\",\n \"financial.invoiceForm.description\": \"Descrição\",\n \"financial.invoiceForm.discountSurcharge\": \"Desconto / Acréscimo\",\n \"financial.invoiceForm.done\": \"Pronto\",\n \"financial.invoiceForm.editing\": \"Editando fatura\",\n \"financial.invoiceForm.fiscalNumber\": \"Número Fiscal (opcional)\",\n \"financial.invoiceForm.headquarters\": \"Sede\",\n \"financial.invoiceForm.installments\": \"Parcelas\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Descrição do item\",\n \"financial.invoiceForm.items\": \"Itens\",\n \"financial.invoiceForm.noDescription\": \"Sem descrição\",\n \"financial.invoiceForm.noItems\": \"Nenhum item adicionado ainda\",\n \"financial.invoiceForm.noUnitsFound\": \"Nenhuma unidade encontrada\",\n \"financial.invoiceForm.observations\": \"Observações\",\n \"financial.invoiceForm.payTo\": \"Pagar para\",\n \"financial.invoiceForm.qty\": \"Qtd\",\n \"financial.invoiceForm.receiveFrom\": \"Receber de\",\n \"financial.invoiceForm.save\": \"Salvar\",\n \"financial.invoiceForm.saving\": \"Salvando...\",\n \"financial.invoiceForm.searchType\": \"Digite para buscar...\",\n \"financial.invoiceForm.searchUnit\": \"Buscar unidade...\",\n \"financial.invoiceForm.selectInstallments\": \"Selecione a quantidade de parcelas acima\",\n \"financial.invoiceForm.selectItemType\": \"Selecione o tipo do item:\",\n \"financial.invoiceForm.selectUnit\": \"Selecionar unidade\",\n \"financial.invoiceForm.selectUnitTitle\": \"Selecionar Unidade\",\n \"financial.invoiceForm.unit\": \"Unidade\",\n \"financial.invoiceForm.unitPrice\": \"Preço Unitário\",\n \"financial.nav.cards\": \"Cartões\",\n \"financial.nav.cashRegisters\": \"Caixas\",\n \"financial.nav.commissions\": \"Comissões\",\n \"financial.nav.list\": \"Lista\",\n \"financial.nav.new\": \"Novo\",\n \"financial.nav.overview\": \"Visão Geral\",\n \"financial.nav.payables\": \"Contas a Pagar\",\n \"financial.nav.receivables\": \"Contas a Receber\",\n \"financial.nav.reconciliation\": \"Conciliação\",\n \"financial.nav.recurringExpenses\": \"Despesas Recorrentes\",\n \"financial.nav.rules\": \"Regras\",\n \"financial.nav.statements\": \"Extratos\",\n \"financial.nav.summary\": \"Resumo\",\n \"financial.invoice.filterAccount\": \"Plano de contas\",\n \"financial.invoice.filterAllAccounts\": \"Todos os planos\",\n \"financial.invoice.filterCostCenter\": \"Centro de custo\",\n \"financial.invoice.filterAllCostCenters\": \"Todos os centros\",\n \"financial.invoice.filterPeriod\": \"Período\",\n \"financial.invoice.filterAllPeriods\": \"Todo o período\",\n \"financial.invoice.filterThisMonth\": \"Este mês\",\n \"financial.invoice.filterLastMonth\": \"Mês passado\",\n \"financial.invoice.filterLast30\": \"Últimos 30 dias\",\n \"financial.invoice.filterThisYear\": \"Este ano\",\n \"financial.invoice.filterCustom\": \"Personalizado\",\n \"financial.invoice.filterFrom\": \"De\",\n \"financial.invoice.filterTo\": \"Até\",\n \"financial.invoice.filterClear\": \"Limpar\",\n \"financial.reconciliation.title\": \"Conciliação\",\n \"financial.reconciliation.subtitle\": \"Concilie as linhas importadas do banco com seus lançamentos\",\n \"financial.reconciliation.pending\": \"{{count}} para conciliar\",\n \"financial.reconciliation.allDone\": \"Tudo conciliado\",\n \"financial.reconciliation.empty\": \"Nada para conciliar\",\n \"financial.reconciliation.emptyHint\": \"As transações bancárias importadas aparecem aqui para conciliação.\",\n \"financial.reconciliation.bankLines\": \"Linhas do banco\",\n \"financial.reconciliation.candidates\": \"Correspondências sugeridas\",\n \"financial.reconciliation.selectLine\": \"Selecione uma linha do banco para ver as sugestões\",\n \"financial.reconciliation.noCandidates\": \"Nenhuma correspondência sugerida para esta linha\",\n \"financial.reconciliation.match\": \"Conciliar\",\n \"financial.reconciliation.accept\": \"Aceitar como novo\",\n \"financial.reconciliation.acceptHint\": \"Sem contrapartida interna — manter como lançamento avulso\",\n \"financial.reconciliation.matchScore\": \"{{score}}% compatível\",\n \"financial.reconciliation.refresh\": \"Atualizar\",\n \"financial.onboarding.back\": \"Voltar\",\n \"financial.onboarding.configureHint\": \"Você pode configurar isso em detalhes pelo ícone de Configurações dentro do módulo Financeiro.\",\n \"financial.onboarding.getStarted\": \"Começar\",\n \"financial.onboarding.next\": \"Próximo\",\n \"financial.onboarding.startUsing\": \"Começar a usar o Financeiro\",\n \"financial.onboarding.skip\": \"Pular configuração\",\n \"financial.onboarding.welcome\": \"Bem-vindo ao Financeiro\",\n \"financial.onboarding.description\": \"Vamos configurar seu módulo financeiro. Este assistente rápido ajudará a configurar o essencial.\",\n \"financial.onboarding.accounts.title\": \"Contas Bancárias\",\n \"financial.onboarding.accounts.description\": \"Adicione suas contas bancárias, caixas registradoras e cartões de crédito. Você pode adicionar mais depois em Configurações.\",\n \"financial.onboarding.payments.title\": \"Métodos de Pagamento\",\n \"financial.onboarding.payments.description\": \"Revise os tipos de pagamento que você aceita. Os tipos padrão (Dinheiro, PIX, Cartão de Crédito, etc.) já estão configurados.\",\n \"financial.onboarding.chart.title\": \"Plano de Contas\",\n \"financial.onboarding.chart.description\": \"Um modelo padrão de plano de contas foi criado. Você pode personalizá-lo a qualquer momento em Configurações.\",\n \"financial.page.newPayable\": \"Nova Conta a Pagar\",\n \"financial.page.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.page.newReceivable\": \"Nova Conta a Receber\",\n \"financial.page.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.page.openCash\": \"Abrir Caixa\",\n \"financial.page.openCashDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.page.settingsSubtitle\": \"Preferências, métodos de pagamento e contas\",\n \"financial.page.settingsTitle\": \"Configurações Financeiras\",\n \"financial.payment.amount\": \"Valor\",\n \"financial.payment.bankAccount\": \"Conta Bancária\",\n \"financial.payment.cancel\": \"Cancelar\",\n \"financial.payment.card\": \"Cartão\",\n \"financial.payment.cardBrand\": \"Bandeira do Cartão\",\n \"financial.payment.cardInstallments\": \"Parcelas\",\n \"financial.payment.date\": \"Data\",\n \"financial.payment.installment\": \"Parcela #{{number}}\",\n \"financial.payment.method\": \"Método de Pagamento\",\n \"financial.payment.notes\": \"Observações\",\n \"financial.payment.optionalNotes\": \"Observações opcionais...\",\n \"financial.payment.payAmount\": \"Pagar {{amount}}\",\n \"financial.payment.processing\": \"Processando...\",\n \"financial.payment.remaining\": \"{{amount}} restante\",\n \"financial.payment.select\": \"Selecionar...\",\n \"financial.payment.selectAccount\": \"Selecionar conta...\",\n \"financial.payment.selectBrand\": \"Selecionar bandeira...\",\n \"financial.payment.title\": \"Registrar Pagamento\",\n \"financial.settings.allowPartial\": \"Permitir pagamentos parciais\",\n \"financial.settings.allowPartialDesc\": \"Aceitar pagamentos menores que o valor total da parcela\",\n \"financial.settings.autoClose\": \"Fechamento automático no fim do dia\",\n \"financial.settings.autoCloseDesc\": \"Lembrar de fechar sessões abertas no fim do expediente\",\n \"financial.settings.autoInstallments\": \"Gerar parcelas automaticamente\",\n \"financial.settings.autoInstallmentsDesc\": \"Dividir automaticamente o total da fatura em parcelas iguais\",\n \"financial.settings.cashRegister\": \"Caixa Registradora\",\n \"financial.settings.cashRegisterDesc\": \"Comportamento da sessão de caixa\",\n \"financial.settings.dailySummary\": \"Resumo financeiro diário\",\n \"financial.settings.dailySummaryDesc\": \"Enviar um resumo diário por e-mail de contas a receber e a pagar\",\n \"financial.settings.invoices\": \"Faturas\",\n \"financial.settings.invoicesDesc\": \"Como faturas e pagamentos são processados\",\n \"financial.settings.notifications\": \"Notificações\",\n \"financial.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"financial.settings.overdueAlerts\": \"Alertas de pagamento atrasado\",\n \"financial.settings.overdueAlertsDesc\": \"Notificar quando faturas passarem da data de vencimento\",\n \"financial.settings.requireDoc\": \"Exigir número do documento\",\n \"financial.settings.requireDocDesc\": \"Tornar obrigatório o número do documento/fatura nos pagamentos\",\n \"financial.settings.requireOpening\": \"Exigir saldo de abertura\",\n \"financial.settings.requireOpeningDesc\": \"O saldo de abertura deve ser confirmado antes de iniciar uma sessão\",\n \"financial.settingsPage.subtitle\": \"Gerenciar métodos de pagamento, contas e configurações\",\n \"financial.settingsPage.title\": \"Configurações Financeiras\",\n \"financial.payment.noMethods\": \"Nenhuma forma de pagamento configurada.\",\n \"financial.payment.configureMethods\": \"Configurar formas de pagamento\",\n \"financial.payment.noAccounts\": \"Nenhuma conta compatível. Crie uma nas Configurações.\",\n \"financial.payment.configureAccounts\": \"Configurar contas\",\n \"financial.statements.account\": \"Conta\",\n \"financial.statements.from\": \"De\",\n \"financial.statements.noTransactions\": \"Sem transações neste período\",\n \"financial.statements.selectAccount\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.selectToView\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.subtitle\": \"Transações e saldos de contas bancárias\",\n \"financial.statements.title\": \"Extratos\",\n \"financial.statements.to\": \"Até\",\n \"financial.summary.allAccounts\": \"Todas as contas\",\n \"financial.summary.cashFlow\": \"Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdown\": \"Detalhamento do Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Contas a receber vs. contas a pagar neste mês\",\n \"financial.summary.cashFlowSubtitle\": \"Receitas vs despesas mensais\",\n \"financial.summary.expenses\": \"Despesas\",\n \"financial.summary.income\": \"Receita\",\n \"financial.summary.monthlyFlow\": \"Fluxo Mensal\",\n \"financial.summary.negativeBalance\": \"Saldo negativo\",\n \"financial.summary.net\": \"Líquido\",\n \"financial.summary.noOverdue\": \"Nenhuma transação atrasada\",\n \"financial.summary.noTransactions\": \"Nenhuma transação ainda\",\n \"financial.summary.overdue\": \"{{count}} atrasados\",\n \"financial.summary.overduePayable\": \"Conta a pagar atrasada\",\n \"financial.summary.overdueReceivable\": \"Conta a receber atrasada\",\n \"financial.summary.overdueTitle\": \"Atrasados\",\n \"financial.summary.paid\": \"Pago\",\n \"financial.summary.payable\": \"A Pagar\",\n \"financial.summary.positiveBalance\": \"Saldo positivo\",\n \"financial.summary.receivable\": \"A Receber\",\n \"financial.summary.received\": \"Recebido\",\n \"financial.summary.recentTransactions\": \"Transações Recentes\",\n \"financial.summary.totalBalance\": \"Saldo Total\",\n \"financial.summary.transactionsAppear\": \"As transações aparecerão aqui após serem registradas\",\n \"financial.summary.viewAll\": \"Ver todos\",\n \"financial.summary.today\": \"Hoje\",\n \"financial.summary.yesterday\": \"Ontem\",\n \"financial.summary.transactionsTitle\": \"Transações\",\n \"financial.home.balance\": \"Saldo\",\n \"financial.home.inflow\": \"Entradas\",\n \"financial.home.outflow\": \"Saídas\",\n \"financial.home.showBalance\": \"Mostrar saldo\",\n \"financial.home.hideBalance\": \"Ocultar saldo\",\n \"financial.home.upcomingBills\": \"Próximas contas\",\n \"financial.home.noBills\": \"Nenhuma conta a vencer.\",\n \"financial.home.dueToday\": \"Vence hoje\",\n \"financial.home.dueTomorrow\": \"Vence amanhã\",\n \"financial.home.dueInDays\": \"Vence em {{count}} dias\",\n \"financial.home.overdueDays\": \"Venceu há {{count}} dias\",\n \"financial.home.cards\": \"Cartões\",\n \"financial.home.currentBill\": \"Fatura atual\",\n \"financial.home.availableLimit\": \"Limite disponível\",\n \"financial.home.addCard\": \"Novo cartão\",\n \"financial.home.bill\": \"Conta\",\n \"financial.home.spendByCategory\": \"Gastos por categoria\",\n \"financial.home.noSpend\": \"Sem gastos neste mês.\",\n \"financial.home.category.groceries\": \"Mercado\",\n \"financial.home.category.transport\": \"Transporte\",\n \"financial.home.category.subscriptions\": \"Assinaturas\",\n \"financial.home.category.dining\": \"Alimentação\",\n \"financial.home.category.home\": \"Casa\",\n \"financial.home.category.health\": \"Saúde\",\n \"financial.home.category.leisure\": \"Lazer\",\n \"financial.home.category.shopping\": \"Compras\",\n \"financial.home.category.other\": \"Outros\",\n \"financial.quickActions.newPayable\": \"Nova Conta a Pagar\",\n \"financial.quickActions.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.quickActions.newReceivable\": \"Nova Conta a Receber\",\n \"financial.quickActions.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.quickActions.openCashRegister\": \"Abrir Caixa\",\n \"financial.quickActions.openCashRegisterDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.cash.title\": \"Caixa Registradora\",\n \"financial.cash.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.cash.bills\": \"Notas\",\n \"financial.cash.coins\": \"Moedas\",\n \"financial.cash.noAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cash.confirmOpening\": \"Confirmar Abertura de Caixa\",\n \"financial.cash.register\": \"Caixa\",\n \"financial.cash.openingBalance\": \"Saldo de Abertura\",\n \"financial.cash.method\": \"Método\",\n \"financial.cash.denominationCount\": \"Contagem de cédulas\",\n \"financial.cash.notes\": \"Observações\",\n \"financial.cash.opening\": \"Abrindo...\",\n \"financial.cash.confirmAndOpen\": \"Confirmar e Abrir\",\n \"financial.cash.quickAmount\": \"Valor Rápido\",\n \"financial.cash.countBillsCoins\": \"Contar Cédulas e Moedas\",\n \"financial.cash.count\": \"Contar\",\n \"financial.cash.countedTotal\": \"Total Contado\",\n \"financial.cash.addNotes\": \"Adicionar observações\",\n \"financial.cash.openingObservations\": \"Observações de abertura...\",\n \"financial.cash.openSession\": \"Abrir Sessão\",\n \"financial.cash.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cash.differenceFromOpening\": \"Diferença da abertura\",\n \"financial.cash.closingNotes\": \"Observações de Fechamento\",\n \"financial.cash.closingObservations\": \"Observações de fechamento...\",\n \"financial.cash.closing\": \"Fechando...\",\n \"financial.cash.closeSession\": \"Fechar Sessão\",\n \"financial.cash.openSessions\": \"Sessões Abertas\",\n \"financial.cash.opened\": \"Aberto\",\n \"financial.cash.by\": \"por\",\n \"financial.cash.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cash.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cash.noClosedSessions\": \"Nenhuma sessão fechada ainda\",\n \"financial.cash.openLabel\": \"Abertura\",\n \"financial.cash.closeLabel\": \"Fechamento\",\n \"financial.cash.diff\": \"Dif\",\n \"financial.cash.openAnother\": \"Abrir outro caixa\",\n \"financial.invoice.statusOpen\": \"Aberto\",\n \"financial.invoice.statusPartial\": \"Parcial\",\n \"financial.invoice.statusPaid\": \"Pago\",\n \"financial.invoice.statusOverdue\": \"Vencido\",\n \"financial.invoice.statusCancelled\": \"Cancelado\",\n \"financial.invoice.statusPending\": \"Pendente\",\n \"financial.invoice.statusDraft\": \"Rascunho\",\n \"financial.invoice.columnDate\": \"Data\",\n \"financial.invoice.columnDescription\": \"Descrição\",\n \"financial.invoice.columnAmount\": \"Valor\",\n \"financial.invoice.columnPaid\": \"Pago\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Parc.\",\n \"financial.invoice.columnQty\": \"Qtd\",\n \"financial.invoice.columnUnitPrice\": \"Preço Unit.\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Fatura\",\n \"financial.invoice.loading\": \"Carregando...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoiceForm.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoiceForm.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas.\",\n \"financial.invoiceForm.keepInvoice\": \"Manter Fatura\",\n \"financial.invoiceForm.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.cancelling\": \"Cancelando...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remover ajustes\",\n \"financial.invoiceForm.discount\": \"Desconto\",\n \"financial.invoiceForm.surcharge\": \"Acréscimo\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Conta\",\n \"financial.payment.due\": \"Venc.:\",\n \"financial.payment.paidAmount\": \"Pago:\",\n \"financial.payment.paidOn\": \"Pago em:\",\n \"financial.title\": \"Financeiro\",\n \"financial.summary.title\": \"Resumo Financeiro\",\n \"financial.summary.revenue\": \"Receita\",\n \"financial.invoice.title\": \"Faturas\",\n \"financial.invoice.create\": \"Nova Fatura\",\n \"financial.invoice.number\": \"Fatura #\",\n \"financial.invoice.client\": \"Cliente\",\n \"financial.invoice.amount\": \"Valor\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Vencimento\",\n \"financial.invoice.addItem\": \"Adicionar Item\",\n \"financial.invoice.tax\": \"Imposto\",\n \"financial.invoice.save\": \"Salvar Fatura\",\n \"financial.invoice.saving\": \"Salvando...\",\n \"financial.invoice.markPaid\": \"Marcar como Pago\",\n \"financial.invoice.sendReminder\": \"Enviar Lembrete\",\n \"financial.receivable.title\": \"Contas a Receber\",\n \"financial.payable.title\": \"Contas a Pagar\",\n \"financial.statements.loading\": \"Carregando...\",\n \"financial.cards.empty\": \"Nenhuma transação de cartão ainda\",\n \"financial.commissions.title\": \"Comissões\",\n \"financial.cashRegister.title\": \"Caixa\",\n \"financial.cashRegister.open\": \"Abrir Caixa\",\n \"financial.cashRegister.close\": \"Fechar Caixa\",\n \"financial.movements.title\": \"Movimentações\",\n \"financial.bankAccounts.title\": \"Contas Bancárias\",\n \"financial.settings.title\": \"Configurações Financeiras\",\n // Abas de registros nas configurações\n \"registry.payment-methods\": \"Formas de Pagamento\",\n \"registry.payment-methods.description\": \"Formas de pagamento configuradas com taxas e regras de parcelamento\",\n \"registry.bank-accounts\": \"Contas\",\n \"registry.bank-accounts.description\": \"Contas bancárias, caixas, cartões de crédito e carteiras digitais\",\n \"registry.chart-of-accounts\": \"Plano de Contas\",\n \"registry.chart-of-accounts.description\": \"Plano de contas hierárquico para categorizar transações\",\n \"registry.cost-centers\": \"Centros de Custo\",\n \"registry.cost-centers.description\": \"Centros de custo para controle de despesas e orçamentos por departamento\",\n \"registry.commission-rules\": \"Regras de Comissão\",\n \"registry.commission-rules.description\": \"Regras de comissão para serviços e produtos\",\n \"registry.price-tables\": \"Tabelas de Preço\",\n \"registry.price-tables.description\": \"Tabelas de preço de venda e custo\",\n \"registry.price-variations\": \"Variações de Preço\",\n \"registry.price-variations.description\": \"Regras de desconto e acréscimo de preços\",\n \"registry.payment-method-types\": \"Tipos de Pagamento\",\n \"registry.payment-method-types.description\": \"Tipos de pagamento do sistema (dinheiro, cartão, PIX, etc.)\",\n \"registry.card-brands\": \"Bandeiras de Cartão\",\n \"registry.card-brands.description\": \"Bandeiras de cartão de crédito e débito\",\n // Extrato\n \"financial.statements.columnDate\": \"Data\",\n \"financial.statements.columnDescription\": \"Descrição\",\n \"financial.statements.columnDebit\": \"Débito\",\n \"financial.statements.columnCredit\": \"Crédito\",\n \"financial.statements.columnFee\": \"Taxa\",\n \"financial.statements.columnBalance\": \"Saldo\",\n \"financial.statements.columnMethod\": \"Forma\",\n \"financial.statements.columnDoc\": \"Documento\",\n \"financial.statements.installmentShort\": \"Parc. {{n}}\",\n \"financial.statements.viewInvoice\": \"Ver fatura\",\n \"financial.person.empty\": \"Nenhuma atividade financeira para este contato ainda\",\n \"financial.statements.opening\": \"Saldo inicial\",\n \"financial.statements.closing\": \"Saldo final\",\n \"financial.statements.currentBalance\": \"Saldo atual\",\n \"financial.statements.totalCredits\": \"Créditos\",\n \"financial.statements.totalDebits\": \"Débitos\",\n \"financial.statements.totalFees\": \"Taxas\",\n \"financial.statements.net\": \"Líquido\",\n \"financial.statements.transfer\": \"Transferência\",\n \"financial.statements.reconciled\": \"Conciliado com o extrato bancário\",\n \"financial.statements.imported\": \"Importado do banco · não conciliado\",\n \"financial.statements.reconciledWith\": \"Conciliado com {{ref}}\",\n \"financial.statements.newTransfer\": \"Nova Transferência\",\n // Diálogo de transferência\n \"financial.transfer.title\": \"Transferência entre Contas\",\n \"financial.transfer.from\": \"Conta de origem\",\n \"financial.transfer.to\": \"Conta de destino\",\n \"financial.transfer.amount\": \"Valor\",\n \"financial.transfer.date\": \"Data\",\n \"financial.transfer.notes\": \"Observações\",\n \"financial.transfer.optionalNotes\": \"Observações opcionais...\",\n \"financial.transfer.selectAccount\": \"Selecione a conta...\",\n \"financial.transfer.submit\": \"Transferir\",\n \"financial.transfer.processing\": \"Transferindo...\",\n \"financial.transfer.cancel\": \"Cancelar\",\n \"financial.transfer.created\": \"Transferência registrada\",\n \"financial.transfer.failed\": \"Falha ao registrar transferência\",\n \"financial.transfer.sameAccount\": \"Origem e destino devem ser diferentes\",\n \"financial.transfer.invalidAmount\": \"O valor deve ser maior que zero\",\n \"financial.quickTx.title\": \"Nova transação\",\n \"financial.quickTx.close\": \"Fechar\",\n \"financial.quickTx.newTransaction\": \"Nova transação\",\n \"financial.quickTx.expense\": \"Despesa\",\n \"financial.quickTx.income\": \"Receita\",\n \"financial.quickTx.transfer\": \"Transferência\",\n \"financial.quickTx.paid\": \"Pago\",\n \"financial.quickTx.received\": \"Recebido\",\n \"financial.quickTx.yes\": \"Sim\",\n \"financial.quickTx.no\": \"Não\",\n \"financial.quickTx.category\": \"Categoria\",\n \"financial.quickTx.selectCategory\": \"Sem categoria\",\n \"financial.quickTx.account\": \"Conta\",\n \"financial.quickTx.selectAccount\": \"Selecione a conta\",\n \"financial.quickTx.fromAccount\": \"Conta de origem\",\n \"financial.quickTx.toAccount\": \"Conta de destino\",\n \"financial.quickTx.card\": \"Cartão\",\n \"financial.quickTx.recurring\": \"Recorrente\",\n \"financial.quickTx.attachment\": \"Anexo\",\n \"financial.quickTx.attachmentSoon\": \"Anexos em breve\",\n \"financial.quickTx.receipt\": \"Recibo\",\n \"financial.quickTx.receiptCapture\": \"Fotografar ou anexar recibo\",\n \"financial.quickTx.receiptAttached\": \"Recibo anexado\",\n \"financial.quickTx.receiptReplace\": \"Substituir\",\n \"financial.quickTx.receiptRemove\": \"Remover recibo\",\n \"financial.quickTx.receiptInvalid\": \"Escolha um arquivo de imagem\",\n \"financial.quickTx.sendReceipt\": \"Enviar recibo\",\n \"financial.quickTx.descriptionPlaceholder\": \"ex.: Mercado, Salário…\",\n \"financial.quickTx.enterAmount\": \"Informe um valor\",\n \"financial.quickTx.save\": \"Salvar\",\n \"financial.quickTx.saving\": \"Salvando…\",\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const financialLocales: Record<string, Record<string, string>> = {\n en,\n 'pt-BR': ptBR,\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { Wallet } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { Invoice } from '../types'\n\nconst STATUS_STYLE: Record<string, string> = {\n paid: 'bg-success/15 text-success',\n partial: 'bg-warning/15 text-warning',\n overdue: 'bg-destructive/15 text-destructive',\n open: 'bg-muted text-muted-foreground',\n cancelled: 'bg-muted text-muted-foreground line-through',\n}\n\n/**\n * Per-person financial statement (account_central-style extract): every invoice where\n * this person is the contact — a client paying receivables, or a professional receiving\n * commissions/payables. Rendered as a tab on the person detail page via the\n * `person.detail.financial` widget zone.\n */\nexport function PersonStatementWidget({ person, provider, config }: {\n person: { id?: string; name?: string }\n provider: FinancialDataProvider\n config: ResolvedFinancialConfig\n}) {\n const t = useTranslation()\n const currency = config.currency\n const [invoices, setInvoices] = useState<Invoice[]>([])\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n let alive = true\n if (!person?.id) { setLoading(false); return }\n setLoading(true)\n provider.getInvoices({ contactId: person.id, pageSize: 200 })\n .then((r) => { if (alive) { setInvoices(r.data); setLoading(false) } })\n .catch(() => { if (alive) setLoading(false) })\n return () => { alive = false }\n }, [person?.id, provider])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const totals = useMemo(() => {\n const active = invoices.filter((i) => i.status !== 'cancelled')\n const billed = active.reduce((s, i) => s + (i.totalAmount ?? 0), 0)\n const paid = active.reduce((s, i) => s + (i.paidAmount ?? 0), 0)\n return { billed, paid, balance: billed - paid }\n }, [invoices])\n\n const openInvoice = (inv: Invoice) => {\n const base = inv.direction === 'credit' ? 'receivables' : 'payables'\n window.location.hash = `/financial/${base}/detail/${inv.id}`\n }\n\n const columns: ColumnDef<Invoice, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.invoice.columnDate'),\n cell: ({ row }) => <span className=\"text-muted-foreground text-xs\">{row.original.invoiceDate}</span>,\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => {\n const inv = row.original\n return (\n <button onClick={() => openInvoice(inv)} className=\"text-left\">\n <span className=\"text-xs font-medium text-primary hover:underline\">\n {inv.itemsSummary || inv.contactName || t('financial.invoice.invoice')}\n </span>\n {inv.fiscalNumber && <span className=\"ml-1.5 text-[10px] text-muted-foreground font-mono\">{inv.fiscalNumber}</span>}\n </button>\n )\n },\n },\n {\n id: 'amount', header: t('financial.invoice.columnAmount'),\n cell: ({ row }) => (\n <span className={`text-right block text-xs ${row.original.direction === 'credit' ? 'text-success' : 'text-destructive'}`}>\n {fmt(row.original.totalAmount)}\n </span>\n ),\n },\n {\n id: 'paid', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => <span className=\"text-right block text-xs text-muted-foreground\">{fmt(row.original.paidAmount)}</span>,\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => <span className=\"text-right block text-xs font-medium\">{fmt((row.original.totalAmount ?? 0) - (row.original.paidAmount ?? 0))}</span>,\n },\n {\n id: 'status', header: t('financial.invoice.columnStatus'),\n cell: ({ row }) => (\n <span className={`inline-flex rounded-full px-1.5 py-0.5 text-[9px] font-medium capitalize ${STATUS_STYLE[row.original.status] ?? STATUS_STYLE.open}`}>\n {row.original.status}\n </span>\n ),\n },\n ], [currency, t])\n\n return (\n <div className=\"space-y-3\">\n {/* Totals */}\n <div className=\"grid grid-cols-3 gap-2\">\n <Stat label={t('financial.invoice.summaryTotal')} value={fmt(totals.billed)} />\n <Stat label={t('financial.invoice.summaryPaid')} value={fmt(totals.paid)} positive />\n <Stat label={t('financial.statements.columnBalance')} value={fmt(totals.balance)} accent />\n </div>\n\n {loading ? (\n <DataTable columns={columns} data={[]} loading skeletonRows={5} compact />\n ) : invoices.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-10 text-center rounded-lg border-2 border-dashed border-muted\">\n <Wallet className=\"h-7 w-7 text-muted-foreground mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.person.empty')}</p>\n </div>\n ) : (\n <DataTable columns={columns} data={invoices} compact />\n )}\n </div>\n )\n}\n\nfunction Stat({ label, value, accent, positive }: { label: string; value: string; accent?: boolean; positive?: boolean }) {\n return (\n <div className={`rounded-lg border px-3 py-2 ${accent ? 'bg-muted/40' : 'bg-card'}`}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase truncate\">{label}</p>\n <p className={`text-sm font-semibold mt-0.5 ${positive ? 'text-success' : 'text-foreground'}`}>{value}</p>\n </div>\n )\n}\n","import React from 'react'\nimport type { PluginManifest, PluginRegistryDef, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { FinancialPage } from './FinancialPage'\nimport { createFinancialDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport { createMockFinancialProvider } from './data/mock'\nimport { createSupabaseFinancialProvider } from './data/supabase'\nimport { createSafeDataProvider, registerTranslations } from '@fayz-ai/core'\nimport { createFinancialStore } from './store'\n\n/**\n * Public: a lazy supabase-or-mock financial provider. Apps use this to share one\n * provider between the plugin and a cross-plugin bridge (e.g. agenda's financial\n * bridge in beauty-saas). Thin wrapper over the shared createSafeDataProvider.\n */\nexport function createSafeFinancialProvider(): FinancialDataProvider {\n return createSafeDataProvider(\n () => createSupabaseFinancialProvider(),\n () => createMockFinancialProvider(),\n )\n}\nimport { financialRegistries } from './registries'\nimport { financialLocales } from './locales'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\nimport { PersonStatementWidget } from './components/PersonStatementWidget'\nimport { PluginSettingsPanel } from '@fayz-ai/saas'\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface FinancialPluginLabels {\n pageTitle: string\n pageSubtitle: string\n summary: string\n payables: string\n payablesNew: string\n payablesList: string\n payablesRecurring: string\n receivables: string\n receivablesNew: string\n receivablesList: string\n cashRegisters: string\n statements: string\n commissions: string\n commissionsOverview: string\n commissionsRules: string\n cards: string\n cardsOverview: string\n cardsReconciliation: string\n}\n\nexport interface ItemTypeOption {\n value: string\n label: string\n icon?: string\n}\n\nexport interface FinancialPluginOptions {\n modules?: {\n payables?: boolean\n receivables?: boolean\n cashRegisters?: boolean\n statements?: boolean\n commissions?: boolean\n cards?: boolean\n /** Bank reconciliation (conciliação). Defaults off — enable with a bank connector. */\n reconciliation?: boolean\n }\n labels?: Partial<FinancialPluginLabels>\n currency?: {\n code?: string\n locale?: string\n symbol?: string\n }\n /**\n * Show the plugin's own quick-add affordances (the \"New transaction\" + \"Send\n * receipt\" header buttons and, on mobile, the FAB). Opt-in (default: false) so\n * hosts that already surface a \"New\" menu / global center-action don't render\n * redundant controls. The shared quick-add sheet still opens via openQuickAdd().\n */\n quickAdd?: boolean\n navPosition?: number\n navSection?: 'main' | 'secondary'\n scope?: PluginScope\n verticalId?: VerticalId\n\n /** Data provider. Defaults to mock (in-memory) if not supplied. */\n dataProvider?: FinancialDataProvider\n\n /** Available item types for invoice lines. Default: product + service + other */\n itemTypes?: ItemTypeOption[]\n\n /** Enable service execution tracking on invoice items (default: false) */\n enableServiceExecution?: boolean\n\n /** Contact entity config — which person kind to use */\n contactEntity?: { archetypeKind: string; label?: string }\n\n /** Seed payment method types for mock provider */\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n\n /** Business units / locations. Unit selector only shows when 2+ locations are provided. */\n locations?: Array<{ id: string; name: string; isHQ?: boolean }>\n\n /**\n * Entity lookups for cross-plugin references.\n * Keys match `itemTypes` values (e.g., 'product', 'service').\n * When a lookup is provided, item forms show a search selector for that type.\n * When absent, users type descriptions manually.\n */\n entityLookups?: EntityLookupMap\n\n /** Contact/person lookup for \"Pay to\" / \"Receive from\" fields. Queries persons archetype. */\n contactLookup?: import('@fayz-ai/saas').EntityLookup\n\n /** App-owned registries shown under /settings/financial Properties. */\n settingsRegistries?: PluginRegistryDef[]\n\n /** Callback when user clicks a booking link on an invoice. Receives the order ID. */\n onBookingClick?: (orderId: string) => void\n\n /**\n * Which internal-nav links this APP gates, as `nav item id → feature id`.\n * Empty by default: the plugin ships no opinion about what is paid — packaging\n * is the app's decision, declared alongside its `permissions.ts` (RBAC) and\n * `billing.ts` (plan entitlements). An id absent from this map is never hidden\n * and never gated, in the nav OR in the content.\n *\n * {@link FINANCIAL_NAV_FEATURES} is an opt-in preset of the `fin_*` ids used\n * by the reference apps — spread the entries you actually want:\n *\n * ```ts\n * navFeatureMap: { reconciliation: FINANCIAL_NAV_FEATURES.reconciliation }\n * ```\n */\n navFeatureMap?: Record<string, string>\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_LABELS: FinancialPluginLabels = {\n pageTitle: 'Financial',\n pageSubtitle: 'Financial overview and cash flow management',\n summary: 'Summary',\n payables: 'Accounts Payable',\n payablesNew: 'New',\n payablesList: 'List',\n payablesRecurring: 'Recurring Expenses',\n receivables: 'Accounts Receivable',\n receivablesNew: 'New',\n receivablesList: 'List',\n cashRegisters: 'Cash Registers',\n statements: 'Statements',\n commissions: 'Commissions',\n commissionsOverview: 'Overview',\n commissionsRules: 'Rules',\n cards: 'Cards',\n cardsOverview: 'Overview',\n cardsReconciliation: 'Reconciliation',\n}\n\nconst DEFAULT_CURRENCY = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\n/**\n * OPT-IN preset of feature ids for the financial sub-modules — a naming\n * convention offered to apps, NOT a default. Nothing here is applied unless an\n * app passes the entries it wants through `options.navFeatureMap`, because what\n * is paid is a product decision that belongs to the app (its `permissions.ts` +\n * `billing.ts`), never to the plugin.\n */\nexport const FINANCIAL_NAV_FEATURES = {\n reconciliation: 'fin_reconciliation',\n cards: 'fin_cards',\n commissions: 'fin_commissions',\n statements: 'fin_statements',\n receivables: 'fin_receivables',\n payables: 'fin_payables',\n 'cash-registers': 'fin_cash_registers',\n} as const satisfies Record<string, string>\n\nconst DEFAULT_ITEM_TYPES: ItemTypeOption[] = [\n { value: 'service', label: 'Service', icon: 'Briefcase' },\n { value: 'product', label: 'Product', icon: 'Package' },\n { value: 'other', label: 'Other', icon: 'MoreHorizontal' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: FinancialPluginOptions): ResolvedFinancialConfig {\n return {\n modules: {\n payables: options?.modules?.payables !== false,\n receivables: options?.modules?.receivables !== false,\n cashRegisters: options?.modules?.cashRegisters !== false,\n statements: options?.modules?.statements !== false,\n commissions: options?.modules?.commissions !== false,\n cards: options?.modules?.cards !== false,\n // Opt-in: only shown when an app explicitly enables reconciliation (bank connector present).\n reconciliation: options?.modules?.reconciliation === true,\n },\n // Opt-in: only render the plugin's own quick-add buttons/FAB when the host asks.\n quickAdd: options?.quickAdd === true,\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n itemTypes: options?.itemTypes ?? DEFAULT_ITEM_TYPES,\n enableServiceExecution: options?.enableServiceExecution ?? false,\n contactEntity: {\n archetypeKind: options?.contactEntity?.archetypeKind ?? 'client',\n label: options?.contactEntity?.label ?? 'Contact',\n },\n locations: options?.locations ?? [],\n entityLookups: options?.entityLookups ?? {},\n contactLookup: options?.contactLookup,\n onBookingClick: options?.onBookingClick,\n navFeatureMap: { ...options?.navFeatureMap },\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialPlugin(options?: FinancialPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(financialLocales)\n\n const provider = options?.dataProvider ?? createSafeFinancialProvider()\n const store = createFinancialStore(provider)\n const dashboardWidgets = createFinancialDashboardWidgets({ config, provider, store })\n const registries = [...financialRegistries, ...(options?.settingsRegistries ?? [])]\n\n // Per-person statement tab (account_central-style): bound to this plugin's provider.\n const PersonStatementBound: React.FC<any> = (props) =>\n React.createElement(PersonStatementWidget, { person: props.item, provider, config })\n PersonStatementBound.displayName = 'FinancialPersonStatement'\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(FinancialPage, { config, provider, store, registries })\n\n return {\n id: 'financial',\n name: config.labels.pageTitle,\n icon: 'DollarSign',\n version: '1.0.0',\n scope: options?.scope ?? 'universal',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n dependencies: [],\n declaredFeatures: [\n { id: 'financial', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.receivables ? [{ id: 'financial.receivables', label: config.labels.receivables, group: config.labels.pageTitle }] : []),\n ...(config.modules.payables ? [{ id: 'financial.payables', label: config.labels.payables, group: config.labels.pageTitle }] : []),\n ...(config.modules.commissions ? [{ id: 'financial.commissions', label: config.labels.commissions, group: config.labels.pageTitle }] : []),\n ],\n // Recurring monthly quota — counts financial movement rows created this\n // month (invoices write one per installment; quick transactions one, or two\n // for a transfer).\n declaredLimits: [\n { key: 'movements_month', label: 'Financial movements this month', table: 'plg_financial_movements', period: 'month' },\n ],\n queryEntities: [\n {\n key: 'financial:invoices',\n entity: {\n name: 'Invoice',\n namePlural: 'Invoices (receipts REC- / payables PAG-)',\n icon: 'Receipt',\n permission: { feature: 'financial', action: 'read' },\n fields: [\n { key: 'referenceNumber', label: 'Reference (REC-/PAG-)', type: 'text', searchable: true },\n { key: 'flow', label: 'Flow (receivable/payable)', type: 'text' },\n { key: 'amount', label: 'Amount', type: 'number' },\n { key: 'paid', label: 'Paid', type: 'number' },\n { key: 'balance', label: 'Balance', type: 'number' },\n { key: 'status', label: 'Status', type: 'text' },\n { key: 'createdAt', label: 'Created at', type: 'text' },\n ],\n data: {\n table: 'v_invoice_balances',\n tenantScoped: true,\n searchColumns: ['reference_number'],\n },\n },\n },\n {\n key: 'financial:movements',\n entity: {\n name: 'Financial movement',\n namePlural: 'Financial movements (installment ledger)',\n icon: 'Banknote',\n permission: { feature: 'financial', action: 'read' },\n fields: [\n { key: 'direction', label: 'Direction', type: 'text' },\n { key: 'movementKind', label: 'Kind (bill/payment)', type: 'text' },\n { key: 'amount', label: 'Amount', type: 'number' },\n { key: 'paidAmount', label: 'Paid amount', type: 'number' },\n { key: 'status', label: 'Status', type: 'text' },\n { key: 'dueDate', label: 'Due date', type: 'text' },\n { key: 'paymentDate', label: 'Payment date', type: 'text' },\n { key: 'installmentNumber', label: 'Installment', type: 'number' },\n { key: 'cardInstallments', label: 'Card installments', type: 'number' },\n { key: 'createdAt', label: 'Created at', type: 'text' },\n ],\n data: {\n table: 'plg_financial_movements',\n tenantScoped: true,\n },\n },\n },\n ],\n declaredRpcs: [\n {\n name: 'agent_financial_mark_payment_received',\n kind: 'write' as const,\n description:\n 'Guarded settle: invoices the order via fn_invoice_from_order (installments for credit card) and marks the receivable paid, audited with the acting user.',\n audits: true,\n },\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 6,\n label: config.labels.pageTitle,\n route: '/financial',\n icon: 'DollarSign',\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n routes: [\n {\n path: '/financial',\n component: PageComponent,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n widgets: [\n {\n id: 'financial-person-statement',\n zone: 'person.detail.financial',\n component: PersonStatementBound as unknown as React.ComponentType<unknown>,\n order: 0,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n dashboardWidgets,\n aiTools: [\n {\n id: 'financial.get-revenue',\n name: 'getRevenue',\n description: 'Returns revenue for the business in a given period.',\n icon: 'DollarSign',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n period: { type: 'string' as const, description: 'today, week, month, or custom date range' },\n },\n },\n suggestions: [\n { label: 'How much did we make today?' },\n { label: \"What's this month's revenue?\" },\n { label: \"Compare this week's revenue to last week\" },\n ],\n },\n {\n id: 'financial.create-invoice',\n name: 'createInvoice',\n description: 'Creates a new invoice/payable for a contact.',\n icon: 'FileText',\n mode: 'persist' as const,\n limitKey: 'movements_month',\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n contact: { type: 'string' as const, description: 'Contact/customer name' },\n amount: { type: 'number' as const, description: 'Invoice amount' },\n description: { type: 'string' as const, description: 'Invoice description' },\n },\n required: ['contact', 'amount'],\n },\n suggestions: [\n { label: 'Create an invoice for a new client' },\n ],\n permission: { feature: 'financial', action: 'create' as const },\n },\n {\n id: 'financial.mark-payment-received',\n name: 'markPaymentReceived',\n description:\n 'Marks an order/appointment as paid: invoices it (with installments for credit card, e.g. \"cartão 2x\") and settles the receivable. Resolve the booking or order id via search tools first.',\n icon: 'BadgeDollarSign',\n mode: 'persist' as const,\n execution: { plane: 'server' as const, kind: 'rpc' as const, rpc: 'agent_financial_mark_payment_received' },\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n booking_id: { type: 'string' as const, description: 'Appointment id (alternative to order_id)' },\n order_id: { type: 'string' as const, description: 'Order id' },\n method: {\n type: 'string' as const,\n description: 'Payment method',\n enum: ['cash', 'pix', 'credit_card', 'debit_card', 'transfer'],\n },\n installments: { type: 'number' as const, description: 'Credit-card installments (1-12), e.g. 2 for \"cartão 2x\"' },\n },\n required: ['method'],\n },\n suggestions: [\n { label: 'Marcar o atendimento como pago no cartão em 2x' },\n ],\n permission: { feature: 'financial.receivables', action: 'update' as const },\n },\n {\n id: 'financial.list-payables',\n name: 'listPayables',\n description: 'Lists outstanding payables/bills.',\n icon: 'FileDown',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n status: { type: 'string' as const, enum: ['pending', 'overdue', 'paid'] },\n contact: { type: 'string' as const, description: 'Filter by contact name' },\n },\n },\n permission: { feature: 'financial', action: 'read' as const },\n suggestions: [\n { label: 'Show me overdue bills' },\n { label: 'What bills are due this week?' },\n ],\n },\n ],\n registries,\n settings: [\n {\n id: 'financial',\n label: 'Financial',\n icon: 'DollarSign',\n component: (() => {\n const FinancialSettingsTab: React.FC = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Financial Settings',\n subtitle: 'Payment methods, accounts, and configurations',\n generalSettings: React.createElement(FinancialGeneralSettings),\n registries,\n hostPluginId: 'financial',\n routeBase: '/settings/financial',\n })\n FinancialSettingsTab.displayName = 'FinancialSettingsTab'\n return FinancialSettingsTab as unknown as React.ComponentType<unknown>\n })(),\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n locales: financialLocales,\n }\n}\n\n// Re-export types and factories for consumers\nexport type { FinancialDataProvider } from './data/types'\nexport type { ResolvedFinancialConfig } from './FinancialContext'\n// Seedable in-memory provider — apps pass a seed to render the module populated\n// (demo/dogfood data) instead of the empty onboarding state.\nexport { createMockFinancialProvider } from './data/mock'\nexport type { MockFinancialSeed, MockFinancialProviderOptions } from './data/mock'\n// FAY-1242: global quick-add trigger — apps wire this to a shell action (e.g.\n// the bottom-nav center \"+\") to open the transaction sheet from anywhere.\nexport { openQuickAdd } from './quick-add'\n"]}
|