@fayz-ai/plugin-financial 0.1.1

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.
Files changed (98) hide show
  1. package/dist/FinancialContext.d.ts +44 -0
  2. package/dist/FinancialContext.d.ts.map +1 -0
  3. package/dist/FinancialPage.d.ts +18 -0
  4. package/dist/FinancialPage.d.ts.map +1 -0
  5. package/dist/components/FinancialGeneralSettings.d.ts +3 -0
  6. package/dist/components/FinancialGeneralSettings.d.ts.map +1 -0
  7. package/dist/components/FinancialOnboarding.d.ts +5 -0
  8. package/dist/components/FinancialOnboarding.d.ts.map +1 -0
  9. package/dist/components/FinancialSettings.d.ts +8 -0
  10. package/dist/components/FinancialSettings.d.ts.map +1 -0
  11. package/dist/components/PaymentModal.d.ts +8 -0
  12. package/dist/components/PaymentModal.d.ts.map +1 -0
  13. package/dist/data/index.d.ts +3 -0
  14. package/dist/data/index.d.ts.map +1 -0
  15. package/dist/data/mock.d.ts +9 -0
  16. package/dist/data/mock.d.ts.map +1 -0
  17. package/dist/data/supabase.d.ts +3 -0
  18. package/dist/data/supabase.d.ts.map +1 -0
  19. package/dist/data/types.d.ts +27 -0
  20. package/dist/data/types.d.ts.map +1 -0
  21. package/dist/index.cjs +4937 -0
  22. package/dist/index.cjs.map +1 -0
  23. package/dist/index.d.ts +91 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +4930 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/tenant.d.ts +3 -0
  28. package/dist/lib/tenant.d.ts.map +1 -0
  29. package/dist/locales/en.d.ts +2 -0
  30. package/dist/locales/en.d.ts.map +1 -0
  31. package/dist/locales/index.d.ts +2 -0
  32. package/dist/locales/index.d.ts.map +1 -0
  33. package/dist/locales/pt-BR.d.ts +2 -0
  34. package/dist/locales/pt-BR.d.ts.map +1 -0
  35. package/dist/registries.d.ts +3 -0
  36. package/dist/registries.d.ts.map +1 -0
  37. package/dist/store.d.ts +38 -0
  38. package/dist/store.d.ts.map +1 -0
  39. package/dist/types.d.ts +302 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/views/CardsView.d.ts +3 -0
  42. package/dist/views/CardsView.d.ts.map +1 -0
  43. package/dist/views/CashRegistersView.d.ts +3 -0
  44. package/dist/views/CashRegistersView.d.ts.map +1 -0
  45. package/dist/views/CommissionsView.d.ts +3 -0
  46. package/dist/views/CommissionsView.d.ts.map +1 -0
  47. package/dist/views/InvoiceDetailView.d.ts +9 -0
  48. package/dist/views/InvoiceDetailView.d.ts.map +1 -0
  49. package/dist/views/InvoiceFormView.d.ts +13 -0
  50. package/dist/views/InvoiceFormView.d.ts.map +1 -0
  51. package/dist/views/InvoiceListView.d.ts +8 -0
  52. package/dist/views/InvoiceListView.d.ts.map +1 -0
  53. package/dist/views/PayablesView.d.ts +7 -0
  54. package/dist/views/PayablesView.d.ts.map +1 -0
  55. package/dist/views/ReceivablesView.d.ts +7 -0
  56. package/dist/views/ReceivablesView.d.ts.map +1 -0
  57. package/dist/views/StatementsView.d.ts +3 -0
  58. package/dist/views/StatementsView.d.ts.map +1 -0
  59. package/dist/views/SummaryView.d.ts +9 -0
  60. package/dist/views/SummaryView.d.ts.map +1 -0
  61. package/dist/views/dashboardWidgets.d.ts +11 -0
  62. package/dist/views/dashboardWidgets.d.ts.map +1 -0
  63. package/package.json +55 -0
  64. package/src/FinancialContext.tsx +47 -0
  65. package/src/FinancialPage.tsx +261 -0
  66. package/src/README.md +155 -0
  67. package/src/components/FinancialGeneralSettings.tsx +26 -0
  68. package/src/components/FinancialOnboarding.tsx +87 -0
  69. package/src/components/FinancialSettings.tsx +31 -0
  70. package/src/components/PaymentModal.tsx +322 -0
  71. package/src/data/index.ts +2 -0
  72. package/src/data/mock.ts +520 -0
  73. package/src/data/supabase.ts +509 -0
  74. package/src/data/types.ts +53 -0
  75. package/src/index.ts +307 -0
  76. package/src/lib/tenant.ts +3 -0
  77. package/src/locales/en.ts +331 -0
  78. package/src/locales/index.ts +7 -0
  79. package/src/locales/pt-BR.ts +331 -0
  80. package/src/migrations/001_financial_base.sql +109 -0
  81. package/src/migrations/002_chart_of_accounts.sql +28 -0
  82. package/src/migrations/003_card_brands.sql +12 -0
  83. package/src/migrations/004_order_to_cash.sql +164 -0
  84. package/src/migrations/005_seed_defaults.sql +38 -0
  85. package/src/registries.ts +305 -0
  86. package/src/store.ts +221 -0
  87. package/src/types.ts +359 -0
  88. package/src/views/CardsView.tsx +74 -0
  89. package/src/views/CashRegistersView.tsx +597 -0
  90. package/src/views/CommissionsView.tsx +18 -0
  91. package/src/views/InvoiceDetailView.tsx +595 -0
  92. package/src/views/InvoiceFormView.tsx +900 -0
  93. package/src/views/InvoiceListView.tsx +177 -0
  94. package/src/views/PayablesView.tsx +37 -0
  95. package/src/views/ReceivablesView.tsx +37 -0
  96. package/src/views/StatementsView.tsx +123 -0
  97. package/src/views/SummaryView.tsx +12 -0
  98. package/src/views/dashboardWidgets.tsx +191 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/FinancialContext.tsx","../src/views/SummaryView.tsx","../src/views/InvoiceListView.tsx","../src/views/InvoiceFormView.tsx","../src/components/PaymentModal.tsx","../src/views/InvoiceDetailView.tsx","../src/views/PayablesView.tsx","../src/views/ReceivablesView.tsx","../src/views/CashRegistersView.tsx","../src/views/StatementsView.tsx","../src/views/CommissionsView.tsx","../src/views/CardsView.tsx","../src/components/FinancialGeneralSettings.tsx","../src/components/FinancialOnboarding.tsx","../src/FinancialPage.tsx","../src/views/dashboardWidgets.tsx","../src/data/mock.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/index.ts"],"names":["t","jsx","useTranslation","useState","useEffect","jsxs","SubpageHeader","Ban","useMemo","createPortal","X","CurrencyInput","DatePicker","Button","Check","CircleDashed","CircleEllipsis","CircleCheckBig","CircleAlert","useRef","Pencil","MoreVertical","FileText","PersonLink","Fragment","ChevronDown","CreditCard","Building2","DataTable","DollarSign","Landmark","ctx","today","createStore","toast","React"],"mappings":"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","file":"index.js","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}\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 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 from 'react'\nimport { DashboardCanvas } from '@fayz-ai/ui'\n\n/**\n * Financial summary. KPIs, cash-flow chart, breakdown, overdue alerts and the\n * recent-transactions table are registered dashboard widgets (see\n * ./dashboardWidgets), rendered through the shared DashboardCanvas; the\n * total-balance KPI also surfaces on the global app home.\n */\nexport function SummaryView() {\n return <DashboardCanvas surface=\"plugin-home\" domain=\"financial\" showHeader={false} className=\"space-y-6\" />\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, 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 } 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 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\n useEffect(() => {\n fetchInvoices({\n direction,\n status: statusFilter.length > 0 ? statusFilter : undefined,\n search: search || undefined,\n })\n }, [direction, statusFilter, search])\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 <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 }: {\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}) {\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 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 */}\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 {/* 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 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 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\">\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 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 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 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 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={() => setAddingItem(true)}\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={() => setAddingItem(true)} 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 />\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 } from '../types'\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 needsBankAccount = txType === 'bank_transfer' || txType === 'pix' || txType === 'check'\n const needsCard = txType === 'credit_card' || txType === 'debit_card'\n const needsCardInstallments = txType === 'credit_card'\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 async function handlePay() {\n if (amount <= 0 || !selectedTypeId) 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 })\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 >\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) })} &middot; {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 {/* Bank account */}\n {needsBankAccount && bankAccounts.length > 0 && (\n <div className=\"stagger-field\" style={{ animationDelay: '100ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.bankAccount')}</label>\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 {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n )}\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 || 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 }: {\n invoiceId: string\n direction: TransactionDirection\n onBack: () => void\n onEdit: () => void\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency } = config\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 [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 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={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')} />\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={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')} />\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={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')}\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 // Resolve names for payment details\n const method = paymentMethods.find((m) => m.id === mov.paymentMethodId)\n const methodType = paymentMethodTypes.find((t) => t.id === (method?.paymentMethodTypeId ?? mov.paymentMethodTypeId))\n const account = bankAccounts.find((a) => a.id === mov.bankAccountId)\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 ) : (\n <div className=\"flex flex-wrap items-center gap-x-1 gap-y-0.5 text-[11px] text-muted-foreground\">\n {methodType && (\n <>\n <span className=\"font-medium text-foreground\">{methodType.name}</span>\n {method && <span>({method.name})</span>}\n </>\n )}\n {mov.cardBrand && (\n <>\n {methodType && <span>&middot;</span>}\n <CreditCard className=\"h-3 w-3 shrink-0\" />\n <span className=\"font-medium text-foreground\">{mov.cardBrand}</span>\n {mov.cardInstallments && <span>{mov.cardInstallments}x</span>}\n </>\n )}\n {account && (\n <>\n {(methodType || mov.cardBrand) && <span>&middot;</span>}\n <Building2 className=\"h-3 w-3 shrink-0\" />\n <span>{account.name}</span>\n </>\n )}\n {mov.paidAmount > 0 && (\n <>\n <span>&middot;</span>\n <span className=\"font-medium text-success\">{formatCurrency(mov.paidAmount, currency)}</span>\n </>\n )}\n {mov.paymentDate && (\n <>\n <span>&middot;</span>\n <span>{mov.paymentDate}</span>\n </>\n )}\n {mov.notes && (\n <>\n <span>&middot;</span>\n <span className=\"italic truncate max-w-[200px]\">{mov.notes}</span>\n </>\n )}\n {!methodType && !mov.cardBrand && !account && !mov.notes && (\n <span>{t('financial.invoice.noDetails')}</span>\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","import React from 'react'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function PayablesView({ intent, onNavigate }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\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 return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"debit\"\n onBack={() => 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 { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function ReceivablesView({ intent, onNavigate }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\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 return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"credit\"\n onBack={() => 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, { useEffect, useState, useMemo } from 'react'\nimport { Receipt } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { StatementEntry } from '../types'\n\nexport function StatementsView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const statementEntries = useFinancialStore((s) => s.statementEntries)\n const statementLoading = useFinancialStore((s) => s.statementLoading)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\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() - 1)\n return d.toISOString().slice(0, 10)\n })\n const [dateTo, setDateTo] = useState(() => new Date().toISOString().slice(0, 10))\n\n useEffect(() => { fetchBankAccounts() }, [])\n\n useEffect(() => {\n if (accountId) {\n fetchStatement({ bankAccountId: accountId, dateRange: { from: dateFrom, to: dateTo } })\n }\n }, [accountId, dateFrom, dateTo])\n\n useEffect(() => {\n if (!accountId && bankAccounts.length > 0) setAccountId(bankAccounts[0].id)\n }, [bankAccounts])\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 <div>\n <p className=\"text-xs font-medium\">{row.original.invoice?.contactName || row.original.movement.notes || 'Transaction'}</p>\n <p className=\"text-[10px] text-muted-foreground capitalize\">{row.original.movement.movementKind}</p>\n </div>\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' ? formatCurrency(row.original.movement.paidAmount, currency) : ''}\n </span>\n ),\n },\n {\n id: 'credit', header: t('financial.statements.columnCredit'),\n cell: ({ row }) => (\n <span className=\"text-right block text-success text-xs\">\n {row.original.movement.direction === 'credit' ? formatCurrency(row.original.movement.paidAmount, currency) : ''}\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\">{formatCurrency(row.original.runningBalance, currency)}</span>\n ),\n },\n ], [currency, t])\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.statements.title')} subtitle={t('financial.statements.subtitle')} />\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=\"\">{t('financial.statements.selectAccount')}</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 {/* 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={5} />\n ) : statementEntries.length === 0 ? (\n <DataTable columns={columns} data={[]} emptyMessage={t('financial.statements.noTransactions')} />\n ) : (\n <DataTable columns={columns} data={statementEntries} />\n )}\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 } from 'react'\nimport { CreditCard, Check } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function CardsView() {\n const t = useTranslation()\n const { currency, labels } = useFinancialConfig()\n const cardTransactions = useFinancialStore((s) => s.cardTransactions)\n const cardsLoading = useFinancialStore((s) => s.cardsLoading)\n const fetchCardTransactions = useFinancialStore((s) => s.fetchCardTransactions)\n\n useEffect(() => { fetchCardTransactions() }, [])\n\n // Group by card brand\n const byBrand: Record<string, typeof cardTransactions> = {}\n for (const tx of cardTransactions) {\n const brand = tx.cardBrand || 'Other'\n if (!byBrand[brand]) byBrand[brand] = []\n byBrand[brand].push(tx)\n }\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.cards.title')} subtitle={t('financial.cards.subtitle')} />\n {cardsLoading ? (\n <div className=\"text-center py-12 text-sm text-muted-foreground\">Loading...</div>\n ) : cardTransactions.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-50 dark:bg-indigo-500/20 mb-2\">\n <CreditCard className=\"h-5 w-5 text-indigo-500\" />\n </div>\n <p className=\"text-sm text-muted-foreground\">{t('financial.cards.noTransactions')}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('financial.cards.transactionsAppear')}</p>\n </div>\n ) : (\n Object.entries(byBrand).map(([brand, txs]) => (\n <div key={brand} className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <CreditCard className=\"h-4 w-4 text-indigo-500\" />\n <h3 className=\"text-sm font-semibold\">{brand}</h3>\n <span className=\"text-xs text-muted-foreground\">({txs.length} transactions)</span>\n </div>\n <div className=\"divide-y\">\n {txs.map((tx) => (\n <div key={tx.id} className=\"px-4 py-3 flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">\n Installment {tx.currentInstallment}/{tx.installmentCount}\n </p>\n <p className=\"text-xs text-muted-foreground\">Due: {tx.expectedDate}</p>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium\">{formatCurrency(tx.installmentAmount, currency)}</span>\n {tx.status === 'received' ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-success/15 px-2 py-0.5 text-[10px] font-medium text-success dark:bg-success/20\">\n <Check className=\"h-2.5 w-2.5\" /> Received\n </span>\n ) : (\n <span className=\"inline-flex items-center rounded-full bg-warning/15 px-2 py-0.5 text-[10px] font-medium text-warning dark:bg-warning/20\">\n Pending\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n ))\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 } 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 } from '@fayz-ai/saas'\nimport { SummaryView } from './views/SummaryView'\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 { 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 if (config.modules.statements) {\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\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 } = useModuleNavigation('/financial', {\n summary: 0,\n 'payables-list': 0, 'payables-new': 1, 'receivables-list': 0, 'receivables-new': 1,\n 'cash-registers': 0, statements: 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 const t = useTranslation()\n const intent = parseIntent(view)\n const isSettings = view === 'settings'\n const nav = buildNav(config, view, navigate, t)\n\n const quickActions = useMemo<PluginQuickAction[]>(() => {\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])\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 <div style={{ marginBottom: '16px' }}>\n <h1 style={{ fontSize: '20px', fontWeight: 600, margin: 0 }}>{t('financial.settingsPage.title')}</h1>\n <p style={{ color: 'var(--muted-foreground, #6b7280)', margin: '4px 0 0', fontSize: '14px' }}>{t('financial.settingsPage.subtitle')}</p>\n </div>\n <FinancialGeneralSettings />\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} />\n case 'receivables':\n return <ReceivablesView intent={intent} onNavigate={navigate} />\n case 'cash-registers':\n return <CashRegistersView />\n case 'statements':\n return <StatementsView />\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 <ModuleActionBar\n quickActions={quickActions}\n settingsPath={registries && registries.length > 0 ? '/settings/financial' : undefined}\n settingsLabel={t('financial.settingsPage.title')}\n />\n }\n >\n {renderView()}\n </ModulePage>\n </FinancialContextProvider>\n )\n}\n","import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle } 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,\n defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget,\n} from '@fayz-ai/ui'\nimport { FinancialContextProvider, useFinancialConfig, useFinancialStore, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { FinancialUIState } from '../store'\nimport type { Invoice } 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// 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}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CardTransaction,\n CreateInvoiceInput, PayMovementInput,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, 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 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 cardTransactions: CardTransaction[]\n}\n\nfunction createStore(seedPaymentMethodTypes?: Array<{ name: string; transactionType?: string }>): MockStore {\n const tenantId = 'mock-tenant'\n\n const defaultPMTypes: PaymentMethodType[] = (seedPaymentMethodTypes ?? [\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 invoices: [],\n invoiceItems: [],\n movements: [],\n bankAccounts: [cashAccount, bankAccount],\n cashSessions: [],\n paymentMethods: [],\n paymentMethodTypes: defaultPMTypes,\n chartOfAccounts: [],\n cardTransactions: [],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mock provider factory\n// ---------------------------------------------------------------------------\n\nexport interface MockFinancialProviderOptions {\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n}\n\nexport function createMockFinancialProvider(options?: MockFinancialProviderOptions): FinancialDataProvider {\n const store = createStore(options?.paymentMethodTypes)\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.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 movement = store.movements.find((m) => m.id === input.movementId)\n if (!movement) throw new Error(`Movement ${input.movementId} not found`)\n\n movement.paidAmount += input.amount\n movement.paymentDate = input.paymentDate\n movement.paymentMethodId = input.paymentMethodId ?? movement.paymentMethodId\n movement.bankAccountId = input.bankAccountId ?? movement.bankAccountId\n movement.cashSessionId = input.cashSessionId ?? movement.cashSessionId\n movement.cardBrand = input.cardBrand\n movement.cardInstallments = input.cardInstallments\n movement.status = movement.paidAmount >= movement.amount ? 'paid' : 'partial'\n movement.updatedAt = now()\n\n // Update bank account balance\n if (movement.bankAccountId) {\n const account = store.bankAccounts.find((a) => a.id === movement.bankAccountId)\n if (account) {\n if (movement.direction === 'credit') {\n account.currentBalance += input.amount\n } else {\n account.currentBalance -= input.amount\n }\n account.updatedAt = now()\n }\n }\n\n // Recalculate invoice status\n if (movement.invoiceId) {\n const invoice = store.invoices.find((i) => i.id === movement.invoiceId)\n if (invoice) {\n const invoiceMovements = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n invoice.paidAmount = invoiceMovements.reduce((sum, m) => sum + m.paidAmount, 0)\n recalcInvoiceStatus(invoice)\n }\n }\n\n return movement\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 // --- 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 // --- 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 ---\n async getStatement(query: StatementQuery): Promise<StatementEntry[]> {\n const account = store.bankAccounts.find((a) => a.id === query.bankAccountId)\n if (!account) return []\n\n const movements = store.movements\n .filter((m) =>\n m.bankAccountId === query.bankAccountId &&\n m.status === 'paid' &&\n matchesDateRange(m.paymentDate, query.dateRange)\n )\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? ''))\n\n let runningBalance = account.initialBalance\n const entries: StatementEntry[] = []\n\n for (const movement of movements) {\n if (movement.direction === 'credit') {\n runningBalance += movement.paidAmount\n } else {\n runningBalance -= movement.paidAmount\n }\n const invoice = movement.invoiceId\n ? store.invoices.find((i) => i.id === movement.invoiceId)\n : undefined\n entries.push({ movement, invoice, runningBalance })\n }\n\n return entries\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 const monthStart = todayStr.slice(0, 7) + '-01'\n const monthEnd = todayStr\n\n const monthMovements = store.movements.filter((m) =>\n m.status === 'paid' && 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\n return provider\n}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CardTransaction,\n CreateInvoiceInput, PayMovementInput,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, CashSessionSummary,\n DateRange,\n} from '../types'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport { getFinancialTenantId } from '../lib/tenant'\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 return { core: supabase.schema('saas_core'), 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('financial_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('financial_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/dogfood-sprint/DATA-MODEL-REFACTOR.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\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 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('financial_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 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: { itemKind: item.itemKind, referenceId: item.referenceId },\n }))\n )\n }\n\n // Create installment movements\n if (order && input.installments.length > 0) {\n await pub.from('financial_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('financial_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('financial_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('financial_movements').select('*').eq('id', input.movementId).single()\n if (!mov) throw new Error('Movement not found')\n const newPaid = (mov.paid_amount ?? 0) + input.amount\n const newStatus = newPaid >= mov.amount ? 'paid' : 'partial'\n const updates: any = { paid_amount: newPaid, status: newStatus, payment_date: input.paymentDate }\n if (input.paymentMethodId) updates.payment_method_id = input.paymentMethodId\n if (input.paymentMethodTypeId) updates.payment_method_type_id = input.paymentMethodTypeId\n if (input.bankAccountId) updates.bank_account_id = input.bankAccountId\n if (input.cashSessionId) updates.cash_session_id = input.cashSessionId\n if (input.cardBrand) updates.card_brand = input.cardBrand\n if (input.cardInstallments) updates.card_installments = input.cardInstallments\n const { data } = await pub.from('financial_movements').update(updates).eq('id', input.movementId).select().single()\n\n // Update invoice (order) status based on all its movements\n if (mov.invoice_id) {\n const { data: allMovs } = await pub.from('financial_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 saas_core.bookings.\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('financial_movements').update({ status: 'cancelled' }).eq('id', id)\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('bank_accounts').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('bank_accounts').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('bank_accounts').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('cash_register_sessions').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('cash_register_sessions').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('cash_register_sessions').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('cash_register_sessions').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('cash_register_sessions').select('*').eq('id', sessionId).single()).data\n const { data: movs } = await pub.from('financial_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('payment_methods').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('payment_method_types').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('chart_of_accounts').select('*').eq('is_active', true).order('code')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as ChartOfAccountsNode)\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 ---\n async getStatement(query: StatementQuery): Promise<StatementEntry[]> {\n const { core, pub } = getClients()\n const { data: movs } = await pub.from('financial_movements').select('*')\n .eq('bank_account_id', query.bankAccountId).eq('status', 'paid')\n .gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n .order('payment_date')\n\n const { data: account } = await pub.from('bank_accounts').select('initial_balance').eq('id', query.bankAccountId).single()\n let balance = account?.initial_balance ?? 0\n\n return (movs ?? []).map((r: any) => {\n const mov = snakeToCamel(r) as unknown as FinancialMovement\n if (mov.direction === 'credit') balance += mov.paidAmount\n else balance -= mov.paidAmount\n return { movement: mov, runningBalance: balance }\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('bank_accounts').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('financial_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 const monthStart = today.slice(0, 7) + '-01'\n const monthPaid = allMovs.filter((m: any) => m.status === 'paid' && 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\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, StatementEntry,\n InvoiceQuery, MovementQuery, StatementQuery,\n CreateInvoiceInput, PayMovementInput,\n OpenCashSessionInput, CloseCashSessionInput,\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 statementEntries: StatementEntry[]\n statementLoading: boolean\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 payMovement(input: PayMovementInput): 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 statementEntries: [],\n statementLoading: false,\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 })\n const statementEntries = await provider.getStatement(query)\n set({ statementEntries, 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 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 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'\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: 'payment_method_types', 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 { key: 'paymentMethodTypeId', label: 'Type', type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check'], 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: 'payment_methods', 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: 'chart_of_accounts', 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: 'cost_centers', 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: 'bank_accounts', 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: 'card_brands', 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.installment\": \"Installment {{current}}/{{total}}\",\n \"financial.cards.noTransactions\": \"No card transactions\",\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.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.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.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}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"financial.cards.installment\": \"Parcela {{current}}/{{total}}\",\n \"financial.cards.noTransactions\": \"Nenhuma transação com cartão\",\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.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.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.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}\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 from 'react'\nimport type { PluginManifest, 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'\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 }\n labels?: Partial<FinancialPluginLabels>\n currency?: {\n code?: string\n locale?: string\n symbol?: string\n }\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 /** 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 },\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\n const PageComponent: React.FC<any> = () =>\n React.createElement(FinancialPage, { config, provider, store, registries: financialRegistries })\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 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: financialRegistries,\n settings: [\n {\n id: 'financial',\n label: 'Financial',\n icon: 'DollarSign',\n component: (() => {\n const FinancialSettingsTab: React.FC = () =>\n React.createElement(FinancialGeneralSettings)\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"]}