@fayz-ai/plugin-financial 0.26.2 → 0.26.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts","../src/lib/recent-transactions.ts","../src/views/dashboardWidgets.tsx","../src/lib/message-events.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/components/ReceivePaymentModal.tsx","../src/views/ClientAccountPanel.tsx","../src/components/ClientAccountModal.tsx","../src/components/financialZoneWidgets.ts","../src/components/ChartOfAccountsTree.tsx","../src/data/registries.ts","../src/lib/setup-guides.ts","../src/lib/onboarding.ts","../src/components/CashSessionHeaderControl.tsx","../src/lib/analytics-cards.ts","../src/integrations/stripe/connectorDef.tsx","../src/integrations/acquirers/shared.ts","../src/integrations/mercadopago/connectorDef.tsx","../src/integrations/pagbank/connectorDef.tsx","../src/integrations/cielo/connectorDef.tsx","../src/integrations/stone/connectorDef.tsx","../src/settings/CardMachinesSettings.tsx","../src/settings/v1-settings.ts","../src/lib/settings-only.ts","../src/index.ts"],"names":["React","CreditCardIcon","store","jsx","jsxs","Button","createSafeFinancialProvider","createFinancialStore","useTranslation","tree","Input","FileText","tl","T","useZustand","Fragment","methodsDetail","METHOD_LABELS","createConnectionStore","connectionStatus","settingsStatus","connectionSettings","fayzConnectorOAuth","connectionRuns","React8","Badge","registerTranslations","lazyComponent","PluginSettingsPanel"],"mappings":"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","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// O config do plugin, e os padrões dele.\n//\n// MÓDULO PRÓPRIO, e não `index.ts`, por uma razão de carregamento: as cascas\n// avulsas (`ReceivePaymentModal`, `ClientAccountInline`) precisam do mesmo\n// `resolveConfig`, e `index.ts` reexporta essas cascas. Importá-lo de lá fecha\n// um ciclo, e um ciclo aqui não dá erro de tipo nem de lint — dá uma TELA\n// BRANCA, porque `const DEFAULT_LABELS` ainda não foi inicializada quando o\n// outro lado do ciclo roda. Um arquivo sem ida e volta não tem esse estado.\n// ---------------------------------------------------------------------------\nimport type { FinancialPluginLabels, FinancialPluginOptions, ItemTypeOption } from './index'\nimport type { ResolvedFinancialConfig } from './context'\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 goals: 'Metas',\n giftCards: 'Gift Cards',\n cardsOverview: 'Overview',\n cardsReconciliation: 'Reconciliation',\n notasFiscais: 'Fiscal Invoices',\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 // O pacote é o terceiro catálogo da casa que atende: um bloco de sessões\n // vendido de uma vez. Só aparece onde há `entityLookups.package` instalado —\n // e, dentro dessas, só onde o catálogo tem linhas (useStockedItemTypes).\n { value: 'package', label: 'Package', icon: 'PackageCheck' },\n { value: 'product', label: 'Product', icon: 'Package' },\n { value: 'other', label: 'Other', icon: 'MoreHorizontal' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\n/**\n * O config COMPLETO a partir do que o app passou.\n *\n * Exportado porque as cascas avulsas (`ReceivePaymentModal`, `ClientAccountInline`)\n * precisam do MESMO objeto: montar um config à mão com os dois ou três campos\n * que a tela da vez lê é como uma tela embutida ali depois quebra, sem que o\n * tipo acuse — ver `STANDALONE_CONFIG`.\n */\nexport function 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 // Era opt-in porque a comissão era um cadastro que nada lia: o item de\n // menu só podia levar a uma tela vazia. Desde 009 existe apuração e desde\n // 012 existe borderô, e a tela mostra o que eles produziram — então o\n // motivo do opt-in acabou junto com a tela vazia.\n commissions: options?.modules?.commissions !== false,\n cards: options?.modules?.cards !== false,\n goals: options?.modules?.goals !== false,\n // Ligado como as outras: quando a loja não está instalada a própria tela\n // diz isso, então o item de menu nunca leva a um beco.\n giftCards: options?.modules?.giftCards !== false,\n // Opt-in: only shown when an app explicitly enables reconciliation (bank connector present).\n reconciliation: options?.modules?.reconciliation === true,\n // Opt-in: only shown when an app explicitly enables fiscal-invoice tracking.\n // LIGADA como as outras (`!== false`), e não opt-in. Estava em\n // `=== true`: quem não passasse a opção nunca via a tela, e o V1 tem\n // Notas Fiscais no menu do Financeiro desde sempre. A tela se explica\n // sozinha quando o provider não expõe notas, então ligá-la não deixa\n // ninguém diante de um beco.\n notasFiscais: options?.modules?.notasFiscais !== false,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n moduleNav: options?.moduleNav,\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 fiscalProvider: options?.fiscalProvider,\n onBookingClick: options?.onBookingClick,\n navFeatureMap: { ...options?.navFeatureMap },\n }\n}\n","import type { Invoice, InvoiceQuery } from '@fayz-ai/financial/domain/invoice'\n\n// Newest entered first. The list's default order (soonest due) put February's\n// bills in a widget called \"recent\". The due-date window keeps the read on the\n// indexed column instead of the tenant's whole history.\nexport const RECENT_TRANSACTIONS_QUERY: InvoiceQuery = { sort: 'recent', pageSize: 20 }\n\nconst iso = (d: Date) =>\n `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n\n/** Due dates from 90 days ago through the end of next month (local time). */\nexport function recentWindow(now = new Date()): { from: string; to: string } {\n return {\n from: iso(new Date(now.getFullYear(), now.getMonth(), now.getDate() - 90)),\n to: iso(new Date(now.getFullYear(), now.getMonth() + 2, 0)),\n }\n}\n\n/** One row per bill: a purchase in 12x would otherwise fill the widget alone. */\nexport function latestPerInvoice(lines: Invoice[], limit: number): Invoice[] {\n const seen = new Set<string>()\n const out: Invoice[] = []\n for (const line of lines) {\n const key = line.invoiceId ?? line.id\n if (seen.has(key)) continue\n seen.add(key)\n out.push(line)\n if (out.length === limit) break\n }\n return out\n}\n","import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle, CreditCard as CreditCardIcon, Eye, EyeOff } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation, resolveCurrency } from '@fayz-ai/core'\nimport {\n Button,\n KpiCard, ChartWidget, TableWidget, Card, CardHeader, CardTitle, CardContent, GoldCard,\n defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, useDashboardNavigate,\n} from '@fayz-ai/ui'\nimport { FinancialContextProvider, useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency, type ResolvedFinancialConfig } from '../context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { FinancialUIState } from '@fayz-ai/financial/store'\nimport type { Invoice } from '@fayz-ai/financial/domain/invoice'\nimport type { FinancialMovement } from '@fayz-ai/financial/domain/movement'\nimport { RECENT_TRANSACTIONS_QUERY, latestPerInvoice, recentWindow } from '../lib/recent-transactions'\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 // Money in a currency with no rate on file is outside every total: say so here, once.\n const left = (summary?.excluded ?? [])\n .map((x) => formatCurrency(x.balance || x.receivable - x.payable || x.inflow - x.outflow, resolveCurrency(currency, x.currency)))\n .join(' · ')\n const sub = left ? `Fora do total, sem câmbio disponível: ${left}` : t('financial.summary.allAccounts')\n return <KpiCard label={t('financial.summary.totalBalance')} icon=\"Wallet\" value={formatCurrency(summary?.totalBalance ?? 0, currency)} sub={loading ? undefined : sub} />\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 provider = useFinancialProvider()\n // Read locally, not through the store's `invoices`: that slice belongs to the\n // Contas a Pagar/Receber list, and a dashboard fetch written there replaced\n // the list's filtered page with these five rows.\n const [invoices, setInvoices] = React.useState<Invoice[]>([])\n useEffect(() => {\n let alive = true\n void provider.getInvoices({ ...RECENT_TRANSACTIONS_QUERY, dateRange: recentWindow() })\n .then((res) => { if (alive) setInvoices(latestPerInvoice(res.data, 5)) })\n .catch((error: unknown) => console.warn('[financial] recent transactions unavailable', error))\n return () => { alive = false }\n }, [provider])\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} emptyMessage={t('financial.summary.noTransactions')} />\n}\n\n// ---------------------------------------------------------------------------\n// HOME surface (B2C) — a phone-first money dashboard that reflows into cells on\n// desktop. These render on surface=\"home\" only; the plugin-home Resumo widgets\n// above are untouched. Same store/provider, so figures match the Financeiro\n// module (FAY-1233 mobile-summary logic, generalized into reusable widgets).\n// ---------------------------------------------------------------------------\n\n/** Human \"due in N days\" label from a YYYY-MM-DD due date. */\nfunction useDueLabel() {\n const t = useTranslation()\n return (dueDate: string): string => {\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n const due = new Date(`${dueDate}T00:00:00`)\n const days = Math.round((due.getTime() - today.getTime()) / 86_400_000)\n if (days < 0) return t('financial.home.overdueDays', { count: String(Math.abs(days)) })\n if (days === 0) return t('financial.home.dueToday')\n if (days === 1) return t('financial.home.dueTomorrow')\n return t('financial.home.dueInDays', { count: String(days) })\n }\n}\n\n/** Branded balance hero — Saldo + eye-toggle + clickable Entradas/Saídas pills.\n * Compact band (span-4): tight padding so it never becomes a tall empty block on\n * desktop. Pills deep-link into the Financeiro module (receivables / payables). */\nfunction BalanceHero() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const navigate = useDashboardNavigate()\n useEnsureSummary()\n const [hidden, setHidden] = React.useState(false)\n const money = (v: number | null | undefined) => (hidden ? '••••••' : formatCurrency(v ?? 0, currency))\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return (\n <GoldCard branded className=\"px-5 py-4 text-center md:px-8 md:py-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide opacity-75\">{t('financial.home.balance')}</p>\n <div className=\"mt-0.5 flex items-center justify-center gap-2.5\">\n <span className=\"text-3xl font-bold tracking-tight tabular-nums md:text-4xl\">{money(summary?.totalBalance)}</span>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setHidden((h) => !h)}\n aria-label={hidden ? t('financial.home.showBalance') : t('financial.home.hideBalance')}\n className=\"font-normal rounded-full p-1.5 text-primary-foreground/80 transition-colors hover:bg-white/10\"\n >\n {hidden ? <EyeOff className=\"h-5 w-5\" /> : <Eye className=\"h-5 w-5\" />}\n </Button>\n </div>\n <div className=\"mx-auto mt-3 grid max-w-lg grid-cols-2 gap-3\">\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => navigate('/financial/receivables-list')}\n aria-label={t('financial.home.inflow')}\n className=\"font-normal whitespace-normal flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-emerald-500/90\">\n <ArrowUpRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.inflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(inflow)}</span>\n </span>\n </Button>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => navigate('/financial/payables-list')}\n aria-label={t('financial.home.outflow')}\n className=\"font-normal whitespace-normal flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-rose-500/90\">\n <ArrowDownRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.outflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(outflow)}</span>\n </span>\n </Button>\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// HOME charts — spend-by-category (donut) + cash-flow (in vs out). Both read the\n// same provider/store as the module, so figures stay coherent. surface 'home'\n// only (the plugin-home Resumo keeps its own cash-flow chart untouched).\n// ---------------------------------------------------------------------------\n\n/** Provider-agnostic expense classifier: maps a movement's label to a spend\n * bucket by keyword (pt-BR + en). Checked in priority order; first hit wins. */\nconst SPEND_CATEGORIES: Array<{ key: string; keywords: string[] }> = [\n { key: 'subscriptions', keywords: ['netflix', 'spotify', 'prime video', 'disney', 'hbo', ' max', 'youtube', 'apple', 'assinatura', 'subscription'] },\n { key: 'groceries', keywords: ['supermercado', 'mercado', 'padaria', 'hortifruti', 'feira', 'açougue', 'grocery', 'market'] },\n { key: 'transport', keywords: ['uber', '99', 'taxi', 'posto', 'shell', 'ipiranga', 'combustível', 'gasolina', 'metrô', 'ônibus', 'transport', 'fuel'] },\n { key: 'dining', keywords: ['ifood', 'rappi', 'restaurante', 'outback', 'lanchonete', 'pizzaria', 'café', 'cafeteria', 'mcdonald', 'burger', 'food'] },\n { key: 'home', keywords: ['aluguel', 'condomínio', 'luz', 'enel', 'água', 'sabesp', 'internet', 'vivo', 'claro', 'gás', 'iptu', 'rent', 'utilit'] },\n { key: 'health', keywords: ['farmácia', 'farmacia', 'drogasil', 'drogaria', 'academia', 'smartfit', 'clínica', 'hospital', 'médico', 'saúde', 'gym', 'fitness', 'health', 'pharmac'] },\n { key: 'leisure', keywords: ['cinema', 'cinemark', 'ingresso', 'show', 'teatro', 'viagem', 'hotel', 'steam', 'leisure'] },\n { key: 'shopping', keywords: ['amazon', 'magalu', 'shopee', 'aliexpress', 'loja', 'shopping', 'zara', 'renner', 'store'] },\n]\n\nfunction categorizeSpend(notes: string | undefined): string {\n const s = (notes ?? '').toLowerCase()\n for (const c of SPEND_CATEGORIES) if (c.keywords.some((k) => s.includes(k))) return c.key\n return 'other'\n}\n\n/** \"Gastos por categoria\" — realized expenses grouped into a donut. */\nfunction SpendByCategoryChart() {\n const t = useTranslation()\n const provider = useFinancialProvider()\n const [rows, setRows] = React.useState<Array<{ name: string; value: number }>>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const res = await provider.getMovements({ status: 'paid', direction: 'debit' })\n if (!alive) return\n const totals = new Map<string, number>()\n for (const m of res.data) {\n if (m.movementKind === 'transfer') continue\n const key = categorizeSpend(m.notes)\n totals.set(key, (totals.get(key) ?? 0) + (m.paidAmount || m.amount))\n }\n setRows(\n [...totals.entries()]\n .sort((a, b) => b[1] - a[1])\n .map(([key, value]) => ({ name: t(`financial.home.category.${key}`), value: Math.round(value * 100) / 100 })),\n )\n })()\n return () => { alive = false }\n }, [provider])\n if (rows.length === 0) {\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.home.spendByCategory')}</CardTitle></CardHeader>\n <CardContent className=\"flex h-[200px] items-center justify-center text-sm text-muted-foreground\">\n {t('financial.home.noSpend')}\n </CardContent>\n </Card>\n )\n }\n return (\n <ChartWidget\n type=\"pie\" title={t('financial.home.spendByCategory')} icon=\"PieChart\" categoryKey=\"name\" data={rows}\n series={[{ dataKey: 'value', label: t('financial.home.spendByCategory') }]}\n />\n )\n}\n\n/** \"Próximas contas\" — pending payable bills, soonest due first. */\nfunction UpcomingBills() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const dueLabel = useDueLabel()\n const [bills, setBills] = React.useState<FinancialMovement[]>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const pending = await provider.getMovements({ status: 'pending' })\n if (!alive) return\n setBills(\n pending.data\n .filter((m) => m.direction === 'debit' && m.movementKind === 'bill')\n .sort((a, b) => a.dueDate.localeCompare(b.dueDate)),\n )\n })()\n return () => { alive = false }\n }, [provider])\n return (\n <GoldCard className=\"p-0 overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <h2 className=\"text-sm font-semibold text-foreground\">{t('financial.home.upcomingBills')}</h2>\n </div>\n <div className=\"mt-3\">\n {bills.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-xs text-muted-foreground\">{t('financial.home.noBills')}</div>\n ) : (\n bills.map((bill, i) => (\n <div key={bill.id} className={'flex items-center justify-between px-4 py-3.5' + (i > 0 ? ' border-t border-border' : '')}>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-foreground\">{bill.notes ?? t('financial.home.bill')}</p>\n <p className=\"text-xs text-muted-foreground\">{dueLabel(bill.dueDate)}</p>\n </div>\n <span className=\"shrink-0 text-sm font-semibold tabular-nums text-foreground\">\n {formatCurrency(bill.amount - bill.paidAmount, currency)}\n </span>\n </div>\n ))\n )}\n </div>\n </GoldCard>\n )\n}\n\n/** \"Cartões\" — credit-card accounts with current bill + available limit. */\nfunction CreditCards() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n useEffect(() => { void fetchBankAccounts() }, [])\n const cards = bankAccounts.filter((a) => a.accountType === 'card_payable')\n return (\n <GoldCard className=\"bg-transparent border-0 p-0 shadow-none\">\n <h2 className=\"mb-3 text-sm font-semibold text-foreground\">{t('financial.home.cards')}</h2>\n <div className=\"space-y-3\">\n {cards.map((card) => {\n const fatura = Math.abs(Math.min(0, card.currentBalance))\n const limite = Math.max(0, (card.creditLimit ?? 0) - fatura)\n return (\n <div key={card.id} className=\"rounded-2xl bg-gradient-to-br from-violet-600 to-indigo-700 p-4 text-white shadow-md\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-semibold\">{card.bankName ?? card.name}</span>\n <CreditCardIcon className=\"h-5 w-5 opacity-80\" />\n </div>\n <p className=\"mt-6 text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.currentBill')}</p>\n <p className=\"text-xl font-bold tabular-nums\">{formatCurrency(fatura, currency)}</p>\n <p className=\"mt-2 text-[11px] opacity-70\">{t('financial.home.availableLimit')} {formatCurrency(limite, currency)}</p>\n </div>\n )\n })}\n {cards.length === 0 ? (\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border py-6 text-sm font-medium text-muted-foreground\">\n + {t('financial.home.addCard')}\n </div>\n ) : null}\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Registry builder\n// ---------------------------------------------------------------------------\n\nexport function createFinancialDashboardWidgets(ctx: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <FinancialContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </FinancialContextProvider>\n )\n Wrapped.displayName = `FinancialWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Total balance is finance's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the financial plugin-home, addable via Customize).\n defineKpiWidget({ id: 'financial.kpi.total-balance', title: 'financial.summary.totalBalance', domain: 'financial', defaultOrder: 0, component: withCtx(TotalBalanceKpi) }),\n defineKpiWidget({ id: 'financial.kpi.receivable', title: 'financial.summary.receivable', domain: 'financial', defaultOrder: 1, defaultVisible: false, component: withCtx(ReceivableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.payable', title: 'financial.summary.payable', domain: 'financial', defaultOrder: 2, defaultVisible: false, component: withCtx(PayableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.monthly-flow', title: 'financial.summary.monthlyFlow', domain: 'financial', defaultOrder: 3, defaultVisible: false, component: withCtx(MonthlyFlowKpi) }),\n defineChartWidget({ id: 'financial.chart.cash-flow', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.panel.breakdown', title: 'financial.summary.cashFlowBreakdown', domain: 'financial', span: 1, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(CashFlowBreakdown) }),\n defineCustomWidget({ id: 'financial.panel.overdue', title: 'financial.summary.overdueTitle', domain: 'financial', span: 1, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(OverdueAlerts) }),\n defineTableWidget({ id: 'financial.table.recent', title: 'financial.summary.recentTransactions', domain: 'financial', span: 4, defaultOrder: 20, surfaces: ['plugin-home'], component: withCtx(RecentTransactions) }),\n\n // FINANCE-HOME surface (B2C phone-first dashboard) — a compact analytical\n // layout: hero band → charts row (spend-by-category + cash-flow) → bills +\n // cards. This is a dedicated consumer surface (norman-ai's money screen), NOT\n // the universal B2B 'home': a full-bleed balance hero and credit-card tiles\n // are personal-finance chrome that would leak into every app that merely\n // enables plugin-financial (e.g. the beauty-saas Painel). Apps that want them\n // opt in explicitly by rendering <DashboardCanvas surface=\"finance-home\">.\n defineCustomWidget({ id: 'financial.hero.balance', title: 'financial.home.balance', domain: 'financial', span: 4, defaultOrder: 0, surfaces: ['finance-home'], component: withCtx(BalanceHero) }),\n defineChartWidget({ id: 'financial.chart.spend-by-category', title: 'financial.home.spendByCategory', domain: 'financial', span: 2, defaultOrder: 1, surfaces: ['finance-home'], component: withCtx(SpendByCategoryChart) }),\n defineChartWidget({ id: 'financial.chart.cash-flow-home', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 2, surfaces: ['finance-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.list.upcoming-bills', title: 'financial.home.upcomingBills', domain: 'financial', span: 2, defaultOrder: 3, surfaces: ['finance-home'], component: withCtx(UpcomingBills) }),\n defineCustomWidget({ id: 'financial.cards', title: 'financial.home.cards', domain: 'financial', span: 2, defaultOrder: 4, surfaces: ['finance-home'], component: withCtx(CreditCards) }),\n ]\n}\n","import type { PluginEventDefinition, MessageDefaultsDef, EventField } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Os FATOS do financeiro, e — separadamente — o texto sugerido para cada um.\n//\n// buildFinancialDomainEvents() o contrato do fato. Webhook (uma nota\n// fiscal, um ERP) e auditoria leem isto.\n// buildFinancialMessageDefaults() uma REAÇÃO: canal + texto.\n//\n// Cobrança é o assunto em que o texto padrão mais importa: quem escreve na\n// pressa manda uma cobrança seca e perde o cliente junto com o atraso. Os\n// padrões daqui são firmes na informação e leves no tom — e o lembrete de\n// vencimento sai ANTES do vencimento, que é quando ainda dá para pagar sem\n// constrangimento.\n// ---------------------------------------------------------------------------\n\nconst INVOICE_FIELDS: EventField[] = [\n { name: 'customer_name', label: 'Cliente', type: 'string', example: 'Maria Silva' },\n { name: 'invoice_number', label: 'Número', type: 'string', example: '0042' },\n { name: 'invoice_total', label: 'Valor', type: 'money', example: 'R$ 1.250,00' },\n { name: 'due_date', label: 'Vencimento', type: 'date', example: '20/08/2026' },\n { name: 'invoice_url', label: 'Link da fatura', type: 'url', example: 'https://sua.app/faturas/0042' },\n { name: 'business_name', label: 'Seu negócio', type: 'string', example: 'Seu Negócio' },\n]\n\n/**\n * Os FATOS do financeiro.\n *\n * Todos auditados: dinheiro é justamente o assunto em que \"quem emitiu isto?\"\n * e \"quando foi baixado?\" precisam de resposta — e a trilha é o único lugar\n * onde a resposta sobrevive a uma edição posterior. 'invoice_due_soon' é a\n * exceção: é o calendário passando, não um ato de alguém.\n */\nexport function buildFinancialDomainEvents(): PluginEventDefinition[] {\n return [\n { name: 'financial.invoice_created', title: 'Fatura emitida', icon: 'FilePlus2', audit: true,\n description: 'Uma cobrança foi gerada',\n trigger: 'Quando a fatura é emitida',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_due_soon', title: 'Fatura a vencer', icon: 'CalendarClock', audit: false,\n description: 'O vencimento está próximo',\n trigger: 'Nos dias que antecedem o vencimento',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_paid', title: 'Fatura paga', icon: 'CircleCheck', audit: true,\n description: 'O pagamento foi recebido',\n trigger: 'Quando a fatura é baixada como paga',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_overdue', title: 'Fatura vencida', icon: 'AlertTriangle', audit: true,\n description: 'A cobrança passou do vencimento',\n trigger: 'Quando a fatura vence sem pagamento',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_cancelled', title: 'Fatura cancelada', icon: 'FileX2', audit: true,\n description: 'A cobrança foi cancelada',\n trigger: 'Quando a fatura é cancelada',\n fields: INVOICE_FIELDS },\n ]\n}\n\nexport function buildFinancialMessageDefaults(): MessageDefaultsDef[] {\n return [\n {\n eventKey: 'financial.invoice_created',\n kind: 'transactional',\n channels: ['email', 'whatsapp'],\n defaults: {\n email: {\n subject: 'Fatura {{invoice_number}} — {{invoice_total}}',\n body: 'Olá {{customer_name}},\\n\\nSegue a fatura {{invoice_number}}, no valor de {{invoice_total}}, com vencimento em {{due_date}}.\\n\\n{{invoice_url}}\\n\\nQualquer dúvida, é só responder este e-mail.\\n\\n{{business_name}}',\n },\n whatsapp: {\n body: 'Oi {{customer_name}}! Segue a fatura {{invoice_number}} 📄\\n\\nValor: {{invoice_total}}\\nVencimento: {{due_date}}\\n{{invoice_url}}\\n\\n— {{business_name}}',\n },\n },\n defaultEnabled: { email: true },\n },\n {\n eventKey: 'financial.invoice_due_soon',\n kind: 'transactional',\n channels: ['whatsapp', 'email'],\n defaults: {\n whatsapp: {\n body: 'Oi {{customer_name}}! Lembrete tranquilo: a fatura {{invoice_number}} ({{invoice_total}}) vence em {{due_date}}.\\n\\n{{invoice_url}}\\n\\n— {{business_name}}',\n },\n email: {\n subject: 'Sua fatura {{invoice_number}} vence em {{due_date}}',\n body: 'Olá {{customer_name}},\\n\\nUm lembrete: a fatura {{invoice_number}}, de {{invoice_total}}, vence em {{due_date}}.\\n\\n{{invoice_url}}\\n\\nSe já pagou, pode desconsiderar.\\n\\n{{business_name}}',\n },\n },\n defaultEnabled: { email: true },\n },\n {\n eventKey: 'financial.invoice_paid',\n kind: 'transactional',\n channels: ['email', 'whatsapp'],\n defaults: {\n email: {\n subject: 'Recebemos o pagamento da fatura {{invoice_number}}',\n body: 'Olá {{customer_name}},\\n\\nConfirmamos o recebimento de {{invoice_total}} referente à fatura {{invoice_number}}.\\n\\nObrigado!\\n\\n{{business_name}}',\n },\n whatsapp: {\n body: 'Oi {{customer_name}}! Pagamento da fatura {{invoice_number}} confirmado ✅\\n\\nObrigado! — {{business_name}}',\n },\n },\n // Confirmar recebimento é o mínimo: sem isso o cliente fica sem saber se\n // o dinheiro chegou, e a próxima mensagem dele é uma pergunta.\n defaultEnabled: { email: true },\n },\n {\n eventKey: 'financial.invoice_overdue',\n kind: 'transactional',\n channels: ['whatsapp', 'email'],\n defaults: {\n whatsapp: {\n body: 'Oi {{customer_name}}, tudo bem?\\n\\nA fatura {{invoice_number}} ({{invoice_total}}) venceu em {{due_date}} e consta em aberto por aqui.\\n\\n{{invoice_url}}\\n\\nSe precisar de outra data, me avisa que a gente resolve. — {{business_name}}',\n },\n email: {\n subject: 'Fatura {{invoice_number}} em aberto',\n body: 'Olá {{customer_name}},\\n\\nA fatura {{invoice_number}}, de {{invoice_total}}, venceu em {{due_date}} e consta em aberto.\\n\\n{{invoice_url}}\\n\\nSe já efetuou o pagamento, desconsidere este aviso. Se precisar de outra data, é só responder.\\n\\n{{business_name}}',\n },\n },\n // Cobrança de atraso NÃO nasce ligada: a primeira mensagem que uma conta\n // nova manda sozinha não pode ser uma cobrança escrita por outra pessoa.\n },\n {\n eventKey: 'financial.invoice_cancelled',\n kind: 'transactional',\n channels: ['email'],\n defaults: {\n email: {\n subject: 'Fatura {{invoice_number}} cancelada',\n body: 'Olá {{customer_name}},\\n\\nA fatura {{invoice_number}}, de {{invoice_total}}, foi cancelada e não precisa ser paga.\\n\\n{{business_name}}',\n },\n },\n },\n ]\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"financial.payment.pendingRetry\": \"Confirmation is still pending. Do not start another payment — retry right here.\",\n \"financial.cards.addExpense\": \"Add expense\",\n \"financial.cards.expenseOnCard\": \"Expense on this card\",\n \"financial.cards.allBillsValue\": \"All bills value\",\n \"financial.cards.availableLimit\": \"Available limit\",\n \"financial.cards.currentBill\": \"Current bill\",\n \"financial.cards.dueOn\": \"Due on the {{day}}\",\n \"financial.cards.installment\": \"Installment {{current}}/{{total}}\",\n \"financial.cards.loading\": \"Loading...\",\n \"financial.cards.noCards\": \"No cards yet\",\n \"financial.cards.noCardsHint\": \"Add a credit card in settings to track your bills here\",\n \"financial.cards.empty.step\": \"An account of type Credit Card\",\n \"financial.cards.empty.stepWhere\": \"Records → Accounts\",\n \"financial.cards.noTransactions\": \"No card transactions\",\n \"financial.cards.tabClosed\": \"Closed\",\n \"financial.cards.tabOpen\": \"Open\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% of limit used\",\n \"financial.cards.pending\": \"Pending\",\n \"financial.cards.received\": \"Received\",\n \"financial.cards.subtitle\": \"Credit and debit card transactions\",\n \"financial.cards.title\": \"Cards\",\n \"financial.cards.transactions\": \"({{count}} transactions)\",\n \"financial.cards.transactionsAppear\": \"Card transactions will appear here when payments are made via credit/debit cards\",\n \"financial.cashRegisters.addNotes\": \"Add notes\",\n \"financial.cashRegisters.back\": \"Back\",\n \"financial.cashRegisters.bills\": \"Bills\",\n \"financial.cashRegisters.closeSession\": \"Close Session\",\n \"financial.cashRegisters.closeThisSession\": \"Close this session\",\n \"financial.cashRegisters.closing\": \"Closing...\",\n \"financial.cashRegisters.closingBalance\": \"Closing Balance\",\n \"financial.cashRegisters.closingNotes\": \"Closing Notes\",\n \"financial.cashRegisters.coins\": \"Coins\",\n \"financial.cashRegisters.confirmOpen\": \"Confirm & Open\",\n \"financial.cashRegisters.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cashRegisters.count\": \"Count\",\n \"financial.cashRegisters.countBills\": \"Count Bills & Coins\",\n \"financial.cashRegisters.countedTotal\": \"Counted Total\",\n \"financial.cashRegisters.denominationCount\": \"Denomination count\",\n \"financial.cashRegisters.differenceFromOpening\": \"Difference from opening\",\n \"financial.cashRegisters.method\": \"Method\",\n \"financial.cashRegisters.noCashAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cashRegisters.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cashRegisters.openAnother\": \"Open another register\",\n \"financial.cashRegisters.openSession\": \"Open Session\",\n \"financial.cashRegisters.openSessions\": \"Open Sessions\",\n \"financial.cashRegisters.opened\": \"Opened\",\n \"financial.cashRegisters.opening\": \"Opening...\",\n \"financial.cashRegisters.openingBalance\": \"Opening Balance\",\n \"financial.cashRegisters.quickAmount\": \"Quick Amount\",\n \"financial.cashRegisters.register\": \"Register\",\n \"financial.cashRegisters.sessionHistory\": \"Session History\",\n \"financial.cashRegisters.subtitle\": \"Open, count and close cash sessions\",\n \"financial.commissions.emptyTitle\": \"No commissions calculated\",\n \"financial.commissions.emptyDesc\": \"This module tracks commission rules, but nothing here calculates a commission from your sales yet.\",\n \"financial.commissions.emptyRulesHint\": \"Commission rules are managed under Settings › Financial › Properties.\",\n \"financial.commissions.subtitle\": \"Team commissions\",\n \"financial.invoice.accountsPayable\": \"Accounts Payable\",\n \"financial.invoice.accountsReceivable\": \"Accounts Receivable\",\n \"financial.invoice.bulkCancel\": \"Cancel\",\n \"financial.invoice.rowOpen\": \"Open\",\n \"financial.invoice.rowAttachments\": \"Attachments\",\n \"financial.invoice.bulkCancelDone\": \"{{count}} invoice(s) cancelled\",\n \"financial.invoice.bulkCancelFailed\": \"{{count}} invoice(s) could not be cancelled\",\n \"financial.invoice.bulkCancelNone\": \"None of the selected invoices can be cancelled.\",\n \"financial.invoice.bulkCancelTitle\": \"Cancel {{count}} invoice(s)?\",\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.cancelReason\": \"Reason for cancellation\",\n \"financial.invoice.cancelReasonPlaceholder\": \"Explain why this invoice is being cancelled\",\n \"financial.invoice.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoice.cancelling\": \"Cancelling...\",\n \"financial.invoice.contact\": \"Contact\",\n \"financial.invoice.payTo\": \"Pay to\",\n \"financial.invoice.receiveFrom\": \"Receive from\",\n \"financial.invoice.unit\": \"Unit\",\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.item\": \"Item\",\n \"financial.invoice.items\": \"Items\",\n \"financial.invoice.noLines\": \"No lines — the total was saved without its lines. Edit to itemize.\",\n \"financial.invoice.keepInvoice\": \"Keep Invoice\",\n \"financial.invoice.new\": \"New\",\n \"financial.invoice.newManual\": \"Create\",\n \"financial.invoiceForm.createContact\": \"Create\",\n \"financial.invoiceForm.alreadyPaid\": \"Already paid\",\n \"financial.invoiceForm.paidWith\": \"Payment method\",\n \"financial.invoiceForm.paidFrom\": \"Paid from\",\n \"financial.invoiceForm.selectMethod\": \"Select a method\",\n \"financial.invoiceForm.selectAccount\": \"Select an account\",\n \"financial.invoiceForm.selectMethodFirst\": \"Pick a method first\",\n \"financial.invoiceForm.scheduleSourceHint\": \"Method and account are set on each due date.\",\n \"financial.invoiceForm.paidNeedsMethod\": \"Tell us the payment method and the account\",\n \"financial.invoiceForm.willBePaid\": \"This installment will be settled\",\n \"financial.invoiceForm.attachFailed\": \"The bill was saved, but an attachment did not upload\",\n \"financial.invoiceForm.attachOnSave\": \"attached on save\",\n \"financial.invoiceForm.clear\": \"Clear\",\n \"financial.invoiceForm.manageAccounts\": \"Manage accounts\",\n \"financial.invoiceForm.manageChart\": \"Manage chart of accounts\",\n \"financial.invoiceForm.manageCostCenters\": \"Manage cost centers\",\n \"financial.invoice.newManualHint\": \"Open the full invoice form\",\n \"financial.invoice.noDetails\": \"No additional details recorded\",\n \"financial.invoice.unlinkedPayments\": \"Payments not linked to an installment\",\n \"financial.invoice.unlinkedPaymentsDesc\": \"Money recorded against this invoice that does not name one of the installments above.\",\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.loadFailed\": \"Could not load\",\n \"financial.invoice.loadFailedDesc\": \"Reading this invoice failed. The data is still there — it just did not reach the screen.\",\n \"financial.invoice.retry\": \"Try again\",\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.receive\": \"Receive\",\n \"financial.invoice.reverse\": \"Reverse\",\n \"financial.invoice.reverseTitle\": \"Reverse payment\",\n \"financial.invoice.reverseReason\": \"Reason for reversal\",\n \"financial.invoice.reverseHint\": \"{{count}} payment(s) · {{total}}\",\n \"financial.invoice.reversePayments\": \"Payments of this installment\",\n \"financial.invoice.reverseExplain\": \"All come checked: reversing only one leaves the installment partial. Each reversal posts the counter-entry on the same account and the installment opens again.\",\n \"financial.invoice.reverseConfirm\": \"Reverse {{total}}\",\n \"financial.invoice.paymentSchedule\": \"Due dates\",\n \"financial.invoiceForm.scheduleLocked\": \"Some installments are paid — the schedule can no longer be regenerated.\",\n \"financial.invoiceForm.scheduleHasCancelled\": \"This bill has a cancelled installment — amount and schedule can no longer be redone, only the due date.\",\n \"financial.invoiceForm.issuedLocked\": \"This bill is issued: amount, items, supplier and date are locked. To change them, cancel it and create a new one. Notes, unit, document number and due dates can still be edited.\",\n \"financial.invoiceForm.issuedEditable\": \"This bill is issued: amount, items and supplier are locked. To change them, cancel it and create a new one. While nothing has been paid, the date and the installment plan can still be edited.\",\n \"financial.invoiceForm.edit\": \"Edit\",\n \"financial.invoice.payment\": \"Payment\",\n \"financial.invoice.balance\": \"Remaining\",\n \"financial.invoice.details\": \"Details\",\n \"financial.invoice.remaining\": \"Remaining:\",\n \"financial.invoice.searchPlaceholder\": \"Search by contact, description or document…\",\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.tags\": \"Tags\",\n \"financial.invoiceForm.currency\": \"Currency\",\n \"financial.invoiceForm.addItem\": \"Add Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Add items first\",\n \"financial.invoiceForm.contactRequired\": \"Select who will pay or receive before adding items.\",\n \"financial.invoiceForm.additionalNotes\": \"Additional notes...\",\n \"financial.itemType.service\": \"Service\",\n \"financial.itemType.package\": \"Package\",\n \"financial.itemType.product\": \"Product\",\n \"financial.itemType.other\": \"Other\",\n \"financial.itemType.gift_card\": \"Gift Card\",\n \"financial.giftCardLine.label\": \"Gift card code\",\n \"financial.giftCardLine.placeholder\": \"0000 0000 0000 0000\",\n \"financial.giftCardLine.hint\": \"Scan or type the full card code.\",\n \"financial.giftCardLine.notFound\": \"Gift card not found\",\n \"financial.giftCardLine.revoked\": \"Gift card cancelled — cannot be sold\",\n \"financial.giftCardLine.expired\": \"Gift card expired\",\n \"financial.giftCardLine.alreadySold\": \"This gift card has already been sold\",\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.editTitle\": \"Edit\",\n \"financial.invoiceForm.newTitle\": \"New\",\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.searchMinChars\": \"Type at least 2 characters to search.\",\n \"financial.invoiceForm.searchUnit\": \"Search unit...\",\n \"financial.invoiceForm.selectInstallments\": \"Select installment count above\",\n \"financial.invoiceForm.selectContactFirst\": \"Select who will pay or receive before adding items.\",\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.goals\": \"Goals\",\n \"financial.nav.giftCards\": \"Gift Cards\",\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.recurring\": \"Recurring\",\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.notasFiscais\": \"Fiscal Invoices\",\n \"financial.nav.fiscal\": \"Tax\",\n \"financial.nav.fiscalIssued\": \"Issued Invoices\",\n \"financial.nav.fiscalGroups\": \"Tax Groups\",\n \"financial.nav.recurringExpenses\": \"Recurring Expenses\",\n \"financial.nav.recurringIncome\": \"Recurring Income\",\n \"financial.nav.rules\": \"Rules\",\n \"financial.nav.statements\": \"Statements\",\n \"financial.nav.summary\": \"Summary\",\n \"financial.invoice.filterAccount\": \"Chart account\",\n \"financial.invoice.filterAllAccounts\": \"All accounts\",\n \"financial.invoice.filterCostCenter\": \"Cost center\",\n \"financial.invoice.filterAllCostCenters\": \"All cost centers\",\n \"financial.invoice.filterPeriod\": \"Period\",\n \"financial.invoice.filterAllPeriods\": \"All time\",\n \"financial.invoice.filterThisMonth\": \"This month\",\n \"financial.invoice.filterLastMonth\": \"Last month\",\n \"financial.invoice.filterLast30\": \"Last 30 days\",\n \"financial.invoice.filterLast90\": \"Last 90 days\",\n \"financial.invoice.filterMaxRange\": \"90-day maximum range\",\n \"financial.invoice.filterThisYear\": \"This year\",\n \"financial.invoice.filterCustom\": \"Custom\",\n \"financial.invoice.filterFrom\": \"From\",\n \"financial.invoice.filterTo\": \"To\",\n \"financial.invoice.filterClear\": \"Clear\",\n \"financial.invoice.filterApply\": \"Search\",\n \"financial.invoice.filterMore\": \"More filters\",\n \"financial.invoice.filterLess\": \"Fewer filters\",\n \"financial.invoice.filterPending\": \"Filters changed\",\n \"financial.invoice.filterPendingHint\": \"The list still shows the previous selection. Click Search to apply.\",\n \"financial.invoice.filterUnit\": \"Unit\",\n \"financial.invoice.filtersTitle\": \"Filters\",\n \"financial.invoice.filterShow\": \"Show\",\n \"financial.invoice.filterAllStatuses\": \"All\",\n \"financial.invoice.filterContactPlaceholder\": \"Type...\",\n \"financial.invoice.filterAllContacts\": \"All\",\n \"financial.invoice.filterFiscalNumber\": \"Invoice number\",\n \"financial.invoice.filterPaymentAccount\": \"Paid from\",\n \"financial.invoice.filterReceiptAccount\": \"Received into\",\n \"financial.invoice.filterAllBankAccounts\": \"All accounts\",\n \"financial.invoice.filterFiscalNumberPlaceholder\": \"No.\",\n \"financial.invoice.filterAllUnits\": \"All units\",\n \"financial.invoice.generateCnab\": \"Generate CNAB 240\",\n \"financial.invoice.printSelected\": \"Print\",\n \"financial.invoice.exportSelected\": \"Export CSV\",\n \"financial.invoice.printBlocked\": \"Allow pop-ups to print the selection.\",\n \"financial.reconciliation.filtersTitle\": \"Filters\",\n \"financial.reconciliation.filterApply\": \"Search\",\n \"financial.reconciliation.filterPending\": \"Filters changed\",\n \"financial.reconciliation.filterPendingHint\": \"The statement still shows the previous selection. Click Filter to apply.\",\n \"financial.paymentReceipt.title\": \"Payment details\",\n \"financial.paymentReceipt.titleReversal\": \"Reversal details\",\n \"financial.paymentReceipt.open\": \"See this payment's details\",\n \"financial.paymentReceipt.count\": \"{{count}} payments\",\n \"financial.paymentReceipt.reversedCount\": \"{{count}} reversed payment(s)\",\n \"financial.paymentReceipt.show\": \"Show\",\n \"financial.paymentReceipt.hide\": \"Hide\",\n \"financial.paymentReceipt.reversedOn\": \"Reversed on {{date}}\",\n \"financial.paymentReceipt.reversed\": \"Reversed\",\n \"financial.paymentReceipt.paymentNumber\": \"Payment {{number}}\",\n \"financial.paymentReceipt.reversalNumber\": \"Reversal {{number}}\",\n \"financial.paymentReceipt.empty\": \"No payment recorded on this installment.\",\n \"financial.paymentReceipt.date\": \"Date\",\n \"financial.paymentReceipt.amount\": \"Amount\",\n \"financial.paymentReceipt.methodOut\": \"Payment method\",\n \"financial.paymentReceipt.methodIn\": \"Receipt method\",\n \"financial.paymentReceipt.methodNone\": \"N/A\",\n \"financial.paymentReceipt.account\": \"Account\",\n \"financial.paymentReceipt.cardBrand\": \"Card brand\",\n \"financial.paymentReceipt.fee\": \"Fee\",\n \"financial.paymentReceipt.payer\": \"Payer\",\n \"financial.paymentReceipt.receivedFrom\": \"Received from\",\n \"financial.paymentReceipt.paidBy\": \"Paid by\",\n \"financial.paymentReceipt.receivedBy\": \"Received by\",\n \"financial.paymentReceipt.cashSession\": \"Cash session\",\n \"financial.paymentReceipt.cashSessionYes\": \"Yes\",\n \"financial.paymentReceipt.notes\": \"Note\",\n \"financial.paymentReceipt.unlink\": \"Unlink from this installment\",\n \"financial.paymentReceipt.unlinkUnavailable\": \"Not available yet: unlinking keeps the payment and returns the amount as the counterparty's credit, and that needs a database operation that does not exist yet.\",\n \"financial.paymentReceipt.reverse\": \"Reverse this payment\",\n \"financial.reconciliation.title\": \"Reconciliation\",\n \"financial.reconciliation.subtitle\": \"Match imported bank lines to your movements\",\n \"financial.reconciliation.pending\": \"{{count}} to reconcile\",\n \"financial.reconciliation.allDone\": \"All caught up\",\n \"financial.reconciliation.empty\": \"Nothing to reconcile\",\n \"financial.reconciliation.emptyHint\": \"Imported bank transactions will appear here for matching.\",\n \"financial.reconciliation.bankLines\": \"Bank lines\",\n \"financial.reconciliation.candidates\": \"Suggested matches\",\n \"financial.reconciliation.selectLine\": \"Select a bank line to see suggested matches\",\n \"financial.reconciliation.noCandidates\": \"No suggested matches for this line\",\n \"financial.reconciliation.match\": \"Match\",\n \"financial.reconciliation.accept\": \"Accept as new\",\n \"financial.reconciliation.acceptHint\": \"No internal counterpart — keep as a standalone entry\",\n \"financial.reconciliation.matchScore\": \"{{score}}% match\",\n \"financial.reconciliation.refresh\": \"Refresh\",\n \"financial.reconciliation.from\": \"From\",\n \"financial.reconciliation.to\": \"To\",\n \"financial.reconciliation.filter\": \"Filter\",\n \"financial.reconciliation.filterMore\": \"More filters\",\n \"financial.reconciliation.filterLess\": \"Fewer filters\",\n \"financial.reconciliation.syncNow\": \"Sync now\",\n \"financial.reconciliation.syncing\": \"Fetching from the bank…\",\n \"financial.reconciliation.syncImported\": \"{{count}} new line(s) from the bank\",\n \"financial.reconciliation.syncNothingNew\": \"The bank has nothing new\",\n \"financial.reconciliation.syncFailed\": \"Could not fetch the bank statement\",\n \"financial.reconciliation.group.today\": \"Today\",\n \"financial.reconciliation.group.yesterday\": \"Yesterday\",\n \"financial.reconciliation.group.thisWeek\": \"This week\",\n \"financial.reconciliation.group.lastWeek\": \"Last week\",\n \"financial.reconciliation.group.thisMonth\": \"This month\",\n \"financial.reconciliation.group.lastMonth\": \"Last month\",\n \"financial.reconciliation.group.older\": \"Earlier\",\n \"financial.reconciliation.investments\": \"Investments and yields\",\n \"financial.reconciliation.investmentsHide\": \"Hide\",\n \"financial.reconciliation.investmentsShow\": \"Show\",\n \"financial.reconciliation.pickAccountFirst\": \"Pick an account\",\n \"financial.reconciliation.suggest\": \"Suggest\",\n \"financial.reconciliation.suggestion\": \"Suggestion\",\n \"financial.reconciliation.suggestionLabel\": \"Suggestion:\",\n \"financial.reconciliation.linkManually\": \"Link manually\",\n \"financial.reconciliation.viewBillUnavailable\": \"This line was reconciled without a bill to open.\",\n \"financial.reconciliation.viewBill\": \"View bill\",\n \"financial.reconciliation.installment\": \"Installment\",\n \"financial.reconciliation.dueShort\": \"Due\",\n \"financial.reconciliation.moreCandidates\": \"+{{count}} more suggestion(s)\",\n \"financial.reconciliation.credit\": \"Credit\",\n \"financial.reconciliation.debit\": \"Debit\",\n \"financial.reconciliation.payerLabel\": \"Payer:\",\n \"financial.reconciliation.supplierLabel\": \"Supplier:\",\n \"financial.reconciliation.docPrefix\": \"Doc\",\n \"financial.reconciliation.balanceAt\": \"Balance:\",\n \"financial.reconciliation.noIntegratedAccount\": \"No connected account. Set up Open Banking in Settings → Integrations.\",\n \"financial.reconciliation.search\": \"Search\",\n \"financial.reconciliation.details\": \"Details\",\n \"financial.reconciliation.detailDate\": \"Date\",\n \"financial.reconciliation.detailEffective\": \"Effective on\",\n \"financial.reconciliation.detailCounterparty\": \"Counterparty\",\n \"financial.reconciliation.detailDocument\": \"Tax id or document\",\n \"financial.reconciliation.detailCode\": \"Code\",\n \"financial.reconciliation.detailCategory\": \"Category\",\n \"financial.reconciliation.detailKind\": \"Transaction type\",\n \"financial.reconciliation.detailBalance\": \"Balance at this line\",\n \"financial.reconciliation.detailProvider\": \"Provider\",\n \"financial.reconciliation.detailExternalId\": \"Provider id\",\n \"financial.reconciliation.rawPayload\": \"See what the provider sent\",\n \"financial.reconciliation.createBill\": \"Post as a bill\",\n \"financial.reconciliation.createBillAction\": \"Post and reconcile\",\n \"financial.reconciliation.billCreated\": \"Bill posted and reconciled\",\n \"financial.reconciliation.billDescription\": \"Description\",\n \"financial.reconciliation.supplier\": \"Supplier\",\n \"financial.reconciliation.payer\": \"Payer\",\n \"financial.reconciliation.chartAccount\": \"Chart of accounts\",\n \"financial.reconciliation.chartAccountPlaceholder\": \"Pick a classification...\",\n \"financial.reconciliation.chartAccountNone\": \"No chart account found\",\n \"financial.reconciliation.chartAccountHint\": \"This classification is what puts the bill on the income statement.\",\n \"financial.reconciliation.markTransfer\": \"Mark as transfer\",\n \"financial.reconciliation.markTransferAction\": \"Mark and reconcile\",\n \"financial.reconciliation.transferDone\": \"Transfer recorded\",\n \"financial.reconciliation.transferTo\": \"Destination account\",\n \"financial.reconciliation.transferFrom\": \"Source account\",\n \"financial.reconciliation.transferNotes\": \"Note\",\n \"financial.reconciliation.pickAccount\": \"Pick the account\",\n \"financial.reconciliation.account\": \"Account or card\",\n \"financial.reconciliation.accountRequired\": \"Pick an account to see its statement.\",\n \"financial.reconciliation.searchPlaceholder\": \"Description or provider id...\",\n \"financial.reconciliation.type\": \"Type\",\n \"financial.reconciliation.typeAll\": \"All\",\n \"financial.reconciliation.typeIn\": \"Money in\",\n \"financial.reconciliation.typeOut\": \"Money out\",\n \"financial.reconciliation.status\": \"Status\",\n \"financial.reconciliation.statusAll\": \"All\",\n \"financial.reconciliation.statusReconciled\": \"Reconciled\",\n \"financial.reconciliation.statusPending\": \"Pending\",\n \"financial.reconciliation.reconciled\": \"Reconciled\",\n \"financial.reconciliation.undo\": \"Undo\",\n \"financial.reconciliation.flowTitle\": \"Reconcile transaction\",\n \"financial.reconciliation.stepClassify\": \"What to do\",\n \"financial.reconciliation.stepItems\": \"The items\",\n \"financial.reconciliation.stepDetails\": \"The details\",\n \"financial.reconciliation.stepConfirm\": \"Confirm\",\n \"financial.reconciliation.confirmAction\": \"Confirm\",\n \"financial.reconciliation.howToClassify\": \"How do you want to classify this transaction?\",\n \"financial.reconciliation.pickIntent\": \"Pick what this transaction is\",\n \"financial.reconciliation.foundTitle\": \"Bills found\",\n \"financial.reconciliation.searchWiden\": \"Widen search (±15 days, any amount)\",\n \"financial.reconciliation.stepSelectBill\": \"Select the bill\",\n \"financial.reconciliation.stepAdjust\": \"Adjustment\",\n \"financial.reconciliation.selectBillFor\": \"Statement of {{date}} · {{description}} ·\",\n \"financial.reconciliation.statusOverdue\": \"Overdue\",\n \"financial.reconciliation.colDue\": \"Due\",\n \"financial.reconciliation.colCounterparty\": \"Counterparty\",\n \"financial.reconciliation.colDescription\": \"Number / Description\",\n \"financial.reconciliation.colInstallment\": \"Installment\",\n \"financial.reconciliation.colToReconcile\": \"To reconcile\",\n \"financial.reconciliation.colDelta\": \"Δ vs statement\",\n \"financial.reconciliation.searchStatusAllShort\": \"All\",\n \"financial.reconciliation.searchPendingHint\": \"The list still shows the previous filters. Click Filter to apply.\",\n \"financial.reconciliation.searchTitle\": \"Find a bill\",\n \"financial.reconciliation.searchDueFrom\": \"Due from\",\n \"financial.reconciliation.searchDueTo\": \"to\",\n \"financial.reconciliation.searchStatus\": \"Status\",\n \"financial.reconciliation.searchStatusAll\": \"All (not reconciled)\",\n \"financial.reconciliation.searchStatusOpen\": \"Open\",\n \"financial.reconciliation.searchStatusPaid\": \"Paid\",\n \"financial.reconciliation.searchText\": \"Search (counterparty, number, description)\",\n \"financial.reconciliation.searchTextPlaceholder\": \"Type and press Enter\",\n \"financial.reconciliation.searchAmountMin\": \"Min amount\",\n \"financial.reconciliation.searchAmountMax\": \"Max amount\",\n \"financial.reconciliation.searchAction\": \"Search\",\n \"financial.reconciliation.searchEmpty\": \"No bills match these filters.\",\n \"financial.reconciliation.searchMore\": \"Load more\",\n \"financial.reconciliation.pickCandidate\": \"Pick the entry to link\",\n \"financial.reconciliation.needDescription\": \"Describe the entry\",\n \"financial.reconciliation.intentLink\": \"Link to an existing entry\",\n \"financial.reconciliation.intentLinkHint\": \"The bill already exists — this line is the proof it was paid.\",\n \"financial.reconciliation.intentBillOut\": \"Record as a payable\",\n \"financial.reconciliation.intentBillIn\": \"Record as a receivable\",\n \"financial.reconciliation.intentBillHint\": \"The entry never existed. It is born here, classified and already settled.\",\n \"financial.reconciliation.intentTransfer\": \"Transfer between accounts\",\n \"financial.reconciliation.intentTransferHint\": \"Neither revenue nor expense: money moving between two of your own accounts.\",\n \"financial.reconciliation.attachReceipt\": \"Attach receipt\",\n \"financial.reconciliation.attachReceiptHint\": \"Receipt, invoice or bill — image or PDF. AI reads it and fills in the supplier, the items and the chart account. Amount, date and bank account stay locked to the statement.\",\n \"financial.reconciliation.receiptRead_action\": \"Attach and read with AI\",\n \"financial.reconciliation.receiptReplace\": \"Replace receipt\",\n \"financial.reconciliation.receiptReading\": \"Reading the receipt...\",\n \"financial.reconciliation.receiptRead\": \"Receipt read\",\n \"financial.reconciliation.receiptTooBig\": \"Receipt is over 10 MB.\",\n \"financial.reconciliation.receiptNoAgent\": \"AI reading needs the assistant configured in this app.\",\n \"financial.reconciliation.candidateOpen\": \"Open · {{amount}}\",\n \"financial.reconciliation.candidatePaid\": \"Already paid\",\n \"financial.reconciliation.dueDate\": \"Due date\",\n \"financial.reconciliation.billAmount\": \"Bill amount\",\n \"financial.reconciliation.items\": \"Receipt items\",\n \"financial.reconciliation.addItem\": \"Add item\",\n \"financial.reconciliation.noItemsHint\": \"No items identified. Attach a receipt so AI can read them, or add them by hand.\",\n \"financial.reconciliation.itemDescription\": \"Description\",\n \"financial.reconciliation.itemQuantity\": \"Qty\",\n \"financial.reconciliation.itemUnitPrice\": \"Unit price\",\n \"financial.reconciliation.itemsSum\": \"Items total\",\n \"financial.reconciliation.statementTotal\": \"Statement total\",\n \"financial.reconciliation.costCenter\": \"Cost center\",\n \"financial.reconciliation.costCenterPlaceholder\": \"None\",\n \"financial.reconciliation.transferHint\": \"The statement account is automatically the other leg.\",\n \"financial.reconciliation.linkOnlyExplain\": \"This bill was already paid in the system. Confirming only ties the statement line to it — no second payment, no change to the amount.\",\n \"financial.reconciliation.noAdjustmentNeeded\": \"The amount matches the bill. Nothing to adjust.\",\n \"financial.reconciliation.adjustmentNeeded\": \"The bank took {{gap}} {{side}} than the bill asked for. Say what that difference is.\",\n \"financial.reconciliation.adjustmentNeededIn\": \"{{gap}} {{side}} came in than the bill charged. Say what that difference is.\",\n \"financial.reconciliation.adjustmentNeedsAccount\": \"Pick the chart account for each adjustment.\",\n \"financial.reconciliation.adjustmentType\": \"Type\",\n \"financial.reconciliation.adjustmentDescriptionPlaceholder\": \"E.g. late interest\",\n \"financial.reconciliation.adjustmentDefaultInterest\": \"Late interest\",\n \"financial.reconciliation.adjustmentDefaultFine\": \"Late fine\",\n \"financial.reconciliation.adjustmentDefaultDiscountOut\": \"Discount obtained\",\n \"financial.reconciliation.adjustmentDefaultDiscountIn\": \"Discount granted\",\n \"financial.reconciliation.adjustmentMore\": \"more\",\n \"financial.reconciliation.adjustmentLess\": \"less\",\n \"financial.reconciliation.partialQuestion\": \"How to treat the difference\",\n \"financial.reconciliation.partialTitle\": \"Partial payment\",\n \"financial.reconciliation.partialLine\": \"This line pays part of it; {{rest}} stays open for the next one.\",\n \"financial.reconciliation.gapTitle\": \"Explain the difference\",\n \"financial.reconciliation.gapLine\": \"Discount, interest or fee: the bill closes with this line.\",\n \"financial.reconciliation.partialExplain\": \"This line pays {{paid}} of the bill. The remaining {{rest}} stays open: reconcile the next line against this same bill.\",\n \"financial.reconciliation.summaryPartial\": \"Partial payment: {{rest}} stays open on this bill.\",\n \"financial.reconciliation.partialDone\": \"Part paid. {{rest}} left on this bill.\",\n \"financial.reconciliation.interest\": \"Interest\",\n \"financial.reconciliation.fine\": \"Late fee\",\n \"financial.reconciliation.discount\": \"Discount\",\n \"financial.reconciliation.adjustmentAmount\": \"Amount\",\n \"financial.reconciliation.adjustmentDescription\": \"Adjustment description\",\n \"financial.reconciliation.addAdjustment\": \"Add adjustment\",\n \"financial.reconciliation.howItSettles\": \"How this line settles\",\n \"financial.reconciliation.settleAmount\": \"Amount\",\n \"financial.reconciliation.settleDate\": \"Date\",\n \"financial.reconciliation.settleAccount\": \"Account\",\n \"financial.reconciliation.settleAccountUnknown\": \"the statement account\",\n \"financial.reconciliation.settleNote\": \"Note\",\n \"financial.reconciliation.settleNoMethodHint\": \"No payment method: the statement IS the method. When, where and how much come from the bank — there is nothing to pick here.\",\n \"financial.reconciliation.howItWasPaid\": \"How the money moved\",\n \"financial.reconciliation.noPaymentNeeded\": \"Nothing to pay here: the money is already recorded in the system.\",\n \"financial.reconciliation.noContact\": \"no counterparty\",\n \"financial.reconciliation.summaryTransfer\": \"Record {{amount}} as a transfer with {{account}} and reconcile the line.\",\n \"financial.reconciliation.summaryBillOut\": \"Create a {{amount}} payable to {{contact}}, settle it and reconcile the line.\",\n \"financial.reconciliation.summaryBillIn\": \"Create a {{amount}} receivable from {{contact}}, settle it and reconcile the line.\",\n \"financial.reconciliation.summarySettle\": \"Settle the bill for {{amount}} and reconcile the line.\",\n \"financial.reconciliation.summaryLinkOnly\": \"Tie the line to the already-paid bill, without creating a payment.\",\n \"financial.reconciliation.summaryAdjustments\": \"Plus {{count}} adjustment entr(ies), same date and same account.\",\n \"financial.reconciliation.settled\": \"Bill settled and reconciled\",\n \"financial.reconciliation.linked\": \"Line tied to the bill\",\n \"financial.payment.amountRequired\": \"Enter the amount\",\n \"financial.payment.methodRequired\": \"Pick the payment method\",\n \"financial.payment.accountRequired\": \"Pick the account\",\n \"financial.payment.amountFromStatement\": \"Amount comes from the statement\",\n \"financial.reconciliation.pageCredits\": \"Credits (page)\",\n \"financial.reconciliation.pageDebits\": \"Debits (page)\",\n \"financial.reconciliation.pageBalance\": \"Balance (page)\",\n \"financial.reconciliation.pageTotalsHint\": \"These three add up this page only — changing page changes the numbers.\",\n \"financial.reconciliation.showing\": \"Showing {{from}}-{{to}} of {{total}} records\",\n \"financial.reconciliation.pageOf\": \"Page {{page}} of {{pages}}\",\n \"financial.reconciliation.first\": \"First\",\n \"financial.reconciliation.previous\": \"Previous\",\n \"financial.reconciliation.next\": \"Next\",\n \"financial.reconciliation.last\": \"Last\",\n \"financial.reconciliation.emptyFiltered\": \"No transactions in this period\",\n \"financial.reconciliation.emptyFilteredHint\": \"Adjust the period or filter, or import the statement in Settings → Integrations.\",\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.whichCard\": \"Which card\",\n \"financial.payment.noCompanyCards\": \"No company card registered. A card payment needs the card on file.\",\n \"financial.payment.registerCard\": \"Register a card (account type \\\"Card payable\\\")\",\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.receiveAmount\": \"Receive {{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.payment.titleReceive\": \"Record Receipt\",\n \"financial.payment.changeSource\": \"Change method and account\",\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.modules\": \"Modules\",\n \"financial.settings.modulesDesc\": \"What this house shows inside Financial\",\n \"financial.settings.commissions\": \"Commissions\",\n \"financial.settings.commissionsDesc\": \"The tab that settles what the team earns per sale\",\n \"financial.settings.cashRegistersDesc\": \"Open, close and review the counter till\",\n \"financial.settings.closing\": \"Closing\",\n \"financial.settings.closingDesc\": \"Close the period and lock past dates\",\n \"financial.settings.invoices\": \"Invoices\",\n \"financial.settings.invoicesDesc\": \"How invoices and payments are handled\",\n \"financial.settings.notifications\": \"Notifications\",\n \"financial.settings.notificationsDesc\": \"Alerts and reminders\",\n \"financial.settings.overdueAlerts\": \"Overdue payment alerts\",\n \"financial.settings.overdueAlertsDesc\": \"Notify when invoices pass their due date\",\n \"financial.settings.requireDoc\": \"Require document number\",\n \"financial.settings.requireDocDesc\": \"Make document/invoice number mandatory on payments\",\n \"financial.settings.requireOpening\": \"Require opening balance\",\n \"financial.settings.requireOpeningDesc\": \"Opening balance must be confirmed before starting a session\",\n \"financial.settingsPage.subtitle\": \"Manage payment methods, accounts, and configurations\",\n \"financial.settingsPage.title\": \"Financial Settings\",\n \"financial.payment.noMethods\": \"No payment methods configured.\",\n \"financial.payment.configureMethods\": \"Set up payment methods\",\n \"financial.payment.noAccounts\": \"No compatible account. Create one in Settings.\",\n \"financial.payment.noAccountForMethod\": \"No account accepts {method}. Cards settle into a receivable account, not the bank.\",\n \"financial.payment.cashNeedsOpenSession\": \"Receiving cash needs an open cash session — that is where the end-of-day count happens.\",\n \"financial.payment.openCashSession\": \"Open a cash session\",\n \"financial.payment.configureAccounts\": \"Set up accounts\",\n \"financial.statements.generate\": \"Generate\",\n \"financial.statements.filterPendingHint\": \"The statement still shows the previous selection. Click Generate to apply.\",\n \"financial.statements.accountRequired\": \"Pick an account\",\n \"financial.statements.operationTypes\": \"Operation types\",\n \"financial.statements.opCredits\": \"Credits\",\n \"financial.statements.opDebits\": \"Debits\",\n \"financial.statements.opTransfers\": \"Transfers\",\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.searchPlaceholder\": \"Search by contact, description or document...\",\n \"financial.statements.selectToView\": \"Select an account to view statement\",\n \"financial.statements.subtitle\": \"Bank account transactions and balances\",\n \"financial.statements.title\": \"Statements\",\n \"financial.statements.to\": \"To\",\n \"financial.summary.allAccounts\": \"All accounts\",\n \"financial.summary.cashFlow\": \"Cash Flow\",\n \"financial.summary.cashFlowBreakdown\": \"Cash Flow Breakdown\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Receivables vs. payables this month\",\n \"financial.summary.cashFlowSubtitle\": \"Monthly income vs expenses\",\n \"financial.summary.expenses\": \"Expenses\",\n \"financial.summary.income\": \"Income\",\n \"financial.summary.monthlyFlow\": \"Monthly Flow\",\n \"financial.summary.negativeBalance\": \"Negative balance\",\n \"financial.summary.net\": \"Net\",\n \"financial.summary.noOverdue\": \"No overdue transactions\",\n \"financial.summary.noTransactions\": \"No transactions yet\",\n \"financial.summary.overdue\": \"{{count}} overdue\",\n \"financial.summary.overduePayable\": \"Overdue payable\",\n \"financial.summary.overdueReceivable\": \"Overdue receivable\",\n \"financial.summary.overdueTitle\": \"Overdue\",\n \"financial.summary.paid\": \"Paid\",\n \"financial.summary.payable\": \"Payable\",\n \"financial.summary.positiveBalance\": \"Positive balance\",\n \"financial.summary.receivable\": \"Receivable\",\n \"financial.summary.received\": \"Received\",\n \"financial.summary.recentTransactions\": \"Recent Transactions\",\n \"financial.summary.totalBalance\": \"Total Balance\",\n \"financial.summary.transactionsAppear\": \"Transactions will appear here once recorded\",\n \"financial.summary.viewAll\": \"View all\",\n \"financial.summary.today\": \"Today\",\n \"financial.summary.yesterday\": \"Yesterday\",\n \"financial.summary.transactionsTitle\": \"Transactions\",\n \"financial.home.balance\": \"Balance\",\n \"financial.home.inflow\": \"Income\",\n \"financial.home.outflow\": \"Expenses\",\n \"financial.home.showBalance\": \"Show balance\",\n \"financial.home.hideBalance\": \"Hide balance\",\n \"financial.home.upcomingBills\": \"Upcoming bills\",\n \"financial.home.noBills\": \"No upcoming bills.\",\n \"financial.home.dueToday\": \"Due today\",\n \"financial.home.dueTomorrow\": \"Due tomorrow\",\n \"financial.home.dueInDays\": \"Due in {{count}} days\",\n \"financial.home.overdueDays\": \"Overdue by {{count}} days\",\n \"financial.home.cards\": \"Cards\",\n \"financial.home.currentBill\": \"Current bill\",\n \"financial.home.availableLimit\": \"Available limit\",\n \"financial.home.addCard\": \"New card\",\n \"financial.home.bill\": \"Bill\",\n \"financial.home.spendByCategory\": \"Spending by category\",\n \"financial.home.noSpend\": \"No spending this month.\",\n \"financial.home.category.groceries\": \"Groceries\",\n \"financial.home.category.transport\": \"Transport\",\n \"financial.home.category.subscriptions\": \"Subscriptions\",\n \"financial.home.category.dining\": \"Dining\",\n \"financial.home.category.home\": \"Home\",\n \"financial.home.category.health\": \"Health\",\n \"financial.home.category.leisure\": \"Leisure\",\n \"financial.home.category.shopping\": \"Shopping\",\n \"financial.home.category.other\": \"Other\",\n \"financial.quickActions.newPayable\": \"New Payable\",\n \"financial.quickActions.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.quickActions.newReceivable\": \"New Receivable\",\n \"financial.quickActions.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.quickActions.openCashRegister\": \"Open Cash Register\",\n \"financial.quickActions.openCashRegisterDesc\": \"Start a new cash session\",\n \"financial.cash.title\": \"Cash Registers\",\n \"financial.cash.subtitle\": \"Open, count and close cash sessions\",\n \"financial.cash.bills\": \"Bills\",\n \"financial.cash.coins\": \"Coins\",\n \"financial.cash.noAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cash.empty.heading\": \"Start by opening the day's register\",\n \"financial.cash.empty.because\": \"The cash register tracks money in and out at the desk, and at closing shows whether the drawer matches what the system expected. It needs an account to work.\",\n \"financial.cash.empty.step\": \"An account of type Cash Register\",\n \"financial.cash.empty.stepWhere\": \"Records → Accounts\",\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.expectedInDrawer\": \"Expected in drawer\",\n \"financial.cash.difference\": \"Cash difference\",\n \"financial.cash.receivedInShift\": \"Received this shift\",\n \"financial.method.cash\": \"Cash\",\n \"financial.method.pix\": \"Pix\",\n \"financial.method.credit_card\": \"Credit card\",\n \"financial.method.debit_card\": \"Debit card\",\n \"financial.method.bank_transfer\": \"Transfer\",\n \"financial.method.boleto\": \"Boleto\",\n \"financial.method.check\": \"Check\",\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.reviewQueue\": \"Close review\",\n \"financial.cash.reviewSeeAll\": \"See all {count} closes\",\n \"financial.cash.reviewToday\": \"Today\",\n \"financial.cash.reviewYesterday\": \"Yesterday\",\n \"financial.cash.reviewQueueEmpty\": \"No closes waiting for review.\",\n \"financial.cash.closedBy\": \"Closed by\",\n \"financial.cash.approve\": \"Approve\",\n \"financial.cash.reject\": \"Reject\",\n \"financial.cash.cannotReviewOwn\": \"You closed this register — someone else reviews it.\",\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.cash.noOpenSessions\": \"No open cash sessions.\",\n \"financial.cash.tabOpen\": \"Open\",\n \"financial.cash.tabClosed\": \"Closed\",\n \"financial.cash.tabReview\": \"Review\",\n \"financial.cash.user\": \"User\",\n \"financial.cash.openingDate\": \"Opening Date\",\n \"financial.cash.accountLabel\": \"Cash Register Account\",\n \"financial.cash.review\": \"Review\",\n \"financial.cash.reviewModalTitle\": \"Review closing\",\n \"financial.cash.detailsModalTitle\": \"Session details\",\n \"financial.cash.summary\": \"Summary\",\n \"financial.cash.transactions\": \"Transactions\",\n \"financial.cash.noTransactions\": \"No transactions in this session.\",\n \"financial.cash.finalValue\": \"Final counted value\",\n \"financial.cash.movementCount\": \"Movements\",\n \"financial.cash.totalIn\": \"Total received\",\n \"financial.cash.totalOut\": \"Total withdrawn\",\n \"financial.cash.confirmAndApprove\": \"Confirm & approve\",\n \"financial.cash.details\": \"Details\",\n \"financial.cash.print\": \"Print\",\n \"financial.cash.verdictApproved\": \"Approved\",\n \"financial.cash.verdictRejected\": \"Rejected\",\n \"financial.cash.verdictPending\": \"Pending\",\n \"financial.cash.reviewedBy\": \"Reviewed by\",\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.statusProvisioned\": \"Forecast\",\n \"financial.invoice.consolidate\": \"Consolidate\",\n \"financial.invoice.consolidated\": \"Bill created\",\n \"financial.invoice.consolidateFailed\": \"Could not consolidate\",\n \"financial.invoice.statusPending\": \"Pending\",\n \"financial.invoice.statusDraft\": \"Draft\",\n \"financial.invoice.columnDate\": \"Date\",\n \"financial.invoice.columnDueDate\": \"Due date\",\n \"financial.invoice.columnDescription\": \"Description\",\n \"financial.invoice.columnAmount\": \"Amount\",\n \"financial.invoice.columnPaid\": \"Paid\",\n \"financial.invoice.columnPaymentMethod\": \"Method\",\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.account\": \"Chart account\",\n \"financial.invoiceForm.accountNone\": \"Not assigned\",\n \"financial.invoiceForm.costCenter\": \"Cost center\",\n \"financial.invoiceForm.costCenterNone\": \"Not assigned\",\n \"financial.invoiceForm.surcharge\": \"Surcharge\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Account\",\n \"financial.payment.due\": \"Due:\",\n \"financial.payment.paidAmount\": \"Paid:\",\n \"financial.payment.paidOn\": \"Paid on:\",\n \"financial.title\": \"Financial\",\n \"financial.summary.title\": \"Financial Summary\",\n \"financial.summary.revenue\": \"Revenue\",\n \"financial.invoice.title\": \"Invoices\",\n \"financial.invoice.create\": \"New Invoice\",\n \"financial.invoice.number\": \"Invoice #\",\n \"financial.invoice.client\": \"Client\",\n \"financial.invoice.amount\": \"Amount\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Due Date\",\n \"financial.invoice.addItem\": \"Add Item\",\n \"financial.invoice.tax\": \"Tax\",\n \"financial.invoice.save\": \"Save Invoice\",\n \"financial.invoice.saving\": \"Saving...\",\n \"financial.invoice.markPaid\": \"Mark as Paid\",\n \"financial.invoice.sendReminder\": \"Send Reminder\",\n \"financial.receivable.title\": \"Accounts Receivable\",\n \"financial.payable.title\": \"Accounts Payable\",\n \"financial.statements.loading\": \"Loading...\",\n \"financial.cards.empty\": \"No card transactions yet\",\n \"financial.commissions.title\": \"Commissions\",\n \"financial.cashRegister.title\": \"Cash Register\",\n \"financial.cashRegister.open\": \"Open Register\",\n \"financial.cashRegister.close\": \"Close Register\",\n \"financial.movements.title\": \"Movements\",\n \"financial.bankAccounts.title\": \"Bank Accounts\",\n \"financial.settings.title\": \"Financial Settings\",\n // Settings registry tabs\n \"registry.payment-methods\": \"Payment Methods\",\n \"registry.payment-methods.description\": \"Configured payment methods with fees and installment rules\",\n \"registry.bank-accounts\": \"Accounts\",\n \"registry.bank-accounts.description\": \"Bank accounts, cash registers, credit cards, and digital wallets\",\n \"registry.chart-of-accounts\": \"Chart of Accounts\",\n \"registry.chart-of-accounts.description\": \"Hierarchical chart of accounts for categorizing transactions\",\n \"registry.discount-reasons\": \"Discount reasons\",\n \"settings.plugin.financial.payment-methods\": \"Payment methods\",\n \"settings.plugin.financial._general\": \"Financial preferences\",\n \"settings.plugin.financial._integrations\": \"Financial connectors\",\n \"settings.plugin.financial.payment-method-types\": \"Payment method types\",\n \"settings.plugin.financial.card-brands\": \"Card brands\",\n \"settings.plugin.financial.chart-of-accounts\": \"Chart of accounts\",\n \"settings.plugin.financial.cost-centers\": \"Cost centers\",\n \"settings.plugin.financial.price-tables\": \"Price tables\",\n \"settings.plugin.financial.bank-accounts\": \"Bank accounts\",\n \"settings.plugin.financial.discount-reasons\": \"Discount reasons\",\n \"registry.cost-centers\": \"Cost Centers\",\n \"registry.cost-centers.description\": \"Cost centers for expense tracking and departmental budgets\",\n \"registry.commission-rules\": \"Commission Rules\",\n \"registry.commission-rules.description\": \"Commission rules for service and product revenue sharing\",\n \"registry.price-tables\": \"Price Tables\",\n \"registry.price-tables.description\": \"Price tables for sale and cost pricing\",\n \"registry.price-variations\": \"Price Variations\",\n \"registry.price-variations.description\": \"Discount and surcharge rules for pricing\",\n \"registry.payment-method-types\": \"Payment Types\",\n \"registry.payment-method-types.description\": \"System payment types (cash, card, PIX, etc.)\",\n \"registry.card-brands\": \"Card Brands\",\n \"registry.card-brands.description\": \"Credit and debit card brands\",\n // Statements / extract\n \"financial.statements.columnDate\": \"Date\",\n \"financial.statements.columnDescription\": \"Description\",\n \"financial.statements.columnDebit\": \"Debit\",\n \"financial.statements.columnCredit\": \"Credit\",\n \"financial.statements.columnFee\": \"Fee\",\n \"financial.statements.columnBalance\": \"Balance\",\n \"financial.statements.columnMethod\": \"Method\",\n \"financial.statements.columnDoc\": \"Document\",\n \"financial.statements.installmentShort\": \"Inst. {{n}}\",\n \"financial.statements.viewInvoice\": \"View invoice\",\n \"financial.person.empty\": \"No financial activity for this contact yet\",\n \"financial.statements.opening\": \"Opening balance\",\n \"financial.statements.closing\": \"Closing balance\",\n \"financial.statements.currentBalance\": \"Current balance\",\n \"financial.statements.totalCredits\": \"Credits\",\n \"financial.statements.totalDebits\": \"Debits\",\n \"financial.statements.totalFees\": \"Fees\",\n \"financial.statements.net\": \"Net\",\n \"financial.statements.transfer\": \"Transfer\",\n \"financial.statements.untitledEntry\": \"Transaction\",\n \"financial.statements.reconciled\": \"Reconciled with the bank statement\",\n \"financial.statements.imported\": \"Imported from the bank · not reconciled\",\n \"financial.statements.reconciledWith\": \"Reconciled with {{ref}}\",\n \"financial.statements.newTransfer\": \"New Transfer\",\n // Transfer dialog\n \"financial.transfer.title\": \"Transfer Between Accounts\",\n \"financial.transfer.from\": \"From account\",\n \"financial.transfer.to\": \"To account\",\n \"financial.transfer.amount\": \"Amount\",\n \"financial.transfer.date\": \"Date\",\n \"financial.transfer.notes\": \"Notes\",\n \"financial.transfer.optionalNotes\": \"Optional notes...\",\n \"financial.transfer.selectAccount\": \"Select account...\",\n \"financial.transfer.submit\": \"Transfer\",\n \"financial.transfer.processing\": \"Transferring...\",\n \"financial.transfer.cancel\": \"Cancel\",\n \"financial.transfer.created\": \"Transfer recorded\",\n \"financial.transfer.failed\": \"Failed to record transfer\",\n \"financial.transfer.sameAccount\": \"Source and destination must differ\",\n \"financial.transfer.invalidAmount\": \"Amount must be greater than zero\",\n \"financial.quickTx.title\": \"New transaction\",\n \"financial.quickTx.close\": \"Close\",\n \"financial.quickTx.newTransaction\": \"New transaction\",\n \"financial.quickTx.expense\": \"Expense\",\n \"financial.quickTx.income\": \"Income\",\n \"financial.quickTx.transfer\": \"Transfer\",\n \"financial.quickTx.paid\": \"Paid\",\n \"financial.quickTx.received\": \"Received\",\n \"financial.quickTx.yes\": \"Yes\",\n \"financial.quickTx.no\": \"No\",\n \"financial.quickTx.category\": \"Category\",\n \"financial.quickTx.selectCategory\": \"No category\",\n \"financial.quickTx.account\": \"Account\",\n \"financial.quickTx.selectAccount\": \"Select account\",\n \"financial.quickTx.fromAccount\": \"From account\",\n \"financial.quickTx.toAccount\": \"To account\",\n \"financial.quickTx.card\": \"Card\",\n \"financial.quickTx.recurring\": \"Recurring\",\n \"financial.quickTx.attachment\": \"Attachment\",\n \"financial.quickTx.attachmentSoon\": \"Attachments coming soon\",\n \"financial.quickTx.receipt\": \"Receipt\",\n \"financial.quickTx.receiptCapture\": \"Attach a receipt or bill (photo or PDF)\",\n \"financial.quickTx.receiptAttached\": \"Receipt attached\",\n \"financial.quickTx.receiptReplace\": \"Replace\",\n \"financial.quickTx.receiptRemove\": \"Remove receipt\",\n \"financial.quickTx.receiptInvalid\": \"Please choose an image or PDF\",\n \"financial.quickTx.sendReceipt\": \"Send receipt\",\n \"financial.quickTx.digitizeExpense\": \"Digitize expense\",\n \"financial.quickTx.digitizeReceipt\": \"Digitize receipt\",\n \"financial.invoice.importPayroll\": \"Import payroll\",\n \"financial.invoice.importPayrollSoon\": \"Coming soon\",\n \"financial.receipt.ask\": \"Send the receipt photo…\",\n \"financial.receipt.attachRead\": \"Attach the receipt the assistant read\",\n \"financial.receipt.fromReceipt\": \"From the receipt\",\n \"financial.receipt.finishContact\": \"Finish adding\",\n \"financial.receipt.prompt\": \"Read this receipt and open the payable form with whatever it states.\",\n \"financial.receipt.askReceivable\": \"Send the photo or PDF of the invoice you issued…\",\n \"financial.receipt.promptReceivable\": \"Read this invoice and open the receivable form with the customer (recipient), amount, NF-e number and access key it states.\",\n \"financial.quickTx.descriptionPlaceholder\": \"e.g. Groceries, Salary…\",\n \"financial.quickTx.enterAmount\": \"Enter an amount\",\n \"financial.quickTx.save\": \"Save\",\n \"financial.quickTx.saving\": \"Saving…\",\n // Chart of accounts tree\n \"financial.chartTree.searchPlaceholder\": \"Search by code or name\",\n \"financial.chartTree.clearSearch\": \"Clear search\",\n \"financial.chartTree.expandAll\": \"Expand all\",\n \"financial.chartTree.collapseAll\": \"Collapse all\",\n \"financial.chartTree.expand\": \"Expand\",\n \"financial.chartTree.collapse\": \"Collapse\",\n \"financial.chartTree.addRoot\": \"New root account\",\n \"financial.chartTree.addChild\": \"New account inside this one\",\n \"financial.chartTree.edit\": \"Edit\",\n \"financial.chartTree.deactivate\": \"Deactivate\",\n \"financial.chartTree.reactivate\": \"Reactivate\",\n \"financial.chartTree.delete\": \"Delete\",\n \"financial.chartTree.confirmDelete\": \"Delete this account?\",\n \"financial.chartTree.cancel\": \"Cancel\",\n \"financial.chartTree.save\": \"Save\",\n \"financial.chartTree.saving\": \"Saving…\",\n \"financial.chartTree.searching\": \"Searching…\",\n \"financial.chartTree.count\": \"{{count}} accounts\",\n \"financial.chartTree.countOne\": \"1 account\",\n \"financial.chartTree.matchesOne\": \"1 account found\",\n \"financial.chartTree.matches\": \"{{count}} accounts found\",\n \"financial.chartTree.showInactive\": \"Show inactive ({{count}})\",\n \"financial.chartTree.inactive\": \"Inactive\",\n \"financial.chartTree.empty\": \"No accounts yet. Create the first root account.\",\n \"financial.chartTree.noMatches\": \"No account matches the search.\",\n \"financial.chartTree.noGroups\": \"No group found\",\n \"financial.chartTree.rootLevel\": \"Root level (no parent)\",\n \"financial.chartTree.group\": \"Group (holds other accounts)\",\n \"financial.chartTree.leaf\": \"Account (receives postings)\",\n \"financial.chartTree.field.code\": \"Code\",\n \"financial.chartTree.field.name\": \"Name\",\n \"financial.chartTree.field.structure\": \"Structure\",\n \"financial.chartTree.field.nature\": \"Nature\",\n \"financial.chartTree.field.parent\": \"Parent account\",\n \"financial.chartTree.nature.none\": \"No nature\",\n \"financial.chartTree.nature.revenue\": \"Revenue\",\n \"financial.chartTree.nature.expense\": \"Expense\",\n \"financial.chartTree.nature.asset\": \"Asset\",\n \"financial.chartTree.nature.liability\": \"Liability\",\n \"financial.chartTree.nature.equity\": \"Equity\",\n \"financial.chartTree.created\": \"Account \\\"{{name}}\\\" created\",\n \"financial.chartTree.updated\": \"Account \\\"{{name}}\\\" updated\",\n \"financial.chartTree.deactivated\": \"Account \\\"{{name}}\\\" deactivated\",\n \"financial.chartTree.reactivated\": \"Account \\\"{{name}}\\\" reactivated\",\n \"financial.chartTree.deleted\": \"Account \\\"{{name}}\\\" deleted\",\n \"financial.chartTree.error.save\": \"Could not save. If the account already has postings, deactivate it instead of deleting.\",\n \"financial.chartTree.error.load\": \"Could not load the chart of accounts.\",\n \"financial.chartTree.error.codeRequired\": \"Enter the account code.\",\n \"financial.chartTree.error.nameRequired\": \"Enter the account name.\",\n \"financial.chartTree.error.codeTaken\": \"Code {{code}} is already used by \\\"{{name}}\\\".\",\n \"financial.chartTree.error.leafWithChildren\": \"An account with accounts inside it must stay a group.\",\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"financial.payment.pendingRetry\": \"A confirmação ainda está pendente. Não abra outro pagamento — tente de novo aqui mesmo.\",\n \"financial.cards.addExpense\": \"Adicionar despesa\",\n \"financial.cards.expenseOnCard\": \"Despesa neste cartão\",\n \"financial.cards.allBillsValue\": \"Total das faturas\",\n \"financial.cards.availableLimit\": \"Limite disponível\",\n \"financial.cards.currentBill\": \"Fatura atual\",\n \"financial.cards.dueOn\": \"Vence dia {{day}}\",\n \"financial.cards.installment\": \"Parcela {{current}}/{{total}}\",\n \"financial.cards.loading\": \"Carregando...\",\n \"financial.cards.noCards\": \"Nenhum cartão cadastrado\",\n \"financial.cards.noCardsHint\": \"Adicione um cartão de crédito nas configurações para acompanhar suas faturas aqui\",\n \"financial.cards.empty.step\": \"Uma conta do tipo Cartão de Crédito\",\n \"financial.cards.empty.stepWhere\": \"Cadastros → Contas\",\n \"financial.cards.noTransactions\": \"Nenhuma transação com cartão\",\n \"financial.cards.tabClosed\": \"Fechados\",\n \"financial.cards.tabOpen\": \"Abertos\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% do limite usado\",\n \"financial.cards.pending\": \"Pendente\",\n \"financial.cards.received\": \"Recebido\",\n \"financial.cards.subtitle\": \"Transações de cartão de crédito e débito\",\n \"financial.cards.title\": \"Cartões\",\n \"financial.cards.transactions\": \"({{count}} transações)\",\n \"financial.cards.transactionsAppear\": \"As transações com cartão aparecerão aqui quando pagamentos forem feitos via cartão de crédito/débito\",\n \"financial.cashRegisters.addNotes\": \"Adicionar observações\",\n \"financial.cashRegisters.back\": \"Voltar\",\n \"financial.cashRegisters.bills\": \"Notas\",\n \"financial.cashRegisters.closeSession\": \"Fechar Sessão\",\n \"financial.cashRegisters.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cashRegisters.closing\": \"Fechando...\",\n \"financial.cashRegisters.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cashRegisters.closingNotes\": \"Observações de Fechamento\",\n \"financial.cashRegisters.coins\": \"Moedas\",\n \"financial.cashRegisters.confirmOpen\": \"Confirmar e Abrir\",\n \"financial.cashRegisters.confirmOpening\": \"Confirmar Abertura do Caixa\",\n \"financial.cashRegisters.count\": \"Contagem\",\n \"financial.cashRegisters.countBills\": \"Contar Notas e Moedas\",\n \"financial.cashRegisters.countedTotal\": \"Total Contado\",\n \"financial.cashRegisters.denominationCount\": \"Contagem por denominação\",\n \"financial.cashRegisters.differenceFromOpening\": \"Diferença em relação à abertura\",\n \"financial.cashRegisters.method\": \"Método\",\n \"financial.cashRegisters.noCashAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cashRegisters.noClosedSessions\": \"Nenhuma sessão encerrada ainda\",\n \"financial.cashRegisters.openAnother\": \"Abrir outro caixa\",\n \"financial.cashRegisters.openSession\": \"Abrir Sessão\",\n \"financial.cashRegisters.openSessions\": \"Sessões Abertas\",\n \"financial.cashRegisters.opened\": \"Aberto\",\n \"financial.cashRegisters.opening\": \"Abrindo...\",\n \"financial.cashRegisters.openingBalance\": \"Saldo de Abertura\",\n \"financial.cashRegisters.quickAmount\": \"Valor Rápido\",\n \"financial.cashRegisters.register\": \"Caixa\",\n \"financial.cashRegisters.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cashRegisters.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.commissions.emptyTitle\": \"Nenhuma comissão calculada\",\n \"financial.commissions.emptyDesc\": \"Este módulo guarda as regras de comissão, mas ainda não há nada que calcule comissão a partir das suas vendas.\",\n \"financial.commissions.emptyRulesHint\": \"As regras de comissão ficam em Configurações › Financeiro › Propriedades.\",\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.bulkCancel\": \"Cancelar\",\n \"financial.invoice.rowOpen\": \"Abrir\",\n \"financial.invoice.rowAttachments\": \"Anexos\",\n \"financial.invoice.bulkCancelDone\": \"{{count}} fatura(s) cancelada(s)\",\n \"financial.invoice.bulkCancelFailed\": \"{{count}} fatura(s) não puderam ser canceladas\",\n \"financial.invoice.bulkCancelNone\": \"Nenhuma das faturas selecionadas pode ser cancelada.\",\n \"financial.invoice.bulkCancelTitle\": \"Cancelar {{count}} fatura(s)?\",\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.cancelReason\": \"Motivo do cancelamento\",\n \"financial.invoice.cancelReasonPlaceholder\": \"Explique por que esta fatura está sendo cancelada\",\n \"financial.invoice.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoice.cancelling\": \"Cancelando...\",\n \"financial.invoice.contact\": \"Contato\",\n \"financial.invoice.payTo\": \"Pagar a\",\n \"financial.invoice.receiveFrom\": \"Receber de\",\n \"financial.invoice.unit\": \"Unidade\",\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.item\": \"Item\",\n \"financial.invoice.items\": \"Itens\",\n \"financial.invoice.noLines\": \"Sem itens — o total foi lançado sem as linhas. Edite para detalhar.\",\n \"financial.invoice.keepInvoice\": \"Manter Fatura\",\n \"financial.invoice.new\": \"Nova\",\n \"financial.invoice.newManual\": \"Cadastrar\",\n \"financial.invoiceForm.createContact\": \"Cadastrar\",\n \"financial.invoiceForm.alreadyPaid\": \"Já foi pago\",\n \"financial.invoiceForm.paidWith\": \"Forma de pagamento\",\n \"financial.invoiceForm.paidFrom\": \"Saiu de\",\n \"financial.invoiceForm.selectMethod\": \"Selecione a forma\",\n \"financial.invoiceForm.selectAccount\": \"Selecione a conta\",\n \"financial.invoiceForm.selectMethodFirst\": \"Escolha a forma primeiro\",\n \"financial.invoiceForm.scheduleSourceHint\": \"Forma e conta ficam configuráveis em cada vencimento.\",\n \"financial.invoiceForm.paidNeedsMethod\": \"Diga a forma de pagamento e a conta\",\n \"financial.invoiceForm.willBePaid\": \"Esta parcela entra como paga\",\n \"financial.invoiceForm.attachFailed\": \"A conta foi salva, mas um anexo não subiu\",\n \"financial.invoiceForm.attachOnSave\": \"anexa ao salvar\",\n \"financial.invoiceForm.clear\": \"Limpar\",\n \"financial.invoiceForm.manageAccounts\": \"Gerenciar contas\",\n \"financial.invoiceForm.manageChart\": \"Gerenciar plano de contas\",\n \"financial.invoiceForm.manageCostCenters\": \"Gerenciar centros de custo\",\n \"financial.invoice.newManualHint\": \"Preencher os campos da conta\",\n \"financial.invoice.noDetails\": \"Nenhum detalhe adicional registrado\",\n \"financial.invoice.unlinkedPayments\": \"Pagamentos sem parcela vinculada\",\n \"financial.invoice.unlinkedPaymentsDesc\": \"Dinheiro registrado nesta fatura que não aponta para nenhuma das parcelas acima.\",\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.loadFailed\": \"Não foi possível carregar\",\n \"financial.invoice.loadFailedDesc\": \"A leitura desta fatura falhou. O dado continua no lugar — só não chegou até aqui.\",\n \"financial.invoice.retry\": \"Tentar de novo\",\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.receive\": \"Receber\",\n \"financial.invoice.reverse\": \"Estornar\",\n \"financial.invoice.reverseTitle\": \"Estornar pagamento\",\n \"financial.invoice.reverseReason\": \"Motivo do estorno\",\n \"financial.invoice.reverseHint\": \"{{count}} pagamento(s) · {{total}}\",\n \"financial.invoice.reversePayments\": \"Pagamentos desta parcela\",\n \"financial.invoice.reverseExplain\": \"Todos vêm marcados: estornar só um deixa a parcela parcial. Cada estorno lança a contrapartida na mesma conta, e a parcela volta a ficar em aberto.\",\n \"financial.invoice.reverseConfirm\": \"Estornar {{total}}\",\n \"financial.invoice.paymentSchedule\": \"Vencimentos\",\n \"financial.invoiceForm.scheduleLocked\": \"Parcelas já pagas — o parcelamento não pode mais ser refeito.\",\n \"financial.invoiceForm.scheduleHasCancelled\": \"Esta conta tem parcela cancelada — valor e parcelamento não podem mais ser refeitos, só o vencimento.\",\n \"financial.invoiceForm.issuedLocked\": \"Conta emitida: valor, itens, fornecedor e data ficam travados. Para mudar, cancele e lance uma nova. Observações, unidade, nº do documento e vencimentos continuam editáveis.\",\n \"financial.invoiceForm.issuedEditable\": \"Conta emitida: valor, itens e fornecedor ficam travados. Para mudar, cancele e lance uma nova. Enquanto nada for pago, a data e o parcelamento continuam editáveis.\",\n \"financial.invoiceForm.edit\": \"Editar\",\n \"financial.invoice.payment\": \"Pagamento\",\n \"financial.invoice.balance\": \"Restante\",\n \"financial.invoice.details\": \"Detalhes\",\n \"financial.invoice.remaining\": \"Restante:\",\n \"financial.invoice.searchPlaceholder\": \"Buscar por contato, descrição ou documento…\",\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.tags\": \"Etiquetas\",\n \"financial.invoiceForm.currency\": \"Moeda\",\n \"financial.invoiceForm.addItem\": \"Adicionar Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Adicione itens primeiro\",\n \"financial.invoiceForm.contactRequired\": \"Selecione quem vai pagar ou receber antes de adicionar itens.\",\n \"financial.invoiceForm.additionalNotes\": \"Observações adicionais...\",\n \"financial.itemType.service\": \"Serviço\",\n \"financial.itemType.package\": \"Pacote\",\n \"financial.itemType.product\": \"Produto\",\n \"financial.itemType.other\": \"Outro\",\n \"financial.itemType.gift_card\": \"Gift Card\",\n \"financial.giftCardLine.label\": \"Código do gift card\",\n \"financial.giftCardLine.placeholder\": \"0000 0000 0000 0000\",\n \"financial.giftCardLine.hint\": \"Escaneie ou digite o código completo do cartão.\",\n \"financial.giftCardLine.notFound\": \"Gift card não encontrado\",\n \"financial.giftCardLine.revoked\": \"Gift card cancelado — não pode ser vendido\",\n \"financial.giftCardLine.expired\": \"Gift card expirado\",\n \"financial.giftCardLine.alreadySold\": \"Este gift card já foi vendido\",\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 // Título da migalha (\"← Mensalidades / Nova\"). Genérico de propósito: o nome\n // do documento é do app (Mensalidades, Contas a Receber), e repeti-lo aqui\n // escreveria \"fatura\" numa tela que o app chama de outra coisa.\n \"financial.invoiceForm.editTitle\": \"Editar\",\n \"financial.invoiceForm.newTitle\": \"Nova\",\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.searchMinChars\": \"Digite pelo menos 2 caracteres para buscar.\",\n \"financial.invoiceForm.searchUnit\": \"Buscar unidade...\",\n \"financial.invoiceForm.selectInstallments\": \"Selecione a quantidade de parcelas acima\",\n \"financial.invoiceForm.selectContactFirst\": \"Selecione primeiro quem vai pagar ou receber para adicionar itens.\",\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.goals\": \"Metas\",\n \"financial.nav.giftCards\": \"Gift Cards\",\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.recurring\": \"Recorrentes\",\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.notasFiscais\": \"Notas Fiscais\",\n \"financial.nav.fiscal\": \"Fiscal\",\n \"financial.nav.fiscalIssued\": \"Notas Emitidas\",\n \"financial.nav.fiscalGroups\": \"Grupos Fiscais\",\n \"financial.nav.recurringExpenses\": \"Despesas Recorrentes\",\n \"financial.nav.recurringIncome\": \"Receitas Recorrentes\",\n \"financial.nav.rules\": \"Regras\",\n \"financial.nav.statements\": \"Extratos\",\n \"financial.nav.summary\": \"Resumo\",\n \"financial.invoice.filterAccount\": \"Plano de contas\",\n \"financial.invoice.filterAllAccounts\": \"Todos os planos\",\n \"financial.invoice.filterCostCenter\": \"Centro de custo\",\n \"financial.invoice.filterAllCostCenters\": \"Todos os centros\",\n \"financial.invoice.filterPeriod\": \"Período\",\n \"financial.invoice.filterAllPeriods\": \"Todo o período\",\n \"financial.invoice.filterThisMonth\": \"Este mês\",\n \"financial.invoice.filterLastMonth\": \"Mês passado\",\n \"financial.invoice.filterLast30\": \"Últimos 30 dias\",\n \"financial.invoice.filterLast90\": \"Últimos 90 dias\",\n \"financial.invoice.filterMaxRange\": \"Período máximo de 90 dias\",\n \"financial.invoice.filterThisYear\": \"Este ano\",\n \"financial.invoice.filterCustom\": \"Personalizado\",\n \"financial.invoice.filterFrom\": \"De\",\n \"financial.invoice.filterTo\": \"Até\",\n \"financial.invoice.filterClear\": \"Limpar\",\n \"financial.invoice.filterApply\": \"Buscar\",\n \"financial.invoice.filterMore\": \"Mais filtros\",\n \"financial.invoice.filterLess\": \"Menos filtros\",\n \"financial.invoice.filterPending\": \"Filtros alterados\",\n \"financial.invoice.filterPendingHint\": \"A lista ainda mostra o recorte anterior. Clique em Buscar para aplicar.\",\n \"financial.invoice.filterUnit\": \"Unidade\",\n \"financial.invoice.filtersTitle\": \"Filtros\",\n \"financial.invoice.filterShow\": \"Exibir\",\n \"financial.invoice.filterAllStatuses\": \"Todos\",\n \"financial.invoice.filterContactPlaceholder\": \"Digite...\",\n \"financial.invoice.filterAllContacts\": \"Todos\",\n \"financial.invoice.filterFiscalNumber\": \"Nota Fiscal\",\n \"financial.invoice.filterPaymentAccount\": \"Conta de pagamento\",\n \"financial.invoice.filterReceiptAccount\": \"Conta de recebimento\",\n \"financial.invoice.filterAllBankAccounts\": \"Todas as contas\",\n \"financial.invoice.filterFiscalNumberPlaceholder\": \"Nº\",\n \"financial.invoice.filterAllUnits\": \"Todas as unidades\",\n \"financial.invoice.generateCnab\": \"Gerar CNAB 240\",\n \"financial.invoice.printSelected\": \"Imprimir\",\n \"financial.invoice.exportSelected\": \"Exportar CSV\",\n \"financial.invoice.printBlocked\": \"Permita pop-ups para imprimir a seleção.\",\n \"financial.reconciliation.filtersTitle\": \"Filtros\",\n \"financial.reconciliation.filterApply\": \"Buscar\",\n \"financial.reconciliation.filterPending\": \"Filtros alterados\",\n \"financial.reconciliation.filterPendingHint\": \"O extrato ainda mostra o recorte anterior. Clique em Filtrar para aplicar.\",\n \"financial.paymentReceipt.title\": \"Detalhes do Pagamento\",\n \"financial.paymentReceipt.titleReversal\": \"Detalhes do Estorno\",\n \"financial.paymentReceipt.open\": \"Ver os detalhes deste pagamento\",\n \"financial.paymentReceipt.count\": \"{{count}} pagamentos\",\n \"financial.paymentReceipt.reversedCount\": \"{{count}} pagamento(s) estornado(s)\",\n \"financial.paymentReceipt.show\": \"Ver\",\n \"financial.paymentReceipt.hide\": \"Ocultar\",\n \"financial.paymentReceipt.reversedOn\": \"Estornado em {{date}}\",\n \"financial.paymentReceipt.reversed\": \"Estornado\",\n \"financial.paymentReceipt.paymentNumber\": \"Pagamento {{number}}\",\n \"financial.paymentReceipt.reversalNumber\": \"Estorno {{number}}\",\n \"financial.paymentReceipt.empty\": \"Nenhum pagamento registrado nesta parcela.\",\n \"financial.paymentReceipt.date\": \"Data\",\n \"financial.paymentReceipt.amount\": \"Valor\",\n \"financial.paymentReceipt.methodOut\": \"Forma Pgto.\",\n \"financial.paymentReceipt.methodIn\": \"Forma Receb.\",\n \"financial.paymentReceipt.methodNone\": \"N/A\",\n \"financial.paymentReceipt.account\": \"Conta\",\n \"financial.paymentReceipt.cardBrand\": \"Bandeira\",\n \"financial.paymentReceipt.fee\": \"Taxa\",\n \"financial.paymentReceipt.payer\": \"Pagador\",\n \"financial.paymentReceipt.receivedFrom\": \"Recebido de\",\n \"financial.paymentReceipt.paidBy\": \"Pago por\",\n \"financial.paymentReceipt.receivedBy\": \"Recebido por\",\n \"financial.paymentReceipt.cashSession\": \"Caixinha\",\n \"financial.paymentReceipt.cashSessionYes\": \"Sim\",\n \"financial.paymentReceipt.notes\": \"Obs\",\n \"financial.paymentReceipt.unlink\": \"Desvincular desta parcela\",\n \"financial.paymentReceipt.unlinkUnavailable\": \"Ainda não disponível: desvincular preserva o pagamento e devolve o valor como crédito da contraparte, e isso precisa de uma operação no banco que ainda não existe.\",\n \"financial.paymentReceipt.reverse\": \"Estornar este pagamento\",\n \"financial.reconciliation.title\": \"Conciliação\",\n \"financial.reconciliation.subtitle\": \"Concilie as linhas importadas do banco com seus lançamentos\",\n \"financial.reconciliation.pending\": \"{{count}} para conciliar\",\n \"financial.reconciliation.allDone\": \"Tudo conciliado\",\n \"financial.reconciliation.empty\": \"Nada para conciliar\",\n \"financial.reconciliation.emptyHint\": \"As transações bancárias importadas aparecem aqui para conciliação.\",\n \"financial.reconciliation.bankLines\": \"Linhas do banco\",\n \"financial.reconciliation.candidates\": \"Correspondências sugeridas\",\n \"financial.reconciliation.selectLine\": \"Selecione uma linha do banco para ver as sugestões\",\n \"financial.reconciliation.noCandidates\": \"Nenhuma correspondência sugerida para esta linha\",\n \"financial.reconciliation.match\": \"Conciliar\",\n \"financial.reconciliation.accept\": \"Aceitar como novo\",\n \"financial.reconciliation.acceptHint\": \"Sem contrapartida interna — manter como lançamento avulso\",\n \"financial.reconciliation.matchScore\": \"{{score}}% compatível\",\n \"financial.reconciliation.refresh\": \"Atualizar\",\n \"financial.reconciliation.from\": \"De\",\n \"financial.reconciliation.to\": \"Até\",\n \"financial.reconciliation.filter\": \"Filtrar\",\n \"financial.reconciliation.filterMore\": \"Mais filtros\",\n \"financial.reconciliation.filterLess\": \"Menos filtros\",\n \"financial.reconciliation.syncNow\": \"Sincronizar agora\",\n \"financial.reconciliation.syncing\": \"Buscando no banco…\",\n \"financial.reconciliation.syncImported\": \"{{count}} lançamento(s) novo(s) do banco\",\n \"financial.reconciliation.syncNothingNew\": \"O banco não tem lançamento novo\",\n \"financial.reconciliation.syncFailed\": \"Não foi possível buscar o extrato do banco\",\n \"financial.reconciliation.group.today\": \"Hoje\",\n \"financial.reconciliation.group.yesterday\": \"Ontem\",\n \"financial.reconciliation.group.thisWeek\": \"Esta semana\",\n \"financial.reconciliation.group.lastWeek\": \"Semana passada\",\n \"financial.reconciliation.group.thisMonth\": \"Este mês\",\n \"financial.reconciliation.group.lastMonth\": \"Mês passado\",\n \"financial.reconciliation.group.older\": \"Anteriores\",\n \"financial.reconciliation.investments\": \"Aplicações e rendimentos\",\n \"financial.reconciliation.investmentsHide\": \"Ocultar\",\n \"financial.reconciliation.investmentsShow\": \"Mostrar\",\n \"financial.reconciliation.pickAccountFirst\": \"Escolha uma conta\",\n \"financial.reconciliation.suggest\": \"Sugerir\",\n \"financial.reconciliation.suggestion\": \"Sugestão\",\n \"financial.reconciliation.suggestionLabel\": \"Sugestão:\",\n \"financial.reconciliation.linkManually\": \"Vincular manualmente\",\n \"financial.reconciliation.viewBillUnavailable\": \"Esta linha foi conciliada sem uma conta para abrir.\",\n \"financial.reconciliation.viewBill\": \"Ver conta\",\n \"financial.reconciliation.installment\": \"Parcela\",\n \"financial.reconciliation.dueShort\": \"Venc.\",\n \"financial.reconciliation.moreCandidates\": \"+{{count}} outra(s) sugestão(ões)\",\n \"financial.reconciliation.credit\": \"Crédito\",\n \"financial.reconciliation.debit\": \"Débito\",\n \"financial.reconciliation.payerLabel\": \"Pagador:\",\n \"financial.reconciliation.supplierLabel\": \"Fornecedor:\",\n \"financial.reconciliation.docPrefix\": \"Doc\",\n \"financial.reconciliation.balanceAt\": \"Saldo:\",\n \"financial.reconciliation.noIntegratedAccount\": \"Nenhuma conta integrada. Ligue o Open Banking em Configurações → Integrações.\",\n \"financial.reconciliation.search\": \"Buscar\",\n \"financial.reconciliation.details\": \"Detalhes\",\n \"financial.reconciliation.detailDate\": \"Data\",\n \"financial.reconciliation.detailEffective\": \"Efetivado em\",\n \"financial.reconciliation.detailCounterparty\": \"Contraparte\",\n \"financial.reconciliation.detailDocument\": \"CPF/CNPJ ou documento\",\n \"financial.reconciliation.detailCode\": \"Código\",\n \"financial.reconciliation.detailCategory\": \"Categoria\",\n \"financial.reconciliation.detailKind\": \"Tipo da transação\",\n \"financial.reconciliation.detailBalance\": \"Saldo na linha\",\n \"financial.reconciliation.detailProvider\": \"Provedor\",\n \"financial.reconciliation.detailExternalId\": \"Identificador do provedor\",\n \"financial.reconciliation.rawPayload\": \"Ver o que o provedor mandou\",\n \"financial.reconciliation.createBill\": \"Lançar como conta\",\n \"financial.reconciliation.createBillAction\": \"Lançar e conciliar\",\n \"financial.reconciliation.billCreated\": \"Conta lançada e conciliada\",\n \"financial.reconciliation.billDescription\": \"Descrição\",\n \"financial.reconciliation.supplier\": \"Fornecedor\",\n \"financial.reconciliation.payer\": \"Pagador\",\n \"financial.reconciliation.chartAccount\": \"Plano de contas\",\n \"financial.reconciliation.chartAccountPlaceholder\": \"Escolher classificação...\",\n \"financial.reconciliation.chartAccountNone\": \"Nenhuma conta do plano encontrada\",\n \"financial.reconciliation.chartAccountHint\": \"É a classificação que faz esta conta aparecer na DRE.\",\n \"financial.reconciliation.markTransfer\": \"Marcar como transferência\",\n \"financial.reconciliation.markTransferAction\": \"Marcar e conciliar\",\n \"financial.reconciliation.transferDone\": \"Transferência registrada\",\n \"financial.reconciliation.transferTo\": \"Conta de destino\",\n \"financial.reconciliation.transferFrom\": \"Conta de origem\",\n \"financial.reconciliation.transferNotes\": \"Observação\",\n \"financial.reconciliation.pickAccount\": \"Escolha a conta\",\n \"financial.reconciliation.account\": \"Conta ou cartão\",\n \"financial.reconciliation.accountRequired\": \"Escolha uma conta para ver o extrato.\",\n \"financial.reconciliation.searchPlaceholder\": \"Descrição ou identificador do provedor...\",\n \"financial.reconciliation.type\": \"Tipo\",\n \"financial.reconciliation.typeAll\": \"Todos\",\n \"financial.reconciliation.typeIn\": \"Entrada\",\n \"financial.reconciliation.typeOut\": \"Saída\",\n \"financial.reconciliation.status\": \"Status\",\n \"financial.reconciliation.statusAll\": \"Todos\",\n \"financial.reconciliation.statusReconciled\": \"Conciliado\",\n \"financial.reconciliation.statusPending\": \"Pendente\",\n \"financial.reconciliation.reconciled\": \"Conciliado\",\n \"financial.reconciliation.undo\": \"Desfazer\",\n \"financial.reconciliation.flowTitle\": \"Conciliar movimentação\",\n \"financial.reconciliation.stepClassify\": \"O que deseja fazer\",\n \"financial.reconciliation.stepItems\": \"Os itens\",\n \"financial.reconciliation.stepDetails\": \"Os detalhes\",\n \"financial.reconciliation.stepConfirm\": \"Confirmar\",\n \"financial.reconciliation.confirmAction\": \"Confirmar\",\n \"financial.reconciliation.howToClassify\": \"Como você quer classificar esta transação?\",\n \"financial.reconciliation.pickIntent\": \"Escolha o que esta transação é\",\n \"financial.reconciliation.foundTitle\": \"Contas encontradas\",\n \"financial.reconciliation.searchWiden\": \"Ampliar busca (±15 dias, qualquer valor)\",\n \"financial.reconciliation.stepSelectBill\": \"Selecione a conta\",\n \"financial.reconciliation.stepAdjust\": \"Ajuste\",\n \"financial.reconciliation.selectBillFor\": \"Extrato de {{date}} · {{description}} ·\",\n \"financial.reconciliation.statusOverdue\": \"Vencido\",\n \"financial.reconciliation.colDue\": \"Venc.\",\n \"financial.reconciliation.colCounterparty\": \"Contraparte\",\n \"financial.reconciliation.colDescription\": \"Número / Descrição\",\n \"financial.reconciliation.colInstallment\": \"Parcela\",\n \"financial.reconciliation.colToReconcile\": \"Valor a conciliar\",\n \"financial.reconciliation.colDelta\": \"Δ vs extrato\",\n \"financial.reconciliation.searchStatusAllShort\": \"Todos\",\n \"financial.reconciliation.searchPendingHint\": \"A lista ainda mostra o recorte anterior. Clique em Filtrar para aplicar.\",\n \"financial.reconciliation.searchTitle\": \"Buscar conta\",\n \"financial.reconciliation.searchDueFrom\": \"Vencimento de\",\n \"financial.reconciliation.searchDueTo\": \"até\",\n \"financial.reconciliation.searchStatus\": \"Situação\",\n \"financial.reconciliation.searchStatusAll\": \"Todos (não conciliados)\",\n \"financial.reconciliation.searchStatusOpen\": \"Em aberto\",\n \"financial.reconciliation.searchStatusPaid\": \"Pagos\",\n \"financial.reconciliation.searchText\": \"Buscar (contraparte, número, descrição)\",\n \"financial.reconciliation.searchTextPlaceholder\": \"Digite e pressione Enter\",\n \"financial.reconciliation.searchAmountMin\": \"Valor mín.\",\n \"financial.reconciliation.searchAmountMax\": \"Valor máx.\",\n \"financial.reconciliation.searchAction\": \"Buscar\",\n \"financial.reconciliation.searchEmpty\": \"Nenhuma conta com esses filtros.\",\n \"financial.reconciliation.searchMore\": \"Carregar mais\",\n \"financial.reconciliation.pickCandidate\": \"Escolha o lançamento a vincular\",\n \"financial.reconciliation.needDescription\": \"Descreva o lançamento\",\n \"financial.reconciliation.intentLink\": \"Vincular a um lançamento\",\n \"financial.reconciliation.intentLinkHint\": \"A conta já existe no sistema — esta linha é a prova de que ela foi paga.\",\n \"financial.reconciliation.intentBillOut\": \"Lançar como conta a pagar\",\n \"financial.reconciliation.intentBillIn\": \"Lançar como conta a receber\",\n \"financial.reconciliation.intentBillHint\": \"O lançamento nunca existiu. Ele nasce aqui, classificado e já quitado.\",\n \"financial.reconciliation.intentTransfer\": \"Transferência entre contas\",\n \"financial.reconciliation.intentTransferHint\": \"Não é receita nem despesa: é dinheiro andando entre duas contas da casa.\",\n \"financial.reconciliation.attachReceipt\": \"Anexar comprovante\",\n \"financial.reconciliation.attachReceiptHint\": \"Cupom fiscal, boleto, recibo — imagem ou PDF. A IA lê e preenche o fornecedor, os itens e o plano de contas. O valor, a data e a conta do extrato ficam travados como fonte da verdade.\",\n \"financial.reconciliation.receiptRead_action\": \"Anexar e ler com IA\",\n \"financial.reconciliation.receiptReplace\": \"Trocar comprovante\",\n \"financial.reconciliation.receiptReading\": \"Lendo o comprovante...\",\n \"financial.reconciliation.receiptRead\": \"Comprovante lido\",\n \"financial.reconciliation.receiptTooBig\": \"Comprovante acima de 10 MB.\",\n \"financial.reconciliation.receiptNoAgent\": \"A leitura por IA precisa do assistente configurado neste app.\",\n \"financial.reconciliation.candidateOpen\": \"Em aberto · {{amount}}\",\n \"financial.reconciliation.candidatePaid\": \"Já quitada\",\n \"financial.reconciliation.dueDate\": \"Vencimento\",\n \"financial.reconciliation.billAmount\": \"Valor da conta\",\n \"financial.reconciliation.items\": \"Itens do comprovante\",\n \"financial.reconciliation.addItem\": \"Adicionar item\",\n \"financial.reconciliation.noItemsHint\": \"Nenhum item identificado. Anexe um comprovante para a IA reconhecer os itens, ou adicione à mão.\",\n \"financial.reconciliation.itemDescription\": \"Descrição\",\n \"financial.reconciliation.itemQuantity\": \"Qtd.\",\n \"financial.reconciliation.itemUnitPrice\": \"Valor unit.\",\n \"financial.reconciliation.itemsSum\": \"Soma dos itens\",\n \"financial.reconciliation.statementTotal\": \"Total do extrato\",\n \"financial.reconciliation.costCenter\": \"Centro de custo\",\n \"financial.reconciliation.costCenterPlaceholder\": \"Nenhum\",\n \"financial.reconciliation.transferHint\": \"A conta do extrato entra automaticamente como a outra ponta.\",\n \"financial.reconciliation.linkOnlyExplain\": \"Esta conta já foi paga no sistema. Confirmar apenas amarra a linha do extrato a ela — sem criar um segundo pagamento e sem mexer no valor.\",\n \"financial.reconciliation.noAdjustmentNeeded\": \"O valor bate com a conta. Nada a ajustar.\",\n \"financial.reconciliation.adjustmentNeeded\": \"O banco tirou {{gap}} {{side}} do que a conta pedia. Diga o que é essa diferença.\",\n \"financial.reconciliation.adjustmentNeededIn\": \"Entrou {{gap}} {{side}} do que a conta cobrava. Diga o que é essa diferença.\",\n \"financial.reconciliation.adjustmentNeedsAccount\": \"Escolha o plano de contas de cada ajuste.\",\n \"financial.reconciliation.adjustmentType\": \"Tipo\",\n \"financial.reconciliation.adjustmentDescriptionPlaceholder\": \"Ex.: juros por atraso\",\n \"financial.reconciliation.adjustmentDefaultInterest\": \"Juros por atraso\",\n \"financial.reconciliation.adjustmentDefaultFine\": \"Multa por atraso\",\n \"financial.reconciliation.adjustmentDefaultDiscountOut\": \"Desconto obtido\",\n \"financial.reconciliation.adjustmentDefaultDiscountIn\": \"Desconto concedido\",\n \"financial.reconciliation.adjustmentMore\": \"a mais\",\n \"financial.reconciliation.adjustmentLess\": \"a menos\",\n \"financial.reconciliation.partialQuestion\": \"Como tratar a diferença\",\n \"financial.reconciliation.partialTitle\": \"Pagamento parcial\",\n \"financial.reconciliation.partialLine\": \"Esta saída paga uma parte; {{rest}} ficam em aberto para a próxima.\",\n \"financial.reconciliation.gapTitle\": \"Explicar a diferença\",\n \"financial.reconciliation.gapLine\": \"Desconto, juros ou multa: a conta fecha com esta saída.\",\n \"financial.reconciliation.partialExplain\": \"Esta saída paga {{paid}} da conta. Os {{rest}} restantes ficam em aberto: concilie a próxima saída com esta mesma conta.\",\n \"financial.reconciliation.summaryPartial\": \"Pagamento parcial: {{rest}} continuam em aberto nesta conta.\",\n \"financial.reconciliation.partialDone\": \"Parte paga. Faltam {{rest}} nesta conta.\",\n \"financial.reconciliation.interest\": \"Juros\",\n \"financial.reconciliation.fine\": \"Multa\",\n \"financial.reconciliation.discount\": \"Desconto\",\n \"financial.reconciliation.adjustmentAmount\": \"Valor\",\n \"financial.reconciliation.adjustmentDescription\": \"Descrição do ajuste\",\n \"financial.reconciliation.addAdjustment\": \"Adicionar ajuste\",\n \"financial.reconciliation.howItSettles\": \"Como esta linha quita\",\n \"financial.reconciliation.settleAmount\": \"Valor\",\n \"financial.reconciliation.settleDate\": \"Data\",\n \"financial.reconciliation.settleAccount\": \"Conta\",\n \"financial.reconciliation.settleAccountUnknown\": \"a conta do extrato\",\n \"financial.reconciliation.settleNote\": \"Observação\",\n \"financial.reconciliation.settleNoMethodHint\": \"Sem forma de pagamento: a forma é o próprio extrato. Quando, onde e quanto vêm do banco — não há o que escolher aqui.\",\n \"financial.reconciliation.howItWasPaid\": \"Como o dinheiro andou\",\n \"financial.reconciliation.noPaymentNeeded\": \"Nada a pagar aqui: o dinheiro já está registrado no sistema.\",\n \"financial.reconciliation.noContact\": \"sem contraparte\",\n \"financial.reconciliation.summaryTransfer\": \"Registrar {{amount}} como transferência com {{account}} e conciliar a linha.\",\n \"financial.reconciliation.summaryBillOut\": \"Criar uma conta a pagar de {{amount}} para {{contact}}, quitá-la e conciliar a linha.\",\n \"financial.reconciliation.summaryBillIn\": \"Criar uma conta a receber de {{amount}} de {{contact}}, quitá-la e conciliar a linha.\",\n \"financial.reconciliation.summarySettle\": \"Quitar a conta em {{amount}} e conciliar a linha.\",\n \"financial.reconciliation.summaryLinkOnly\": \"Amarrar a linha à conta já paga, sem criar pagamento.\",\n \"financial.reconciliation.summaryAdjustments\": \"Mais {{count}} lançamento(s) de ajuste, na mesma data e na mesma conta.\",\n \"financial.reconciliation.settled\": \"Conta quitada e conciliada\",\n \"financial.reconciliation.linked\": \"Linha amarrada à conta\",\n \"financial.payment.amountRequired\": \"Informe o valor\",\n \"financial.payment.methodRequired\": \"Escolha a forma de pagamento\",\n \"financial.payment.accountRequired\": \"Escolha a conta\",\n \"financial.payment.amountFromStatement\": \"O valor vem do extrato\",\n \"financial.reconciliation.pageCredits\": \"Créditos (página)\",\n \"financial.reconciliation.pageDebits\": \"Débitos (página)\",\n \"financial.reconciliation.pageBalance\": \"Saldo (página)\",\n \"financial.reconciliation.pageTotalsHint\": \"Os três somam apenas as linhas desta página — trocar de página troca os números.\",\n \"financial.reconciliation.showing\": \"Mostrando {{from}}–{{to}} de {{total}} registros\",\n \"financial.reconciliation.pageOf\": \"Página {{page}} de {{pages}}\",\n \"financial.reconciliation.first\": \"Primeira\",\n \"financial.reconciliation.previous\": \"Anterior\",\n \"financial.reconciliation.next\": \"Próxima\",\n \"financial.reconciliation.last\": \"Última\",\n \"financial.reconciliation.emptyFiltered\": \"Nenhuma transação no período\",\n \"financial.reconciliation.emptyFilteredHint\": \"Ajuste o período ou o filtro, ou importe o extrato em Configurações → Integrações.\",\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.whichCard\": \"Qual cartão\",\n \"financial.payment.noCompanyCards\": \"Nenhum cartão da empresa cadastrado. Pagamento no cartão precisa do cartão cadastrado.\",\n \"financial.payment.registerCard\": \"Cadastrar cartão (conta do tipo \\\"Cartão a pagar\\\")\",\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.receiveAmount\": \"Receber {{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.payment.titleReceive\": \"Registrar Recebimento\",\n \"financial.payment.changeSource\": \"Alterar forma e conta\",\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.modules\": \"Módulos\",\n \"financial.settings.modulesDesc\": \"O que desta casa aparece no Financeiro\",\n \"financial.settings.commissions\": \"Comissões\",\n \"financial.settings.commissionsDesc\": \"A aba de apuração do que a equipe recebe por venda\",\n \"financial.settings.cashRegistersDesc\": \"Abrir, fechar e conferir o caixa do balcão\",\n \"financial.settings.closing\": \"Fechamento\",\n \"financial.settings.closingDesc\": \"Fechar o período e travar datas passadas\",\n \"financial.settings.invoices\": \"Faturas\",\n \"financial.settings.invoicesDesc\": \"Como faturas e pagamentos são processados\",\n \"financial.settings.notifications\": \"Notificações\",\n \"financial.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"financial.settings.overdueAlerts\": \"Alertas de pagamento atrasado\",\n \"financial.settings.overdueAlertsDesc\": \"Notificar quando faturas passarem da data de vencimento\",\n \"financial.settings.requireDoc\": \"Exigir número do documento\",\n \"financial.settings.requireDocDesc\": \"Tornar obrigatório o número do documento/fatura nos pagamentos\",\n \"financial.settings.requireOpening\": \"Exigir saldo de abertura\",\n \"financial.settings.requireOpeningDesc\": \"O saldo de abertura deve ser confirmado antes de iniciar uma sessão\",\n \"financial.settingsPage.subtitle\": \"Gerenciar métodos de pagamento, contas e configurações\",\n \"financial.settingsPage.title\": \"Configurações Financeiras\",\n \"financial.payment.noMethods\": \"Nenhuma forma de pagamento configurada.\",\n \"financial.payment.configureMethods\": \"Configurar formas de pagamento\",\n \"financial.payment.noAccounts\": \"Nenhuma conta compatível. Crie uma nas Configurações.\",\n \"financial.payment.noAccountForMethod\": \"Nenhuma conta aceita {method}. Cartão liquida numa conta de recebíveis, não no banco.\",\n \"financial.payment.cashNeedsOpenSession\": \"Para receber em dinheiro é preciso ter um caixa aberto — é nele que a conferência do fim do dia acontece.\",\n \"financial.payment.openCashSession\": \"Abrir caixa\",\n \"financial.payment.configureAccounts\": \"Configurar contas\",\n \"financial.statements.generate\": \"Gerar\",\n \"financial.statements.filterPendingHint\": \"O extrato ainda mostra o recorte anterior. Clique em Gerar para aplicar.\",\n \"financial.statements.accountRequired\": \"Escolha uma conta\",\n \"financial.statements.operationTypes\": \"Tipos de operação\",\n \"financial.statements.opCredits\": \"Créditos\",\n \"financial.statements.opDebits\": \"Débitos\",\n \"financial.statements.opTransfers\": \"Transferências\",\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.searchPlaceholder\": \"Buscar por contato, descrição ou documento...\",\n \"financial.statements.selectToView\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.subtitle\": \"Transações e saldos de contas bancárias\",\n \"financial.statements.title\": \"Extratos\",\n \"financial.statements.to\": \"Até\",\n \"financial.summary.allAccounts\": \"Todas as contas\",\n \"financial.summary.cashFlow\": \"Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdown\": \"Detalhamento do Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Contas a receber vs. contas a pagar neste mês\",\n \"financial.summary.cashFlowSubtitle\": \"Receitas vs despesas mensais\",\n \"financial.summary.expenses\": \"Despesas\",\n \"financial.summary.income\": \"Receita\",\n \"financial.summary.monthlyFlow\": \"Fluxo Mensal\",\n \"financial.summary.negativeBalance\": \"Saldo negativo\",\n \"financial.summary.net\": \"Líquido\",\n \"financial.summary.noOverdue\": \"Nenhuma transação atrasada\",\n \"financial.summary.noTransactions\": \"Nenhuma transação ainda\",\n \"financial.summary.overdue\": \"{{count}} atrasados\",\n \"financial.summary.overduePayable\": \"Conta a pagar atrasada\",\n \"financial.summary.overdueReceivable\": \"Conta a receber atrasada\",\n \"financial.summary.overdueTitle\": \"Atrasados\",\n \"financial.summary.paid\": \"Pago\",\n \"financial.summary.payable\": \"A Pagar\",\n \"financial.summary.positiveBalance\": \"Saldo positivo\",\n \"financial.summary.receivable\": \"A Receber\",\n \"financial.summary.received\": \"Recebido\",\n \"financial.summary.recentTransactions\": \"Transações Recentes\",\n \"financial.summary.totalBalance\": \"Saldo Total\",\n \"financial.summary.transactionsAppear\": \"As transações aparecerão aqui após serem registradas\",\n \"financial.summary.viewAll\": \"Ver todos\",\n \"financial.summary.today\": \"Hoje\",\n \"financial.summary.yesterday\": \"Ontem\",\n \"financial.summary.transactionsTitle\": \"Transações\",\n \"financial.home.balance\": \"Saldo\",\n \"financial.home.inflow\": \"Entradas\",\n \"financial.home.outflow\": \"Saídas\",\n \"financial.home.showBalance\": \"Mostrar saldo\",\n \"financial.home.hideBalance\": \"Ocultar saldo\",\n \"financial.home.upcomingBills\": \"Próximas contas\",\n \"financial.home.noBills\": \"Nenhuma conta a vencer.\",\n \"financial.home.dueToday\": \"Vence hoje\",\n \"financial.home.dueTomorrow\": \"Vence amanhã\",\n \"financial.home.dueInDays\": \"Vence em {{count}} dias\",\n \"financial.home.overdueDays\": \"Venceu há {{count}} dias\",\n \"financial.home.cards\": \"Cartões\",\n \"financial.home.currentBill\": \"Fatura atual\",\n \"financial.home.availableLimit\": \"Limite disponível\",\n \"financial.home.addCard\": \"Novo cartão\",\n \"financial.home.bill\": \"Conta\",\n \"financial.home.spendByCategory\": \"Gastos por categoria\",\n \"financial.home.noSpend\": \"Sem gastos neste mês.\",\n \"financial.home.category.groceries\": \"Mercado\",\n \"financial.home.category.transport\": \"Transporte\",\n \"financial.home.category.subscriptions\": \"Assinaturas\",\n \"financial.home.category.dining\": \"Alimentação\",\n \"financial.home.category.home\": \"Casa\",\n \"financial.home.category.health\": \"Saúde\",\n \"financial.home.category.leisure\": \"Lazer\",\n \"financial.home.category.shopping\": \"Compras\",\n \"financial.home.category.other\": \"Outros\",\n \"financial.quickActions.newPayable\": \"Nova Conta a Pagar\",\n \"financial.quickActions.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.quickActions.newReceivable\": \"Nova Conta a Receber\",\n \"financial.quickActions.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.quickActions.openCashRegister\": \"Abrir Caixa\",\n \"financial.quickActions.openCashRegisterDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.cash.title\": \"Caixa Registradora\",\n \"financial.cash.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.cash.bills\": \"Notas\",\n \"financial.cash.coins\": \"Moedas\",\n \"financial.cash.noAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cash.empty.heading\": \"Comece abrindo o caixa do dia\",\n \"financial.cash.empty.because\": \"O caixa registra o dinheiro que entra e sai na recepção, e no fim do dia mostra se o que está na gaveta bate com o que o sistema esperava. Falta uma conta para ele funcionar.\",\n \"financial.cash.empty.step\": \"Uma conta do tipo Caixa Físico\",\n \"financial.cash.empty.stepWhere\": \"Cadastros → Contas\",\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.expectedInDrawer\": \"Esperado na gaveta\",\n \"financial.cash.difference\": \"Quebra de caixa\",\n \"financial.cash.receivedInShift\": \"Recebido no turno\",\n \"financial.method.cash\": \"Dinheiro\",\n \"financial.method.pix\": \"Pix\",\n \"financial.method.credit_card\": \"Cartão de crédito\",\n \"financial.method.debit_card\": \"Cartão de débito\",\n \"financial.method.bank_transfer\": \"Transferência\",\n \"financial.method.boleto\": \"Boleto\",\n \"financial.method.check\": \"Cheque\",\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.reviewQueue\": \"Conferência de fechamentos\",\n \"financial.cash.reviewSeeAll\": \"Ver todos os {count} fechamentos\",\n \"financial.cash.reviewToday\": \"Hoje\",\n \"financial.cash.reviewYesterday\": \"Ontem\",\n \"financial.cash.reviewQueueEmpty\": \"Nenhum fechamento esperando conferência.\",\n \"financial.cash.closedBy\": \"Fechado por\",\n \"financial.cash.approve\": \"Aprovar\",\n \"financial.cash.reject\": \"Rejeitar\",\n \"financial.cash.cannotReviewOwn\": \"Você fechou este caixa — a conferência é de outra pessoa.\",\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.cash.noOpenSessions\": \"Nenhuma sessão de caixa aberta.\",\n \"financial.cash.tabOpen\": \"Abertos\",\n \"financial.cash.tabClosed\": \"Fechados\",\n \"financial.cash.tabReview\": \"Conferência\",\n \"financial.cash.user\": \"Usuário\",\n \"financial.cash.openingDate\": \"Data de Abertura\",\n \"financial.cash.accountLabel\": \"Conta do Caixa\",\n \"financial.cash.review\": \"Conferir\",\n \"financial.cash.reviewModalTitle\": \"Conferir fechamento\",\n \"financial.cash.detailsModalTitle\": \"Detalhes da sessão\",\n \"financial.cash.summary\": \"Resumo\",\n \"financial.cash.transactions\": \"Transações\",\n \"financial.cash.noTransactions\": \"Nenhuma transação nesta sessão.\",\n \"financial.cash.finalValue\": \"Valor final contado\",\n \"financial.cash.movementCount\": \"Movimentações\",\n \"financial.cash.totalIn\": \"Total recebido\",\n \"financial.cash.totalOut\": \"Total retirado\",\n \"financial.cash.confirmAndApprove\": \"Confirmar e aprovar\",\n \"financial.cash.details\": \"Detalhes\",\n \"financial.cash.print\": \"Imprimir\",\n \"financial.cash.verdictApproved\": \"Aprovado\",\n \"financial.cash.verdictRejected\": \"Rejeitado\",\n \"financial.cash.verdictPending\": \"Pendente\",\n \"financial.cash.reviewedBy\": \"Conferido por\",\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.statusProvisioned\": \"Previsto\",\n \"financial.invoice.consolidate\": \"Consolidar\",\n \"financial.invoice.consolidated\": \"Conta gerada\",\n \"financial.invoice.consolidateFailed\": \"Não foi possível consolidar\",\n \"financial.invoice.statusPending\": \"Pendente\",\n \"financial.invoice.statusDraft\": \"Rascunho\",\n \"financial.invoice.columnDate\": \"Data\",\n \"financial.invoice.columnDueDate\": \"Vencimento\",\n \"financial.invoice.columnDescription\": \"Descrição\",\n \"financial.invoice.columnAmount\": \"Valor\",\n \"financial.invoice.columnPaid\": \"Pago\",\n \"financial.invoice.columnPaymentMethod\": \"Forma\",\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.account\": \"Plano de Contas\",\n \"financial.invoiceForm.accountNone\": \"Não atribuída\",\n \"financial.invoiceForm.costCenter\": \"Centro de custo\",\n \"financial.invoiceForm.costCenterNone\": \"Não atribuído\",\n \"financial.invoiceForm.surcharge\": \"Acréscimo\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Conta\",\n \"financial.payment.due\": \"Venc.:\",\n \"financial.payment.paidAmount\": \"Pago:\",\n \"financial.payment.paidOn\": \"Pago em:\",\n \"financial.title\": \"Financeiro\",\n \"financial.summary.title\": \"Resumo Financeiro\",\n \"financial.summary.revenue\": \"Receita\",\n \"financial.invoice.title\": \"Faturas\",\n \"financial.invoice.create\": \"Nova Fatura\",\n \"financial.invoice.number\": \"Fatura #\",\n \"financial.invoice.client\": \"Cliente\",\n \"financial.invoice.amount\": \"Valor\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Vencimento\",\n \"financial.invoice.addItem\": \"Adicionar Item\",\n \"financial.invoice.tax\": \"Imposto\",\n \"financial.invoice.save\": \"Salvar Fatura\",\n \"financial.invoice.saving\": \"Salvando...\",\n \"financial.invoice.markPaid\": \"Marcar como Pago\",\n \"financial.invoice.sendReminder\": \"Enviar Lembrete\",\n \"financial.receivable.title\": \"Contas a Receber\",\n \"financial.payable.title\": \"Contas a Pagar\",\n \"financial.statements.loading\": \"Carregando...\",\n \"financial.cards.empty\": \"Nenhuma transação de cartão ainda\",\n \"financial.commissions.title\": \"Comissões\",\n \"financial.cashRegister.title\": \"Caixa\",\n \"financial.cashRegister.open\": \"Abrir Caixa\",\n \"financial.cashRegister.close\": \"Fechar Caixa\",\n \"financial.movements.title\": \"Movimentações\",\n \"financial.bankAccounts.title\": \"Contas Bancárias\",\n \"financial.settings.title\": \"Configurações Financeiras\",\n // Abas de registros nas configurações\n \"registry.payment-methods\": \"Formas de recebimento\",\n \"registry.payment-methods.description\": \"Formas de pagamento configuradas com taxas e regras de parcelamento\",\n \"registry.bank-accounts\": \"Contas\",\n \"registry.bank-accounts.description\": \"Contas bancárias, caixas, cartões de crédito e carteiras digitais\",\n \"registry.chart-of-accounts\": \"Plano de Contas\",\n \"registry.chart-of-accounts.description\": \"Plano de contas hierárquico para categorizar transações\",\n \"registry.discount-reasons\": \"Motivos de desconto\",\n \"settings.plugin.financial.payment-methods\": \"Formas de recebimento\",\n \"settings.plugin.financial._general\": \"Preferências financeiras\",\n \"settings.plugin.financial._integrations\": \"Conectores financeiros\",\n \"settings.plugin.financial.payment-method-types\": \"Tipos de pagamento\",\n \"settings.plugin.financial.card-brands\": \"Bandeiras de cartão\",\n \"settings.plugin.financial.chart-of-accounts\": \"Plano de contas\",\n \"settings.plugin.financial.cost-centers\": \"Centros de custo\",\n \"settings.plugin.financial.price-tables\": \"Tabelas de preço\",\n \"settings.plugin.financial.bank-accounts\": \"Contas bancárias\",\n \"settings.plugin.financial.discount-reasons\": \"Motivos de desconto\",\n \"registry.cost-centers\": \"Centros de Custo\",\n \"registry.cost-centers.description\": \"Centros de custo para controle de despesas e orçamentos por departamento\",\n \"registry.commission-rules\": \"Regras de Comissão\",\n \"registry.commission-rules.description\": \"Regras de comissão para serviços e produtos\",\n \"registry.price-tables\": \"Tabelas de Preço\",\n \"registry.price-tables.description\": \"Tabelas de preço de venda e custo\",\n \"registry.price-variations\": \"Variações de Preço\",\n \"registry.price-variations.description\": \"Regras de desconto e acréscimo de preços\",\n \"registry.payment-method-types\": \"Tipos de Pagamento\",\n \"registry.payment-method-types.description\": \"Tipos de pagamento do sistema (dinheiro, cartão, PIX, etc.)\",\n \"registry.card-brands\": \"Bandeiras de Cartão\",\n \"registry.card-brands.description\": \"Bandeiras de cartão de crédito e débito\",\n // Extrato\n \"financial.statements.columnDate\": \"Data\",\n \"financial.statements.columnDescription\": \"Descrição\",\n \"financial.statements.columnDebit\": \"Débito\",\n \"financial.statements.columnCredit\": \"Crédito\",\n \"financial.statements.columnFee\": \"Taxa\",\n \"financial.statements.columnBalance\": \"Saldo\",\n \"financial.statements.columnMethod\": \"Forma\",\n \"financial.statements.columnDoc\": \"Documento\",\n \"financial.statements.installmentShort\": \"Parc. {{n}}\",\n \"financial.statements.viewInvoice\": \"Ver fatura\",\n \"financial.person.empty\": \"Nenhuma atividade financeira para este contato ainda\",\n \"financial.statements.opening\": \"Saldo inicial\",\n \"financial.statements.closing\": \"Saldo final\",\n \"financial.statements.currentBalance\": \"Saldo atual\",\n \"financial.statements.totalCredits\": \"Créditos\",\n \"financial.statements.totalDebits\": \"Débitos\",\n \"financial.statements.totalFees\": \"Taxas\",\n \"financial.statements.net\": \"Líquido\",\n \"financial.statements.transfer\": \"Transferência\",\n \"financial.statements.untitledEntry\": \"Lançamento\",\n \"financial.statements.reconciled\": \"Conciliado com o extrato bancário\",\n \"financial.statements.imported\": \"Importado do banco · não conciliado\",\n \"financial.statements.reconciledWith\": \"Conciliado com {{ref}}\",\n \"financial.statements.newTransfer\": \"Nova Transferência\",\n // Diálogo de transferência\n \"financial.transfer.title\": \"Transferência entre Contas\",\n \"financial.transfer.from\": \"Conta de origem\",\n \"financial.transfer.to\": \"Conta de destino\",\n \"financial.transfer.amount\": \"Valor\",\n \"financial.transfer.date\": \"Data\",\n \"financial.transfer.notes\": \"Observações\",\n \"financial.transfer.optionalNotes\": \"Observações opcionais...\",\n \"financial.transfer.selectAccount\": \"Selecione a conta...\",\n \"financial.transfer.submit\": \"Transferir\",\n \"financial.transfer.processing\": \"Transferindo...\",\n \"financial.transfer.cancel\": \"Cancelar\",\n \"financial.transfer.created\": \"Transferência registrada\",\n \"financial.transfer.failed\": \"Falha ao registrar transferência\",\n \"financial.transfer.sameAccount\": \"Origem e destino devem ser diferentes\",\n \"financial.transfer.invalidAmount\": \"O valor deve ser maior que zero\",\n \"financial.quickTx.title\": \"Nova transação\",\n \"financial.quickTx.close\": \"Fechar\",\n \"financial.quickTx.newTransaction\": \"Nova transação\",\n \"financial.quickTx.expense\": \"Despesa\",\n \"financial.quickTx.income\": \"Receita\",\n \"financial.quickTx.transfer\": \"Transferência\",\n \"financial.quickTx.paid\": \"Pago\",\n \"financial.quickTx.received\": \"Recebido\",\n \"financial.quickTx.yes\": \"Sim\",\n \"financial.quickTx.no\": \"Não\",\n \"financial.quickTx.category\": \"Categoria\",\n \"financial.quickTx.selectCategory\": \"Sem categoria\",\n \"financial.quickTx.account\": \"Conta\",\n \"financial.quickTx.selectAccount\": \"Selecione a conta\",\n \"financial.quickTx.fromAccount\": \"Conta de origem\",\n \"financial.quickTx.toAccount\": \"Conta de destino\",\n \"financial.quickTx.card\": \"Cartão\",\n \"financial.quickTx.recurring\": \"Recorrente\",\n \"financial.quickTx.attachment\": \"Anexo\",\n \"financial.quickTx.attachmentSoon\": \"Anexos em breve\",\n \"financial.quickTx.receipt\": \"Recibo\",\n \"financial.quickTx.receiptCapture\": \"Anexar comprovante ou boleto (foto ou PDF)\",\n \"financial.quickTx.receiptAttached\": \"Recibo anexado\",\n \"financial.quickTx.receiptReplace\": \"Substituir\",\n \"financial.quickTx.receiptRemove\": \"Remover recibo\",\n \"financial.quickTx.receiptInvalid\": \"Escolha uma imagem ou PDF\",\n \"financial.quickTx.sendReceipt\": \"Enviar recibo\",\n \"financial.quickTx.digitizeExpense\": \"Digitalizar despesa\",\n \"financial.quickTx.digitizeReceipt\": \"Digitalizar comprovante\",\n \"financial.invoice.importPayroll\": \"Importar folha\",\n \"financial.invoice.importPayrollSoon\": \"Em breve\",\n \"financial.receipt.ask\": \"Mande a foto do recibo…\",\n \"financial.receipt.attachRead\": \"Anexar o recibo que o assistente leu\",\n \"financial.receipt.fromReceipt\": \"Do recibo\",\n \"financial.receipt.finishContact\": \"Concluir cadastro\",\n \"financial.receipt.prompt\": \"Leia este recibo e abra o cadastro da conta com o que estiver escrito nele.\",\n \"financial.receipt.askReceivable\": \"Mande a foto ou o PDF da nota que você emitiu…\",\n \"financial.receipt.promptReceivable\": \"Leia esta nota e abra a conta a receber com o cliente (destinatário), o valor, o número e a chave da NF-e que estiverem nela.\",\n \"financial.quickTx.descriptionPlaceholder\": \"ex.: Mercado, Salário…\",\n \"financial.quickTx.enterAmount\": \"Informe um valor\",\n \"financial.quickTx.save\": \"Salvar\",\n \"financial.quickTx.saving\": \"Salvando…\",\n // Chart of accounts tree\n \"financial.chartTree.searchPlaceholder\": \"Buscar por código ou nome\",\n \"financial.chartTree.clearSearch\": \"Limpar busca\",\n \"financial.chartTree.expandAll\": \"Expandir tudo\",\n \"financial.chartTree.collapseAll\": \"Recolher tudo\",\n \"financial.chartTree.expand\": \"Expandir\",\n \"financial.chartTree.collapse\": \"Recolher\",\n \"financial.chartTree.addRoot\": \"Nova conta raiz\",\n \"financial.chartTree.addChild\": \"Nova conta dentro desta\",\n \"financial.chartTree.edit\": \"Editar\",\n \"financial.chartTree.deactivate\": \"Desativar\",\n \"financial.chartTree.reactivate\": \"Reativar\",\n \"financial.chartTree.delete\": \"Excluir\",\n \"financial.chartTree.confirmDelete\": \"Excluir esta conta?\",\n \"financial.chartTree.cancel\": \"Cancelar\",\n \"financial.chartTree.save\": \"Salvar\",\n \"financial.chartTree.saving\": \"Salvando…\",\n \"financial.chartTree.searching\": \"Buscando…\",\n \"financial.chartTree.count\": \"{{count}} contas\",\n \"financial.chartTree.countOne\": \"1 conta\",\n \"financial.chartTree.matchesOne\": \"1 conta encontrada\",\n \"financial.chartTree.matches\": \"{{count}} contas encontradas\",\n \"financial.chartTree.showInactive\": \"Mostrar inativas ({{count}})\",\n \"financial.chartTree.inactive\": \"Inativa\",\n \"financial.chartTree.empty\": \"Nenhuma conta no plano ainda. Crie a primeira conta raiz.\",\n \"financial.chartTree.noMatches\": \"Nenhuma conta corresponde à busca.\",\n \"financial.chartTree.noGroups\": \"Nenhum grupo encontrado\",\n \"financial.chartTree.rootLevel\": \"Nível raiz (sem pai)\",\n \"financial.chartTree.group\": \"Grupo (agrupa outras contas)\",\n \"financial.chartTree.leaf\": \"Conta (recebe lançamentos)\",\n \"financial.chartTree.field.code\": \"Código\",\n \"financial.chartTree.field.name\": \"Nome\",\n \"financial.chartTree.field.structure\": \"Estrutura\",\n \"financial.chartTree.field.nature\": \"Natureza\",\n \"financial.chartTree.field.parent\": \"Conta pai\",\n \"financial.chartTree.nature.none\": \"Sem natureza\",\n \"financial.chartTree.nature.revenue\": \"Receita\",\n \"financial.chartTree.nature.expense\": \"Despesa\",\n \"financial.chartTree.nature.asset\": \"Ativo\",\n \"financial.chartTree.nature.liability\": \"Passivo\",\n \"financial.chartTree.nature.equity\": \"Patrimônio\",\n \"financial.chartTree.created\": \"Conta \\\"{{name}}\\\" criada\",\n \"financial.chartTree.updated\": \"Conta \\\"{{name}}\\\" atualizada\",\n \"financial.chartTree.deactivated\": \"Conta \\\"{{name}}\\\" desativada\",\n \"financial.chartTree.reactivated\": \"Conta \\\"{{name}}\\\" reativada\",\n \"financial.chartTree.deleted\": \"Conta \\\"{{name}}\\\" excluída\",\n \"financial.chartTree.error.save\": \"Não foi possível salvar. Se a conta já tem lançamentos, desative em vez de excluir.\",\n \"financial.chartTree.error.load\": \"Não foi possível carregar o plano de contas.\",\n \"financial.chartTree.error.codeRequired\": \"Informe o código da conta.\",\n \"financial.chartTree.error.nameRequired\": \"Informe o nome da conta.\",\n \"financial.chartTree.error.codeTaken\": \"O código {{code}} já é usado por \\\"{{name}}\\\".\",\n \"financial.chartTree.error.leafWithChildren\": \"Uma conta com contas dentro dela precisa continuar como grupo.\",\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 { FinancialContextProvider } from '../context'\nimport { createFinancialStore, createSafeFinancialProvider } from '@fayz-ai/financial/store'\nimport { registerTranslations } from '@fayz-ai/core'\nimport { resolveConfig } from '../config'\nimport type { ResolvedFinancialConfig } from '../context'\nimport { financialLocales } from '../locales'\nimport { PaymentModal } from './PaymentModal'\nimport type { ReceivePaymentSlotProps } from '@fayz-ai/financial/views/zones'\n\n// ---------------------------------------------------------------------------\n// Receber uma parcela, de qualquer tela — não só de dentro do Financeiro.\n//\n// `PaymentModal` sozinho não sai daqui: ele lê `useFinancialConfig` e\n// `useFinancialStore`, e o provider desses dois só é montado dentro de\n// `FinancialPage`. Solto na tela de pedidos da loja ele quebra na primeira\n// linha, e quebra por falta de contexto — o erro mais confuso que existe,\n// porque o componente parece certo.\n//\n// Então o que é exportado é o modal COM a sua casca. Quem usa passa a parcela e\n// pronto; a configuração, o provider e a store nascem aqui.\n//\n// POR QUE ISTO EXISTE. A loja registrava recebimento por `shop_confirm_payment`,\n// que adivinha: o método vem do pedido e a conta vem de `shop_receiving_account`,\n// que exige EXATAMENTE uma conta ativa e recusa o resto. Numa loja sem conta\n// cadastrada — ou com duas — o lojista via um parágrafo vermelho em vez de um\n// campo. O modal pergunta o que precisa saber, que é o que uma pergunta faz.\n//\n// A escrita é a mesma nos dois caminhos desde a reconciliação do `payMovement`:\n// `financial_receive_payment`, com sessão de caixa validada, conta exigida por\n// método e chave de idempotência.\n// ---------------------------------------------------------------------------\n\n/**\n * O config das cascas avulsas — o Financeiro embutido fora do Financeiro.\n *\n * Era `{ currency } as never`: os três campos que ESTE modal lê, e o `as never`\n * engolindo o resto. Funcionou enquanto só o pagamento e a ficha do cliente\n * moravam aqui — nenhum dos dois toca em `itemTypes`. No dia em que o\n * FORMULÁRIO da conta passou a abrir neste modal, ele leu `config.itemTypes`,\n * achou `undefined`, e a tela caiu num «Cannot read properties of undefined\n * (reading 'map')» que o `as never` tinha impedido o TypeScript de ver.\n *\n * `resolveConfig()` é o mesmo objeto que o plugin monta, com todos os padrões.\n * O que é DO APP continua ausente — catálogo de produtos, unidades —, e disso\n * as telas já sabem: lookup que falta é entrada manual, não erro.\n */\nexport const STANDALONE_CONFIG: ResolvedFinancialConfig = resolveConfig()\n\n// Os textos do modal vêm do bundle do Financeiro, e ele só é registrado quando\n// o PLUGIN é montado — o que a loja não faz. Sem isto o modal abria dizendo\n// `financial.payment.title`, que é pior do que não abrir: parece funcionando.\n// `registerTranslations` mescla, então registrar de novo num app que já tem o\n// plugin não custa nada.\nregisterTranslations(financialLocales)\n\nexport function ReceivePaymentModal({\n installment,\n receiptUrl,\n onClose,\n onPaid,\n}: ReceivePaymentSlotProps) {\n // Uma store por abertura. O modal lê contas, métodos e sessões de caixa ao\n // montar, e uma store viva entre aberturas guardaria o saldo de antes do\n // pagamento anterior — que é exatamente o bug que fez a tela da loja jurar\n // que um pedido estava em aberto segundos depois de ter sido pago.\n const provider = React.useMemo(() => createSafeFinancialProvider(), [])\n const store = React.useMemo(() => createFinancialStore(provider), [provider])\n\n return (\n <FinancialContextProvider config={STANDALONE_CONFIG} provider={provider} store={store}>\n <PaymentModal\n movement={installment}\n receiptUrl={receiptUrl}\n onClose={onClose}\n onPaid={onPaid}\n />\n </FinancialContextProvider>\n )\n}\n","import React from 'react'\nimport { CircleDollarSign, FileText } from 'lucide-react'\nimport { Button, ModalTask, Input } from '@fayz-ai/ui'\nimport { useFinancialProvider, formatCurrency } from '../context'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { invoiceOpensForEditing } from '@fayz-ai/financial/domain/invoice'\nimport type { ClientAccount } from '@fayz-ai/financial/domain/client-account'\n\n// ---------------------------------------------------------------------------\n// A conta do CLIENTE, aberta a partir de um atendimento.\n//\n// A pergunta que a recepção faz não é \"quanto é este agendamento\" — é \"como\n// está esta pessoa\": o que contratou, o que pagou, o que ainda deve. O V1 mostra\n// isso ao lado do botão que cria a cobrança, e é por isso que a decisão de\n// cobrar acontece com contexto em vez de no escuro.\n//\n// O \"pago a executar\" do V1 (recebido de serviço ainda não prestado — passivo,\n// não receita) NÃO aparece aqui: o V2 modela pagamento e não modela ENTREGA, e\n// um zero fixo ali afirmaria que não existe dívida de execução. Um indicador\n// ausente é honesto; um indicador errado é pior que nenhum.\n// ---------------------------------------------------------------------------\n\nconst RECUSA_COMPRA: Record<string, string> = {\n sem_sessao: 'Faça login para registrar a compra.',\n sem_tenant: 'Escolha a conta antes de registrar.',\n cliente_nao_encontrado: 'Este cliente não está nesta conta.',\n nada_escolhido: 'Escolha pelo menos um serviço.',\n}\n\nexport interface ClientAccountPanelProps {\n personId: string\n /** O atendimento de onde se veio: destaca a fatura dele e habilita a cobrança. */\n orderId?: string | null\n clientName?: string | null\n /** Levanta a cobrança deste atendimento. */\n onGenerate?: () => Promise<void> | void\n currency?: { code: string; locale: string; symbol: string }\n}\n\nconst BRL = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\n/** O selo de status da fatura, no vocabulário do balcão (nunca o enum cru). */\nconst STATUS_CHIP: Record<string, { label: string; cls: string }> = {\n paid: { label: 'Pago', cls: 'bg-success-soft text-success-soft-foreground' },\n partial: { label: 'Parcial', cls: 'bg-warning-soft text-warning-soft-foreground' },\n pending: { label: 'Aberto', cls: 'bg-info-soft text-info-soft-foreground' },\n open: { label: 'Aberto', cls: 'bg-info-soft text-info-soft-foreground' },\n overdue: { label: 'Vencida', cls: 'bg-destructive-soft text-destructive-soft-foreground' },\n cancelled: { label: 'Cancelada', cls: 'bg-muted text-muted-foreground' },\n}\n\nexport function ClientAccountPanel({\n personId, orderId, clientName, onGenerate, currency = BRL,\n}: ClientAccountPanelProps) {\n const provider = useFinancialProvider()\n const [account, setAccount] = React.useState<ClientAccount | null>(null)\n const [busy, setBusy] = React.useState(false)\n // Receber abre a FATURA, não um formulário avulso — a regra do V1 (\"Editar\n // Recebimento\"): parcelas, itens, comprovantes e cancelar no mesmo lugar, e\n // o pagamento acontece de dentro dela.\n // O ID, não a linha: guardar a linha congelava o status no instante do\n // clique, e pagar DENTRO do modal deixava o chip dizendo «Vencida» sobre uma\n // conta já paga — e o formulário aberto sobre algo que virou extrato. Pelo id,\n // o recarregamento reaponta para a linha viva e a tela se corrige sozinha.\n const [viewInvoiceId, setViewInvoiceId] = React.useState<string | null>(null)\n /** A compra antecipada: serviço vendido hoje para ser feito um dia. */\n const [comprando, setComprando] = React.useState(false)\n const [buscaServico, setBuscaServico] = React.useState('')\n const [catalogo, setCatalogo] = React.useState<Array<{ id: string; name: string; price: number }>>([])\n const [escolhidos, setEscolhidos] = React.useState<Array<{ id: string; name: string; price: number; qtd: number }>>([])\n const [comprandoBusy, setComprandoBusy] = React.useState(false)\n const [erroCompra, setErroCompra] = React.useState<string | null>(null)\n\n const load = React.useCallback(async () => {\n if (!personId) return\n setAccount(await provider.getClientAccount(personId))\n }, [personId, provider])\n\n React.useEffect(() => { void load() }, [load])\n\n const viewInvoice = account?.invoices.find((i) => i.id === viewInvoiceId) ?? null\n // Em aberto abre para EDITAR; paga ou cancelada abre em leitura — a mesma\n // regra da lista e da agenda.\n const viewEditable = invoiceOpensForEditing(viewInvoice?.status)\n\n const forThis = account?.invoices.filter((i) => orderId && i.orderId === orderId) ?? []\n const hasForThis = forThis.length > 0\n\n React.useEffect(() => {\n if (!comprando) return\n let vivo = true\n const t = setTimeout(async () => {\n try {\n const r = await provider.searchSellableServices?.(buscaServico)\n if (vivo) setCatalogo(r ?? [])\n } catch { if (vivo) setCatalogo([]) }\n }, 250)\n return () => { vivo = false; clearTimeout(t) }\n }, [comprando, buscaServico])\n\n async function confirmarCompra() {\n if (!escolhidos.length) return\n setComprandoBusy(true)\n try {\n const r = await provider.prepayServices?.(personId, escolhidos.map((e) => ({\n serviceId: e.id, name: e.name, quantity: e.qtd, unitPrice: e.price,\n })))\n // Recusa DITA. Antes o botão simplesmente não fazia nada e o diálogo\n // ficava aberto — e quem clica acha que clicou errado.\n if (!r?.ok) { setErroCompra(RECUSA_COMPRA[r?.reason ?? ''] ?? 'Não foi possível registrar a compra.'); return }\n setComprando(false)\n setEscolhidos([])\n await load()\n } finally { setComprandoBusy(false) }\n }\n\n const tiles: Array<{ label: string; value: number; hint?: string }> = [\n { label: 'Contratado', value: account?.contracted ?? 0, hint: 'Tudo que o cliente já contratou' },\n { label: 'Pago', value: account?.paid ?? 0 },\n { label: 'Em aberto', value: account?.open ?? 0 },\n ]\n\n // O cartão do V1 — \"A executar\" — só entra quando há resposta. Ausente é\n // honesto: significa que não há prontuário para saber o que já saiu; zero\n // fixo afirmaria que a casa não deve entrega nenhuma.\n const aExecutar = (account?.paidToExecute ?? 0) + (account?.openToExecute ?? 0)\n if (account?.paidToExecute !== undefined || account?.openToExecute !== undefined) {\n tiles.push({\n label: 'A executar',\n value: aExecutar,\n hint: (account?.paidToExecute ?? 0) > 0\n ? `${formatCurrency(account?.paidToExecute ?? 0, currency)} já pagos — serviço que a casa ainda deve prestar`\n : 'Contratado e ainda não executado',\n })\n }\n\n // Esqueleto com a FORMA do painel: os cartões e as linhas de fatura. Sem\n // ele a aba abria vazia e saltava quando a conta chegava.\n if (account === null) {\n return (\n <div className=\"fz-container space-y-3\" aria-busy=\"true\" aria-label=\"Carregando a conta do cliente\">\n <div className=\"fz-tiles fz-tiles-3\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"space-y-2 rounded-xl border px-3 py-2\">\n <div className=\"h-3 w-16 animate-pulse rounded bg-muted\" />\n <div className=\"h-5 w-20 animate-pulse rounded bg-muted/70\" />\n </div>\n ))}\n </div>\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between rounded-xl border px-3 py-3\">\n <div className=\"h-4 w-40 animate-pulse rounded bg-muted\" />\n <div className=\"h-7 w-32 animate-pulse rounded-button bg-muted/70\" />\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div className=\"fz-container space-y-3\">\n {clientName && <p className=\"text-sm font-medium\">{clientName}</p>}\n\n <div className={`fz-tiles ${tiles.length > 3 ? 'fz-tiles-4' : 'fz-tiles-3'}`}>\n {tiles.map((t) => (\n <div key={t.label} title={t.hint} className=\"rounded-xl border px-3 py-2\">\n <p className=\"text-[10px] uppercase text-muted-foreground\">{t.label}</p>\n <p className=\"mt-0.5 text-sm font-semibold tabular-nums\">\n {formatCurrency(t.value, currency)}\n </p>\n </div>\n ))}\n </div>\n\n {/* COMPRA ANTECIPADA — \"tá na promoção, vou comprar e deixar guardado\".\n Sem agendamento atrás, sem contrato e sem proposta: o que nasce é um\n item A EXECUTAR na conta desta pessoa. Só aparece onde há prontuário\n para sustentar esse estado. */}\n {provider.prepayServices && !comprando && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setComprando(true)}\n className=\"whitespace-normal w-full rounded-xl border border-dashed px-3 py-2 text-xs font-medium text-muted-foreground hover:bg-muted/40 hover:text-foreground\"\n >\n + Compra antecipada\n </Button>\n )}\n\n {comprando && (\n <div className=\"space-y-2 rounded-xl border px-3 py-3\">\n <p className=\"text-xs font-medium\">Compra antecipada</p>\n <p className=\"text-[11px] text-muted-foreground\">\n O serviço fica pago e <strong>a executar</strong>, esperando o dia. Não gera contrato\n nem proposta.\n </p>\n\n {escolhidos.length > 0 && (\n <ul className=\"divide-y rounded-lg border\">\n {escolhidos.map((e) => (\n <li key={e.id} className=\"flex items-center gap-2 px-2 py-1.5\">\n <span className=\"min-w-0 flex-1 truncate text-xs\">{e.name}</span>\n <div className=\"w-12 shrink-0\">\n <Input\n type=\"number\" min={1} value={e.qtd}\n onChange={(ev) => setEscolhidos((xs) => xs.map((x) => x.id === e.id\n ? { ...x, qtd: Math.max(1, Math.floor(Number(ev.target.value) || 1)) } : x))}\n className=\"h-auto px-1 py-0.5 text-center text-xs shadow-none\"\n aria-label={`Quantidade de ${e.name}`}\n />\n </div>\n <span className=\"w-20 shrink-0 text-right text-xs tabular-nums\">\n {formatCurrency(e.price * e.qtd, currency)}\n </span>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => setEscolhidos((xs) => xs.filter((x) => x.id !== e.id))}\n className=\"font-normal shrink-0 text-[11px] text-destructive hover:underline\">Tirar</Button>\n </li>\n ))}\n </ul>\n )}\n\n <Input\n value={buscaServico}\n onChange={(e) => setBuscaServico(e.target.value)}\n placeholder=\"Buscar serviço…\"\n className=\"h-auto px-2 py-1.5 text-xs\"\n />\n <ul className=\"max-h-40 space-y-0.5 overflow-y-auto\">\n {catalogo.filter((c) => !escolhidos.some((e) => e.id === c.id)).map((c) => (\n <li key={c.id}>\n <Button variant=\"bare\" size=\"bare\" type=\"button\"\n onClick={() => setEscolhidos((xs) => [...xs, { ...c, qtd: 1 }])}\n className=\"font-normal justify-start whitespace-normal flex w-full items-center gap-2 rounded px-2 py-1 text-left hover:bg-muted\">\n <span className=\"min-w-0 flex-1 truncate text-xs\">{c.name}</span>\n <span className=\"shrink-0 text-[11px] tabular-nums text-muted-foreground\">\n {formatCurrency(c.price, currency)}\n </span>\n </Button>\n </li>\n ))}\n </ul>\n\n {erroCompra && (\n <p className=\"rounded-lg bg-destructive/10 px-2 py-1.5 text-[11px] text-destructive\">{erroCompra}</p>\n )}\n\n <div className=\"flex items-center justify-end gap-2 pt-1\">\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => { setComprando(false); setEscolhidos([]) }}\n className=\"font-normal rounded-button px-2 py-1 text-xs text-muted-foreground hover:text-foreground\">\n Agora não\n </Button>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={confirmarCompra}\n disabled={comprandoBusy || !escolhidos.length}\n className=\"rounded-button bg-foreground px-3 py-1.5 text-xs font-semibold text-background disabled:opacity-40\">\n {comprandoBusy ? 'Registrando…' : `Registrar · ${formatCurrency(\n escolhidos.reduce((t, e) => t + e.price * e.qtd, 0), currency)}`}\n </Button>\n </div>\n </div>\n )}\n\n {/* `onGenerate`, não `orderId`: o agendamento migrado do V1 chega SEM\n pedido, e era exatamente ele que ficava sem caminho — o vermelho do\n V1 acendia e a conta não oferecia o botão (Juliane, 23-09). A RPC\n levanta o pedido das linhas com preço quando ele não existe. */}\n {onGenerate && !hasForThis && (\n <div className=\"flex items-center justify-between gap-3 rounded-xl border border-dashed px-3 py-3\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium\">Este atendimento ainda não tem cobrança</p>\n <p className=\"text-[11px] text-muted-foreground\">\n Gere o recebimento para cobrar os serviços deste atendimento.\n </p>\n </div>\n {onGenerate && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n disabled={busy}\n onClick={async () => { setBusy(true); try { await onGenerate(); await load() } finally { setBusy(false) } }}\n className=\"inline-flex shrink-0 items-center gap-1.5 rounded-button bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n <CircleDollarSign className=\"h-3.5 w-3.5\" />\n {busy ? 'Gerando…' : 'Gerar recebimento'}\n </Button>\n )}\n </div>\n )}\n\n <div>\n <p className=\"mb-1 text-[10px] font-medium uppercase text-muted-foreground\">Cobranças</p>\n {!account?.invoices.length ? (\n <p className=\"rounded-xl border border-dashed px-3 py-4 text-center text-xs text-muted-foreground\">\n Nada cobrado deste cliente ainda.\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {account.invoices.map((i) => {\n // A deste atendimento primeiro na leitura: é a que a pessoa veio resolver.\n const mine = orderId && i.orderId === orderId\n return (\n <li\n key={i.id}\n className={`flex items-center gap-3 rounded-xl border px-3 py-2 ${mine ? 'border-primary bg-primary/5' : ''}`}\n >\n <FileText className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-xs font-medium\">\n {i.number ?? '—'}{i.description ? ` · ${i.description}` : ''}\n </p>\n <p className=\"text-[10px] text-muted-foreground\">{i.competenceDate ?? ''}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs font-semibold tabular-nums\">{formatCurrency(i.total, currency)}</p>\n <p className={`text-[10px] tabular-nums ${i.balance > 0 ? 'text-destructive' : 'text-success'}`}>\n {i.balance > 0 ? `resta ${formatCurrency(i.balance, currency)}` : 'pago'}\n </p>\n </div>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setViewInvoiceId(i.id)}\n className=\"inline-flex shrink-0 items-center gap-1 rounded-button border border-input px-2.5 py-1.5 text-xs font-medium hover:bg-muted\"\n >\n {i.balance > 0\n ? <><CircleDollarSign className=\"h-3.5 w-3.5\" /> Receber</>\n : <><FileText className=\"h-3.5 w-3.5\" /> Ver fatura</>}\n </Button>\n </li>\n )\n })}\n </ul>\n )}\n </div>\n\n {viewInvoice && (\n <ModalTask\n open\n // O NÚMERO no breadcrumb, não \"Recebimento\" genérico — é ele que a\n // recepção fala em voz alta; o status vai junto, como no V1.\n title={\n <span className=\"inline-flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{viewInvoice.number ?? 'Recebimento'}</span>\n {(() => {\n const s = STATUS_CHIP[viewInvoice.status]\n return s ? (\n <span className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium ${s.cls}`}>{s.label}</span>\n ) : null\n })()}\n </span>\n }\n hint={clientName ?? undefined}\n width=\"max-w-3xl\"\n onClose={() => { setViewInvoiceId(null); void load() }}\n >\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {viewEditable ? (\n <InvoiceFormView\n embedded\n direction=\"credit\"\n editId={viewInvoice.id}\n // Salvou: relê e FICA. Fechar esconderia o resultado da\n // edição, e a ficha é onde se confere.\n onSaved={() => { void load() }}\n // RECEBEU: fecha e volta para a aba Financeiro do agendamento,\n // com a cobrança já dizendo «pago». Receber é a tarefa inteira\n // — terminada ela, continuar dentro do formulário é deixar a\n // pessoa fechar à mão uma janela que não tem mais o que fazer.\n onChanged={() => { setViewInvoiceId(null); void load() }}\n />\n ) : (\n <InvoiceDetailView\n embedded\n invoiceId={viewInvoice.id}\n direction=\"credit\"\n onBack={() => { setViewInvoiceId(null); void load() }}\n />\n )}\n </div>\n </ModalTask>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { RightRailPage } from '@fayz-ai/admin'\nimport { FinancialContextProvider } from '../context'\nimport { createFinancialStore, createSafeFinancialProvider } from '@fayz-ai/financial/store'\nimport { STANDALONE_CONFIG } from './ReceivePaymentModal'\nimport { ClientAccountPanel, type ClientAccountPanelProps } from '../views/ClientAccountPanel'\nimport type { ClientAccountSlotProps } from '@fayz-ai/financial/views/zones'\n\n// A conta do cliente COM a casca de contexto, para telas fora do Financeiro —\n// a fila de check-in e a aba Financeiro do agendamento. Mesmo motivo do\n// ReceivePaymentModal: o painel sozinho quebra por falta de provider, e quebra\n// parecendo defeito dele.\n//\n// Uma store por abertura: uma store viva entre aberturas mostraria o saldo de\n// antes da cobrança que acabou de ser criada.\n\n/** O painel com a casca, SEM moldura própria — para embutir numa aba. */\nexport function ClientAccountInline(props: ClientAccountPanelProps) {\n const provider = React.useMemo(() => createSafeFinancialProvider(), [])\n const store = React.useMemo(() => createFinancialStore(provider), [provider])\n return (\n <FinancialContextProvider config={STANDALONE_CONFIG} provider={provider} store={store}>\n <ClientAccountPanel {...props} />\n </FinancialContextProvider>\n )\n}\n\n// Coluna da direita pelo mesmo motivo da conferência de check-in: ela é aberta\n// DE LÁ, e trocar de coluna para modal no meio do caminho faria a fila\n// desaparecer justo quando a recepção decide cobrar.\nexport function ClientAccountModal({\n personId, orderId, clientName, onGenerate, onClose,\n}: ClientAccountSlotProps) {\n return (\n <RightRailPage title=\"Conta do cliente\" open onClose={onClose} width=\"max-w-md\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n <ClientAccountInline\n personId={personId}\n orderId={orderId}\n clientName={clientName}\n onGenerate={onGenerate}\n />\n </div>\n </RightRailPage>\n )\n}\n","import type React from 'react'\nimport type { PluginWidgetDefinition } from '@fayz-ai/core'\nimport { FINANCIAL_ZONES } from '@fayz-ai/financial/views/zones'\nimport { ClientAccountInline, ClientAccountModal } from './ClientAccountModal'\nimport { ReceivePaymentModal } from './ReceivePaymentModal'\n\n/** The financial screens other plugins open in place, each rendered only where a host renders its zone. */\nexport const financialZoneWidgets: PluginWidgetDefinition[] = [\n {\n id: 'financial-receive-payment',\n zone: FINANCIAL_ZONES.receivePayment,\n component: ReceivePaymentModal as React.ComponentType<unknown>,\n },\n {\n id: 'financial-client-account',\n zone: FINANCIAL_ZONES.clientAccount,\n component: ClientAccountModal as React.ComponentType<unknown>,\n },\n {\n id: 'financial-client-account-inline',\n zone: FINANCIAL_ZONES.clientAccountInline,\n component: ClientAccountInline as React.ComponentType<unknown>,\n },\n]\n","import React from 'react'\nimport {\n ChevronRight, Folder, FolderOpen, FileText, Plus, Pencil, Trash2, Ban, RotateCcw,\n Search, ChevronsUpDown, ChevronsDownUp, X,\n} from 'lucide-react'\nimport { Badge, Button, Input, PageHeaderActions, SearchSelect, SegmentedControl, Skeleton, toast, type SearchSelectOption, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Checkbox } from '@fayz-ai/ui'\nimport { emitDataChanged, resolveDataProvider, tl, useTranslation, type DataProvider, type EntityDef, type PluginRegistryViewProps } from '@fayz-ai/core'\nimport { usePermissionOptional } from '@fayz-ai/admin'\nimport type { AccountNodeType, AccountType, ChartOfAccountsNode } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport { accountLabel } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport { buildChartTree, childIds, descendantIds, isGroupNode, rootIds, searchVisibleIds, suggestNextCode } from '@fayz-ai/financial/domain/chart-of-accounts'\n\ntype Provider = DataProvider<ChartOfAccountsNode>\n\nconst NATURES: AccountType[] = ['revenue', 'expense', 'asset', 'liability', 'equity']\n// Radix Select reserves the empty string for \"nothing chosen\".\nconst NO_NATURE = '__none__'\nconst NATURE_VARIANT: Record<AccountType, 'success' | 'destructive' | 'info' | 'warning' | 'magic'> = {\n revenue: 'success',\n expense: 'destructive',\n asset: 'info',\n liability: 'warning',\n equity: 'magic',\n}\nconst PAGE = 1000\n\n// V1 splits the chart in two: money coming in and money going out. Balance\n// accounts (asset, liability, equity) get a third side only when there are any.\ntype Side = 'in' | 'out' | 'other'\nconst sideOf = (type?: AccountType | ''): Side | undefined =>\n type === 'revenue' ? 'in' : type === 'expense' ? 'out' : type ? 'other' : undefined\nconst SIDE_TYPE: Record<Side, AccountType> = { in: 'revenue', out: 'expense', other: 'asset' }\n\n/** The nodes on one side, with every ancestor kept so the tree still hangs\n * together; an untyped branch with nothing typed under it shows on all. */\nfunction onSide(nodes: ChartOfAccountsNode[], side: Side): ChartOfAccountsNode[] {\n const byId = new Map(nodes.map((n) => [n.id, n]))\n const keep = new Set<string>()\n const typedBelow = new Set<string>()\n for (const n of nodes) {\n if (!n.accountType) continue\n let cur: ChartOfAccountsNode | undefined = n\n const match = sideOf(n.accountType) === side\n while (cur) {\n typedBelow.add(cur.id)\n if (match) keep.add(cur.id)\n cur = cur.parentId ? byId.get(cur.parentId) : undefined\n }\n }\n return nodes.filter((n) => keep.has(n.id) || (!n.accountType && !typedBelow.has(n.id)))\n}\n\ninterface Draft {\n code: string\n name: string\n nodeType: AccountNodeType\n accountType: AccountType | ''\n parentId: string | null\n}\n\ntype Editing =\n | { mode: 'create'; parentId: string | null; draft: Draft }\n | { mode: 'edit'; id: string; draft: Draft }\n\nasync function loadAll(provider: Provider): Promise<ChartOfAccountsNode[]> {\n const rows: ChartOfAccountsNode[] = []\n for (let page = 1; ; page++) {\n const res = await provider.list({ page, pageSize: PAGE, sortBy: 'code', sortDir: 'asc', countMode: 'none' })\n rows.push(...res.data)\n if (res.data.length < PAGE) return rows\n }\n}\n\nfunction errorMessage(err: unknown): string {\n if (err && typeof err === 'object' && 'message' in err) return String((err as { message: unknown }).message)\n return String(err)\n}\n\nexport interface ChartOfAccountsTreeProps extends Partial<PluginRegistryViewProps> {\n /** The registry's entity — the tree writes through the same provider the generic CRUD would. */\n entity: EntityDef<any>\n mockData?: Record<string, unknown>[]\n dataProvider?: DataProvider<never>\n}\n\nexport function ChartOfAccountsTree({ entity, mockData, dataProvider, embedded }: ChartOfAccountsTreeProps) {\n const t = useTranslation()\n const can = usePermissionOptional()\n const canCreate = can('financial', 'create')\n const canEdit = can('financial', 'edit')\n const canDelete = can('financial', 'delete')\n\n const provider = React.useMemo<Provider>(\n () => (dataProvider as unknown as Provider) ?? resolveDataProvider(entity, (mockData ?? []) as any[]) as unknown as Provider,\n [entity, mockData, dataProvider],\n )\n const table = entity.data?.table\n\n const [nodes, setNodes] = React.useState<ChartOfAccountsNode[] | null>(null)\n const [loadError, setLoadError] = React.useState<string | null>(null)\n const [expanded, setExpanded] = React.useState<Set<string>>(new Set())\n const [query, setQuery] = React.useState('')\n const [showInactive, setShowInactive] = React.useState(true)\n const [side, setSide] = React.useState<Side>('in')\n const [editing, setEditing] = React.useState<Editing | null>(null)\n const [confirmDelete, setConfirmDelete] = React.useState<string | null>(null)\n const [busy, setBusy] = React.useState(false)\n const initialized = React.useRef(false)\n\n const reload = React.useCallback(async () => {\n try {\n const rows = await loadAll(provider)\n setNodes(rows)\n setLoadError(null)\n // First load opens the top level only: a 120-account chart fully open is a wall.\n if (!initialized.current) {\n initialized.current = true\n const tree = buildChartTree(rows)\n setExpanded(new Set(rootIds(tree)))\n }\n } catch (err) {\n setLoadError(errorMessage(err))\n setNodes((prev) => prev ?? [])\n }\n }, [provider])\n\n React.useEffect(() => { void reload() }, [reload])\n\n const shown = React.useMemo(\n () => onSide((nodes ?? []).filter((n) => showInactive || n.isActive), side),\n [nodes, showInactive, side],\n )\n const tree = React.useMemo(() => buildChartTree(shown), [shown])\n const fullTree = React.useMemo(() => buildChartTree(nodes ?? []), [nodes])\n const search = React.useMemo(() => searchVisibleIds(tree, query), [tree, query])\n\n const groupIds = React.useMemo(\n () => [...tree.byId.values()].filter((n) => isGroupNode(tree, n)).map((n) => n.id),\n [tree],\n )\n\n function toggle(id: string) {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n\n function startCreate(parentId: string | null) {\n const parent = parentId ? fullTree.byId.get(parentId) : undefined\n setConfirmDelete(null)\n setEditing({\n mode: 'create',\n parentId,\n draft: {\n code: suggestNextCode(fullTree, parentId),\n name: '',\n nodeType: 'leaf',\n accountType: parent?.accountType ?? SIDE_TYPE[side],\n parentId,\n },\n })\n if (parentId) setExpanded((prev) => new Set(prev).add(parentId))\n }\n\n function startEdit(node: ChartOfAccountsNode) {\n setConfirmDelete(null)\n setEditing({\n mode: 'edit',\n id: node.id,\n draft: {\n code: node.code,\n name: node.name,\n nodeType: node.nodeType === 'group' ? 'group' : 'leaf',\n accountType: node.accountType ?? '',\n parentId: node.parentId ?? null,\n },\n })\n }\n\n function validate(draft: Draft, selfId?: string): string | null {\n const code = draft.code.trim()\n if (!code) return t('financial.chartTree.error.codeRequired')\n if (!draft.name.trim()) return t('financial.chartTree.error.nameRequired')\n const clash = (nodes ?? []).find((n) => n.code === code && n.id !== selfId)\n if (clash) return t('financial.chartTree.error.codeTaken', { code, name: clash.name })\n if (selfId && draft.nodeType === 'leaf' && childIds(fullTree, selfId).length > 0) {\n return t('financial.chartTree.error.leafWithChildren')\n }\n return null\n }\n\n async function run(action: () => Promise<unknown>, success: string) {\n setBusy(true)\n try {\n await action()\n if (table) emitDataChanged({ table })\n toast.success(success)\n await reload()\n return true\n } catch (err) {\n toast.error(t('financial.chartTree.error.save'), { description: errorMessage(err) })\n return false\n } finally {\n setBusy(false)\n }\n }\n\n async function submit() {\n if (!editing) return\n const { draft } = editing\n const invalid = validate(draft, editing.mode === 'edit' ? editing.id : undefined)\n if (invalid) {\n toast.error(invalid)\n return\n }\n const payload = {\n code: draft.code.trim(),\n name: draft.name.trim(),\n nodeType: draft.nodeType,\n accountType: draft.accountType || null,\n parentId: draft.parentId,\n }\n const ok = editing.mode === 'create'\n ? await run(() => provider.create({ ...payload, isActive: true } as any), t('financial.chartTree.created', { name: payload.name }))\n : await run(() => provider.update(editing.id, payload as any), t('financial.chartTree.updated', { name: payload.name }))\n if (ok) setEditing(null)\n }\n\n async function setActive(node: ChartOfAccountsNode, isActive: boolean) {\n await run(\n () => provider.update(node.id, { isActive } as Partial<ChartOfAccountsNode>),\n t(isActive ? 'financial.chartTree.reactivated' : 'financial.chartTree.deactivated', { name: node.name }),\n )\n }\n\n async function remove(node: ChartOfAccountsNode) {\n const ok = await run(() => provider.remove(node.id), t('financial.chartTree.deleted', { name: node.name }))\n if (ok) setConfirmDelete(null)\n }\n\n const parentOptions = React.useCallback((q: string, selfId?: string): SearchSelectOption[] => {\n const blocked = selfId ? descendantIds(fullTree, selfId).add(selfId) : new Set<string>()\n const needle = q.trim().toLowerCase()\n return [...fullTree.byId.values()]\n .filter((n) => !blocked.has(n.id) && isGroupNode(fullTree, n))\n .filter((n) => !needle || accountLabel(n).toLowerCase().includes(needle))\n .sort((a, b) => a.code.localeCompare(b.code, undefined, { numeric: true }))\n .slice(0, 50)\n .map((n) => ({ id: n.id, label: accountLabel(n) }))\n }, [fullTree])\n\n if (nodes === null) {\n return (\n <div className=\"space-y-2\" aria-busy=\"true\">\n {Array.from({ length: 6 }).map((_, i) => <Skeleton key={i} className=\"h-9 w-full\" />)}\n </div>\n )\n }\n\n const roots = rootIds(tree).filter((id) => !search || search.visible.has(id))\n const inactiveCount = (nodes ?? []).filter((n) => !n.isActive).length\n\n function renderForm(draft: Draft, level: number, selfId?: string) {\n const update = (patch: Partial<Draft>) =>\n setEditing((prev) => (prev ? { ...prev, draft: { ...prev.draft, ...patch } } as Editing : prev))\n const parent = draft.parentId ? fullTree.byId.get(draft.parentId) : undefined\n return (\n // Not a <form>: Enter would \"click\" the first button inside SearchSelect\n // (its clear action) and wipe the parent instead of saving.\n <div\n role=\"group\"\n className=\"rounded-md border border-border bg-muted/40 p-3 space-y-3\"\n style={{ marginLeft: Math.min(level, 8) * 16 }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') setEditing(null)\n if (e.key === 'Enter' && (e.target as HTMLElement).dataset.submitOnEnter) {\n e.preventDefault()\n void submit()\n }\n }}\n >\n <div className=\"grid gap-3 sm:grid-cols-[8rem_1fr]\">\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.code')}\n <Input data-submit-on-enter=\"1\" value={draft.code} onChange={(e) => update({ code: e.target.value })} required />\n </label>\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.name')}\n <Input data-submit-on-enter=\"1\" autoFocus value={draft.name} onChange={(e) => update({ name: e.target.value })} required />\n </label>\n </div>\n <div className=\"grid gap-3 sm:grid-cols-3\">\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.structure')}\n <Select value={draft.nodeType} onValueChange={(v) => update({ nodeType: v as AccountNodeType })}>\n <SelectTrigger className=\"px-2 font-normal text-foreground\"><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"leaf\">{t('financial.chartTree.leaf')}</SelectItem>\n <SelectItem value=\"group\">{t('financial.chartTree.group')}</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.nature')}\n <Select\n value={draft.accountType || NO_NATURE}\n onValueChange={(v) => update({ accountType: v === NO_NATURE ? '' : v as AccountType })}\n >\n <SelectTrigger className=\"px-2 font-normal text-foreground\"><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value={NO_NATURE}>{t('financial.chartTree.nature.none')}</SelectItem>\n {NATURES.map((n) => <SelectItem key={n} value={n}>{t(`financial.chartTree.nature.${n}`)}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n <div className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.parent')}\n <SearchSelect\n value={draft.parentId ?? undefined}\n displayValue={parent ? accountLabel(parent) : undefined}\n onChange={(id) => update({ parentId: id || null })}\n onSearch={(q) => parentOptions(q, selfId)}\n minChars={0}\n placeholder={t('financial.chartTree.rootLevel')}\n noResultsLabel={t('financial.chartTree.noGroups')}\n searchingLabel={t('financial.chartTree.searching')}\n clearLabel={t('financial.chartTree.rootLevel')}\n />\n </div>\n </div>\n <div className=\"flex flex-wrap justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => setEditing(null)} disabled={busy}>\n {t('financial.chartTree.cancel')}\n </Button>\n <Button type=\"button\" size=\"sm\" disabled={busy} onClick={() => void submit()}>\n {busy ? t('financial.chartTree.saving') : t('financial.chartTree.save')}\n </Button>\n </div>\n </div>\n )\n }\n\n function renderNode(id: string, level: number): React.ReactNode {\n const node = tree.byId.get(id)!\n const kids = childIds(tree, id).filter((c) => !search || search.visible.has(c))\n const group = isGroupNode(tree, node)\n const open = search ? true : expanded.has(id)\n const isEditingThis = editing?.mode === 'edit' && editing.id === id\n const creatingHere = editing?.mode === 'create' && editing.parentId === id\n const isMatch = search?.matches.has(id)\n const hasAnyChildren = childIds(fullTree, id).length > 0\n const FolderIcon = open ? FolderOpen : Folder\n\n return (\n <li key={id} role=\"treeitem\" aria-level={level + 1} aria-expanded={group ? open : undefined}>\n {isEditingThis && editing ? renderForm(editing.draft, level, id) : (\n <div\n className={\n 'group/row flex min-h-10 items-center gap-2 rounded-md px-2 py-1 hover:bg-muted/60 '\n + (node.isActive ? '' : 'opacity-60')\n }\n style={{ paddingLeft: 8 + Math.min(level, 8) * 16 }}\n >\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n className={'flex h-6 w-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted ' + (kids.length ? '' : 'invisible')}\n onClick={() => toggle(id)}\n aria-label={open ? t('financial.chartTree.collapse') : t('financial.chartTree.expand')}\n disabled={!!search}\n >\n <ChevronRight className={'h-4 w-4 transition-transform ' + (open ? 'rotate-90' : '')} />\n </Button>\n {group\n ? <FolderIcon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n : <FileText className=\"h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"shrink-0 font-mono text-xs tabular-nums text-muted-foreground\">{node.code}</span>\n <span className={'min-w-0 flex-1 truncate text-sm ' + (group ? 'font-semibold' : '') + (isMatch ? ' text-primary' : '')}>\n {node.name}\n </span>\n <span className=\"hidden shrink-0 items-center gap-1 sm:flex\">\n {node.accountType && (\n <Badge variant={NATURE_VARIANT[node.accountType] ?? 'default'} dot={false}>\n {t(`financial.chartTree.nature.${node.accountType}`)}\n </Badge>\n )}\n {!node.isActive && <Badge variant=\"outline\">{t('financial.chartTree.inactive')}</Badge>}\n </span>\n {confirmDelete === id ? (\n <span className=\"flex shrink-0 items-center gap-1\">\n <span className=\"hidden text-xs text-muted-foreground md:inline\">{t('financial.chartTree.confirmDelete')}</span>\n <Button size=\"sm\" variant=\"destructive\" disabled={busy} onClick={() => void remove(node)}>\n {t('financial.chartTree.delete')}\n </Button>\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={() => setConfirmDelete(null)}>\n {t('financial.chartTree.cancel')}\n </Button>\n </span>\n ) : (\n <span className=\"flex shrink-0 items-center justify-end gap-0.5 sm:w-32 sm:opacity-0 sm:group-hover/row:opacity-100 sm:focus-within:opacity-100\">\n {canCreate && group && node.isActive && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.addChild')} aria-label={t('financial.chartTree.addChild')} onClick={() => startCreate(id)} disabled={busy}>\n <Plus className=\"h-4 w-4\" />\n </Button>\n )}\n {canEdit && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.edit')} aria-label={t('financial.chartTree.edit')} onClick={() => startEdit(node)} disabled={busy}>\n <Pencil className=\"h-4 w-4\" />\n </Button>\n )}\n {canEdit && !hasAnyChildren && (\n node.isActive ? (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.deactivate')} aria-label={t('financial.chartTree.deactivate')} onClick={() => void setActive(node, false)} disabled={busy}>\n <Ban className=\"h-4 w-4\" />\n </Button>\n ) : null\n )}\n {canEdit && !node.isActive && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.reactivate')} aria-label={t('financial.chartTree.reactivate')} onClick={() => void setActive(node, true)} disabled={busy}>\n <RotateCcw className=\"h-4 w-4\" />\n </Button>\n )}\n {canDelete && !hasAnyChildren && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.delete')} aria-label={t('financial.chartTree.delete')} onClick={() => { setEditing(null); setConfirmDelete(id) }} disabled={busy}>\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n </span>\n )}\n </div>\n )}\n {open && (kids.length > 0 || creatingHere) && (\n <ul role=\"group\" className=\"space-y-0.5\">\n {creatingHere && editing && <li>{renderForm(editing.draft, level + 1)}</li>}\n {kids.map((c) => renderNode(c, level + 1))}\n </ul>\n )}\n </li>\n )\n }\n\n const hasOther = (nodes ?? []).some((n) => sideOf(n.accountType) === 'other')\n\n return (\n <div className=\"space-y-3\">\n <SegmentedControl\n value={side}\n onChange={(v) => { setSide(v as Side); setEditing(null) }}\n options={[\n { value: 'in', label: tl('Income (in)', 'Receitas (entradas)') },\n { value: 'out', label: tl('Expenses (out)', 'Despesas (saídas)') },\n ...(hasOther ? [{ value: 'other', label: tl('Balance', 'Patrimoniais') }] : []),\n ]}\n />\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"relative min-w-[12rem] flex-1\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t('financial.chartTree.searchPlaceholder')}\n className=\"pl-8 pr-8\"\n aria-label={t('financial.chartTree.searchPlaceholder')}\n />\n {query && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n onClick={() => setQuery('')}\n aria-label={t('financial.chartTree.clearSearch')}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setExpanded(new Set(groupIds))} disabled={!!search} title={t('financial.chartTree.expandAll')} aria-label={t('financial.chartTree.expandAll')}>\n <ChevronsUpDown className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('financial.chartTree.expandAll')}</span>\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setExpanded(new Set())} disabled={!!search} title={t('financial.chartTree.collapseAll')} aria-label={t('financial.chartTree.collapseAll')}>\n <ChevronsDownUp className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('financial.chartTree.collapseAll')}</span>\n </Button>\n </div>\n\n {/* O botão principal sobe para a faixa da página, como em qualquer lista\n do produto — era o único \"Novo\" do sistema desenhado no meio do corpo,\n ao lado da busca, e por isso nascia com um peso e num lugar que\n nenhuma outra tela usa. Embutido noutra tela (`embedded`) ele fica\n onde está: ali a faixa nomeia a tela inteira, não este bloco. */}\n {canCreate && (embedded\n ? (\n <Button size=\"sm\" onClick={() => startCreate(null)} disabled={busy}>\n <Plus className=\"h-4 w-4\" />\n {t('financial.chartTree.addRoot')}\n </Button>\n )\n : (\n <PageHeaderActions>\n <Button size=\"sm\" onClick={() => startCreate(null)} disabled={busy}>\n <Plus className=\"h-4 w-4\" />\n {t('financial.chartTree.addRoot')}\n </Button>\n </PageHeaderActions>\n ))}\n\n <div className=\"flex flex-wrap items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span>\n {search\n ? t(search.matches.size === 1 ? 'financial.chartTree.matchesOne' : 'financial.chartTree.matches', { count: search.matches.size })\n : t(tree.byId.size === 1 ? 'financial.chartTree.countOne' : 'financial.chartTree.count', { count: tree.byId.size })}\n </span>\n {inactiveCount > 0 && (\n <label className=\"inline-flex cursor-pointer items-center gap-1.5\">\n <Checkbox checked={showInactive} onChange={setShowInactive} />\n {t('financial.chartTree.showInactive', { count: inactiveCount })}\n </label>\n )}\n </div>\n\n {loadError && (\n <p className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n {t('financial.chartTree.error.load')} {loadError}\n </p>\n )}\n\n {editing?.mode === 'create' && editing.parentId === null && renderForm(editing.draft, 0)}\n\n {roots.length === 0 && !(editing?.mode === 'create' && editing.parentId === null) ? (\n <div className=\"rounded-md border border-dashed border-border p-8 text-center text-sm text-muted-foreground\">\n {search ? t('financial.chartTree.noMatches') : t('financial.chartTree.empty')}\n </div>\n ) : (\n <ul role=\"tree\" aria-label={t('registry.chart-of-accounts')} className=\"space-y-0.5\">\n {roots.map((id) => renderNode(id, 0))}\n </ul>\n )}\n </div>\n )\n}\n\n","import React from 'react'\nimport { renderCardChip, renderAccountAvatar } from '../views/cardChip'\nimport { RECORD_GROUP, recordRailFields, activeFacet, tl } from '@fayz-ai/core'\nimport type { PluginRegistryDef, PluginRegistryViewProps } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { T } from '@fayz-ai/financial/data/tables'\nimport { ChartOfAccountsTree } from '../components/ChartOfAccountsTree'\nimport { BankPicker } from '../components/BankPicker'\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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n { key: 'transactionType', label: tl('Transaction Type', 'Tipo de transação'), type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check', 'voucher'], showInTable: true, required: true },\n ...recordRailFields({ tagsTable: 'plg_financial_payment_method_types', activeLabel: 'Ativo', unit: false }),\n ],\n data: { table: T.paymentMethodTypes, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Payment Methods (user-created — e.g. \"Visa 2x\", \"PIX Store\")\n// ---------------------------------------------------------------------------\n\nconst paymentMethodEntity: EntityDef = {\n name: 'Payment Method',\n namePlural: 'Payment Methods',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n // FK to the seeded payment_method_types catalog — load real ids at runtime\n // (a static enum select would write the string into the uuid column).\n { key: 'paymentMethodTypeId', label: tl('Type', 'Tipo'), type: 'relation', relation: { table: T.paymentMethodTypes, labelField: 'name' }, showInTable: true, required: true },\n { key: 'discountValue', label: tl('Discount %', 'Desconto %'), type: 'number', showInTable: true },\n { key: 'interestValue', label: tl('Interest %', 'Juros %'), type: 'number', showInTable: true },\n { key: 'minInstallments', label: tl('Min Installments', 'Parcelas mín.'), type: 'number', defaultValue: 1 },\n { key: 'maxInstallments', label: tl('Max Installments', 'Parcelas máx.'), type: 'number', defaultValue: 1, showInTable: true },\n { key: 'isActive', label: tl('Active', 'Ativo'), type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.paymentMethods, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Chart of Accounts (tree structure)\n// ---------------------------------------------------------------------------\n\nconst chartOfAccountsEntity: EntityDef = {\n name: 'Ledger Account',\n namePlural: 'Chart of Accounts',\n icon: 'BookOpen',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'code',\n fields: [\n { key: 'code', label: tl('Code', 'Código'), type: 'text', required: true, showInTable: true },\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n { key: 'nodeType', label: tl('Structure', 'Estrutura'), type: 'select', options: ['group', 'leaf'], showInTable: true, required: true, defaultValue: 'leaf' },\n // What the account IS, as opposed to where it sits in the tree (nodeType).\n // Migration 013 leaves it unconstrained; the picker offers the five the\n // module reasons about.\n { key: 'accountType', label: tl('Nature', 'Natureza'), type: 'select', options: [\n { label: tl('Revenue', 'Receita'), value: 'revenue' },\n { label: tl('Expense', 'Despesa'), value: 'expense' },\n { label: tl('Asset', 'Ativo'), value: 'asset' },\n { label: tl('Liability', 'Passivo'), value: 'liability' },\n { label: tl('Equity', 'Patrimônio'), value: 'equity' },\n ], showInTable: true },\n // Pai é FK para a própria árvore, e só GRUPO pode ser pai — uma folha é\n // onde o lançamento cai, não um cabeçalho. Rótulo com o código junto\n // porque é por ele que um plano de contas se lê e se ordena.\n { key: 'parentId', label: tl('Parent', 'Conta pai'), type: 'relation', showInTable: false,\n relation: { table: T.chartOfAccounts, labelFields: ['code', 'name'], filter: { node_type: 'group' } } },\n ...recordRailFields({ tagsTable: 'plg_financial_chart_of_accounts', activeLabel: 'Ativo', unit: true }),\n ],\n data: { table: T.chartOfAccounts, tenantScoped: true },\n}\n\nconst chartOfAccountsSeed = [\n { id: 'coa-1', code: '1', name: 'Revenue', nodeType: 'group', accountType: 'revenue', isActive: true },\n { id: 'coa-1.1', code: '1.1', name: 'Sales Revenue', nodeType: 'group', accountType: 'revenue', parentId: 'coa-1', isActive: true },\n { id: 'coa-1.1.01', code: '1.1.01', name: 'Services', nodeType: 'leaf', accountType: 'revenue', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-1.1.02', code: '1.1.02', name: 'Products', nodeType: 'leaf', accountType: 'revenue', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-2', code: '2', name: 'Other Revenue', nodeType: 'group', accountType: 'revenue', isActive: true },\n { id: 'coa-2.1', code: '2.1', name: 'Financial Income', nodeType: 'leaf', accountType: 'revenue', parentId: 'coa-2', isActive: true },\n { id: 'coa-3', code: '3', name: 'Operational Costs', nodeType: 'group', accountType: 'expense', isActive: true },\n { id: 'coa-3.1', code: '3.1', name: 'Materials & Supplies', nodeType: 'group', accountType: 'expense', parentId: 'coa-3', isActive: true },\n { id: 'coa-3.1.01', code: '3.1.01', name: 'Raw Materials', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-3.1.02', code: '3.1.02', name: 'Consumables', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-4', code: '4', name: 'Expenses', nodeType: 'group', accountType: 'expense', isActive: true },\n { id: 'coa-4.1', code: '4.1', name: 'Rent', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.2', code: '4.2', name: 'Utilities', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.3', code: '4.3', name: 'Payroll', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-4', isActive: true },\n]\n\n// Same entity and provider the generic CRUD would use — only the screen differs.\nconst ChartOfAccountsRegistryView: React.FC<PluginRegistryViewProps> = (props) =>\n React.createElement(ChartOfAccountsTree, { ...props, entity: chartOfAccountsEntity, mockData: chartOfAccountsSeed })\nChartOfAccountsRegistryView.displayName = 'ChartOfAccountsRegistryView'\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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'code',\n fields: [\n { key: 'code', label: tl('Code', 'Código'), type: 'text', required: true, showInTable: true },\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n ...recordRailFields({ tagsTable: 'plg_financial_cost_centers', activeLabel: 'Ativo', unit: true }),\n ],\n data: { table: T.costCenters, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Bank Accounts (physical cash, bank, credit card, digital wallet)\n// ---------------------------------------------------------------------------\n\n// O TIPO DA CONTA DECIDE QUAIS CAMPOS EXISTEM.\n//\n// O V1 pergunta coisas diferentes para cada tipo, e com razão: agência e conta\n// num caixa físico não têm resposta, e dia de fechamento num caixa também não.\n// Aqui era uma lista só, com os dez campos abertos para todo mundo — quem\n// cadastrava a tesouraria via \"Banco\", \"Agência\", \"Dia de fechamento\" e tinha\n// de adivinhar que eram para outra coisa. Um campo que não se aplica não é\n// neutro: ele pede uma resposta e depois guarda o que vier.\nconst isCard = (t: unknown) => t === 'card_receivable_credit' || t === 'card_receivable_debit' || t === 'card_payable'\nconst isBank = (t: unknown) => t === 'bank'\n// A credit card is issued by a bank, so it answers \"which bank\" too.\nconst hasIssuer = (t: unknown) => isBank(t) || t === 'card_payable'\n\n// AS ESPÉCIES QUE SÃO CADASTRO.\n//\n// `plg_financial_accounts` é a tabela de TODA conta do razão: além destas\n// cinco, ela guarda uma conta por PESSOA (122 mil delas no cluster), uma por\n// unidade, uma por sessão de caixa e as do sistema. Sem este recorte o\n// cadastro de Contas abria com a lista de clientes dentro — foi o que a tela\n// mostrou na primeira vez que ganhou porta.\nconst ACCOUNT_KINDS = ['cash_physical', 'bank', 'card_receivable_credit', 'card_receivable_debit', 'card_payable']\n\nconst bankAccountEntity: EntityDef = {\n name: 'Conta',\n namePlural: 'Contas',\n icon: 'Landmark',\n displayField: 'name',\n defaultSort: 'name',\n // O V1 abre esta lista em «Somente Ativas»: inativar uma conta tem de tirá-la\n // da frente de quem lança, e não só trocar o selo da linha.\n // O cartão toma o lugar da foto no alto da ficha; as outras espécies caem\n // no desenho de sempre (renderAvatar devolve null para elas).\n renderAvatar: renderAccountAvatar,\n facets: [activeFacet({ active: 'Ativas', inactive: 'Inativas', all: 'Todas' })],\n formColumns: 2,\n // Os grupos são sobre SIGNIFICADO, e aqui eles seguem o `kind`: uma conta de\n // caixa não tem agência, um cartão não tem titular. Como cada campo já diz\n // com `visibleWhen` a que espécie pertence, o grupo inteiro desaparece\n // sozinho quando nenhum dos seus campos se aplica.\n fieldGroups: [\n { id: 'identity', label: 'Identificação', columns: 2 },\n { id: 'bank', label: 'Onde o dinheiro está', columns: 2,\n labelWhen: (v) => (v.kind === 'card_payable' ? 'Quem emitiu o cartão' : undefined) },\n { id: 'holder', label: 'Titular', columns: 2, description: 'A conta de uma rede raramente está no nome da rede.' },\n { id: 'card', label: 'Cartão', columns: 2 },\n { ...RECORD_GROUP },\n ],\n fields: [\n { key: 'name', label: 'Nome', type: 'text', required: true, showInTable: true, searchable: true, group: 'identity' },\n // Canonical `kind` values. Credit and debit receivables are separate on\n // purpose: they settle on different days, and one account would make the\n // reconciliation wrong from the first sale.\n // A CHAVE É `kind`, a coluna canônica — e um `columnMap` não resolveria.\n //\n // `account_type` guarda a string legada do V1 (`caixa_fisico`,\n // `cartao_credito_recebimento`) e é NULA em 53 das 89 contas bancárias. Ler\n // dela é a V1-014 que o documento do porte registra como defeito: o\n // vocabulário técnico do V1 na tela, e um traço no resto das linhas.\n //\n // Mapear `kind → accountType` também não serve: `mapRow` percorre as\n // colunas em ordem e `account_type` vira `accountType` logo depois,\n // sobrescrevendo o valor bom com o legado. Nomear o campo pela coluna é a\n // única leitura que não depende da ordem das chaves.\n { key: 'kind', label: 'Tipo', type: 'select', options: [\n { label: 'Caixa (dinheiro)', value: 'cash_physical' },\n { label: 'Conta bancária', value: 'bank' },\n { label: 'Recebíveis de crédito', value: 'card_receivable_credit' },\n { label: 'Recebíveis de débito', value: 'card_receivable_debit' },\n { label: 'Cartão a pagar', value: 'card_payable' },\n ], showInTable: true, required: true, group: 'identity' },\n // Banco: onde o dinheiro está de fato.\n //\n // O NÚMERO do banco vem primeiro porque é o que identifica a instituição em\n // qualquer lugar fora desta tela — boleto, CNAB, PIX. «Inter» é como a\n // pessoa chama; «077» é como o sistema bancário chama, e o cadastro precisa\n // dos dois. O porte do V1 mostrou por quê: lá as duas coisas dividem a mesma\n // coluna e 3 contas em 14 guardam o código onde deveria estar o nome.\n { key: 'bankCode', label: 'Número do banco', type: 'text', showInTable: false,\n visibleWhen: (v) => hasIssuer(v.kind) , group: 'bank' },\n // Picking the bank fills its number too, so the two cannot disagree.\n { key: 'bankName', label: 'Banco', type: 'custom', showInTable: false,\n labelWhen: (v) => (v.kind === 'card_payable' ? 'Banco emissor' : undefined),\n visibleWhen: (v) => hasIssuer(v.kind) , group: 'bank',\n renderInput: ({ value, values, onChange, setValue }) => React.createElement(BankPicker, {\n code: (values.bankCode as string) ?? '',\n name: (value as string) ?? '',\n onChange: (next) => {\n onChange(next.name)\n if (next.code || !next.name) setValue?.('bankCode', next.code)\n },\n }) },\n { key: 'agencyNumber', label: 'Agência', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'bank' },\n { key: 'accountNumber', label: 'Número da conta', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'bank' },\n // TITULAR. A conta de uma rede raramente está no nome da rede: está no do\n // sócio, da holding, da empresa de serviços. Quem confere um extrato precisa\n // saber de quem é a conta antes de bater o valor, e quem faz uma\n // transferência precisa do documento para não pagar o titular errado com o\n // nome certo.\n //\n // Só em conta bancária, e é o que o dado diz: das 102 contas do V1, as 13\n // com titular e as 7 com documento são TODAS `conta_bancaria` — nenhum\n // cartão tem nem um nem outro.\n { key: 'holderName', label: 'Titular', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'holder' },\n { key: 'holderDocument', label: 'CPF/CNPJ do titular', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'holder' },\n // SALDO INICIAL saiu daqui, e não é esquecimento: `plg_financial_accounts`\n // NÃO TEM coluna de saldo. O razão calcula o saldo pelos movimentos, e o\n // `initial_balance` da tabela legada virou `metadata.legacy_initial_balance`\n // no gatilho de encaminhamento — ou seja, a abertura é um LANÇAMENTO, não\n // uma coluna.\n //\n // O campo estava aqui mesmo assim, com `defaultValue: 0`, e derrubava o\n // insert de toda conta de caixa e de banco criada pela tela:\n // «Could not find the 'initial_balance' column ... in the schema cache».\n // Quando o saldo de abertura voltar, volta como movimento.\n // Cartão: limite, cor e o par fechamento/vencimento da fatura.\n // OS QUATRO ÚLTIMOS. É por eles que a fatura e o extrato da adquirente\n // dizem qual cartão é — e é o que o operador já vinha digitando DENTRO do\n // nome («Cartão Silvio Master 0307», «Cartão Silvio Amex 0016») porque a\n // tela não tinha onde perguntar. Com campo, o nome volta a ser o nome.\n //\n // Quatro, e só: o CHECK da 101 recusa o resto. Guardar o número inteiro de\n // um cartão é um problema de outra natureza, e conciliar não precisa dele.\n { key: 'lastFour', label: 'Final do cartão', type: 'text', showInTable: true,\n placeholder: '0000', max: 4,\n hint: 'Os quatro últimos dígitos — é como a fatura identifica o cartão.',\n renderCell: renderCardChip,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n { key: 'creditLimit', label: 'Limite', type: 'currency', showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n // A cor que ele tem na carteira. A coluna existe desde a 028 e nunca teve\n // campo: o roxo do Nubank e o preto do Amex distinguem três linhas que\n // começam com a mesma palavra mais rápido do que qualquer texto.\n { key: 'color', label: 'Cor do cartão', type: 'color', showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n { key: 'closingDay', label: 'Dia de fechamento', type: 'number', min: 1, max: 31, showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n { key: 'dueDay', label: 'Dia de vencimento', type: 'number', min: 1, max: 31, showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n // MELHOR DIA DE COMPRA: o dia seguinte ao fechamento, quando a compra cai na\n // fatura mais distante. É pergunta de cartão, e vem junto do par\n // fechamento/vencimento porque é deles que ela se deduz.\n //\n // O V1 deixa preencher em qualquer espécie — 6 caixas físicos têm «melhor\n // dia de compra» lá dentro —, e este cadastro não repete o convite: um campo\n // que não se aplica pede uma resposta e depois guarda o que vier. Mesma\n // decisão que `closingDay` e `dueDay` já tomaram nesta lista.\n { key: 'bestPurchaseDay', label: 'Melhor dia de compra', type: 'number', min: 1, max: 31, showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n // BANDEIRA. Sem ela uma conta `card_payable` é só «um cartão»: a fatura não\n // se concilia com a adquirente, e as taxas de `plg_financial_card_fee_configs`\n // — que JÁ são por bandeira — não têm como encontrar a conta.\n //\n // Relação, não texto: «Master», «MASTERCARD» e «mastercard» digitados em\n // três contas são a mesma bandeira, e só o catálogo faz a taxa encontrar as\n // três.\n { key: 'cardBrandId', label: 'Bandeira', type: 'relation', showInTable: false, group: 'card',\n relation: { table: T.cardBrands, labelField: 'name' },\n visibleWhen: (v) => isCard(v.kind) },\n // Inativa-se, não se apaga — a regra que o V1 enuncia com o filtro\n // \"Somente Ativas\": uma conta com histórico não pode sumir do extrato.\n // O rail direito, igual ao de todo cadastro — unidade, o interruptor no\n // canto do título, observações e etiquetas. Ver recordRailFields.\n ...recordRailFields({ tagsTable: 'plg_financial_accounts', activeLabel: 'Ativa' }),\n ],\n // The canonical table — the same one getBankAccounts reads.\n data: {\n table: 'plg_financial_accounts',\n tenantScoped: true,\n searchColumns: ['name'],\n // snake → camel, que é a direção que `mapRow` lê. Invertido, a tela\n // mostrava a coluna legada `account_type` — `caixa_fisico`,\n // `cartao_credito_recebimento` — que é o vocabulário técnico do V1\n // vazando, exatamente a V1-014.\n filters: { kind: ACCOUNT_KINDS },\n },\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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n ...recordRailFields({ tagsTable: 'plg_financial_card_brands', activeLabel: 'Ativo', unit: false }),\n ],\n data: { table: T.cardBrands, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Commission Rules\n// ---------------------------------------------------------------------------\n\n// A regra é cadastro; nada ainda calcula comissão a partir dela — a apuração\n// precisa saber quem EXECUTOU o item, e é isso que a tela de Comissões diz.\nconst commissionRuleEntity: EntityDef = {\n name: 'Regra de Comissão',\n namePlural: 'Regras de Comissão',\n icon: 'TrendingUp',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativas', inactive: 'Inativas', all: 'Todas' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'priority',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Nome', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'priority', label: 'Prioridade', type: 'number', required: true, showInTable: true, defaultValue: 1, group: 'identity' },\n { key: 'valueType', label: 'Tipo', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, defaultValue: 'percentage', group: 'identity' },\n { key: 'value', label: 'Valor', type: 'number', required: true, showInTable: true, group: 'identity' },\n { key: 'description', label: 'Descrição', type: 'textarea', group: 'identity' },\n ...recordRailFields({ tagsTable: T.commissionRules, activeLabel: 'Ativa', unit: true }),\n ],\n data: { table: T.commissionRules, 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: tl('Description', 'Descrição'), type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'type', label: tl('Type', 'Tipo'), type: 'select', options: ['sale', 'cost'], required: true, showInTable: true, defaultValue: 'sale', group: 'identity' },\n { key: 'validFrom', label: tl('Valid From', 'Válida desde'), type: 'date', showInTable: true, group: 'identity' },\n { key: 'validUntil', label: tl('Valid Until', 'Válida até'), type: 'date', showInTable: true, group: 'identity' },\n ...recordRailFields({ tagsTable: 'price_tables', activeLabel: 'Ativa', unit: true }),\n ],\n data: { table: 'price_tables', tenantScoped: true },\n}\n\n\n// V1 \"Regras de desconto → Motivos\": a discount names its reason, and the\n// reason may cap it or send it for approval (financial migration 013).\nconst discountReasonEntity: EntityDef = {\n name: 'Discount Reason',\n namePlural: 'Discount Reasons',\n icon: 'Tag',\n displayField: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n { key: 'code', label: tl('Code', 'Código'), type: 'text', required: true, showInTable: true },\n { key: 'maxPercent', label: tl('Max %', 'Máximo %'), type: 'number', showInTable: true },\n { key: 'requiresApproval', label: tl('Requires approval', 'Exige aprovação'), type: 'boolean', defaultValue: false, showInTable: true },\n { key: 'isActive', label: tl('Active', 'Ativo'), type: 'boolean', defaultValue: true, showInTable: true },\n ],\n data: { table: 'plg_financial_discount_reasons', 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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativas', inactive: 'Inativas', all: 'Todas' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'variationType', label: tl('Type', 'Tipo'), type: 'select', options: ['discount', 'increase'], required: true, showInTable: true, group: 'identity' },\n { key: 'valueType', label: tl('Value Type', 'Tipo de valor'), type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, group: 'identity' },\n { key: 'value', label: tl('Value', 'Valor'), type: 'number', required: true, showInTable: true, group: 'identity' },\n { key: 'firstAppointmentOnly', label: tl('First Appointment Only', 'Só no primeiro atendimento'), type: 'boolean', defaultValue: false, group: 'identity' },\n ...recordRailFields({ tagsTable: 'price_variations', activeLabel: 'Ativa', unit: true }),\n ],\n data: { table: 'price_variations', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Export all registries\n// ---------------------------------------------------------------------------\n\n/** O cadastro de CONTAS, para quem quiser montá-lo como tela própria em vez de\n * aba de configuração — é onde o V1 o põe: Cadastros → Contas. */\nexport const financialAccountEntity = bankAccountEntity\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 // O nome convida ao erro: pedido \"salva essa conta a pagar do fornecedor X,\n // pago hoje\", o assistente cadastrou o FORNECEDOR aqui como forma de\n // pagamento. Isto é configuração de como o CLIENTE paga a empresa.\n agentHint:\n 'CONFIGURATION of how customers pay this business (card brand, fee, installment rules). '\n + 'NEVER for a supplier, a bill or an expense — those are payables, see the createPayable tool',\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 component: ChartOfAccountsRegistryView,\n seedData: chartOfAccountsSeed,\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: 'Caixa, banco e contas de recebimento de cartão — onde o dinheiro fica.',\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: 'discount-reasons',\n entity: discountReasonEntity,\n icon: 'Tag',\n description: 'Why a discount was given; a reason may cap it or require approval',\n display: 'table',\n },\n // Price variations stay off until a pricing-rule engine reads them: the\n // table was never created (#108), so the screen could only fail. See the\n // \"Em breve\" settings tab in settings/v1-settings.ts.\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","import type { SetupGuideDef } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Como cada tela do Financeiro entra em pé.\n//\n// O que estes guias resolvem é a distância entre \"a tela existe\" e \"a tela\n// serve para alguma coisa\". Comissão sem regra é uma lista vazia; recebimento\n// sem forma de pagamento é um formulário que não salva; nota fiscal sem\n// emissor é um caderno. Nada disso está escrito na tela em que a pessoa está,\n// porque quase sempre está em OUTRA tela — e é exatamente isso que o\n// assistente não tinha como saber.\n//\n// Regras de escrita, porque estes textos são lidos por um modelo e ditos por\n// ele a uma pessoa:\n//\n// • `about` é para que serve, na língua de quem toca a casa. Nunca o rótulo\n// do botão.\n// • todo pré-requisito tem `check` — o jeito de VER que já está feito. Sem\n// isso o assistente devolve lista de tarefa em vez de conferir.\n// • `byAssistant` só onde existe ferramenta de verdade. Prometer e não fazer\n// é pior do que apontar o botão.\n// • `warnings` é o que faria a pessoa perder uma hora. Vem antes, não depois.\n// ---------------------------------------------------------------------------\n\nconst SETTINGS = '/settings/financial'\n\n/** A raiz de tudo: sem forma de recebimento nenhum dinheiro entra no sistema. */\nconst paymentMethods: SetupGuideDef = {\n feature: 'financial.formas-de-recebimento',\n title: 'Formas de Recebimento',\n about:\n 'Os jeitos pelos quais o dinheiro entra na casa — dinheiro, Pix, cartão em X vezes — com o desconto da maquininha e o prazo de cada um. É o primeiro cadastro do Financeiro: enquanto ele estiver vazio, nenhuma venda consegue virar recebimento.',\n route: `${SETTINGS}/payment-methods`,\n step: 'financial.receiving',\n requires: [\n {\n title: 'Tipos de transação',\n where: 'Configurações › Financeiro › Tipos de forma de pagamento',\n route: `${SETTINGS}/payment-method-types`,\n check: 'a lista já vem com Dinheiro, PIX, Crédito, Débito, Transferência e Cheque',\n required: false,\n },\n {\n title: 'Conta ou caixa que recebe',\n where: 'Configurações › Financeiro › Contas bancárias',\n route: `${SETTINGS}/bank-accounts`,\n check: 'existe pelo menos uma conta com saldo inicial',\n },\n ],\n steps: [\n { do: 'Abra Configurações › Financeiro › Formas de recebimento.', route: `${SETTINGS}/payment-methods` },\n {\n do: 'Cadastre uma forma para cada jeito REAL de receber, com o nome que a equipe usa (\"Crédito 3x\", \"Pix da conta velha\").',\n why: 'É este nome que aparece na hora de fechar a conta do cliente — nome genérico faz o caixa errar.',\n },\n {\n do: 'Preencha o desconto (%) da maquininha e o número máximo de parcelas de cada uma.',\n why: 'O desconto é o que separa o que a cliente pagou do que caiu na conta. Sem ele a conciliação nunca fecha.',\n },\n { do: 'Deixe ativa só o que a casa aceita hoje; desative o resto em vez de apagar.' },\n ],\n rules: [\n 'Uma forma de recebimento desativada some das telas novas, mas continua nos recebimentos antigos — por isso desativar, e não excluir.',\n 'Parcelamento é da FORMA, não da venda: quem define \"até 6x\" é este cadastro.',\n ],\n pitfalls: [\n 'Cadastrar \"Cartão\" sem separar crédito de débito: os prazos e as taxas são diferentes, e a conciliação passa a ter erro todo mês.',\n 'Esquecer o desconto da maquininha faz todo relatório de faturamento vir maior do que o extrato do banco.',\n ],\n answers: [\n 'Como eu cadastro as formas de pagamento?',\n 'Não consigo receber uma venda, não aparece opção nenhuma',\n 'Como coloco a taxa da maquininha?',\n ],\n next: ['financial.contas-a-receber', 'financial.caixas'],\n}\n\nconst chartOfAccounts: SetupGuideDef = {\n feature: 'financial.plano-de-contas',\n title: 'Plano de Contas',\n about:\n 'As gavetas em que cada real entra ou sai — aluguel, folha, insumo, serviço. É o que transforma uma pilha de lançamentos em \"para onde foi o meu dinheiro\".',\n route: `${SETTINGS}/chart-of-accounts`,\n step: 'financial.accounts',\n requires: [],\n steps: [\n {\n do: 'Abra Configurações › Financeiro › Plano de contas e olhe o que já existe.',\n why: 'Já vem uma estrutura pronta (Receita, Custos operacionais, Despesas) — na maioria das casas é ajuste, não criação.',\n route: `${SETTINGS}/chart-of-accounts`,\n },\n { do: 'Renomeie as contas folha para o vocabulário da casa, mantendo os códigos.' },\n { do: 'Acrescente só o que faltar, sempre pendurado num grupo existente.' },\n ],\n rules: [\n 'Grupo não recebe lançamento — só folha (`leaf`). Um grupo com movimento é sinal de conta cadastrada no nível errado.',\n 'A natureza (receita, despesa, ativo, passivo) é o que decide o sinal nos relatórios. Trocar depois reescreve a leitura de meses fechados.',\n ],\n pitfalls: [\n 'Criar uma conta por fornecedor. O plano é por NATUREZA do gasto; fornecedor é o outro lado da conta a pagar.',\n 'Plano de contas gigante: quem lança na correria escolhe a primeira opção, e a análise fica pior do que com dez contas boas.',\n ],\n answers: [\n 'Como eu organizo minhas despesas por categoria?',\n 'O que é plano de contas?',\n 'Para onde está indo o meu dinheiro?',\n ],\n next: ['financial.contas-a-pagar'],\n}\n\nconst payables: SetupGuideDef = {\n feature: 'financial.contas-a-pagar',\n title: 'Contas a Pagar',\n about:\n 'O que a casa deve e quando vence — do aluguel ao fornecedor da nota que entrou ontem. Parcelado, cada parcela vence sozinha.',\n route: '/financial/payables/list',\n requires: [\n {\n title: 'Plano de contas',\n feature: 'financial.plano-de-contas',\n where: 'Configurações › Financeiro › Plano de contas',\n route: `${SETTINGS}/chart-of-accounts`,\n check: 'o seletor de classificação traz contas de despesa',\n },\n {\n title: 'Conta de onde sai o dinheiro',\n where: 'Configurações › Financeiro › Contas bancárias',\n route: `${SETTINGS}/bank-accounts`,\n check: 'existe pelo menos uma conta cadastrada',\n },\n ],\n // The anchored steps ARE the tour: startFeatureSetup turns each one into a\n // spotlight stop, in this order, navigating per stop. The unanchored ones\n // stay prose — briefing for the assistant to say in its own words.\n // O tour NAVEGA até a tela de cadastro (3 paradas, cada uma com rota, então\n // reiniciar renavega). Chegando, a `practice` assume: a pessoa preenche os\n // campos sozinha com os marcadores numerados, para FIXAR o cadastro.\n steps: [\n { do: 'O Financeiro mora aqui.', anchor: 'nav./financial', route: '/financial' },\n { do: 'Abra Contas a Pagar neste menu.', anchor: 'modnav.payables', route: '/financial/payables/list' },\n { do: 'Clique em Cadastrar manualmente para abrir uma conta nova.', anchor: 'action.manual', route: '/financial/payables/list' },\n { do: 'Diga a quem se deve, adicione um item com o valor, confira as parcelas e salve.' },\n { do: 'Ao pagar, dê baixa NA PARCELA, escolhendo a conta de onde o dinheiro saiu.' },\n ],\n practice: [\n { anchor: 'financial.contact', label: 'Selecione o fornecedor' },\n { anchor: 'financial.items', label: 'Adicione um item com o valor' },\n { anchor: 'financial.installments', label: 'Confira as parcelas' },\n { anchor: 'savebar.save', label: 'Salve a conta', final: true },\n ],\n rules: [\n 'Uma conta a pagar é um cabeçalho com parcelas: o que vence, o que se paga e o que aparece no extrato é sempre a PARCELA.',\n 'Baixa exige dizer de qual conta saiu — é o que faz o extrato bater.',\n ],\n warnings: [\n 'O formulário de edição pode abrir marcando \"Alterações não salvas\" antes de qualquer toque. É defeito conhecido da tela; salvar sem necessidade recria o parcelamento.',\n ],\n pitfalls: [\n 'Lançar a conta do fornecedor à mão quando a nota fiscal dele já entrou — vira despesa em dobro.',\n 'Dar baixa no cabeçalho em vez da parcela: some da lista e não aparece no extrato.',\n ],\n answers: [\n 'Como eu lanço uma despesa?',\n 'Como faço uma conta parcelada?',\n 'Paguei o boleto, como registro?',\n ],\n next: ['financial.conciliacao'],\n}\n\nconst receivables: SetupGuideDef = {\n feature: 'financial.contas-a-receber',\n title: 'Contas a Receber',\n about:\n 'O que entra: o que a cliente já consumiu e ainda não pagou, e o que foi parcelado no cartão. A venda concluída levanta a fatura sozinha — esta tela é para o que sobra e para o que se cobra à parte.',\n route: '/financial/receivables/list',\n requires: [\n {\n title: 'Formas de recebimento',\n feature: 'financial.formas-de-recebimento',\n where: 'Configurações › Financeiro › Formas de recebimento',\n route: `${SETTINGS}/payment-methods`,\n check: 'a tela de receber oferece pelo menos uma forma',\n },\n ],\n // Só as abas de TOPO do módulo viram `modnav.<id>`; os filhos (list/new) são\n // um SegmentedControl sem âncora, então o tour navega pela aba e pela rota.\n steps: [\n { do: 'O Financeiro mora aqui.', anchor: 'nav./financial', route: '/financial' },\n { do: 'Abra Contas a Receber neste menu — a lista mostra o que está em aberto.', anchor: 'modnav.receivables', route: '/financial/receivables/list' },\n { do: 'Cadastre uma cobrança à mão só para o que não nasceu de uma venda.', anchor: 'action.manual', route: '/financial/receivables/list' },\n {\n do: 'O normal é receber pela própria linha, escolhendo a forma e — no cartão — o número de parcelas.',\n byAssistant: true,\n tool: 'markPaymentReceived',\n why: 'Eu consigo dar baixa direto quando você me disser qual atendimento ou pedido foi pago.',\n },\n ],\n rules: [\n 'Venda concluída vira fatura por gatilho: NENHUMA tela escreve fatura por fora. Se você está cadastrando à mão o que foi vendido, alguma coisa está errada antes daqui.',\n 'Cartão em X vezes gera X parcelas com vencimentos próprios, e cada uma é recebida sozinha.',\n ],\n answers: [\n 'Como recebo o pagamento de um atendimento?',\n 'Cliente pagou no cartão em 3x, como lanço?',\n 'O que está em aberto para receber?',\n ],\n next: ['financial.caixas', 'financial.conciliacao'],\n}\n\nconst cashRegisters: SetupGuideDef = {\n feature: 'financial.caixas',\n title: 'Caixas e Conferência',\n about:\n 'A sessão de caixa do dia: abre com um valor, recebe o movimento e fecha conferindo o que o sistema diz contra o que tem na gaveta. A diferença é o assunto, não o erro.',\n route: '/financial/cash/registers',\n step: 'financial.cash',\n requires: [\n {\n title: 'Formas de recebimento',\n feature: 'financial.formas-de-recebimento',\n route: `${SETTINGS}/payment-methods`,\n check: 'existe forma cadastrada — sem isso o movimento do dia não classifica',\n },\n {\n title: 'Quem pode conferir',\n where: 'Configurações › Equipe › papel da pessoa',\n route: '/settings/team',\n check: 'quem vai aprovar tem permissão de gestão no Financeiro',\n },\n ],\n steps: [\n { do: 'O Financeiro mora aqui.', anchor: 'nav./financial', route: '/financial' },\n { do: 'Abra Caixas neste menu.', anchor: 'modnav.cash-registers', route: '/financial/cash/registers' },\n { do: 'Abra o caixa dizendo o valor que está na gaveta agora.', anchor: 'financial.cash-open', route: '/financial/cash/registers' },\n { do: 'Durante o dia, o movimento entra sozinho pelo que for recebido.' },\n { do: 'No fim, feche informando o que foi CONTADO de verdade — inclusive quando não bate.', anchor: 'financial.cash-close', route: '/financial/cash/registers' },\n { do: 'Quem tem alçada confere e aprova a sessão fechada.', why: 'É a aprovação que congela o dia.' },\n ],\n rules: [\n 'Quem fechou o caixa NÃO pode aprovar o próprio fechamento — o servidor recusa, e é assim de propósito.',\n 'A diferença apurada fica registrada. Ela é informação de gestão, não algo a esconder acertando o número.',\n ],\n pitfalls: [\n 'Informar no fechamento o valor que o sistema mostra em vez do que está na gaveta: some a diferença e some o motivo dela.',\n 'Deixar o caixa do dia anterior aberto — o movimento de hoje cai na sessão de ontem.',\n ],\n answers: [\n 'Como abro e fecho o caixa?',\n 'Meu caixa não bateu, e agora?',\n 'Quem pode aprovar o fechamento?',\n ],\n next: ['financial.conciliacao'],\n}\n\nconst commissions: SetupGuideDef = {\n feature: 'financial.commissions',\n title: 'Comissões',\n about:\n 'O quanto cada pessoa ganha pelo que atendeu, e o caminho até o dinheiro na mão dela: apurar o período, aprovar, gerar o borderô e pagar.',\n route: '/financial/commissions',\n requires: [\n {\n title: 'Regras de comissão',\n feature: 'financial.commission-rules',\n where: 'Configurações › Comissões',\n route: '/settings/financial-commissions',\n check: 'existe pelo menos uma regra ativa, e o funil de teste mostra que ela casa com um atendimento real',\n },\n {\n title: 'Atendimentos concluídos no período',\n where: 'Agenda / Pedidos',\n check: 'existe faturamento reconhecido no mês que você vai apurar — apuração sem movimento devolve lista vazia',\n },\n ],\n steps: [\n { do: 'Financeiro › Comissões: escolha o período e apure.', route: '/financial/commissions' },\n { do: 'Confira lançamento por lançamento antes de aprovar — depois de aprovado o lote é o que vira dinheiro.' },\n { do: 'Aprove e gere o borderô: ele agrupa por pessoa e vira conta a pagar.' },\n { do: 'Pague as contas geradas como qualquer outra conta a pagar.' },\n ],\n rules: [\n 'Aprovar, gerar borderô e pagar trabalham sobre o LOTE apurado. Reapurar o mesmo período cria um lote novo — apure uma vez e trabalhe nele.',\n 'A separação por unidade é proposital: a mesma pessoa em duas unidades gera duas contas.',\n ],\n pitfalls: [\n 'Regra sem critério casa com tudo e parece configurada. Use o funil de teste na tela de regras antes de apurar o mês inteiro.',\n 'Linha de atendimento sem produto/serviço amarrado escapa dos critérios e é capturada pela regra mais específica da casa — confira o que a apuração pegou antes de aprovar.',\n ],\n answers: [\n 'Como pago a comissão da equipe?',\n 'A comissão saiu errada, por quê?',\n 'O que é borderô?',\n ],\n next: ['financial.contas-a-pagar'],\n}\n\nconst commissionRules: SetupGuideDef = {\n feature: 'financial.commission-rules',\n title: 'Regras de Comissão',\n about:\n 'A política da casa escrita uma vez: quem ganha quanto, por qual serviço, em qual unidade. É configuração de quem manda, não operação do dia.',\n route: '/settings/financial-commissions',\n requires: [\n {\n title: 'Serviços e produtos cadastrados',\n where: 'Catálogo / Estoque › Produtos',\n route: '/inventory/products/list',\n check: 'dá para escolher um serviço no critério da regra',\n },\n {\n title: 'Equipe cadastrada com função',\n where: 'Configurações › Equipe',\n route: '/settings/team',\n check: 'as pessoas aparecem para vincular à regra',\n },\n ],\n steps: [\n { do: 'Configurações › Comissões.', route: '/settings/financial-commissions' },\n { do: 'Crie a regra dizendo o CRITÉRIO (serviço, categoria, unidade) antes do valor.' },\n { do: 'Defina percentual ou valor fixo, e a prioridade — a regra mais específica tem de vir na frente.' },\n { do: 'Use o funil de teste da própria tela com uma combinação real antes de sair.', why: 'É o único jeito de ver qual regra casaria de verdade.' },\n ],\n rules: [\n 'Quando duas regras casam, ganha a de maior prioridade. Empate é sorteio disfarçado — resolva pela prioridade.',\n 'Regra sem critério nenhum casa com TODO atendimento. Se é isso que você quer, deixe explícito; se não, é o defeito mais caro desta tela.',\n ],\n answers: [\n 'Como configuro a comissão de cada profissional?',\n 'Por que a comissão dela não foi calculada?',\n 'Dá para comissionar só um serviço?',\n ],\n next: ['financial.commissions'],\n}\n\nconst goals: SetupGuideDef = {\n feature: 'financial.goals',\n title: 'Metas',\n about:\n 'A meta de faturamento de uma unidade num mês, em três degraus: Meta, Super e Hiper. O realizado vem do faturamento reconhecido e aparece mesmo onde ninguém cadastrou alvo.',\n route: '/financial/goals',\n requires: [\n {\n title: 'Unidades cadastradas',\n where: 'Configurações › Locais e unidades',\n route: '/settings/locations',\n check: 'o seletor de unidade da tela de Metas traz pelo menos uma opção',\n required: false,\n },\n {\n title: 'Faturamento acontecendo',\n check: 'a coluna \"Realizado\" mostra valor — se está tudo zerado, o problema é o faturamento, não a meta',\n },\n ],\n steps: [\n { do: 'Financeiro › Metas, escolha o ano e a unidade.', route: '/financial/goals' },\n { do: 'Abra o mês e informe os três degraus: Meta, Super e Hiper.' },\n { do: 'Repita para os meses que valem — não é preciso preencher o ano inteiro.' },\n ],\n rules: [\n 'A meta é sempre de UMA unidade e de UM mês. Rede inteira não tem meta própria: é a soma.',\n 'O realizado é lido do faturamento reconhecido; não se digita.',\n ],\n pitfalls: [\n 'Cadastrar meta na unidade errada e concluir que a equipe não vende — o percentual fica dividido por um alvo que ninguém perseguiu.',\n ],\n answers: [\n 'Como coloco meta para a equipe?',\n 'De onde vem o valor realizado?',\n 'O que são Meta, Super e Hiper?',\n ],\n}\n\nconst giftCards: SetupGuideDef = {\n feature: 'financial.gift-cards',\n title: 'Gift Cards',\n about:\n 'Vales-presente emitidos em lote. O valor de face é promessa de serviço, não receita: enquanto não for usado, é passivo da casa.',\n route: '/financial/gift/cards',\n requires: [\n {\n title: 'Forma de recebimento para a venda do vale',\n feature: 'financial.formas-de-recebimento',\n route: `${SETTINGS}/payment-methods`,\n check: 'dá para receber o pagamento de quem comprou o vale',\n },\n ],\n steps: [\n { do: 'Financeiro › Gift Cards.', route: '/financial/gift/cards' },\n { do: 'Emita o lote dizendo o valor de face e a quantidade.' },\n { do: 'Acompanhe o passivo: o total do lote e o que já foi consumido aparecem ao vivo.' },\n ],\n rules: [\n 'Emitir não é faturar. A receita só é reconhecida quando o vale é usado.',\n 'O valor de face do lote inteiro é o tamanho da promessa que a casa assumiu.',\n ],\n warnings: [\n 'Imprimir os vales ainda não existe aqui — dá para emitir, não para imprimir em lote.',\n ],\n answers: [\n 'Como vendo vale-presente?',\n 'O vale-presente conta como faturamento?',\n 'Quanto ainda devo em vales?',\n ],\n}\n\n/**\n * O exemplo que motivou este arquivo.\n *\n * A tela é de ACOMPANHAMENTO e diz isso num aviso amarelo que quase ninguém\n * lê — \"Emitir\" numera localmente, não fala com a SEFAZ. Um guia que fingisse\n * o contrário faria alguém emitir cinquenta notas achando que estão válidas.\n */\nconst notasFiscais: SetupGuideDef = {\n feature: 'financial.notas-fiscais',\n title: 'Notas Fiscais',\n about:\n 'O acompanhamento das notas da casa — NF-e, NFC-e e NFS-e — do rascunho até a emissão, com link para o XML e o DANFE quando existirem.',\n route: '/financial/fiscal/documents',\n status: 'manual-only',\n statusNote:\n 'A emissão fiscal de verdade (SEFAZ) ainda NÃO está integrada neste produto. \"Emitir\" atribui número e série localmente, para controle interno. Serve para acompanhar e organizar; não substitui o emissor fiscal da casa, e a nota daqui não tem validade fiscal.',\n requires: [\n {\n title: 'Dados fiscais da empresa',\n where: 'Configurações › Geral (CNPJ, inscrição, endereço)',\n route: '/settings/general',\n check: 'o CNPJ e o endereço estão preenchidos — é o que qualquer emissor vai exigir no dia da integração',\n },\n {\n title: 'Destinatário com cadastro',\n where: 'Clientes',\n check: 'dá para escolher o destinatário na nota em vez de digitar o nome solto',\n required: false,\n },\n ],\n steps: [\n { do: 'Financeiro › Notas Fiscais.', route: '/financial/fiscal/documents' },\n { do: 'Nova nota: escolha o modelo (NF-e, NFC-e ou NFS-e), o destinatário e o valor total.' },\n { do: 'A nota nasce como Rascunho. \"Emitir\" a numera e passa para Emitida — localmente.' },\n { do: 'Cancele pela própria linha quando precisar; o histórico continua.' },\n ],\n rules: [\n 'Rascunho → Emitida → Cancelada é todo o ciclo. Não existe fila de SEFAZ atrás disto.',\n 'XML e DANFE só aparecem quando um emissor de verdade estiver ligado e preencher os links.',\n ],\n pitfalls: [\n 'Tratar a numeração daqui como numeração fiscal. Ela é interna, e vai conflitar com a do emissor real no dia da integração.',\n 'Entrada de nota de FORNECEDOR (XML que dá entrada no estoque e cria conta a pagar) é outra coisa, e não existe neste produto. Se a pergunta é \"importei a nota e o estoque não mudou\", a resposta é que essa importação não existe aqui.',\n ],\n answers: [\n 'Como emito nota fiscal?',\n 'Como começo a usar notas fiscais?',\n 'Importei o XML da nota e o estoque não mudou',\n 'Onde vejo o DANFE?',\n ],\n}\n\nconst reconciliation: SetupGuideDef = {\n feature: 'financial.conciliacao',\n title: 'Conciliação Bancária',\n about:\n 'Casar o que o sistema diz que entrou e saiu com o que o banco diz. O que sobra dos dois lados é o assunto: taxa não lançada, recebimento esquecido, venda que ninguém registrou.',\n route: '/financial/reconciliation',\n requires: [\n {\n title: 'Conta bancária cadastrada',\n where: 'Configurações › Financeiro › Contas bancárias',\n route: `${SETTINGS}/bank-accounts`,\n check: 'a conta aparece no seletor da conciliação',\n },\n {\n title: 'Movimento lançado no período',\n feature: 'financial.contas-a-receber',\n check: 'há recebimentos e pagamentos com baixa no mês que você vai conciliar',\n },\n ],\n steps: [\n { do: 'Financeiro › Conciliação, escolha a conta e o período.', route: '/financial/reconciliation' },\n { do: 'Case as linhas que são o mesmo fato dos dois lados.' },\n { do: 'Investigue o que sobrou — é aí que está a informação.' },\n ],\n rules: [\n 'Conciliar não corrige lançamento: o que estiver errado se conserta na origem (a conta, o recebimento), não aqui.',\n ],\n pitfalls: [\n 'Faturamento maior que o extrato quase sempre é desconto de maquininha não cadastrado na forma de recebimento.',\n ],\n answers: [\n 'O sistema não bate com o banco',\n 'Como faço conciliação bancária?',\n ],\n}\n\nexport const financialSetupGuides: SetupGuideDef[] = [\n paymentMethods,\n chartOfAccounts,\n receivables,\n payables,\n cashRegisters,\n commissionRules,\n commissions,\n goals,\n giftCards,\n notasFiscais,\n reconciliation,\n]\n","import { countByTenant, type OnboardingProgramDef } from '@fayz-ai/core'\nimport { T } from '@fayz-ai/financial/data/tables'\n\n/**\n * Implantação do Financeiro — o que \"de pé\" quer dizer para o dinheiro.\n *\n * O checklist da plataforma manda ligar o recebimento e para por aí, porque\n * para ele receber é uma tela de configuração. Aqui não é: uma casa está com o\n * financeiro de pé quando o dinheiro tem CAMINHO (forma de recebimento),\n * GAVETA (plano de contas) e CONFERÊNCIA (caixa fechado por alguém). Faltando\n * qualquer um dos três, o módulo funciona e não informa nada.\n *\n * Cada passo tem um guia de implantação por trás (`setup-guides.ts`), e a\n * chave dele é a mesma: `financial.<key>`. É o que faz o passo do checklist e\n * o \"Configure comigo\" da tela serem o mesmo conhecimento, escrito uma vez.\n */\nexport function buildFinancialOnboarding(): OnboardingProgramDef {\n return {\n id: 'financial',\n title: 'Seu dinheiro no lugar',\n // Depois da base da plataforma: não adianta cadastrar forma de recebimento\n // antes de a pessoa ter dito o nome do próprio negócio.\n order: 70,\n role: 'finance',\n instructions: `Você está implantando o FINANCEIRO. Quem está do outro lado não quer aprender contabilidade — quer saber quanto entrou, quanto saiu e se bate.\n\n- A ordem é: como o dinheiro entra (formas de recebimento) → onde ele é classificado (plano de contas) → como se confere (caixa). Não fale de conciliação nem de comissão antes disso.\n- Pergunte COMO a casa recebe hoje — dinheiro, Pix, maquininha, quantas vezes no cartão — e cadastre o que ela disser. Não ofereça uma lista genérica de formas de pagamento.\n- A taxa da maquininha é a pergunta que ninguém faz e que estraga todo relatório depois. Faça.\n- O plano de contas já vem com uma estrutura. O trabalho é RENOMEAR para o vocabulário da casa, não criar do zero — diga isso, senão a pessoa acha que precisa montar um plano contábil.\n- Cada passo tem um guia (\\`readSetupGuide\\`) com os pré-requisitos e as armadilhas. Leia antes de conduzir; é lá que está o que não está na tela.\n- Comissão e metas NÃO são passos de implantação: são o que a pessoa faz depois que o dinheiro está entrando. Só puxe o assunto se ela puxar.`,\n steps: [\n {\n key: 'receiving',\n title: 'Diga como a casa recebe',\n description: 'Dinheiro, Pix, cartão em X vezes — cada um com a taxa e o prazo dele.',\n icon: 'CreditCard',\n route: '/settings/financial/payment-methods',\n priority: 'high',\n // A plataforma tem um passo genérico de \"ligue o recebimento\"; quando o\n // Financeiro está instalado, é este que sabe o que a casa precisa.\n replaces: 'payments',\n agentHint:\n 'Pergunte como ela recebe HOJE, na ordem em que ela mesma listar. Cadastre o que ela disser, com a taxa da maquininha, e pare — não complete a lista com formas que ela não usa.',\n howTo:\n 'Configurações › Financeiro › Formas de recebimento. Cadastre uma linha para cada jeito real de receber, com o nome que a equipe usa (\"Crédito 3x\"), o desconto da maquininha em % e o número máximo de parcelas. É este nome que aparece na hora de fechar a conta do cliente.',\n celebrate: 'O dinheiro tem por onde entrar 💳',\n script: [\n { kind: 'say', text: 'Vamos começar pelo caminho do dinheiro: como a casa recebe.' },\n { kind: 'goto', route: '/settings/financial/payment-methods' },\n {\n kind: 'ask',\n text: 'Estamos em Formas de recebimento. Pergunte como a pessoa recebe hoje — dinheiro, Pix, maquininha, quantas vezes no cartão — e cadastre com ela, perguntando a taxa de cada uma.',\n },\n ],\n check: async () => (await countByTenant(T.paymentMethods)) > 0,\n },\n {\n key: 'accounts',\n title: 'Organize as gavetas do dinheiro',\n description: 'Onde cada gasto entra: aluguel, insumo, folha. É o que responde \"para onde foi\".',\n icon: 'FolderTree',\n route: '/settings/financial/chart-of-accounts',\n agentHint:\n 'A estrutura já vem pronta. Conduza como AJUSTE: renomear para a língua da casa e acrescentar o que faltar. Nunca peça para montar um plano de contas do zero.',\n howTo:\n 'Configurações › Financeiro › Plano de contas. Já vem Receita, Custos operacionais e Despesas — renomeie as contas folha para o vocabulário da casa e acrescente só o que faltar, sempre pendurado num grupo que já existe. Grupo não recebe lançamento; folha sim.',\n celebrate: 'Cada real tem uma gaveta 🗂️',\n script: [\n { kind: 'goto', route: '/settings/financial/chart-of-accounts' },\n {\n kind: 'ask',\n text: 'Estamos no plano de contas, que já vem preenchido. Mostre a estrutura, pergunte quais nomes não são os que a casa usa, e ajuste com a pessoa.',\n },\n ],\n check: async () => (await countByTenant(T.chartOfAccounts)) > 0,\n },\n {\n key: 'cash',\n title: 'Feche o caixa uma vez',\n description: 'Abrir, receber o dia e conferir contra o que tem na gaveta.',\n icon: 'Landmark',\n route: '/financial/cash/registers',\n agentHint:\n 'É o passo que prova que os dois anteriores funcionaram. Acompanhe a abertura e diga que o fechamento é no fim do dia — não espere pelo fechamento dentro da conversa.',\n howTo:\n 'Financeiro › Caixas. Abra o caixa dizendo o valor que está na gaveta agora. Durante o dia o movimento entra sozinho pelo que for recebido. No fim, feche informando o que foi CONTADO de verdade, mesmo quando não bate: a diferença é informação, não erro a esconder. Quem fechou não pode aprovar o próprio fechamento.',\n celebrate: 'Caixa conferido 🧾',\n },\n ],\n }\n}\n","import { lazyComponent, onAppPathChange } from '@fayz-ai/core'\nimport React from 'react'\nimport { Wallet } from 'lucide-react'\nimport { Button, Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalBody } from '@fayz-ai/ui'\nimport { useStore as useZustand } from 'zustand'\nimport type { StoreApi } from 'zustand'\nimport { FinancialContextProvider } from '../context'\nimport { useTenantPluginSettings } from '@fayz-ai/admin'\nimport { FINANCIAL_MODULE_DEFAULTS } from './FinancialGeneralSettings'\nimport type { FinancialUIState } from '@fayz-ai/financial/store'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { ResolvedFinancialConfig } from '../context'\n\n// Code loads when it is first drawn, not with the app. Pages use React.lazy\n// (the shell's route boundary shows the page skeleton); anything that may\n// render elsewhere uses lazyComponent, which carries its own boundary.\nconst CashRegistersView = lazyComponent(() => import('../views/CashRegistersView').then((m) => m.CashRegistersView))\n\n// ---------------------------------------------------------------------------\n// O caixa mora na CASCA, não dentro do Financeiro.\n//\n// A recepcionista abre a gaveta uma vez, no balcão, e depois cobra a partir da\n// agenda, da fila de check-in e da fatura — três telas que não são o Financeiro.\n// Enterrar o controle dentro do módulo obrigava a sair do balcão para chegar\n// nele. O V1 põe um ícone no cabeçalho, com um ponto verde quando há sessão\n// aberta, e abre o diálogo ali mesmo; não existe rota `/caixa`.\n//\n// O ponto é o estado inteiro que a casca mostra: quem abriu e quanto tem ficam\n// no diálogo, porque cabeçalho não é lugar de saldo.\n// ---------------------------------------------------------------------------\n\nexport interface CashSessionHeaderControlProps {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}\n\n/**\n * O controle recebe a LOJA do plugin em vez de pedi-la ao contexto.\n *\n * `useFinancialStore` exige o provider que a FinancialPage monta, e um controle\n * de casca vive FORA dele — montá-lo assim quebrava com \"useStore must be used\n * within FinancialPage\". Uma peça que a casca hospeda não pode depender do\n * provider de um módulo: ou ela é auto-suficiente, ou não é de casca.\n */\n/** The shell icon, only where the house uses the till (its own switch, not the app's). */\nexport function CashSessionHeaderControl(props: CashSessionHeaderControlProps) {\n const house = useTenantPluginSettings('financial', FINANCIAL_MODULE_DEFAULTS)\n if (!house.get('cashRegisters')) return null\n return <CashSessionControl {...props} />\n}\n\nfunction CashSessionControl({ config, provider, store }: CashSessionHeaderControlProps) {\n const sessions = useZustand(store, (s) => s.cashSessions)\n const fetchCashSessions = useZustand(store, (s) => s.fetchCashSessions)\n // Shared with the page button (CashRegistersView) via FinancialUIState —\n // so \"Abrir caixa\" on the módulo page and the ícone da casca drive the SAME\n // diálogo instead of each drawing its own.\n const open = useZustand(store, (s) => s.cashSessionModalOpen)\n const setOpen = useZustand(store, (s) => s.setCashSessionModalOpen)\n\n React.useEffect(() => { void fetchCashSessions?.() }, [fetchCashSessions])\n\n // Um diálogo de casca não pertence a rota nenhuma, então ele sobrevivia à\n // navegação: o link \"Histórico de Sessões\" levava à página do caixa e deixava\n // o próprio diálogo por cima dela, tapando o que a pessoa tinha ido ver.\n React.useEffect(() => {\n if (!open) return\n const close = () => setOpen(false)\n return onAppPathChange(close)\n }, [open])\n\n const hasOpen = (sessions ?? []).some((s) => s.status === 'open')\n\n return (\n <>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setOpen(true)}\n aria-label={hasOpen ? 'Fechar caixa' : 'Abrir caixa'}\n title={hasOpen ? 'Fechar caixa' : 'Abrir caixa'}\n className=\"font-normal gap-0 fz-tap relative inline-flex shrink-0 items-center justify-center rounded-button p-2 text-sidebar-muted transition-colors hover:bg-sidebar-accent/50 hover:text-sidebar-accent-foreground\"\n >\n <Wallet className=\"h-4 w-4\" />\n {hasOpen && (\n <span className=\"absolute right-1 top-1 h-2 w-2 rounded-full bg-success ring-2 ring-background\" />\n )}\n </Button>\n\n {/*\n PELO PORTAL, E NÃO ALI MESMO.\n\n A primeira versão desenhava o overlay como irmão do botão — ou seja,\n DENTRO da barra escura da casca, que declara `text-sidebar-foreground`.\n Todo texto do diálogo que não pintava a própria cor herdava um\n quase-branco (rgb(228,224,235)) e caía sobre um cartão branco: o título,\n \"Sessões Abertas\", o nome do caixa e o saldo sumiam, enquanto os\n subtítulos em `text-muted-foreground` — que pintam a sua — continuavam\n legíveis. Parecia contraste invertido; era herança.\n\n `ModalContent` monta no portal, fora daquele escopo, e de brinde traz o\n que eu tinha reescrito pior à mão: Esc, foco preso, clique fora,\n empilhamento correto e tela cheia no celular. A altura passa a ser\n `max-h-[85vh]` com o corpo rolando sozinho, no lugar de um `70vh` fixo\n que cortava o painel de fechamento com 155px de tela sobrando.\n */}\n <Modal open={open} onOpenChange={setOpen}>\n <ModalContent size=\"md\" noPadding className=\"gap-0\">\n <ModalHeader className=\"border-b px-4 py-3\">\n <ModalTitle className=\"text-sm\">\n {hasOpen ? 'Meu caixa' : 'Abertura de caixa'}\n </ModalTitle>\n <ModalDescription className=\"text-xs\">\n {hasOpen ? 'Confira a gaveta e feche o turno.' : 'Informe o troco inicial para começar a cobrar.'}\n </ModalDescription>\n </ModalHeader>\n {/* A MESMA tela do módulo, servida onde a pessoa está — com o\n provider por volta, porque aqui não há um. */}\n <ModalBody>\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <CashRegistersView variant=\"panel\" />\n </FinancialContextProvider>\n </ModalBody>\n </ModalContent>\n </Modal>\n </>\n )\n}\n","import { tl, type AnalyticsCardDef, type AnalyticsRow } from '@fayz-ai/core'\nimport type { ResolvedFinancialConfig } from '../context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\n\nexport function buildFinancialAnalyticsCards(\n config: ResolvedFinancialConfig,\n provider: FinancialDataProvider,\n): AnalyticsCardDef[] {\n const unitFilter = config.locations.length > 1 ? [{\n key: 'unit_id',\n label: tl('Unit', 'Unidade'),\n type: 'select' as const,\n group: tl('General', 'Geral'),\n options: config.locations.map((unit) => ({ label: unit.name, value: unit.id })),\n }] : []\n\n const dre: AnalyticsCardDef = {\n id: 'financial.dre',\n name: tl('Profit & Loss Statement', 'DRE — Demonstração do Resultado do Exercício'),\n description: tl(\n 'Revenue, operating expenses and result by chart account and accrual month.',\n 'Receitas, despesas operacionais e resultado por plano de contas e mês de competência.',\n ),\n icon: 'ChartNoAxesCombined',\n category: tl('Finance', 'Financeiro'),\n domain: 'financial',\n canonicalOwner: 'public.plg_financial_rep_dre',\n grain: 'chart_account_month',\n permission: { feature: 'financial', action: 'read' },\n query: {\n source: {\n kind: 'fn',\n run: async (context) => {\n const fromYear = new Date(`${context.dateRange.from}T00:00:00`).getFullYear()\n const toYear = new Date(`${context.dateRange.to}T00:00:00`).getFullYear()\n const unitId = typeof context.filters.unit_id === 'string' ? context.filters.unit_id : undefined\n const years = Array.from({ length: Math.max(1, toYear - fromYear + 1) }, (_, index) => fromYear + index)\n const batches = await Promise.all(years.map((year) => provider.getDre({ year, unitId })))\n return batches.flat().map((row): AnalyticsRow => ({\n statement_code: row.statementCode,\n statement_name: row.statementName,\n competence_month: row.competenceMonth,\n account_type: row.accountType,\n unit_id: row.unitId ?? unitId ?? null,\n amount: row.amount,\n }))\n },\n },\n dateColumn: 'competence_month',\n dimensions: [\n { key: 'statement_code', label: tl('Account', 'Conta') },\n { key: 'statement_name', label: tl('Description', 'Descrição') },\n { key: 'competence_month', label: tl('Accrual month', 'Competência'), grain: 'month' },\n { key: 'account_type', label: tl('Type', 'Tipo') },\n ],\n measures: [{ key: 'amount', label: tl('Amount', 'Valor'), agg: 'sum', format: 'currency' }],\n filters: unitFilter,\n defaultSort: 'statement_code',\n defaultSortDir: 'asc',\n },\n viz: {\n type: 'statement',\n statement: {\n codeKey: 'statement_code',\n labelKey: 'statement_name',\n periodKey: 'competence_month',\n valueKey: 'amount',\n sectionKey: 'account_type',\n sections: [\n { value: 'revenue', label: tl('Revenue', 'Receitas'), unclassifiedLabel: tl('Unclassified revenue', 'Receitas sem classificação') },\n { value: 'expense', label: tl('Operating expenses', 'Despesas operacionais'), unclassifiedLabel: tl('Unclassified expenses', 'Despesas sem classificação') },\n ],\n lines: [\n { kind: 'section', section: 'revenue' },\n { kind: 'total', label: tl('= Net revenue', '= Receita líquida'), of: { revenue: 1 }, emphasis: 'strong' },\n { kind: 'section', section: 'expense' },\n { kind: 'total', label: tl('= Operating result', '= Resultado operacional'), of: { revenue: 1, expense: -1 }, emphasis: 'rule' },\n ],\n defaultDepth: 1,\n },\n },\n }\n // The V1 report is an annual statement. The reports surface reads this\n // per-card hint and restores its own default when the viewer closes.\n ;(dre as AnalyticsCardDef & { defaultRange: 'this_year' }).defaultRange = 'this_year'\n return [dre]\n}\n","// Stripe as the Financeiro module's receivable rail: an invoice raised in Fayz\n// is issued at Stripe, and the payment Stripe collects comes back as a baixa.\n//\n// ── Not the same connector as courses' `stripe-connect` ─────────────────────\n// That one is Connect: the platform routing a student's payment to a creator and\n// taking a fee, where the money is never the tenant's to begin with. This one is\n// the tenant charging their own customer on their own account. Two connectors,\n// one brand, and the ids say which is which — `stripe-connect` overrides\n// `catalogSlug` precisely because it is not the catalogue's `stripe` row; this\n// one IS, so its id is the slug.\n//\n// ── Direction ───────────────────────────────────────────────────────────────\n// The invoice is Fayz's and the payment is Stripe's, so the mirror runs one way\n// per object rather than one way per connector: we tell Stripe about the\n// receivable (outbound), Stripe tells us it was paid (inbound webhook). Declared\n// `outbound` because that is who initiates — the settlement arriving is the\n// answer to a charge we raised, not an independent inbound feed.\n//\n// No SQL. The connection is a connections row (packages/db 029) and the\n// Stripe ids mirror onto `Invoice.metadata`, which already exists for this.\nimport {\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n type ConnectorSetting,\n} from '@fayz-ai/core'\n\nimport { fayzConnectorOAuth } from '@fayz-ai/admin'\n\nexport const STRIPE_CONNECTOR_ID = 'stripe'\n\n/**\n * What the merchant may offer on a Stripe invoice — commercial policy, decided\n * after the account is linked and changed whenever they like.\n *\n * A multi-select over what Stripe actually supports in BR, so the value cannot\n * be a misspelling the invoice then silently does not offer. Required to\n * OPERATE: an invoice with no method selected has no way to be paid, so the\n * connection is real and reported as \"conectado, falta configurar\".\n */\nexport const STRIPE_SETTINGS: ConnectorSetting[] = [\n {\n key: 'paymentMethods',\n label: 'Formas de pagamento',\n description: 'O que o cliente pode escolher para pagar a fatura.',\n type: 'multi-select',\n options: [\n { value: 'card', label: 'Cartão de crédito' },\n { value: 'pix', label: 'Pix' },\n { value: 'boleto', label: 'Boleto' },\n ],\n requiredToOperate: true,\n },\n {\n key: 'daysUntilDue',\n label: 'Prazo de vencimento',\n description: 'Dias entre a emissão e o vencimento da fatura.',\n type: 'text',\n placeholder: '7',\n pattern: '\\\\d{1,3}',\n patternHint: 'Só números, até três dígitos.',\n defaultValue: '7',\n },\n {\n // The difference between \"a fatura foi emitida\" and \"o cliente recebeu a\n // cobrança\" is a decision, not a default: finalizing at Stripe sends the\n // e-mail, and a tenant that reviews before sending needs the draft.\n key: 'finalizeAutomatically',\n label: 'Enviar a cobrança automaticamente',\n description: 'Desligado, a fatura fica como rascunho na Stripe até você enviar.',\n type: 'toggle',\n defaultValue: true,\n },\n]\n\nconst store = createConnectionStore(STRIPE_CONNECTOR_ID, {\n settings: STRIPE_SETTINGS,\n})\n\nconst METHOD_LABELS: Record<string, string> = { card: 'Cartão', pix: 'Pix', boleto: 'Boleto' }\n\n/** The row's one-line summary — what the merchant accepts, in their words. */\nfunction methodsDetail(value: unknown): string | undefined {\n const list = Array.isArray(value) ? value : []\n const labels = list.map((v) => METHOD_LABELS[String(v)] ?? String(v)).filter(Boolean)\n return labels.length > 0 ? labels.join(', ') : undefined\n}\n\nexport const stripeConnectorDef: ConnectorDefinition = {\n id: STRIPE_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Stripe · Faturas',\n description: 'Emita as faturas do Financeiro na Stripe e receba a baixa quando o cliente pagar.',\n icon: 'CreditCard',\n category: 'payments',\n authKind: 'oauth',\n // Issuing the invoice is an effect that files a run; the settlement arrives by\n // webhook. Neither happens while a buyer waits, so nothing here is `request`.\n planes: ['sync'],\n direction: 'outbound',\n docsUrl: 'https://docs.stripe.com/invoicing',\n // Declared here and not as the legacy `entities`/`subscribesTo` pair: those are\n // mirrors this list already derives (connectorEntities/connectorSubscribesTo),\n // and two spellings of the same claim is one that can disagree with itself.\n //\n // `invoice_due_soon` and `invoice_overdue` are deliberately absent. Stripe has\n // its own dunning and neither fact changes anything we would send it; asking to\n // hear them would be asking for reach this connector does not use.\n permissions: [\n {\n kind: 'data',\n resource: 'invoice',\n actions: ['read', 'write'],\n reason:\n 'Ler a fatura a receber para emiti-la na Stripe, e gravar de volta o número da fatura e o link de pagamento. Nome do cliente e itens vão na cobrança.',\n sensitive: true,\n },\n {\n kind: 'data',\n resource: 'payment',\n actions: ['write'],\n reason: 'Lançar a baixa no recebível quando a Stripe confirmar que o cliente pagou.',\n sensitive: true,\n },\n {\n kind: 'event',\n resource: 'financial.invoice_created',\n actions: ['listen'],\n reason: 'Saber que uma fatura foi emitida, para criar a cobrança na Stripe.',\n },\n {\n kind: 'event',\n resource: 'financial.invoice_cancelled',\n actions: ['listen'],\n reason: 'Saber que uma fatura foi cancelada, para anular a cobrança na Stripe.',\n },\n {\n // The connector is what makes this fact appear, so the tenant should agree\n // to it here: the app's own automations (recibo, mensagem) react to it.\n kind: 'event',\n resource: 'financial.invoice_paid',\n actions: ['emit'],\n reason: 'Anunciar dentro do app que a fatura foi paga, para o que depende disso acontecer.',\n },\n ],\n // Consent is the whole form: an OAuth connector declares no fields, and the\n // grant never reaches this code.\n fields: [],\n settings: STRIPE_SETTINGS,\n invokedAt: [\n {\n key: 'financial.invoice.issue',\n label: 'Uma fatura a receber é emitida na Stripe com o link de pagamento',\n plane: 'sync',\n trigger: 'manual',\n },\n {\n key: 'financial.payment.settle',\n label: 'A Stripe avisa que o cliente pagou e a baixa é lançada no recebível',\n plane: 'sync',\n trigger: 'webhook',\n },\n ],\n ...connectionStatus(\n STRIPE_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(connection?.settings?.paymentMethods),\n plane: 'sync',\n ...settingsStatus(STRIPE_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n /**\n * The whole connect step, through the platform broker (FAY-1390).\n *\n * It used to call an edge function's `oauth_start` — a function that was\n * never written, so pressing Conectar reached a URL that did not exist and\n * the browser reported it as a CORS failure. The broker replaces it\n * end-to-end: consent starts at the platform, the callback lands there, and\n * the grant is stored in the platform vault.\n *\n * `saveConnection` is deliberately absent, like every other OAuth connector\n * here: `active = true` is written by the redirect route AFTER the grant.\n * Nothing in a browser is in a position to know an account was linked.\n */\n startOAuth: fayzConnectorOAuth(STRIPE_CONNECTOR_ID),\n // Local only. Handing the grant back to Stripe is the platform's job — it\n // holds the client pair and the connected account id, and its deauthorize is\n // not the same call every other provider takes.\n disconnect: async () => { await store.disconnect() },\n}\n","import type { ConnectorPermission, ConnectorSetting, ConnectorSettingOption } from '@fayz-ai/core'\n\n// The provider name is a parameter because the sentence a tenant judges names it.\nexport function receivablePermissions(provider: string): ConnectorPermission[] {\n return [\n {\n kind: 'data',\n resource: 'payment',\n actions: ['write'],\n reason:\n `Lançar no Financeiro cada venda que o ${provider} recebeu: valor, forma de pagamento, ` +\n `parcelas, taxa cobrada e a data em que o dinheiro cai na conta.`,\n sensitive: true,\n },\n {\n kind: 'data',\n resource: 'invoice',\n actions: ['read', 'write'],\n reason:\n `Encontrar o recebível que corresponde àquela venda e dar a baixa quando o ${provider} ` +\n `confirmar o repasse. O valor do recebível não é alterado.`,\n sensitive: true,\n },\n ]\n}\n\n/**\n * When the receivable is written off: at the sale, or when the money lands.\n *\n * The one decision an acquirer forces that a gateway does not — a card sale is\n * received today and paid out in thirty days, and which of the two the Financeiro\n * calls \"recebido\" is the tenant's accounting, not ours.\n */\nexport const SETTLE_ON_SETTING: ConnectorSetting = {\n key: 'settleOn',\n label: 'Quando dar a baixa',\n description: 'A venda no cartão entra hoje e o dinheiro cai depois. Escolha o que conta como recebido.',\n type: 'select',\n options: [\n { value: 'payout', label: 'Quando o dinheiro cai na conta (repasse)' },\n { value: 'sale', label: 'Na hora da venda' },\n ],\n defaultValue: 'payout',\n}\n\n/** The \"quais vendas trazer\" setting, over the methods this provider actually has. */\nexport function methodsSetting(options: ConnectorSettingOption[]): ConnectorSetting {\n return {\n key: 'methods',\n label: 'Quais vendas trazer',\n description: 'Só o que estiver marcado aqui vira lançamento no Financeiro.',\n type: 'multi-select',\n options,\n // Nothing marked is a feed with nothing to bring: the connection is real and\n // reads as \"conectado, falta configurar\".\n requiredToOperate: true,\n }\n}\n\n/** One-line summary for the connection row. Tolerates a hand-edited jsonb string. */\nexport function methodsDetail(labels: Record<string, string>, value: unknown): string | undefined {\n const list = Array.isArray(value) ? value : typeof value === 'string' ? value.split(',') : []\n const named = list.map((v) => labels[String(v).trim()] ?? String(v).trim()).filter(Boolean)\n return named.length > 0 ? named.join(', ') : undefined\n}\n","// One button: client_id/client_secret are the platform's and the merchant\n// authorizes at auth.mercadopago.com. See ../acquirers/ACQUIRERS.md.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n} from '@fayz-ai/core'\nimport { fayzConnectorOAuth } from '@fayz-ai/admin'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const MERCADOPAGO_CONNECTOR_ID = 'mercadopago'\n\nconst METHOD_LABELS: Record<string, string> = {\n credit_card: 'Crédito',\n debit_card: 'Débito',\n pix: 'Pix',\n ticket: 'Boleto',\n account_money: 'Saldo em conta',\n}\n\nexport const MERCADOPAGO_SETTINGS = [\n methodsSetting([\n { value: 'credit_card', label: METHOD_LABELS.credit_card },\n { value: 'debit_card', label: METHOD_LABELS.debit_card },\n { value: 'pix', label: METHOD_LABELS.pix },\n { value: 'ticket', label: METHOD_LABELS.ticket },\n { value: 'account_money', label: METHOD_LABELS.account_money },\n ]),\n SETTLE_ON_SETTING,\n]\n\n// `collectorId` is Mercado Pago's own id for the account, and it comes back with\n// the grant — discovered, never typed.\nconst store = createConnectionStore(MERCADOPAGO_CONNECTOR_ID, {\n settings: MERCADOPAGO_SETTINGS,\n settingsKeys: ['collectorId'],\n})\n\nexport const mercadoPagoConnectorDef: ConnectorDefinition = {\n id: MERCADOPAGO_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Mercado Pago · Recebimentos',\n description: 'Traga para o Financeiro tudo que entrou no Mercado Pago — Pix, cartão e maquininha — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n category: 'payments',\n authKind: 'oauth',\n // We reach Mercado Pago for what it received; nothing here charges anyone.\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://www.mercadopago.com.br/developers/pt/docs/checkout-api/additional-content/security/oauth/creation',\n permissions: receivablePermissions('Mercado Pago'),\n fields: [],\n settings: MERCADOPAGO_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que o Mercado Pago recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem no Mercado Pago.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n MERCADOPAGO_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(MERCADOPAGO_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n startOAuth: fayzConnectorOAuth(MERCADOPAGO_CONNECTOR_ID),\n saveConnection: async () => {\n await store.save({ active: true })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","// One button: the application pair is the platform's and the merchant authorizes\n// through PagBank's Connect Authorization. See ../acquirers/ACQUIRERS.md.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n} from '@fayz-ai/core'\nimport { fayzConnectorOAuth } from '@fayz-ai/admin'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const PAGBANK_CONNECTOR_ID = 'pagbank'\n\nconst METHOD_LABELS: Record<string, string> = {\n CREDIT_CARD: 'Crédito',\n DEBIT_CARD: 'Débito',\n PIX: 'Pix',\n BOLETO: 'Boleto',\n}\n\nexport const PAGBANK_SETTINGS = [\n methodsSetting([\n { value: 'CREDIT_CARD', label: METHOD_LABELS.CREDIT_CARD },\n { value: 'DEBIT_CARD', label: METHOD_LABELS.DEBIT_CARD },\n { value: 'PIX', label: METHOD_LABELS.PIX },\n { value: 'BOLETO', label: METHOD_LABELS.BOLETO },\n ]),\n SETTLE_ON_SETTING,\n]\n\nconst store = createConnectionStore(PAGBANK_CONNECTOR_ID, {\n settings: PAGBANK_SETTINGS,\n settingsKeys: ['accountId'],\n})\n\nexport const pagBankConnectorDef: ConnectorDefinition = {\n id: PAGBANK_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'PagBank',\n description: 'Traga para o Financeiro tudo que entrou no PagBank — Pix, cartão e maquininha — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n // The catalogue carries no `pagbank` row yet, so the mark is declared here\n // rather than borrowed. Without it the row renders as a grey plug.\n logoUrl: 'https://assets.fayz.ai/connectors/pagbank_pagseguro.png',\n category: 'payments',\n authKind: 'oauth',\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://developer.pagbank.com.br/docs/connect-authorization',\n permissions: receivablePermissions('PagBank'),\n fields: [],\n settings: PAGBANK_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que o PagBank recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem no PagBank.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n PAGBANK_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(PAGBANK_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n startOAuth: fayzConnectorOAuth(PAGBANK_CONNECTOR_ID),\n saveConnection: async () => {\n await store.save({ active: true })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","// The one on this shelf that CANNOT be one button, and it is Cielo's protocol\n// that decides it: the API e-commerce authenticates with a MerchantId and a\n// MerchantKey that Cielo issues TO THE MERCHANT, in the merchant's own\n// backoffice. There is no consent screen, no authorization code, and no\n// application-level pair for us to hold — so there is nothing to broker.\n// ../acquirers/ACQUIRERS.md keeps the evidence.\n//\n// Both values still leave this package: the hub routes them to the platform\n// vault, and the connector never sees either.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n type ConnectorField,\n} from '@fayz-ai/core'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const CIELO_CONNECTOR_ID = 'cielo'\n\n// Both are the credential: the MerchantId is the affiliation number and the\n// MerchantKey is shown once, at generation. Only the key is masked, so a\n// merchant can check the id it pasted.\nexport const CIELO_FIELDS: ConnectorField[] = [\n { key: 'merchantId', label: 'Merchant ID', type: 'text', secret: true, placeholder: 'Cielo → Gestão API → Credencial API' },\n { key: 'merchantKey', label: 'Merchant Key', type: 'password', placeholder: 'Mostrada uma única vez, ao gerar' },\n]\n\nconst METHOD_LABELS: Record<string, string> = {\n CreditCard: 'Crédito',\n DebitCard: 'Débito',\n Pix: 'Pix',\n}\n\nexport const CIELO_SETTINGS = [\n methodsSetting([\n { value: 'CreditCard', label: METHOD_LABELS.CreditCard },\n { value: 'DebitCard', label: METHOD_LABELS.DebitCard },\n { value: 'Pix', label: METHOD_LABELS.Pix },\n ]),\n SETTLE_ON_SETTING,\n]\n\nconst store = createConnectionStore(CIELO_CONNECTOR_ID, {\n fields: CIELO_FIELDS,\n settings: CIELO_SETTINGS,\n})\n\nexport const cieloConnectorDef: ConnectorDefinition = {\n id: CIELO_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Cielo',\n description: 'Traga para o Financeiro tudo que entrou na Cielo — crédito, débito e Pix — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n // The catalogue carries no `cielo` row yet, so the mark is declared here.\n logoUrl: 'https://assets.fayz.ai/connectors/cielo.jpg',\n category: 'payments',\n authKind: 'api-key',\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://developercielo.github.io/manual/cielo-ecommerce',\n providerInstall: { url: 'https://www.cielo.com.br/' },\n permissions: receivablePermissions('Cielo'),\n fields: CIELO_FIELDS,\n settings: CIELO_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que a Cielo recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem na Cielo.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n CIELO_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(CIELO_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n // Reached only after the vault accepted the pair; neither half arrives here.\n saveConnection: async () => {\n await store.save({ active: true })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","// The second one that cannot be a button, for the same reason as Cielo and a\n// different protocol: Stone Connect authenticates with a Secret Key issued to\n// the merchant, sent as HTTP Basic. Stone's Partner Hub does have an\n// application-level pair, but it onboards merchants — it is not a consent screen\n// a restaurant is sent to. ../acquirers/ACQUIRERS.md keeps the evidence and what\n// would have to be true for this to become one button.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n type ConnectorField,\n} from '@fayz-ai/core'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const STONE_CONNECTOR_ID = 'stone'\n\n// The Stone Code is the merchant's affiliation number — which store, not a\n// secret — so it stays readable on the row. The Secret Key is the credential.\nexport const STONE_FIELDS: ConnectorField[] = [\n { key: 'stoneCode', label: 'Stone Code', type: 'text', placeholder: 'Número de afiliação da sua loja' },\n { key: 'secretKey', label: 'Secret Key', type: 'password', placeholder: 'Stone → painel → chaves de API' },\n]\n\nconst METHOD_LABELS: Record<string, string> = {\n credit: 'Crédito',\n debit: 'Débito',\n pix: 'Pix',\n voucher: 'Vale-refeição',\n}\n\nexport const STONE_SETTINGS = [\n methodsSetting([\n { value: 'credit', label: METHOD_LABELS.credit },\n { value: 'debit', label: METHOD_LABELS.debit },\n { value: 'pix', label: METHOD_LABELS.pix },\n { value: 'voucher', label: METHOD_LABELS.voucher },\n ]),\n SETTLE_ON_SETTING,\n]\n\nconst store = createConnectionStore(STONE_CONNECTOR_ID, {\n fields: STONE_FIELDS,\n settings: STONE_SETTINGS,\n})\n\nexport const stoneConnectorDef: ConnectorDefinition = {\n id: STONE_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Stone',\n description: 'Traga para o Financeiro tudo que entrou na Stone — crédito, débito, Pix e vale — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n category: 'payments',\n authKind: 'api-key',\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://docs.stone.com.br',\n permissions: receivablePermissions('Stone'),\n fields: STONE_FIELDS,\n settings: STONE_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que a Stone recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem na Stone.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n STONE_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(STONE_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n saveConnection: async (values) => {\n await store.save({\n active: true,\n providerAccountKey: values.stoneCode ?? null,\n settings: { stoneCode: values.stoneCode },\n })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","import * as React from 'react'\nimport {\n SettingsForm, useConnectors, ConnectorMark, StateChip, ConnectorDetail,\n openConnectorsPanel, useConnectorsPanelAvailable, type UnifiedConnector,\n} from '@fayz-ai/admin'\nimport { tl } from '@fayz-ai/core'\nimport { Button, Badge } from '@fayz-ai/ui'\n\n// The acquirers that sell card machines; Stripe charges online and stays out.\nconst ACQUIRERS = ['stone', 'cielo', 'pagbank', 'mercadopago']\n// On the shelf with no connector yet: listed so the operator sees their\n// acquirer is known, not missing.\nconst LOGOS = 'https://assets.fayz.ai/connectors'\nconst UPCOMING: Array<{ slug: string; name: string; logo: string }> = [\n { slug: 'rede', name: 'Rede', logo: `${LOGOS}/rede.png` },\n { slug: 'getnet', name: 'Getnet', logo: `${LOGOS}/getnet.png` },\n { slug: 'sipag', name: 'Sipag', logo: `${LOGOS}/sipag.png` },\n { slug: 'safrapay', name: 'SafraPay', logo: `${LOGOS}/safrapay.jpg` },\n]\n\n/**\n * Maquininhas (TEF / POS): how the counter charges a card, and which acquirer\n * each machine belongs to. The acquirer rows are the connectors hub filtered,\n * the same rows and connect journey as the store's Pagamentos.\n */\nexport function CardMachinesSettings() {\n const { connectors } = useConnectors({ hostPluginId: 'financial', includeGrants: false })\n const panelAvailable = useConnectorsPanelAvailable()\n const [selected, setSelected] = React.useState<UnifiedConnector | null>(null)\n const acquirers = React.useMemo(\n () => (connectors ?? []).filter((c) => ACQUIRERS.includes(c.slug))\n .sort((a, b) => ACQUIRERS.indexOf(a.slug) - ACQUIRERS.indexOf(b.slug)),\n [connectors],\n )\n const open = (c: UnifiedConnector) => (panelAvailable ? openConnectorsPanel(c) : setSelected(c))\n\n return (\n <div className=\"space-y-4\">\n <SettingsForm\n pending\n description={tl('How the counter charges a card in each unit, and which acquirer receives it.',\n 'Como o caixa cobra no cartão em cada unidade, e qual adquirente recebe.')}\n defaults={{ 'card_machines.mode': 'pos', 'card_machines.auto_map': true }}\n sections={[{\n title: tl('How the counter charges', 'Como o caixa cobra'),\n fields: [\n { key: 'card_machines.mode', type: 'select', scope: 'unit', label: tl('Card machine', 'Maquininha'), options: [\n { value: 'pos', label: tl('POS — standalone, the operator types the amount', 'POS — avulsa, o operador digita o valor') },\n { value: 'tef', label: tl('TEF — integrated, the amount goes from the till', 'TEF — integrada, o valor sai do caixa') },\n { value: 'off', label: tl('No card machine', 'Sem maquininha') },\n ] },\n { key: 'card_machines.auto_map', type: 'boolean', scope: 'unit', label: tl('Map new terminals automatically', 'Mapear terminais novos automaticamente') },\n ],\n }]}\n />\n\n <div>\n <h3 className=\"px-1 pb-1 pt-4 text-sm font-semibold\">{tl('Acquirers', 'Adquirentes')}</h3>\n <ul className=\"divide-y rounded-card border bg-card shadow-sm\">\n {acquirers.map((c) => {\n const live = c.state === 'connected'\n return (\n <li key={c.id} className=\"flex items-center gap-3 p-4\">\n <ConnectorMark connector={c} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium\">{c.name.split(' · ')[0]}</span>\n <StateChip state={c.state} />\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {live\n ? tl('Active: sales on its machines are reconciled.', 'Ativa: as vendas nas maquininhas dela são conciliadas.')\n : tl('Inactive: connect to bring its sales and fees in.', 'Inativa: conecte para trazer as vendas e as taxas.')}\n </span>\n </span>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => open(c)}\n className=\"font-normal whitespace-normal shrink-0 rounded-input border px-3 py-1.5 text-sm font-medium transition-colors hover:bg-muted\">\n {live ? tl('Configure', 'Configurar') : tl('Connect', 'Conectar')}\n </Button>\n </li>\n )\n })}\n {UPCOMING.map((a) => (\n <li key={a.slug} className=\"flex items-center gap-3 p-4\">\n <img src={a.logo} alt=\"\" width={40} height={40} loading=\"lazy\"\n className=\"h-10 w-10 shrink-0 rounded-lg border bg-white object-contain\" />\n <span className=\"min-w-0 flex-1 font-medium text-muted-foreground\">{a.name}</span>\n <Badge variant=\"secondary\">{tl('Coming soon', 'Em breve')}</Badge>\n </li>\n ))}\n </ul>\n </div>\n\n <ConnectorDetail connector={selected} open={!!selected} onOpenChange={(o) => { if (!o) setSelected(null) }} />\n </div>\n )\n}\n","import { defineSettingsTab } from '@fayz-ai/admin'\nimport type * as React from 'react'\nimport { tl } from '@fayz-ai/core'\nimport { CardMachinesSettings } from './CardMachinesSettings'\n\n// V1 financial settings with no V2 engine behind them yet. Read-only.\nexport const financialV1SettingsTabs = [\n defineSettingsTab({\n id: 'financial-price-variations',\n label: tl('Price variations', 'Variações de preço'),\n icon: 'Percent',\n section: 'financial',\n pending: true,\n defaults: { 'price_variation.type': 'discount', 'price_variation.value_type': 'percentage', 'price_variation.first_appointment_only': false },\n sections: [{\n description: tl('Discount or surcharge rules filtered by category, professional, partnership, unit and service — they arrive with price calculation.',\n 'Regras de desconto ou acréscimo por categoria, profissional, parceria, unidade e serviço — chegam com o cálculo de preço.'),\n fields: [\n { key: 'price_variation.type', type: 'select', label: tl('Type', 'Tipo'), options: [\n { value: 'discount', label: tl('Discount', 'Desconto') }, { value: 'addition', label: tl('Surcharge', 'Acréscimo') },\n ] },\n { key: 'price_variation.value_type', type: 'select', label: tl('Value in', 'Valor em'), options: [\n { value: 'percentage', label: '%' }, { value: 'fixed', label: 'R$' },\n ] },\n { key: 'price_variation.first_appointment_only', type: 'boolean', label: tl('First attendance only', 'Apenas para o primeiro atendimento') },\n ],\n }],\n }),\n {\n id: 'financial-pos-methods',\n label: tl('Card machines (TEF / POS)', 'Maquininhas (TEF / POS)'),\n icon: 'Nfc',\n section: 'financial' as const,\n keywords: ['TEF', 'POS', tl('Card machine', 'Maquininha'), tl('Acquirer', 'Adquirente'), 'Stone', 'Cielo', 'PagBank', 'Mercado Pago', 'Rede', 'Getnet'],\n component: CardMachinesSettings as unknown as React.ComponentType<unknown>,\n },\n]\n","import React from 'react'\nimport type { PluginManifest } from '@fayz-ai/core'\nimport { registerTranslations } from '@fayz-ai/core'\nimport { PluginSettingsPanel } from '@fayz-ai/admin'\nimport { financialRegistries } from '../data/registries'\nimport { financialLocales } from '../locales'\nimport { financialZoneWidgets } from '../components/financialZoneWidgets'\n\n// ---------------------------------------------------------------------------\n// Só as configurações que RECEBER exige — sem o resto do Financeiro.\n//\n// A loja precisa de conta e forma de pagamento para o modal de recebimento ter\n// o que perguntar. Não precisa de plano de contas, centro de custo, comissão ou\n// conciliação: uma loja que ainda não faz escrituração não sabe o que fazer com\n// eles, e um módulo cheio de telas que o lojista não usa é o mesmo que nenhuma.\n//\n// A alternativa era montar o `plugin-financial` inteiro. Ela resolve o mesmo\n// problema e traz junto seis telas que ninguém pediu — e a tela de recebíveis,\n// que é a que mais parece o que o lojista quer e é a que mais confunde, porque\n// duplica o que a própria lista de pedidos já mostra.\n//\n// O DIA EM QUE A LOJA QUISER O MÓDULO INTEIRO, ela troca este manifesto pelo\n// `createFinancialPlugin()`. Os dados são os mesmos tabelas — nada aqui é uma\n// segunda cópia de nada, e por isso a troca não migra coisa alguma.\n// ---------------------------------------------------------------------------\n\n/** As quatro que o recebimento toca, e a ordem em que se configuram. */\nconst RECEIVING_REGISTRIES = ['bank-accounts', 'payment-method-types', 'payment-methods', 'card-brands']\n\nexport interface FinancialSettingsPluginOptions {\n /**\n * Outras registries do host, se ele tiver. Nada é acrescentado por padrão: o\n * ponto deste manifesto é o que ele NÃO traz.\n */\n extraRegistries?: typeof financialRegistries\n}\n\nexport function createFinancialSettingsPlugin(\n options?: FinancialSettingsPluginOptions,\n): PluginManifest {\n // Os textos do modal e das abas vêm daqui. `registerTranslations` mescla, então\n // registrar de novo num app que já tem o módulo inteiro não custa nada.\n registerTranslations(financialLocales)\n\n const registries = [\n ...financialRegistries.filter((r) => RECEIVING_REGISTRIES.includes(r.id)),\n ...(options?.extraRegistries ?? []),\n ]\n\n const SettingsTab: React.FC = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Pagamentos',\n registries,\n hostPluginId: 'financial',\n routeBase: '/settings/financial',\n })\n SettingsTab.displayName = 'FinancialReceivingSettingsTab'\n\n return {\n id: 'financial',\n name: 'Pagamentos',\n icon: 'DollarSign',\n version: '1.0.0',\n scope: 'universal',\n defaultEnabled: true,\n // Sem `navigation` e sem `routes`: este manifesto não põe nada no rail. Ele\n // existe para que Configurações tenha onde cadastrar conta e forma de\n // pagamento, e para nada além disso.\n navigation: [],\n routes: [],\n widgets: financialZoneWidgets,\n registries,\n settings: [\n {\n id: 'financial',\n label: 'Pagamentos',\n icon: 'DollarSign',\n component: SettingsTab as unknown as React.ComponentType<unknown>,\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n locales: financialLocales,\n }\n}\n","import React from 'react'\nimport type { PluginManifest, PluginRegistryDef, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { EntityLookupMap } from '@fayz-ai/admin'\nimport { resolveConfig } from './config'\nimport { createFinancialDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedFinancialConfig } from './context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { NotaFiscalModel } from '@fayz-ai/financial/domain/nota-fiscal'\nimport { createFinancialStore, createSafeFinancialProvider } from '@fayz-ai/financial/store'\nimport { lazyComponent, registerTranslations, registerMessageDefaults } from '@fayz-ai/core'\nimport { buildFinancialDomainEvents, buildFinancialMessageDefaults } from './lib/message-events'\nimport { financialZoneWidgets } from './components/financialZoneWidgets'\nimport { financialRegistries, financialAccountEntity } from './data/registries'\n\n/** Cadastros → Contas. Sob `/registry/*` porque é o prefixo que a rubrica\n * \"Cadastros\" do rail recolhe em todo ofício. */\nimport { ACCOUNTS_ROUTE } from './lib/routes'\nimport { financialSetupGuides } from './lib/setup-guides'\nimport { buildFinancialOnboarding } from './lib/onboarding'\nimport { CashSessionHeaderControl } from './components/CashSessionHeaderControl'\nimport { financialLocales } from './locales'\nimport { buildFinancialAnalyticsCards } from './lib/analytics-cards'\nimport { stripeConnectorDef } from './integrations/stripe/connectorDef'\nimport { mercadoPagoConnectorDef } from './integrations/mercadopago/connectorDef'\nimport { pagBankConnectorDef } from './integrations/pagbank/connectorDef'\nimport { cieloConnectorDef } from './integrations/cielo/connectorDef'\nimport { stoneConnectorDef } from './integrations/stone/connectorDef'\nimport { PluginSettingsPanel, createCrudPage } from '@fayz-ai/admin'\nimport { MIGRATIONS } from './migrations'\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 goals: string\n giftCards: string\n cardsOverview: string\n cardsReconciliation: string\n notasFiscais: string\n}\n\nexport interface ItemTypeOption {\n value: string\n label: string\n icon?: string\n}\n\n/**\n * Provider-neutral fiscal capability. The Financial plugin owns the document;\n * an addon supplies the gateway and tells the host which journey is available.\n */\nexport interface FinancialFiscalProviderConfig {\n label: string\n models: NotaFiscalModel[]\n /** NFC-e providers derive the legal payload from an order, never a typed total. */\n requiresOrder?: boolean\n}\n\nexport interface FinancialPluginOptions {\n /** Where the module's sub-nav lives. The views already read it; only the\n * option was missing, so an app asking for 'sidebar' failed to compile. */\n moduleNav?: 'rail' | 'tabs' | 'sidebar'\n modules?: {\n payables?: boolean\n receivables?: boolean\n cashRegisters?: boolean\n statements?: boolean\n commissions?: boolean\n cards?: boolean\n /** Metas mensais por unidade, em três degraus. */\n goals?: boolean\n /** Vales-presente, lidos da loja e emitidos em lote pelo Financeiro. */\n giftCards?: boolean\n /** Bank reconciliation (conciliação). Defaults off — enable with a bank connector. */\n reconciliation?: boolean\n /** Notas fiscais (NF-e/NFC-e/NFS-e). Defaults off — opt-in per app. */\n notasFiscais?: boolean\n }\n labels?: Partial<FinancialPluginLabels>\n currency?: {\n code?: string\n locale?: string\n symbol?: string\n }\n navPosition?: number\n /**\n * Onde a sub-navegação do módulo aparece. Default: o que a shell decidir.\n * 'sidebar' não desenha sub-nav na página — o app assume que a sidebar lista\n * as views como filhas do item do módulo (ver ModuleNavVariant).\n */\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 /** Installed fiscal addon capability. Omit to keep local/manual tracking. */\n fiscalProvider?: FinancialFiscalProviderConfig\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/admin').EntityLookup\n\n /** App-owned registries shown under /settings/financial Properties. */\n settingsRegistries?: PluginRegistryDef[]\n\n /** Callback when user clicks a booking link on an invoice. Receives the order ID. */\n onBookingClick?: (orderId: string) => void\n\n /**\n * Which internal-nav links this APP gates, as `nav item id → feature id`.\n * Empty by default: the plugin ships no opinion about what is paid — packaging\n * is the app's decision, declared alongside its `permissions.ts` (RBAC) and\n * `billing.ts` (plan entitlements). An id absent from this map is never hidden\n * and never gated, in the nav OR in the content.\n *\n * {@link FINANCIAL_NAV_FEATURES} is an opt-in preset of the `fin_*` ids used\n * by the reference apps — spread the entries you actually want:\n *\n * ```ts\n * navFeatureMap: { reconciliation: FINANCIAL_NAV_FEATURES.reconciliation }\n * ```\n */\n navFeatureMap?: Record<string, string>\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\n\n\n/**\n * OPT-IN preset of feature ids for the financial sub-modules — a naming\n * convention offered to apps, NOT a default. Nothing here is applied unless an\n * app passes the entries it wants through `options.navFeatureMap`, because what\n * is paid is a product decision that belongs to the app (its `permissions.ts` +\n * `billing.ts`), never to the plugin.\n */\nexport const FINANCIAL_NAV_FEATURES = {\n reconciliation: 'fin_reconciliation',\n cards: 'fin_cards',\n commissions: 'fin_commissions',\n statements: 'fin_statements',\n receivables: 'fin_receivables',\n payables: 'fin_payables',\n 'cash-registers': 'fin_cash_registers',\n} as const satisfies Record<string, string>\n\n\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialPlugin(options?: FinancialPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(financialLocales)\n // O texto sugerido para cada fato do financeiro. Os FATOS vão no manifesto\n // (`events`) — automações, integrações e auditoria leem o mesmo contrato.\n registerMessageDefaults(buildFinancialMessageDefaults())\n\n const provider = options?.dataProvider ?? createSafeFinancialProvider()\n const store = createFinancialStore(provider)\n const dashboardWidgets = createFinancialDashboardWidgets({ config, provider, store })\n const registries = [...financialRegistries, ...(options?.settingsRegistries ?? [])]\n\n // UMA PORTA SÓ. O cadastro de Contas ganhou tela própria em Cadastros, então\n // ele sai da aba de propriedades do Financeiro: duas portas para o mesmo\n // cadastro é a duplicação que o rail existe para evitar, e a de Configurações\n // era a mais difícil de achar das duas.\n // Bank accounts live under Cadastros; commission rules have their own screen (Comissões).\n const settingsRegistries = registries.filter((r) => r.id !== 'bank-accounts' && r.id !== 'commission-rules')\n\n const AccountsRegistryPage: React.ComponentType<unknown> =\n createCrudPage(financialAccountEntity, { feature: 'financial' }) as React.ComponentType<unknown>\n AccountsRegistryPage.displayName = 'FinancialAccountsRegistryPage'\n\n // Per-person statement tab (account_central-style): bound to this plugin's provider.\n const PersonStatementBound: React.FC<any> = (props) =>\n React.createElement(PersonStatementWidget, { person: props.item, provider, config })\n PersonStatementBound.displayName = 'FinancialPersonStatement'\n const SupplierFinancialSettingsBound: React.FC<any> = (props) =>\n React.createElement(SupplierFinancialSettings, { person: props.item, provider })\n SupplierFinancialSettingsBound.displayName = 'FinancialSupplierSettings'\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(FinancialPage, { config, provider, store, registries })\n\n // A porta de \"lançar uma conta a pagar\", aberta em toda rota do app. Mounted\n // on every route but not needed for the first paint: its code (the payable\n // agent, ~40 KB with the invoice form it opens) arrives right after.\n const AgentMount = lazyComponent(() =>\n import('./views/payable-agent').then((m) => m.createFinancialAgentMount({ config, provider })))\n\n return {\n id: 'financial',\n defaultAgentRole: 'finance',\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 // The parts of this plugin a plan can permit separately (#281, ADR 0025).\n //\n // This is the module the decision was written about: the two-leg ledger is\n // what every customer needs and what makes the plugin worth installing;\n // bank reconciliation is what some of them pay for. Without a facet the\n // only choices were to give the paid half away or to split one coherent\n // domain into two plugins with a seam down the middle of it.\n //\n // The grain matters: `app.plan_grants` and `app.tenant_plugins` are both\n // keyed on (plugin, facet), so a plan permits a facet and a tenant has one\n // through the same predicate. A facet is not a feature flag — it is what\n // somebody is entitled to.\n facets: [\n {\n id: 'ledger',\n label: config.labels.pageTitle,\n description: 'Lançamentos, contas a pagar e a receber, e o razão de duas pernas.',\n includedWithPlugin: true,\n },\n {\n id: 'reconciliation',\n label: 'Conciliação bancária',\n description: 'Importa o extrato e casa cada linha com o lançamento que já existe.',\n },\n {\n id: 'dre',\n label: 'DRE e fluxo de caixa',\n description: 'Demonstrativo de resultado e projeção de caixa a partir do razão.',\n },\n ],\n // Os FATOS do financeiro — só expostos enquanto o módulo está ATIVO.\n events: buildFinancialDomainEvents(),\n // The plugin owns ALL of its SQL and says so: what installing it provisions\n // is this list, byte-for-byte the files under src/migrations (embed barrel).\n // Loose SQL was the standing contract violation (DECISIONS 2026-07-06).\n migrations: MIGRATIONS.map((m) => ({\n id: `financial-${m.id}`,\n version: '1.0.0',\n sql: m.sql,\n description: m.id,\n })),\n // O caixa é do balcão, não do módulo: quem cobra está na agenda, na fila e\n // na fatura, e sair dessas telas para abrir a gaveta é o atrito que o V1 não\n // tem — lá é um ícone no cabeçalho, de qualquer tela.\n headerControls: config.modules.cashRegisters\n ? [{\n id: 'financial.cash-session',\n component: (() =>\n React.createElement(CashSessionHeaderControl, { config, provider, store })\n ) as React.ComponentType<unknown>,\n order: 90,\n permission: { feature: 'financial', action: 'read' as const },\n }]\n : [],\n\n declaredFeatures: [\n { id: 'financial', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.receivables ? [{ id: 'financial.receivables', label: config.labels.receivables, group: config.labels.pageTitle }] : []),\n ...(config.modules.payables ? [{ id: 'financial.payables', label: config.labels.payables, group: config.labels.pageTitle }] : []),\n ...(config.modules.commissions ? [{ id: 'financial.commissions', label: config.labels.commissions, group: config.labels.pageTitle }] : []),\n ],\n // Recurring monthly quota — counts financial movement rows created this\n // month (invoices write one per installment; quick transactions one, or two\n // for a transfer).\n declaredLimits: [\n { key: 'movements_month', label: 'Financial movements this month', table: 'plg_financial_movements', period: 'month' },\n ],\n queryEntities: [\n {\n key: 'financial:invoices',\n entity: {\n name: 'Invoice',\n namePlural: 'Invoices (receipts REC- / payables PAG-)',\n icon: 'Receipt',\n permission: { feature: 'financial', action: 'read' },\n fields: [\n { key: 'number', label: 'Number (REC-/PAG-)', type: 'text', searchable: true },\n { key: 'direction', label: 'Flow (receivable/payable)', type: 'text' },\n { key: 'counterpartyName', label: 'Counterparty', type: 'text', searchable: true },\n { key: 'total', label: 'Amount', type: 'number' },\n { key: 'paid', label: 'Paid', type: 'number' },\n { key: 'balance', label: 'Balance', type: 'number' },\n { key: 'status', label: 'Status', type: 'text' },\n { key: 'competenceDate', label: 'Competence date', type: 'text' },\n { key: 'nextDueDate', label: 'Next due date', type: 'text' },\n ],\n data: {\n // v_invoice_balances agrupa POR ORDER e descarta o que não nasceu de\n // uma venda — o agente ficava cego para toda conta a pagar avulsa.\n table: 'v_financial_invoice_balances',\n tenantScoped: true,\n searchColumns: ['number', 'counterparty_name', 'description'],\n },\n },\n },\n {\n key: 'financial:movements',\n entity: {\n name: 'Financial movement',\n namePlural: 'Financial movements (installment ledger)',\n icon: 'Banknote',\n permission: { feature: 'financial', action: 'read' },\n fields: [\n { key: 'direction', label: 'Direction', type: 'text' },\n { key: 'movementKind', label: 'Kind (bill/payment)', type: 'text' },\n { key: 'amount', label: 'Amount', type: 'number' },\n { key: 'paidAmount', label: 'Paid amount', type: 'number' },\n { key: 'status', label: 'Status', type: 'text' },\n { key: 'dueDate', label: 'Due date', type: 'text' },\n { key: 'paymentDate', label: 'Payment date', type: 'text' },\n { key: 'installmentNumber', label: 'Installment', type: 'number' },\n { key: 'cardInstallments', label: 'Card installments', type: 'number' },\n { key: 'createdAt', label: 'Created at', type: 'text' },\n ],\n data: {\n table: 'plg_financial_movements',\n tenantScoped: true,\n },\n },\n },\n ],\n declaredRpcs: [\n {\n name: 'agent_financial_mark_payment_received',\n kind: 'write' as const,\n description:\n 'Guarded settle: invoices the order via fn_invoice_from_order (installments for credit card) and marks the receivable paid, audited with the acting user.',\n audits: true,\n },\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 6,\n label: config.labels.pageTitle,\n route: '/financial',\n icon: 'DollarSign',\n permission: { feature: 'financial', action: 'read' as const },\n },\n // CONTAS EM CADASTROS, que é onde o V1 a põe (Cadastros → Contas).\n //\n // A tela já existia — como aba de `/settings/financial` —, e quatro\n // cliques atrás de Configurações é onde um cadastro que a recepção abre\n // toda semana não devia estar. Em `/registry/*` de propósito: a rubrica\n // \"Cadastros\" do rail recolhe esse prefixo como pega-tudo, então a linha\n // nasce no lugar certo em todo ofício sem editar preset nenhum.\n {\n section: options?.navSection ?? 'main',\n position: (options?.navPosition ?? 6) + 0.1,\n label: 'Contas',\n route: ACCOUNTS_ROUTE,\n icon: 'Landmark',\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 path: ACCOUNTS_ROUTE,\n component: AccountsRegistryPage,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n widgets: [\n {\n id: 'financial-supplier-settings',\n zone: 'person.detail.financial-settings',\n component: SupplierFinancialSettingsBound as unknown as React.ComponentType<unknown>,\n order: 0,\n permission: { feature: 'financial', action: 'read' as const },\n },\n {\n id: 'financial-person-statement',\n zone: 'person.detail.financial',\n component: PersonStatementBound as unknown as React.ComponentType<unknown>,\n order: 0,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ...financialZoneWidgets,\n {\n // Headless. Publica ao assistente a porta de lançar uma conta a pagar\n // em QUALQUER rota — ver payable-agent.tsx. `shell.topbar.end` é a\n // única zona global do shell que de fato é renderizada e que fica FORA\n // do switch de rota (mesma leitura do pill do plugin-scribe).\n id: 'financial-agent-mount',\n zone: 'shell.topbar.end',\n component: AgentMount as unknown as React.ComponentType<unknown>,\n order: -20,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n dashboardWidgets,\n analyticsCards: buildFinancialAnalyticsCards(config, provider),\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: 'Quanto faturamos hoje?' },\n { label: \"Qual o faturamento deste mês?\" },\n { label: \"Compare o faturamento desta semana com a anterior\" },\n ],\n },\n // (removed) `createInvoice`. It declared mode:'persist' with no handler, no\n // dataTools entry and no RPC, so buildAgentToolset filtered it out — a\n // capability advertised to nobody. It was not given an RPC because its\n // three parameters (contact, amount, description) cannot express what\n // CreateInvoiceInput requires: `direction` (payable vs receivable),\n // `invoiceDate`, and `installments[]` with their due dates. An RPC would\n // have to invent all three, and a bill with a guessed due date is worse\n // than no bill. Creating an invoice stays the form's job — /financial\n // #payables-new, which the agent can navigate to.\n {\n id: 'financial.mark-payment-received',\n name: 'markPaymentReceived',\n description:\n 'Marks an order/appointment as paid: invoices it (with installments for credit card, e.g. \"cartão 2x\") and settles the receivable. Resolve the booking or order id via search tools first.',\n icon: 'BadgeDollarSign',\n mode: 'persist' as const,\n execution: { plane: 'server' as const, kind: 'rpc' as const, rpc: 'agent_financial_mark_payment_received' },\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n booking_id: { type: 'string' as const, description: 'Appointment id (alternative to order_id)' },\n order_id: { type: 'string' as const, description: 'Order id' },\n method: {\n type: 'string' as const,\n description: 'Payment method',\n enum: ['cash', 'pix', 'credit_card', 'debit_card', 'transfer'],\n },\n installments: { type: 'number' as const, description: 'Credit-card installments (1-12), e.g. 2 for \"cartão 2x\"' },\n },\n required: ['method'],\n },\n suggestions: [\n { label: 'Marcar o atendimento como pago no cartão em 2x' },\n ],\n permission: { feature: 'financial.receivables', action: 'update' as const },\n },\n {\n id: 'financial.list-payables',\n name: 'listPayables',\n description: 'Lists outstanding payables/bills.',\n icon: 'FileDown',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n status: { type: 'string' as const, enum: ['pending', 'overdue', 'paid'] },\n contact: { type: 'string' as const, description: 'Filter by contact name' },\n },\n },\n permission: { feature: 'financial', action: 'read' as const },\n suggestions: [\n { label: 'Mostre as contas em atraso' },\n { label: 'Quais contas vencem esta semana?' },\n ],\n },\n ],\n registries,\n settings: [\n ...financialV1SettingsTabs,\n {\n id: 'financial',\n label: 'Financial',\n icon: 'DollarSign',\n // Mesmo grupo da aba de Comissões: dois cartões do mesmo assunto lado a\n // lado, e a corrida de \"Plugins\" não é partida ao meio.\n group: 'Financeiro',\n section: 'financial',\n // V1 lists these as settings of their own, not as tabs inside Financeiro —\n // and with all of them listed, a \"Financeiro\" line under the Financeiro\n // section would only repeat the heading.\n itemsOnly: true,\n aliases: [{ id: 'financial-general', href: '/settings/financial/_general' }],\n items: [\n { id: '_general', label: 'Financial preferences', icon: 'SlidersHorizontal', keywords: ['Financeiro', 'Caixa', 'Fechamento', 'Comissões'] },\n { id: '_integrations', label: 'Financial connectors', icon: 'Plug', keywords: ['Stripe', 'Mercado Pago', 'PagBank', 'Cielo', 'Stone', 'Banco'] },\n { id: 'payment-methods', label: 'Payment methods', icon: 'CreditCard' },\n { id: 'chart-of-accounts', label: 'Chart of accounts', icon: 'FolderTree' },\n { id: 'cost-centers', label: 'Cost centers', icon: 'Target' },\n { id: 'price-tables', label: 'Price tables', icon: 'Tags' },\n { id: 'discount-reasons', label: 'Discount reasons', icon: 'Tag' },\n { id: 'payment-method-types', label: 'Payment method types', icon: 'Tags' },\n { id: 'card-brands', label: 'Card brands', icon: 'CreditCard' },\n ],\n component: (() => {\n const FinancialSettingsTab: React.FC = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Financial Settings',\n generalSettings: React.createElement(FinancialGeneralSettings, { config }),\n registries: settingsRegistries,\n hostPluginId: 'financial',\n routeBase: '/settings/financial',\n })\n FinancialSettingsTab.displayName = 'FinancialSettingsTab'\n return FinancialSettingsTab as unknown as React.ComponentType<unknown>\n })(),\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n // A regra de comissão é POLÍTICA, e por isso ganha aba própria em vez de\n // uma linha em Propriedades do Financeiro.\n //\n // O CRUD genérico que ela era não alcançava critério, função, faixa nem\n // piso — deixava criar uma regra sem critério nenhum, que casa com tudo e\n // parece configurada. Como no V1, onde \"Regras de Comissões\" é um cartão\n // de Configurações e não uma tela do Financeiro: escrita uma vez por quem\n // manda, e não operação do dia. A APURAÇÃO continua no Financeiro.\n {\n id: 'financial-commissions',\n label: 'Comissões',\n icon: 'HandCoins',\n group: 'Financeiro',\n component: (() => {\n const CommissionRulesTab: React.FC = () =>\n React.createElement(CommissionRulesView, { provider })\n CommissionRulesTab.displayName = 'CommissionRulesTab'\n return CommissionRulesTab as unknown as React.ComponentType<unknown>\n })(),\n order: 11,\n // Quem configura comissão mexe no que a casa paga: é `manage`, não\n // `read`. `manage` é coringa e precisa chegar inteiro até aqui.\n permission: { feature: 'financial', action: 'manage' as const },\n },\n ],\n // Stripe is the first connector this module implements rather than merely\n // shelves — it stays in `integrations` too, because the union is what the\n // catalogue row joins on.\n // Stripe emits the receivable; the four below bring back what was actually\n // received, which is the other half of a conciliação. Mercado Pago and\n // PagBank broker the merchant's consent, so they ask for nothing; Cielo and\n // Stone issue their credential TO the merchant and have no consent flow to\n // broker — see src/integrations/acquirers/ACQUIRERS.md.\n connectors: [\n stripeConnectorDef,\n mercadoPagoConnectorDef,\n pagBankConnectorDef,\n cieloConnectorDef,\n stoneConnectorDef,\n ],\n // TecnoSpeed is live already — the openbanking addon's `plugbank`\n // connector IS this slug. AbacatePay and Pagar.me were named as what\n // having Financeiro should put on the shelf; Mercado Pago, Bling and Stone\n // come from the Fayz plugin page.\n integrations: ['tecnospeed', 'abacatepay', 'pagarme', 'stripe', 'mercadopago', 'bling', 'stone'],\n // Como cada tela do Financeiro entra em pé — lido pelo assistente.\n onboarding: { program: buildFinancialOnboarding() },\n setupGuides: financialSetupGuides,\n locales: financialLocales,\n }\n}\n\n// The published names this plugin always had; their home is now @fayz-ai/financial.\nexport { createSafeFinancialProvider } from '@fayz-ai/financial/store'\nexport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nexport type { ResolvedFinancialConfig } from './context'\nexport type { GiftCard, GiftCardState, GiftCardQuery, IssueGiftCardsInput } from '@fayz-ai/financial/domain/gift-card'\nexport type { NotaFiscal, NotaFiscalModel, NotaFiscalStatus, NotaFiscalQuery, CreateNotaFiscalInput } from '@fayz-ai/financial/domain/nota-fiscal'\nimport { financialV1SettingsTabs } from './settings/v1-settings'\n\n// Code loads when it is first drawn, not with the app. Pages use React.lazy\n// (the shell's route boundary shows the page skeleton); anything that may\n// render elsewhere uses lazyComponent, which carries its own boundary.\nconst FinancialPage = React.lazy(() => import('./views/FinancialPage').then((m) => ({ default: m.FinancialPage })))\nconst FinancialGeneralSettings = lazyComponent(() => import('./components/FinancialGeneralSettings').then((m) => m.FinancialGeneralSettings))\nconst CommissionRulesView = lazyComponent(() => import('./views/CommissionRulesView').then((m) => m.CommissionRulesView))\nconst PersonStatementWidget = lazyComponent(() => import('./components/PersonStatementWidget').then((m) => m.PersonStatementWidget))\nconst SupplierFinancialSettings = lazyComponent(() => import('./components/PersonStatementWidget').then((m) => m.SupplierFinancialSettings))\n// Seedable in-memory provider — apps pass a seed to render the module populated\n// (demo/dogfood data) instead of the empty onboarding state.\nexport { createMockFinancialProvider } from '@fayz-ai/financial/data/mock'\nexport { FINANCIAL_INVOICE_ZONES } from './lib/routes'\nexport type { MockFinancialSeed, MockFinancialProviderOptions } from '@fayz-ai/financial/data/mock'\n// (removido) O gatilho global de lançamento rápido saiu junto com a folha: o\n// cadastro de fatura é o único caminho, e ele é uma rota — um app que queira um\n// \"+\" global navega para /financial#payables-new.\n\n// O catálogo de fatos do financeiro — o mesmo contrato que webhook e auditoria\n// leem, disponível sem passar pelo manifesto.\nexport { buildFinancialDomainEvents, buildFinancialMessageDefaults } from './lib/message-events'\n\n// O modal de recebimento COM a sua casca de contexto, para telas fora do\n// Financeiro — a de pedidos da loja é a primeira. Ver o cabeçalho do arquivo:\n// `PaymentModal` sozinho quebra por falta de provider, e quebra de um jeito que\n// parece defeito do componente.\nexport { ReceivePaymentModal } from './components/ReceivePaymentModal'\n\n// O Financeiro reduzido às configurações que RECEBER exige — conta, forma de\n// pagamento, bandeira. Para um app que precisa registrar um recebimento e não\n// quer o módulo inteiro. Ver o cabeçalho do arquivo.\nexport { createFinancialSettingsPlugin } from './lib/settings-only'\nexport type { FinancialSettingsPluginOptions } from './lib/settings-only'\n\n// A conta do cliente com a sua casca, para a fila de check-in e qualquer tela\n// fora do Financeiro que precise decidir uma cobrança COM contexto.\nexport { ClientAccountModal, ClientAccountInline } from './components/ClientAccountModal'\nexport { ClientAccountPanel } from './views/ClientAccountPanel'\n"]}
1
+ {"version":3,"sources":["../src/config.ts","../src/lib/recent-transactions.ts","../src/views/dashboardWidgets.tsx","../src/lib/message-events.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/components/ReceivePaymentModal.tsx","../src/views/ClientAccountPanel.tsx","../src/components/ClientAccountModal.tsx","../src/components/financialZoneWidgets.ts","../src/components/ChartOfAccountsTree.tsx","../src/data/registries.ts","../src/lib/setup-guides.ts","../src/lib/onboarding.ts","../src/components/CashSessionHeaderControl.tsx","../src/lib/analytics-cards.ts","../src/integrations/stripe/connectorDef.tsx","../src/integrations/acquirers/shared.ts","../src/integrations/mercadopago/connectorDef.tsx","../src/integrations/pagbank/connectorDef.tsx","../src/integrations/cielo/connectorDef.tsx","../src/integrations/stone/connectorDef.tsx","../src/settings/CardMachinesSettings.tsx","../src/settings/v1-settings.ts","../src/lib/settings-only.ts","../src/index.ts"],"names":["React","CreditCardIcon","store","jsx","jsxs","Button","createSafeFinancialProvider","createFinancialStore","useTranslation","tree","Input","FileText","tl","T","useZustand","Fragment","methodsDetail","METHOD_LABELS","createConnectionStore","connectionStatus","settingsStatus","connectionSettings","fayzConnectorOAuth","connectionRuns","React8","Badge","registerTranslations","lazyComponent","PluginSettingsPanel"],"mappings":"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","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// O config do plugin, e os padrões dele.\n//\n// MÓDULO PRÓPRIO, e não `index.ts`, por uma razão de carregamento: as cascas\n// avulsas (`ReceivePaymentModal`, `ClientAccountInline`) precisam do mesmo\n// `resolveConfig`, e `index.ts` reexporta essas cascas. Importá-lo de lá fecha\n// um ciclo, e um ciclo aqui não dá erro de tipo nem de lint — dá uma TELA\n// BRANCA, porque `const DEFAULT_LABELS` ainda não foi inicializada quando o\n// outro lado do ciclo roda. Um arquivo sem ida e volta não tem esse estado.\n// ---------------------------------------------------------------------------\nimport type { FinancialPluginLabels, FinancialPluginOptions, ItemTypeOption } from './index'\nimport type { ResolvedFinancialConfig } from './context'\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 goals: 'Metas',\n giftCards: 'Gift Cards',\n cardsOverview: 'Overview',\n cardsReconciliation: 'Reconciliation',\n notasFiscais: 'Fiscal Invoices',\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 // O pacote é o terceiro catálogo da casa que atende: um bloco de sessões\n // vendido de uma vez. Só aparece onde há `entityLookups.package` instalado —\n // e, dentro dessas, só onde o catálogo tem linhas (useStockedItemTypes).\n { value: 'package', label: 'Package', icon: 'PackageCheck' },\n { value: 'product', label: 'Product', icon: 'Package' },\n { value: 'other', label: 'Other', icon: 'MoreHorizontal' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\n/**\n * O config COMPLETO a partir do que o app passou.\n *\n * Exportado porque as cascas avulsas (`ReceivePaymentModal`, `ClientAccountInline`)\n * precisam do MESMO objeto: montar um config à mão com os dois ou três campos\n * que a tela da vez lê é como uma tela embutida ali depois quebra, sem que o\n * tipo acuse — ver `STANDALONE_CONFIG`.\n */\nexport function 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 // Era opt-in porque a comissão era um cadastro que nada lia: o item de\n // menu só podia levar a uma tela vazia. Desde 009 existe apuração e desde\n // 012 existe borderô, e a tela mostra o que eles produziram — então o\n // motivo do opt-in acabou junto com a tela vazia.\n commissions: options?.modules?.commissions !== false,\n cards: options?.modules?.cards !== false,\n goals: options?.modules?.goals !== false,\n // Ligado como as outras: quando a loja não está instalada a própria tela\n // diz isso, então o item de menu nunca leva a um beco.\n giftCards: options?.modules?.giftCards !== false,\n // Opt-in: only shown when an app explicitly enables reconciliation (bank connector present).\n reconciliation: options?.modules?.reconciliation === true,\n // Opt-in: only shown when an app explicitly enables fiscal-invoice tracking.\n // LIGADA como as outras (`!== false`), e não opt-in. Estava em\n // `=== true`: quem não passasse a opção nunca via a tela, e o V1 tem\n // Notas Fiscais no menu do Financeiro desde sempre. A tela se explica\n // sozinha quando o provider não expõe notas, então ligá-la não deixa\n // ninguém diante de um beco.\n notasFiscais: options?.modules?.notasFiscais !== false,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n moduleNav: options?.moduleNav,\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 fiscalProvider: options?.fiscalProvider,\n onBookingClick: options?.onBookingClick,\n navFeatureMap: { ...options?.navFeatureMap },\n }\n}\n","import type { Invoice, InvoiceQuery } from '@fayz-ai/financial/domain/invoice'\n\n// Newest entered first. The list's default order (soonest due) put February's\n// bills in a widget called \"recent\". The due-date window keeps the read on the\n// indexed column instead of the tenant's whole history.\nexport const RECENT_TRANSACTIONS_QUERY: InvoiceQuery = { sort: 'recent', pageSize: 20 }\n\nconst iso = (d: Date) =>\n `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n\n/** Due dates from 90 days ago through the end of next month (local time). */\nexport function recentWindow(now = new Date()): { from: string; to: string } {\n return {\n from: iso(new Date(now.getFullYear(), now.getMonth(), now.getDate() - 90)),\n to: iso(new Date(now.getFullYear(), now.getMonth() + 2, 0)),\n }\n}\n\n/** One row per bill: a purchase in 12x would otherwise fill the widget alone. */\nexport function latestPerInvoice(lines: Invoice[], limit: number): Invoice[] {\n const seen = new Set<string>()\n const out: Invoice[] = []\n for (const line of lines) {\n const key = line.invoiceId ?? line.id\n if (seen.has(key)) continue\n seen.add(key)\n out.push(line)\n if (out.length === limit) break\n }\n return out\n}\n","import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle, CreditCard as CreditCardIcon, Eye, EyeOff } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation, resolveCurrency } from '@fayz-ai/core'\nimport {\n Button,\n KpiCard, ChartWidget, TableWidget, Card, CardHeader, CardTitle, CardContent, GoldCard,\n defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, useDashboardNavigate,\n} from '@fayz-ai/ui'\nimport { FinancialContextProvider, useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency, type ResolvedFinancialConfig } from '../context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { FinancialUIState } from '@fayz-ai/financial/store'\nimport type { Invoice } from '@fayz-ai/financial/domain/invoice'\nimport type { FinancialMovement } from '@fayz-ai/financial/domain/movement'\nimport { RECENT_TRANSACTIONS_QUERY, latestPerInvoice, recentWindow } from '../lib/recent-transactions'\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 // Money in a currency with no rate on file is outside every total: say so here, once.\n const left = (summary?.excluded ?? [])\n .map((x) => formatCurrency(x.balance || x.receivable - x.payable || x.inflow - x.outflow, resolveCurrency(currency, x.currency)))\n .join(' · ')\n const sub = left ? `Fora do total, sem câmbio disponível: ${left}` : t('financial.summary.allAccounts')\n return <KpiCard label={t('financial.summary.totalBalance')} icon=\"Wallet\" value={formatCurrency(summary?.totalBalance ?? 0, currency)} sub={loading ? undefined : sub} />\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 provider = useFinancialProvider()\n // Read locally, not through the store's `invoices`: that slice belongs to the\n // Contas a Pagar/Receber list, and a dashboard fetch written there replaced\n // the list's filtered page with these five rows.\n const [invoices, setInvoices] = React.useState<Invoice[]>([])\n useEffect(() => {\n let alive = true\n void provider.getInvoices({ ...RECENT_TRANSACTIONS_QUERY, dateRange: recentWindow() })\n .then((res) => { if (alive) setInvoices(latestPerInvoice(res.data, 5)) })\n .catch((error: unknown) => console.warn('[financial] recent transactions unavailable', error))\n return () => { alive = false }\n }, [provider])\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} emptyMessage={t('financial.summary.noTransactions')} />\n}\n\n// ---------------------------------------------------------------------------\n// HOME surface (B2C) — a phone-first money dashboard that reflows into cells on\n// desktop. These render on surface=\"home\" only; the plugin-home Resumo widgets\n// above are untouched. Same store/provider, so figures match the Financeiro\n// module (FAY-1233 mobile-summary logic, generalized into reusable widgets).\n// ---------------------------------------------------------------------------\n\n/** Human \"due in N days\" label from a YYYY-MM-DD due date. */\nfunction useDueLabel() {\n const t = useTranslation()\n return (dueDate: string): string => {\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n const due = new Date(`${dueDate}T00:00:00`)\n const days = Math.round((due.getTime() - today.getTime()) / 86_400_000)\n if (days < 0) return t('financial.home.overdueDays', { count: String(Math.abs(days)) })\n if (days === 0) return t('financial.home.dueToday')\n if (days === 1) return t('financial.home.dueTomorrow')\n return t('financial.home.dueInDays', { count: String(days) })\n }\n}\n\n/** Branded balance hero — Saldo + eye-toggle + clickable Entradas/Saídas pills.\n * Compact band (span-4): tight padding so it never becomes a tall empty block on\n * desktop. Pills deep-link into the Financeiro module (receivables / payables). */\nfunction BalanceHero() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const navigate = useDashboardNavigate()\n useEnsureSummary()\n const [hidden, setHidden] = React.useState(false)\n const money = (v: number | null | undefined) => (hidden ? '••••••' : formatCurrency(v ?? 0, currency))\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return (\n <GoldCard branded className=\"px-5 py-4 text-center md:px-8 md:py-5\">\n <p className=\"text-xs font-medium uppercase tracking-wide opacity-75\">{t('financial.home.balance')}</p>\n <div className=\"mt-0.5 flex items-center justify-center gap-2.5\">\n <span className=\"text-3xl font-bold tracking-tight tabular-nums md:text-4xl\">{money(summary?.totalBalance)}</span>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setHidden((h) => !h)}\n aria-label={hidden ? t('financial.home.showBalance') : t('financial.home.hideBalance')}\n className=\"font-normal rounded-full p-1.5 text-primary-foreground/80 transition-colors hover:bg-white/10\"\n >\n {hidden ? <EyeOff className=\"h-5 w-5\" /> : <Eye className=\"h-5 w-5\" />}\n </Button>\n </div>\n <div className=\"mx-auto mt-3 grid max-w-lg grid-cols-2 gap-3\">\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => navigate('/financial/receivables-list')}\n aria-label={t('financial.home.inflow')}\n className=\"font-normal whitespace-normal flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-emerald-500/90\">\n <ArrowUpRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.inflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(inflow)}</span>\n </span>\n </Button>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => navigate('/financial/payables-list')}\n aria-label={t('financial.home.outflow')}\n className=\"font-normal whitespace-normal flex cursor-pointer items-center gap-2 rounded-2xl bg-white/10 px-3 py-2 text-left transition-colors hover:bg-white/20\"\n >\n <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-rose-500/90\">\n <ArrowDownRight className=\"h-4 w-4 text-white\" />\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.outflow')}</span>\n <span className=\"block truncate text-sm font-semibold tabular-nums\">{money(outflow)}</span>\n </span>\n </Button>\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// HOME charts — spend-by-category (donut) + cash-flow (in vs out). Both read the\n// same provider/store as the module, so figures stay coherent. surface 'home'\n// only (the plugin-home Resumo keeps its own cash-flow chart untouched).\n// ---------------------------------------------------------------------------\n\n/** Provider-agnostic expense classifier: maps a movement's label to a spend\n * bucket by keyword (pt-BR + en). Checked in priority order; first hit wins. */\nconst SPEND_CATEGORIES: Array<{ key: string; keywords: string[] }> = [\n { key: 'subscriptions', keywords: ['netflix', 'spotify', 'prime video', 'disney', 'hbo', ' max', 'youtube', 'apple', 'assinatura', 'subscription'] },\n { key: 'groceries', keywords: ['supermercado', 'mercado', 'padaria', 'hortifruti', 'feira', 'açougue', 'grocery', 'market'] },\n { key: 'transport', keywords: ['uber', '99', 'taxi', 'posto', 'shell', 'ipiranga', 'combustível', 'gasolina', 'metrô', 'ônibus', 'transport', 'fuel'] },\n { key: 'dining', keywords: ['ifood', 'rappi', 'restaurante', 'outback', 'lanchonete', 'pizzaria', 'café', 'cafeteria', 'mcdonald', 'burger', 'food'] },\n { key: 'home', keywords: ['aluguel', 'condomínio', 'luz', 'enel', 'água', 'sabesp', 'internet', 'vivo', 'claro', 'gás', 'iptu', 'rent', 'utilit'] },\n { key: 'health', keywords: ['farmácia', 'farmacia', 'drogasil', 'drogaria', 'academia', 'smartfit', 'clínica', 'hospital', 'médico', 'saúde', 'gym', 'fitness', 'health', 'pharmac'] },\n { key: 'leisure', keywords: ['cinema', 'cinemark', 'ingresso', 'show', 'teatro', 'viagem', 'hotel', 'steam', 'leisure'] },\n { key: 'shopping', keywords: ['amazon', 'magalu', 'shopee', 'aliexpress', 'loja', 'shopping', 'zara', 'renner', 'store'] },\n]\n\nfunction categorizeSpend(notes: string | undefined): string {\n const s = (notes ?? '').toLowerCase()\n for (const c of SPEND_CATEGORIES) if (c.keywords.some((k) => s.includes(k))) return c.key\n return 'other'\n}\n\n/** \"Gastos por categoria\" — realized expenses grouped into a donut. */\nfunction SpendByCategoryChart() {\n const t = useTranslation()\n const provider = useFinancialProvider()\n const [rows, setRows] = React.useState<Array<{ name: string; value: number }>>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const res = await provider.getMovements({ status: 'paid', direction: 'debit' })\n if (!alive) return\n const totals = new Map<string, number>()\n for (const m of res.data) {\n if (m.movementKind === 'transfer') continue\n const key = categorizeSpend(m.notes)\n totals.set(key, (totals.get(key) ?? 0) + (m.paidAmount || m.amount))\n }\n setRows(\n [...totals.entries()]\n .sort((a, b) => b[1] - a[1])\n .map(([key, value]) => ({ name: t(`financial.home.category.${key}`), value: Math.round(value * 100) / 100 })),\n )\n })()\n return () => { alive = false }\n }, [provider])\n if (rows.length === 0) {\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.home.spendByCategory')}</CardTitle></CardHeader>\n <CardContent className=\"flex h-[200px] items-center justify-center text-sm text-muted-foreground\">\n {t('financial.home.noSpend')}\n </CardContent>\n </Card>\n )\n }\n return (\n <ChartWidget\n type=\"pie\" title={t('financial.home.spendByCategory')} icon=\"PieChart\" categoryKey=\"name\" data={rows}\n series={[{ dataKey: 'value', label: t('financial.home.spendByCategory') }]}\n />\n )\n}\n\n/** \"Próximas contas\" — pending payable bills, soonest due first. */\nfunction UpcomingBills() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const dueLabel = useDueLabel()\n const [bills, setBills] = React.useState<FinancialMovement[]>([])\n useEffect(() => {\n let alive = true\n void (async () => {\n const pending = await provider.getMovements({ status: 'pending' })\n if (!alive) return\n setBills(\n pending.data\n .filter((m) => m.direction === 'debit' && m.movementKind === 'bill')\n .sort((a, b) => a.dueDate.localeCompare(b.dueDate)),\n )\n })()\n return () => { alive = false }\n }, [provider])\n return (\n <GoldCard className=\"p-0 overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 pt-4\">\n <h2 className=\"text-sm font-semibold text-foreground\">{t('financial.home.upcomingBills')}</h2>\n </div>\n <div className=\"mt-3\">\n {bills.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-xs text-muted-foreground\">{t('financial.home.noBills')}</div>\n ) : (\n bills.map((bill, i) => (\n <div key={bill.id} className={'flex items-center justify-between px-4 py-3.5' + (i > 0 ? ' border-t border-border' : '')}>\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-medium text-foreground\">{bill.notes ?? t('financial.home.bill')}</p>\n <p className=\"text-xs text-muted-foreground\">{dueLabel(bill.dueDate)}</p>\n </div>\n <span className=\"shrink-0 text-sm font-semibold tabular-nums text-foreground\">\n {formatCurrency(bill.amount - bill.paidAmount, currency)}\n </span>\n </div>\n ))\n )}\n </div>\n </GoldCard>\n )\n}\n\n/** \"Cartões\" — credit-card accounts with current bill + available limit. */\nfunction CreditCards() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n useEffect(() => { void fetchBankAccounts() }, [])\n const cards = bankAccounts.filter((a) => a.accountType === 'card_payable')\n return (\n <GoldCard className=\"bg-transparent border-0 p-0 shadow-none\">\n <h2 className=\"mb-3 text-sm font-semibold text-foreground\">{t('financial.home.cards')}</h2>\n <div className=\"space-y-3\">\n {cards.map((card) => {\n const fatura = Math.abs(Math.min(0, card.currentBalance))\n const limite = Math.max(0, (card.creditLimit ?? 0) - fatura)\n return (\n <div key={card.id} className=\"rounded-2xl bg-gradient-to-br from-violet-600 to-indigo-700 p-4 text-white shadow-md\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-semibold\">{card.bankName ?? card.name}</span>\n <CreditCardIcon className=\"h-5 w-5 opacity-80\" />\n </div>\n <p className=\"mt-6 text-[11px] uppercase tracking-wide opacity-70\">{t('financial.home.currentBill')}</p>\n <p className=\"text-xl font-bold tabular-nums\">{formatCurrency(fatura, currency)}</p>\n <p className=\"mt-2 text-[11px] opacity-70\">{t('financial.home.availableLimit')} {formatCurrency(limite, currency)}</p>\n </div>\n )\n })}\n {cards.length === 0 ? (\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border py-6 text-sm font-medium text-muted-foreground\">\n + {t('financial.home.addCard')}\n </div>\n ) : null}\n </div>\n </GoldCard>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Registry builder\n// ---------------------------------------------------------------------------\n\nexport function createFinancialDashboardWidgets(ctx: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <FinancialContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </FinancialContextProvider>\n )\n Wrapped.displayName = `FinancialWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Total balance is finance's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the financial plugin-home, addable via Customize).\n defineKpiWidget({ id: 'financial.kpi.total-balance', title: 'financial.summary.totalBalance', domain: 'financial', defaultOrder: 0, component: withCtx(TotalBalanceKpi) }),\n defineKpiWidget({ id: 'financial.kpi.receivable', title: 'financial.summary.receivable', domain: 'financial', defaultOrder: 1, defaultVisible: false, component: withCtx(ReceivableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.payable', title: 'financial.summary.payable', domain: 'financial', defaultOrder: 2, defaultVisible: false, component: withCtx(PayableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.monthly-flow', title: 'financial.summary.monthlyFlow', domain: 'financial', defaultOrder: 3, defaultVisible: false, component: withCtx(MonthlyFlowKpi) }),\n defineChartWidget({ id: 'financial.chart.cash-flow', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.panel.breakdown', title: 'financial.summary.cashFlowBreakdown', domain: 'financial', span: 1, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(CashFlowBreakdown) }),\n defineCustomWidget({ id: 'financial.panel.overdue', title: 'financial.summary.overdueTitle', domain: 'financial', span: 1, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(OverdueAlerts) }),\n defineTableWidget({ id: 'financial.table.recent', title: 'financial.summary.recentTransactions', domain: 'financial', span: 4, defaultOrder: 20, surfaces: ['plugin-home'], component: withCtx(RecentTransactions) }),\n\n // FINANCE-HOME surface (B2C phone-first dashboard) — a compact analytical\n // layout: hero band → charts row (spend-by-category + cash-flow) → bills +\n // cards. This is a dedicated consumer surface (norman-ai's money screen), NOT\n // the universal B2B 'home': a full-bleed balance hero and credit-card tiles\n // are personal-finance chrome that would leak into every app that merely\n // enables plugin-financial (e.g. the beauty-saas Painel). Apps that want them\n // opt in explicitly by rendering <DashboardCanvas surface=\"finance-home\">.\n defineCustomWidget({ id: 'financial.hero.balance', title: 'financial.home.balance', domain: 'financial', span: 4, defaultOrder: 0, surfaces: ['finance-home'], component: withCtx(BalanceHero) }),\n defineChartWidget({ id: 'financial.chart.spend-by-category', title: 'financial.home.spendByCategory', domain: 'financial', span: 2, defaultOrder: 1, surfaces: ['finance-home'], component: withCtx(SpendByCategoryChart) }),\n defineChartWidget({ id: 'financial.chart.cash-flow-home', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 2, surfaces: ['finance-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.list.upcoming-bills', title: 'financial.home.upcomingBills', domain: 'financial', span: 2, defaultOrder: 3, surfaces: ['finance-home'], component: withCtx(UpcomingBills) }),\n defineCustomWidget({ id: 'financial.cards', title: 'financial.home.cards', domain: 'financial', span: 2, defaultOrder: 4, surfaces: ['finance-home'], component: withCtx(CreditCards) }),\n ]\n}\n","import type { PluginEventDefinition, MessageDefaultsDef, EventField } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Os FATOS do financeiro, e — separadamente — o texto sugerido para cada um.\n//\n// buildFinancialDomainEvents() o contrato do fato. Webhook (uma nota\n// fiscal, um ERP) e auditoria leem isto.\n// buildFinancialMessageDefaults() uma REAÇÃO: canal + texto.\n//\n// Cobrança é o assunto em que o texto padrão mais importa: quem escreve na\n// pressa manda uma cobrança seca e perde o cliente junto com o atraso. Os\n// padrões daqui são firmes na informação e leves no tom — e o lembrete de\n// vencimento sai ANTES do vencimento, que é quando ainda dá para pagar sem\n// constrangimento.\n// ---------------------------------------------------------------------------\n\nconst INVOICE_FIELDS: EventField[] = [\n { name: 'customer_name', label: 'Cliente', type: 'string', example: 'Maria Silva' },\n { name: 'invoice_number', label: 'Número', type: 'string', example: '0042' },\n { name: 'invoice_total', label: 'Valor', type: 'money', example: 'R$ 1.250,00' },\n { name: 'due_date', label: 'Vencimento', type: 'date', example: '20/08/2026' },\n { name: 'invoice_url', label: 'Link da fatura', type: 'url', example: 'https://sua.app/faturas/0042' },\n { name: 'business_name', label: 'Seu negócio', type: 'string', example: 'Seu Negócio' },\n]\n\n/**\n * Os FATOS do financeiro.\n *\n * Todos auditados: dinheiro é justamente o assunto em que \"quem emitiu isto?\"\n * e \"quando foi baixado?\" precisam de resposta — e a trilha é o único lugar\n * onde a resposta sobrevive a uma edição posterior. 'invoice_due_soon' é a\n * exceção: é o calendário passando, não um ato de alguém.\n */\nexport function buildFinancialDomainEvents(): PluginEventDefinition[] {\n return [\n { name: 'financial.invoice_created', title: 'Fatura emitida', icon: 'FilePlus2', audit: true,\n description: 'Uma cobrança foi gerada',\n trigger: 'Quando a fatura é emitida',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_due_soon', title: 'Fatura a vencer', icon: 'CalendarClock', audit: false,\n description: 'O vencimento está próximo',\n trigger: 'Nos dias que antecedem o vencimento',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_paid', title: 'Fatura paga', icon: 'CircleCheck', audit: true,\n description: 'O pagamento foi recebido',\n trigger: 'Quando a fatura é baixada como paga',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_overdue', title: 'Fatura vencida', icon: 'AlertTriangle', audit: true,\n description: 'A cobrança passou do vencimento',\n trigger: 'Quando a fatura vence sem pagamento',\n fields: INVOICE_FIELDS },\n { name: 'financial.invoice_cancelled', title: 'Fatura cancelada', icon: 'FileX2', audit: true,\n description: 'A cobrança foi cancelada',\n trigger: 'Quando a fatura é cancelada',\n fields: INVOICE_FIELDS },\n ]\n}\n\nexport function buildFinancialMessageDefaults(): MessageDefaultsDef[] {\n return [\n {\n eventKey: 'financial.invoice_created',\n kind: 'transactional',\n channels: ['email', 'whatsapp'],\n defaults: {\n email: {\n subject: 'Fatura {{invoice_number}} — {{invoice_total}}',\n body: 'Olá {{customer_name}},\\n\\nSegue a fatura {{invoice_number}}, no valor de {{invoice_total}}, com vencimento em {{due_date}}.\\n\\n{{invoice_url}}\\n\\nQualquer dúvida, é só responder este e-mail.\\n\\n{{business_name}}',\n },\n whatsapp: {\n body: 'Oi {{customer_name}}! Segue a fatura {{invoice_number}} 📄\\n\\nValor: {{invoice_total}}\\nVencimento: {{due_date}}\\n{{invoice_url}}\\n\\n— {{business_name}}',\n },\n },\n defaultEnabled: { email: true },\n },\n {\n eventKey: 'financial.invoice_due_soon',\n kind: 'transactional',\n channels: ['whatsapp', 'email'],\n defaults: {\n whatsapp: {\n body: 'Oi {{customer_name}}! Lembrete tranquilo: a fatura {{invoice_number}} ({{invoice_total}}) vence em {{due_date}}.\\n\\n{{invoice_url}}\\n\\n— {{business_name}}',\n },\n email: {\n subject: 'Sua fatura {{invoice_number}} vence em {{due_date}}',\n body: 'Olá {{customer_name}},\\n\\nUm lembrete: a fatura {{invoice_number}}, de {{invoice_total}}, vence em {{due_date}}.\\n\\n{{invoice_url}}\\n\\nSe já pagou, pode desconsiderar.\\n\\n{{business_name}}',\n },\n },\n defaultEnabled: { email: true },\n },\n {\n eventKey: 'financial.invoice_paid',\n kind: 'transactional',\n channels: ['email', 'whatsapp'],\n defaults: {\n email: {\n subject: 'Recebemos o pagamento da fatura {{invoice_number}}',\n body: 'Olá {{customer_name}},\\n\\nConfirmamos o recebimento de {{invoice_total}} referente à fatura {{invoice_number}}.\\n\\nObrigado!\\n\\n{{business_name}}',\n },\n whatsapp: {\n body: 'Oi {{customer_name}}! Pagamento da fatura {{invoice_number}} confirmado ✅\\n\\nObrigado! — {{business_name}}',\n },\n },\n // Confirmar recebimento é o mínimo: sem isso o cliente fica sem saber se\n // o dinheiro chegou, e a próxima mensagem dele é uma pergunta.\n defaultEnabled: { email: true },\n },\n {\n eventKey: 'financial.invoice_overdue',\n kind: 'transactional',\n channels: ['whatsapp', 'email'],\n defaults: {\n whatsapp: {\n body: 'Oi {{customer_name}}, tudo bem?\\n\\nA fatura {{invoice_number}} ({{invoice_total}}) venceu em {{due_date}} e consta em aberto por aqui.\\n\\n{{invoice_url}}\\n\\nSe precisar de outra data, me avisa que a gente resolve. — {{business_name}}',\n },\n email: {\n subject: 'Fatura {{invoice_number}} em aberto',\n body: 'Olá {{customer_name}},\\n\\nA fatura {{invoice_number}}, de {{invoice_total}}, venceu em {{due_date}} e consta em aberto.\\n\\n{{invoice_url}}\\n\\nSe já efetuou o pagamento, desconsidere este aviso. Se precisar de outra data, é só responder.\\n\\n{{business_name}}',\n },\n },\n // Cobrança de atraso NÃO nasce ligada: a primeira mensagem que uma conta\n // nova manda sozinha não pode ser uma cobrança escrita por outra pessoa.\n },\n {\n eventKey: 'financial.invoice_cancelled',\n kind: 'transactional',\n channels: ['email'],\n defaults: {\n email: {\n subject: 'Fatura {{invoice_number}} cancelada',\n body: 'Olá {{customer_name}},\\n\\nA fatura {{invoice_number}}, de {{invoice_total}}, foi cancelada e não precisa ser paga.\\n\\n{{business_name}}',\n },\n },\n },\n ]\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"financial.payment.pendingRetry\": \"Confirmation is still pending. Do not start another payment — retry right here.\",\n \"financial.cards.addExpense\": \"Add expense\",\n \"financial.cards.expenseOnCard\": \"Expense on this card\",\n \"financial.cards.allBillsValue\": \"All bills value\",\n \"financial.cards.availableLimit\": \"Available limit\",\n \"financial.cards.currentBill\": \"Current bill\",\n \"financial.cards.dueOn\": \"Due on the {{day}}\",\n \"financial.cards.installment\": \"Installment {{current}}/{{total}}\",\n \"financial.cards.loading\": \"Loading...\",\n \"financial.cards.noCards\": \"No cards yet\",\n \"financial.cards.noCardsHint\": \"Add a credit card in settings to track your bills here\",\n \"financial.cards.empty.step\": \"An account of type Credit Card\",\n \"financial.cards.empty.stepWhere\": \"Records → Accounts\",\n \"financial.cards.noTransactions\": \"No card transactions\",\n \"financial.cards.tabClosed\": \"Closed\",\n \"financial.cards.tabOpen\": \"Open\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% of limit used\",\n \"financial.cards.pending\": \"Pending\",\n \"financial.cards.received\": \"Received\",\n \"financial.cards.subtitle\": \"Credit and debit card transactions\",\n \"financial.cards.title\": \"Cards\",\n \"financial.cards.transactions\": \"({{count}} transactions)\",\n \"financial.cards.transactionsAppear\": \"Card transactions will appear here when payments are made via credit/debit cards\",\n \"financial.cashRegisters.addNotes\": \"Add notes\",\n \"financial.cashRegisters.back\": \"Back\",\n \"financial.cashRegisters.bills\": \"Bills\",\n \"financial.cashRegisters.closeSession\": \"Close Session\",\n \"financial.cashRegisters.closeThisSession\": \"Close this session\",\n \"financial.cashRegisters.closing\": \"Closing...\",\n \"financial.cashRegisters.closingBalance\": \"Closing Balance\",\n \"financial.cashRegisters.closingNotes\": \"Closing Notes\",\n \"financial.cashRegisters.coins\": \"Coins\",\n \"financial.cashRegisters.confirmOpen\": \"Confirm & Open\",\n \"financial.cashRegisters.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cashRegisters.count\": \"Count\",\n \"financial.cashRegisters.countBills\": \"Count Bills & Coins\",\n \"financial.cashRegisters.countedTotal\": \"Counted Total\",\n \"financial.cashRegisters.denominationCount\": \"Denomination count\",\n \"financial.cashRegisters.differenceFromOpening\": \"Difference from opening\",\n \"financial.cashRegisters.method\": \"Method\",\n \"financial.cashRegisters.noCashAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cashRegisters.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cashRegisters.openAnother\": \"Open another register\",\n \"financial.cashRegisters.openSession\": \"Open Session\",\n \"financial.cashRegisters.openSessions\": \"Open Sessions\",\n \"financial.cashRegisters.opened\": \"Opened\",\n \"financial.cashRegisters.opening\": \"Opening...\",\n \"financial.cashRegisters.openingBalance\": \"Opening Balance\",\n \"financial.cashRegisters.quickAmount\": \"Quick Amount\",\n \"financial.cashRegisters.register\": \"Register\",\n \"financial.cashRegisters.sessionHistory\": \"Session History\",\n \"financial.cashRegisters.subtitle\": \"Open, count and close cash sessions\",\n \"financial.commissions.emptyTitle\": \"No commissions calculated\",\n \"financial.commissions.emptyDesc\": \"This module tracks commission rules, but nothing here calculates a commission from your sales yet.\",\n \"financial.commissions.emptyRulesHint\": \"Commission rules are managed under Settings › Financial › Properties.\",\n \"financial.commissions.subtitle\": \"Team commissions\",\n \"financial.invoice.accountsPayable\": \"Accounts Payable\",\n \"financial.invoice.accountsReceivable\": \"Accounts Receivable\",\n \"financial.invoice.bulkCancel\": \"Cancel\",\n \"financial.invoice.rowOpen\": \"Open\",\n \"financial.invoice.rowAttachments\": \"Attachments\",\n \"financial.invoice.bulkCancelDone\": \"{{count}} invoice(s) cancelled\",\n \"financial.invoice.bulkCancelFailed\": \"{{count}} invoice(s) could not be cancelled\",\n \"financial.invoice.bulkCancelNone\": \"None of the selected invoices can be cancelled.\",\n \"financial.invoice.bulkCancelTitle\": \"Cancel {{count}} invoice(s)?\",\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.cancelReason\": \"Reason for cancellation\",\n \"financial.invoice.cancelReasonPlaceholder\": \"Explain why this invoice is being cancelled\",\n \"financial.invoice.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoice.cancelling\": \"Cancelling...\",\n \"financial.invoice.contact\": \"Contact\",\n \"financial.invoice.payTo\": \"Pay to\",\n \"financial.invoice.receiveFrom\": \"Receive from\",\n \"financial.invoice.unit\": \"Unit\",\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.item\": \"Item\",\n \"financial.invoice.items\": \"Items\",\n \"financial.invoice.noLines\": \"No lines — the total was saved without its lines. Edit to itemize.\",\n \"financial.invoice.keepInvoice\": \"Keep Invoice\",\n \"financial.invoice.new\": \"New\",\n \"financial.invoice.newManual\": \"Create\",\n \"financial.invoiceForm.createContact\": \"Create\",\n \"financial.invoiceForm.alreadyPaid\": \"Already paid\",\n \"financial.invoiceForm.paidWith\": \"Payment method\",\n \"financial.invoiceForm.paidFrom\": \"Paid from\",\n \"financial.invoiceForm.selectMethod\": \"Select a method\",\n \"financial.invoiceForm.selectAccount\": \"Select an account\",\n \"financial.invoiceForm.selectMethodFirst\": \"Pick a method first\",\n \"financial.invoiceForm.scheduleSourceHint\": \"Method and account are set on each due date.\",\n \"financial.invoiceForm.paidNeedsMethod\": \"Tell us the payment method and the account\",\n \"financial.invoiceForm.willBePaid\": \"This installment will be settled\",\n \"financial.invoiceForm.attachFailed\": \"The bill was saved, but an attachment did not upload\",\n \"financial.invoiceForm.attachOnSave\": \"attached on save\",\n \"financial.invoiceForm.clear\": \"Clear\",\n \"financial.invoiceForm.manageAccounts\": \"Manage accounts\",\n \"financial.invoiceForm.manageChart\": \"Manage chart of accounts\",\n \"financial.invoiceForm.manageCostCenters\": \"Manage cost centers\",\n \"financial.invoice.newManualHint\": \"Open the full invoice form\",\n \"financial.invoice.noDetails\": \"No additional details recorded\",\n \"financial.invoice.unlinkedPayments\": \"Payments not linked to an installment\",\n \"financial.invoice.unlinkedPaymentsDesc\": \"Money recorded against this invoice that does not name one of the installments above.\",\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.loadFailed\": \"Could not load\",\n \"financial.invoice.loadFailedDesc\": \"Reading this invoice failed. The data is still there — it just did not reach the screen.\",\n \"financial.invoice.retry\": \"Try again\",\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.receive\": \"Receive\",\n \"financial.invoice.reverse\": \"Reverse\",\n \"financial.invoice.reverseTitle\": \"Reverse payment\",\n \"financial.invoice.reverseReason\": \"Reason for reversal\",\n \"financial.invoice.reverseHint\": \"{{count}} payment(s) · {{total}}\",\n \"financial.invoice.reversePayments\": \"Payments of this installment\",\n \"financial.invoice.reverseExplain\": \"All come checked: reversing only one leaves the installment partial. Each reversal posts the counter-entry on the same account and the installment opens again.\",\n \"financial.invoice.reverseConfirm\": \"Reverse {{total}}\",\n \"financial.invoice.paymentSchedule\": \"Due dates\",\n \"financial.invoiceForm.scheduleLocked\": \"Some installments are paid — the schedule can no longer be regenerated.\",\n \"financial.invoiceForm.scheduleHasCancelled\": \"This bill has a cancelled installment — amount and schedule can no longer be redone, only the due date.\",\n \"financial.invoiceForm.issuedLocked\": \"This bill is issued: amount, items, supplier and date are locked. To change them, cancel it and create a new one. Notes, unit, document number and due dates can still be edited.\",\n \"financial.invoiceForm.issuedEditable\": \"This bill is issued: amount, items and supplier are locked. To change them, cancel it and create a new one. While nothing has been paid, the date and the installment plan can still be edited.\",\n \"financial.invoiceForm.edit\": \"Edit\",\n \"financial.invoice.payment\": \"Payment\",\n \"financial.invoice.balance\": \"Remaining\",\n \"financial.invoice.details\": \"Details\",\n \"financial.invoice.remaining\": \"Remaining:\",\n \"financial.invoice.searchPlaceholder\": \"Search by contact, description or document…\",\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.tags\": \"Tags\",\n \"financial.invoiceForm.currency\": \"Currency\",\n \"financial.invoiceForm.addItem\": \"Add Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Add items first\",\n \"financial.invoiceForm.contactRequired\": \"Select who will pay or receive before adding items.\",\n \"financial.invoiceForm.additionalNotes\": \"Additional notes...\",\n \"financial.itemType.service\": \"Service\",\n \"financial.itemType.package\": \"Package\",\n \"financial.itemType.product\": \"Product\",\n \"financial.itemType.other\": \"Other\",\n \"financial.itemType.gift_card\": \"Gift Card\",\n \"financial.giftCardLine.label\": \"Gift card code\",\n \"financial.giftCardLine.placeholder\": \"0000 0000 0000 0000\",\n \"financial.giftCardLine.hint\": \"Scan or type the full card code.\",\n \"financial.giftCardLine.notFound\": \"Gift card not found\",\n \"financial.giftCardLine.revoked\": \"Gift card cancelled — cannot be sold\",\n \"financial.giftCardLine.expired\": \"Gift card expired\",\n \"financial.giftCardLine.alreadySold\": \"This gift card has already been sold\",\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.editTitle\": \"Edit\",\n \"financial.invoiceForm.newTitle\": \"New\",\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.searchMinChars\": \"Type at least 2 characters to search.\",\n \"financial.invoiceForm.searchUnit\": \"Search unit...\",\n \"financial.invoiceForm.selectInstallments\": \"Select installment count above\",\n \"financial.invoiceForm.selectContactFirst\": \"Select who will pay or receive before adding items.\",\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.goals\": \"Goals\",\n \"financial.nav.giftCards\": \"Gift Cards\",\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.recurring\": \"Recurring\",\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.notasFiscais\": \"Fiscal Invoices\",\n \"financial.nav.fiscal\": \"Tax\",\n \"financial.nav.fiscalIssued\": \"Issued Invoices\",\n \"financial.nav.fiscalGroups\": \"Tax Groups\",\n \"financial.nav.recurringExpenses\": \"Recurring Expenses\",\n \"financial.nav.recurringIncome\": \"Recurring Income\",\n \"financial.nav.rules\": \"Rules\",\n \"financial.nav.statements\": \"Statements\",\n \"financial.nav.summary\": \"Summary\",\n \"financial.invoice.filterAccount\": \"Chart account\",\n \"financial.invoice.filterAllAccounts\": \"All accounts\",\n \"financial.invoice.filterCostCenter\": \"Cost center\",\n \"financial.invoice.filterAllCostCenters\": \"All cost centers\",\n \"financial.invoice.filterPeriod\": \"Period\",\n \"financial.invoice.filterAllPeriods\": \"All time\",\n \"financial.invoice.filterThisMonth\": \"This month\",\n \"financial.invoice.filterLastMonth\": \"Last month\",\n \"financial.invoice.filterLast30\": \"Last 30 days\",\n \"financial.invoice.filterLast90\": \"Last 90 days\",\n \"financial.invoice.filterMaxRange\": \"90-day maximum range\",\n \"financial.invoice.filterThisYear\": \"This year\",\n \"financial.invoice.filterCustom\": \"Custom\",\n \"financial.invoice.filterFrom\": \"From\",\n \"financial.invoice.filterTo\": \"To\",\n \"financial.invoice.filterClear\": \"Clear\",\n \"financial.invoice.filterApply\": \"Search\",\n \"financial.invoice.filterMore\": \"More filters\",\n \"financial.invoice.filterLess\": \"Fewer filters\",\n \"financial.invoice.filterPending\": \"Filters changed\",\n \"financial.invoice.filterPendingHint\": \"The list still shows the previous selection. Click Search to apply.\",\n \"financial.invoice.filterUnit\": \"Unit\",\n \"financial.invoice.filtersTitle\": \"Filters\",\n \"financial.invoice.filterShow\": \"Show\",\n \"financial.invoice.filterAllStatuses\": \"All\",\n \"financial.invoice.filterContactPlaceholder\": \"Type...\",\n \"financial.invoice.filterAllContacts\": \"All\",\n \"financial.invoice.filterFiscalNumber\": \"Invoice number\",\n \"financial.invoice.filterPaymentAccount\": \"Paid from\",\n \"financial.invoice.filterReceiptAccount\": \"Received into\",\n \"financial.invoice.filterAllBankAccounts\": \"All accounts\",\n \"financial.invoice.filterFiscalNumberPlaceholder\": \"No.\",\n \"financial.invoice.filterAllUnits\": \"All units\",\n \"financial.invoice.generateCnab\": \"Generate CNAB 240\",\n \"financial.invoice.printSelected\": \"Print\",\n \"financial.invoice.exportSelected\": \"Export CSV\",\n \"financial.invoice.printBlocked\": \"Allow pop-ups to print the selection.\",\n \"financial.reconciliation.filtersTitle\": \"Filters\",\n \"financial.reconciliation.filterApply\": \"Search\",\n \"financial.reconciliation.filterPending\": \"Filters changed\",\n \"financial.reconciliation.filterPendingHint\": \"The statement still shows the previous selection. Click Filter to apply.\",\n \"financial.paymentReceipt.title\": \"Payment details\",\n \"financial.paymentReceipt.titleReversal\": \"Reversal details\",\n \"financial.paymentReceipt.open\": \"See this payment's details\",\n \"financial.paymentReceipt.count\": \"{{count}} payments\",\n \"financial.paymentReceipt.reversedCount\": \"{{count}} reversed payment(s)\",\n \"financial.paymentReceipt.show\": \"Show\",\n \"financial.paymentReceipt.hide\": \"Hide\",\n \"financial.paymentReceipt.reversedOn\": \"Reversed on {{date}}\",\n \"financial.paymentReceipt.reversed\": \"Reversed\",\n \"financial.paymentReceipt.paymentNumber\": \"Payment {{number}}\",\n \"financial.paymentReceipt.reversalNumber\": \"Reversal {{number}}\",\n \"financial.paymentReceipt.empty\": \"No payment recorded on this installment.\",\n \"financial.paymentReceipt.date\": \"Date\",\n \"financial.paymentReceipt.amount\": \"Amount\",\n \"financial.paymentReceipt.methodOut\": \"Payment method\",\n \"financial.paymentReceipt.methodIn\": \"Receipt method\",\n \"financial.paymentReceipt.methodNone\": \"N/A\",\n \"financial.paymentReceipt.account\": \"Account\",\n \"financial.paymentReceipt.cardBrand\": \"Card brand\",\n \"financial.paymentReceipt.fee\": \"Fee\",\n \"financial.paymentReceipt.payer\": \"Payer\",\n \"financial.paymentReceipt.receivedFrom\": \"Received from\",\n \"financial.paymentReceipt.paidBy\": \"Paid by\",\n \"financial.paymentReceipt.receivedBy\": \"Received by\",\n \"financial.paymentReceipt.cashSession\": \"Cash session\",\n \"financial.paymentReceipt.cashSessionYes\": \"Yes\",\n \"financial.paymentReceipt.notes\": \"Note\",\n \"financial.paymentReceipt.unlink\": \"Unlink from this installment\",\n \"financial.paymentReceipt.unlinkUnavailable\": \"Not available yet: unlinking keeps the payment and returns the amount as the counterparty's credit, and that needs a database operation that does not exist yet.\",\n \"financial.paymentReceipt.reverse\": \"Reverse this payment\",\n \"financial.reconciliation.title\": \"Reconciliation\",\n \"financial.reconciliation.subtitle\": \"Match imported bank lines to your movements\",\n \"financial.reconciliation.pending\": \"{{count}} to reconcile\",\n \"financial.reconciliation.allDone\": \"All caught up\",\n \"financial.reconciliation.empty\": \"Nothing to reconcile\",\n \"financial.reconciliation.emptyHint\": \"Imported bank transactions will appear here for matching.\",\n \"financial.reconciliation.bankLines\": \"Bank lines\",\n \"financial.reconciliation.candidates\": \"Suggested matches\",\n \"financial.reconciliation.selectLine\": \"Select a bank line to see suggested matches\",\n \"financial.reconciliation.noCandidates\": \"No suggested matches for this line\",\n \"financial.reconciliation.match\": \"Match\",\n \"financial.reconciliation.accept\": \"Accept as new\",\n \"financial.reconciliation.acceptHint\": \"No internal counterpart — keep as a standalone entry\",\n \"financial.reconciliation.matchScore\": \"{{score}}% match\",\n \"financial.reconciliation.refresh\": \"Refresh\",\n \"financial.reconciliation.from\": \"From\",\n \"financial.reconciliation.to\": \"To\",\n \"financial.reconciliation.filter\": \"Filter\",\n \"financial.reconciliation.filterMore\": \"More filters\",\n \"financial.reconciliation.filterLess\": \"Fewer filters\",\n \"financial.reconciliation.syncNow\": \"Sync now\",\n \"financial.reconciliation.syncing\": \"Fetching from the bank…\",\n \"financial.reconciliation.syncImported\": \"{{count}} new line(s) from the bank\",\n \"financial.reconciliation.syncNothingNew\": \"The bank has nothing new\",\n \"financial.reconciliation.syncFailed\": \"Could not fetch the bank statement\",\n \"financial.reconciliation.batchClassify\": \"Classify in bulk\",\n \"financial.reconciliation.syncStatusSyncing\": \"Syncing…\",\n \"financial.reconciliation.syncStatusOk\": \"Synced {{when}}\",\n \"financial.reconciliation.syncStatusNever\": \"Not synced yet\",\n \"financial.reconciliation.syncStatusPending\": \"Waiting for the bank to release the statement\",\n \"financial.reconciliation.syncStatusRevoked\": \"Bank authorization expired\",\n \"financial.reconciliation.syncStatusError\": \"Sync failed: {{reason}}\",\n \"financial.reconciliation.syncStatusErrorUnknown\": \"the bank did not answer\",\n \"financial.reconciliation.syncWhenNow\": \"just now\",\n \"financial.reconciliation.syncWhenMinutes\": \"{{count}} min ago\",\n \"financial.reconciliation.syncWhenHours\": \"{{count}} h ago\",\n \"financial.reconciliation.syncWhenDays\": \"{{count}} day(s) ago\",\n \"financial.reconciliation.group.today\": \"Today\",\n \"financial.reconciliation.group.yesterday\": \"Yesterday\",\n \"financial.reconciliation.group.thisWeek\": \"This week\",\n \"financial.reconciliation.group.lastWeek\": \"Last week\",\n \"financial.reconciliation.group.thisMonth\": \"This month\",\n \"financial.reconciliation.group.lastMonth\": \"Last month\",\n \"financial.reconciliation.group.older\": \"Earlier\",\n \"financial.reconciliation.investments\": \"Investments and yields\",\n \"financial.reconciliation.investmentsHide\": \"Hide\",\n \"financial.reconciliation.investmentsShow\": \"Show\",\n \"financial.reconciliation.pickAccountFirst\": \"Pick an account\",\n \"financial.reconciliation.suggest\": \"Suggest\",\n \"financial.reconciliation.suggestion\": \"Suggestion\",\n \"financial.reconciliation.suggestionLabel\": \"Suggestion:\",\n \"financial.reconciliation.linkManually\": \"Link manually\",\n \"financial.reconciliation.viewBillUnavailable\": \"This line was reconciled without a bill to open.\",\n \"financial.reconciliation.viewBill\": \"View bill\",\n \"financial.reconciliation.installment\": \"Installment\",\n \"financial.reconciliation.dueShort\": \"Due\",\n \"financial.reconciliation.moreCandidates\": \"+{{count}} more suggestion(s)\",\n \"financial.reconciliation.credit\": \"Credit\",\n \"financial.reconciliation.debit\": \"Debit\",\n \"financial.reconciliation.payerLabel\": \"Payer:\",\n \"financial.reconciliation.supplierLabel\": \"Supplier:\",\n \"financial.reconciliation.docPrefix\": \"Doc\",\n \"financial.reconciliation.balanceAt\": \"Balance:\",\n \"financial.reconciliation.noIntegratedAccount\": \"No connected account. Set up Open Banking in Settings → Integrations.\",\n \"financial.reconciliation.search\": \"Search\",\n \"financial.reconciliation.details\": \"Details\",\n \"financial.reconciliation.detailDate\": \"Date\",\n \"financial.reconciliation.detailEffective\": \"Effective on\",\n \"financial.reconciliation.detailCounterparty\": \"Counterparty\",\n \"financial.reconciliation.detailDocument\": \"Tax id or document\",\n \"financial.reconciliation.detailCode\": \"Code\",\n \"financial.reconciliation.detailCategory\": \"Category\",\n \"financial.reconciliation.detailKind\": \"Transaction type\",\n \"financial.reconciliation.detailBalance\": \"Balance at this line\",\n \"financial.reconciliation.detailProvider\": \"Provider\",\n \"financial.reconciliation.detailExternalId\": \"Provider id\",\n \"financial.reconciliation.rawPayload\": \"See what the provider sent\",\n \"financial.reconciliation.createBill\": \"Post as a bill\",\n \"financial.reconciliation.createBillAction\": \"Post and reconcile\",\n \"financial.reconciliation.billCreated\": \"Bill posted and reconciled\",\n \"financial.reconciliation.billDescription\": \"Description\",\n \"financial.reconciliation.supplier\": \"Supplier\",\n \"financial.reconciliation.payer\": \"Payer\",\n \"financial.reconciliation.chartAccount\": \"Chart of accounts\",\n \"financial.reconciliation.chartAccountPlaceholder\": \"Pick a classification...\",\n \"financial.reconciliation.chartAccountNone\": \"No chart account found\",\n \"financial.reconciliation.chartAccountHint\": \"This classification is what puts the bill on the income statement.\",\n \"financial.reconciliation.markTransfer\": \"Mark as transfer\",\n \"financial.reconciliation.markTransferAction\": \"Mark and reconcile\",\n \"financial.reconciliation.transferDone\": \"Transfer recorded\",\n \"financial.reconciliation.transferTo\": \"Destination account\",\n \"financial.reconciliation.transferFrom\": \"Source account\",\n \"financial.reconciliation.transferNotes\": \"Note\",\n \"financial.reconciliation.pickAccount\": \"Pick the account\",\n \"financial.reconciliation.account\": \"Account or card\",\n \"financial.reconciliation.accountRequired\": \"Pick an account to see its statement.\",\n \"financial.reconciliation.searchPlaceholder\": \"Description or provider id...\",\n \"financial.reconciliation.type\": \"Type\",\n \"financial.reconciliation.typeAll\": \"All\",\n \"financial.reconciliation.typeIn\": \"Money in\",\n \"financial.reconciliation.typeOut\": \"Money out\",\n \"financial.reconciliation.status\": \"Status\",\n \"financial.reconciliation.statusAll\": \"All\",\n \"financial.reconciliation.statusReconciled\": \"Reconciled\",\n \"financial.reconciliation.statusPending\": \"Pending\",\n \"financial.reconciliation.reconciled\": \"Reconciled\",\n \"financial.reconciliation.undo\": \"Undo\",\n \"financial.reconciliation.flowTitle\": \"Reconcile transaction\",\n \"financial.reconciliation.stepClassify\": \"What to do\",\n \"financial.reconciliation.stepItems\": \"The items\",\n \"financial.reconciliation.stepDetails\": \"The details\",\n \"financial.reconciliation.stepConfirm\": \"Confirm\",\n \"financial.reconciliation.confirmAction\": \"Confirm\",\n \"financial.reconciliation.howToClassify\": \"How do you want to classify this transaction?\",\n \"financial.reconciliation.pickIntent\": \"Pick what this transaction is\",\n \"financial.reconciliation.foundTitle\": \"Bills found\",\n \"financial.reconciliation.searchWiden\": \"Widen search (±15 days, any amount)\",\n \"financial.reconciliation.stepSelectBill\": \"Select the bill\",\n \"financial.reconciliation.stepAdjust\": \"Adjustment\",\n \"financial.reconciliation.selectBillFor\": \"Statement of {{date}} · {{description}} ·\",\n \"financial.reconciliation.statusOverdue\": \"Overdue\",\n \"financial.reconciliation.colDue\": \"Due\",\n \"financial.reconciliation.colCounterparty\": \"Counterparty\",\n \"financial.reconciliation.colDescription\": \"Number / Description\",\n \"financial.reconciliation.colInstallment\": \"Installment\",\n \"financial.reconciliation.colToReconcile\": \"To reconcile\",\n \"financial.reconciliation.colDelta\": \"Δ vs statement\",\n \"financial.reconciliation.searchStatusAllShort\": \"All\",\n \"financial.reconciliation.searchPendingHint\": \"The list still shows the previous filters. Click Filter to apply.\",\n \"financial.reconciliation.searchTitle\": \"Find a bill\",\n \"financial.reconciliation.searchDueFrom\": \"Due from\",\n \"financial.reconciliation.searchDueTo\": \"to\",\n \"financial.reconciliation.searchStatus\": \"Status\",\n \"financial.reconciliation.searchStatusAll\": \"All (not reconciled)\",\n \"financial.reconciliation.searchStatusOpen\": \"Open\",\n \"financial.reconciliation.searchStatusPaid\": \"Paid\",\n \"financial.reconciliation.searchText\": \"Search (counterparty, number, description)\",\n \"financial.reconciliation.searchTextPlaceholder\": \"Type and press Enter\",\n \"financial.reconciliation.searchAmountMin\": \"Min amount\",\n \"financial.reconciliation.searchAmountMax\": \"Max amount\",\n \"financial.reconciliation.searchAction\": \"Search\",\n \"financial.reconciliation.searchEmpty\": \"No bills match these filters.\",\n \"financial.reconciliation.searchMore\": \"Load more\",\n \"financial.reconciliation.pickCandidate\": \"Pick the entry to link\",\n \"financial.reconciliation.needDescription\": \"Describe the entry\",\n \"financial.reconciliation.intentLink\": \"Link to an existing entry\",\n \"financial.reconciliation.intentLinkHint\": \"The bill already exists — this line is the proof it was paid.\",\n \"financial.reconciliation.intentBillOut\": \"Record as a payable\",\n \"financial.reconciliation.intentBillIn\": \"Record as a receivable\",\n \"financial.reconciliation.intentBillHint\": \"The entry never existed. It is born here, classified and already settled.\",\n \"financial.reconciliation.intentTransfer\": \"Transfer between accounts\",\n \"financial.reconciliation.intentTransferHint\": \"Neither revenue nor expense: money moving between two of your own accounts.\",\n \"financial.reconciliation.attachReceipt\": \"Attach receipt\",\n \"financial.reconciliation.attachReceiptHint\": \"Receipt, invoice or bill — image or PDF. AI reads it and fills in the supplier, the items and the chart account. Amount, date and bank account stay locked to the statement.\",\n \"financial.reconciliation.receiptRead_action\": \"Attach and read with AI\",\n \"financial.reconciliation.receiptReplace\": \"Replace receipt\",\n \"financial.reconciliation.receiptReading\": \"Reading the receipt...\",\n \"financial.reconciliation.receiptRead\": \"Receipt read\",\n \"financial.reconciliation.receiptTooBig\": \"Receipt is over 10 MB.\",\n \"financial.reconciliation.receiptNoAgent\": \"AI reading needs the assistant configured in this app.\",\n \"financial.reconciliation.candidateOpen\": \"Open · {{amount}}\",\n \"financial.reconciliation.candidatePaid\": \"Already paid\",\n \"financial.reconciliation.dueDate\": \"Due date\",\n \"financial.reconciliation.billAmount\": \"Bill amount\",\n \"financial.reconciliation.items\": \"Receipt items\",\n \"financial.reconciliation.addItem\": \"Add item\",\n \"financial.reconciliation.noItemsHint\": \"No items identified. Attach a receipt so AI can read them, or add them by hand.\",\n \"financial.reconciliation.itemDescription\": \"Description\",\n \"financial.reconciliation.itemQuantity\": \"Qty\",\n \"financial.reconciliation.itemUnitPrice\": \"Unit price\",\n \"financial.reconciliation.itemsSum\": \"Items total\",\n \"financial.reconciliation.statementTotal\": \"Statement total\",\n \"financial.reconciliation.costCenter\": \"Cost center\",\n \"financial.reconciliation.costCenterPlaceholder\": \"None\",\n \"financial.reconciliation.transferHint\": \"The statement account is automatically the other leg.\",\n \"financial.reconciliation.linkOnlyExplain\": \"This bill was already paid in the system. Confirming only ties the statement line to it — no second payment, no change to the amount.\",\n \"financial.reconciliation.noAdjustmentNeeded\": \"The amount matches the bill. Nothing to adjust.\",\n \"financial.reconciliation.adjustmentNeeded\": \"The bank took {{gap}} {{side}} than the bill asked for. Say what that difference is.\",\n \"financial.reconciliation.adjustmentNeededIn\": \"{{gap}} {{side}} came in than the bill charged. Say what that difference is.\",\n \"financial.reconciliation.adjustmentNeedsAccount\": \"Pick the chart account for each adjustment.\",\n \"financial.reconciliation.adjustmentType\": \"Type\",\n \"financial.reconciliation.adjustmentDescriptionPlaceholder\": \"E.g. late interest\",\n \"financial.reconciliation.adjustmentDefaultInterest\": \"Late interest\",\n \"financial.reconciliation.adjustmentDefaultFine\": \"Late fine\",\n \"financial.reconciliation.adjustmentDefaultDiscountOut\": \"Discount obtained\",\n \"financial.reconciliation.adjustmentDefaultDiscountIn\": \"Discount granted\",\n \"financial.reconciliation.adjustmentMore\": \"more\",\n \"financial.reconciliation.adjustmentLess\": \"less\",\n \"financial.reconciliation.partialQuestion\": \"How to treat the difference\",\n \"financial.reconciliation.partialTitle\": \"Partial payment\",\n \"financial.reconciliation.partialLine\": \"This line pays part of it; {{rest}} stays open for the next one.\",\n \"financial.reconciliation.gapTitle\": \"Explain the difference\",\n \"financial.reconciliation.gapLine\": \"Discount, interest or fee: the bill closes with this line.\",\n \"financial.reconciliation.partialExplain\": \"This line pays {{paid}} of the bill. The remaining {{rest}} stays open: reconcile the next line against this same bill.\",\n \"financial.reconciliation.summaryPartial\": \"Partial payment: {{rest}} stays open on this bill.\",\n \"financial.reconciliation.partialDone\": \"Part paid. {{rest}} left on this bill.\",\n \"financial.reconciliation.interest\": \"Interest\",\n \"financial.reconciliation.fine\": \"Late fee\",\n \"financial.reconciliation.discount\": \"Discount\",\n \"financial.reconciliation.adjustmentAmount\": \"Amount\",\n \"financial.reconciliation.adjustmentDescription\": \"Adjustment description\",\n \"financial.reconciliation.addAdjustment\": \"Add adjustment\",\n \"financial.reconciliation.howItSettles\": \"How this line settles\",\n \"financial.reconciliation.settleAmount\": \"Amount\",\n \"financial.reconciliation.settleDate\": \"Date\",\n \"financial.reconciliation.settleAccount\": \"Account\",\n \"financial.reconciliation.settleAccountUnknown\": \"the statement account\",\n \"financial.reconciliation.settleNote\": \"Note\",\n \"financial.reconciliation.settleNoMethodHint\": \"No payment method: the statement IS the method. When, where and how much come from the bank — there is nothing to pick here.\",\n \"financial.reconciliation.howItWasPaid\": \"How the money moved\",\n \"financial.reconciliation.noPaymentNeeded\": \"Nothing to pay here: the money is already recorded in the system.\",\n \"financial.reconciliation.noContact\": \"no counterparty\",\n \"financial.reconciliation.summaryTransfer\": \"Record {{amount}} as a transfer with {{account}} and reconcile the line.\",\n \"financial.reconciliation.summaryBillOut\": \"Create a {{amount}} payable to {{contact}}, settle it and reconcile the line.\",\n \"financial.reconciliation.summaryBillIn\": \"Create a {{amount}} receivable from {{contact}}, settle it and reconcile the line.\",\n \"financial.reconciliation.summarySettle\": \"Settle the bill for {{amount}} and reconcile the line.\",\n \"financial.reconciliation.summaryLinkOnly\": \"Tie the line to the already-paid bill, without creating a payment.\",\n \"financial.reconciliation.summaryAdjustments\": \"Plus {{count}} adjustment entr(ies), same date and same account.\",\n \"financial.reconciliation.settled\": \"Bill settled and reconciled\",\n \"financial.reconciliation.linked\": \"Line tied to the bill\",\n \"financial.payment.amountRequired\": \"Enter the amount\",\n \"financial.payment.methodRequired\": \"Pick the payment method\",\n \"financial.payment.accountRequired\": \"Pick the account\",\n \"financial.payment.amountFromStatement\": \"Amount comes from the statement\",\n \"financial.reconciliation.pageCredits\": \"Credits (page)\",\n \"financial.reconciliation.pageDebits\": \"Debits (page)\",\n \"financial.reconciliation.pageBalance\": \"Balance (page)\",\n \"financial.reconciliation.pageTotalsHint\": \"These three add up this page only — changing page changes the numbers.\",\n \"financial.reconciliation.showing\": \"Showing {{from}}-{{to}} of {{total}} records\",\n \"financial.reconciliation.pageOf\": \"Page {{page}} of {{pages}}\",\n \"financial.reconciliation.first\": \"First\",\n \"financial.reconciliation.previous\": \"Previous\",\n \"financial.reconciliation.next\": \"Next\",\n \"financial.reconciliation.last\": \"Last\",\n \"financial.reconciliation.emptyFiltered\": \"No transactions in this period\",\n \"financial.reconciliation.emptyFilteredHint\": \"Adjust the period or filter, or import the statement in Settings → Integrations.\",\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.whichCard\": \"Which card\",\n \"financial.payment.noCompanyCards\": \"No company card registered. A card payment needs the card on file.\",\n \"financial.payment.registerCard\": \"Register a card (account type \\\"Card payable\\\")\",\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.receiveAmount\": \"Receive {{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.payment.titleReceive\": \"Record Receipt\",\n \"financial.payment.changeSource\": \"Change method and account\",\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.modules\": \"Modules\",\n \"financial.settings.modulesDesc\": \"What this house shows inside Financial\",\n \"financial.settings.commissions\": \"Commissions\",\n \"financial.settings.commissionsDesc\": \"The tab that settles what the team earns per sale\",\n \"financial.settings.cashRegistersDesc\": \"Open, close and review the counter till\",\n \"financial.settings.closing\": \"Closing\",\n \"financial.settings.closingDesc\": \"Close the period and lock past dates\",\n \"financial.settings.invoices\": \"Invoices\",\n \"financial.settings.invoicesDesc\": \"How invoices and payments are handled\",\n \"financial.settings.notifications\": \"Notifications\",\n \"financial.settings.notificationsDesc\": \"Alerts and reminders\",\n \"financial.settings.overdueAlerts\": \"Overdue payment alerts\",\n \"financial.settings.overdueAlertsDesc\": \"Notify when invoices pass their due date\",\n \"financial.settings.requireDoc\": \"Require document number\",\n \"financial.settings.requireDocDesc\": \"Make document/invoice number mandatory on payments\",\n \"financial.settings.requireOpening\": \"Require opening balance\",\n \"financial.settings.requireOpeningDesc\": \"Opening balance must be confirmed before starting a session\",\n \"financial.settingsPage.subtitle\": \"Manage payment methods, accounts, and configurations\",\n \"financial.settingsPage.title\": \"Financial Settings\",\n \"financial.payment.noMethods\": \"No payment methods configured.\",\n \"financial.payment.configureMethods\": \"Set up payment methods\",\n \"financial.payment.noAccounts\": \"No compatible account. Create one in Settings.\",\n \"financial.payment.noAccountForMethod\": \"No account accepts {method}. Cards settle into a receivable account, not the bank.\",\n \"financial.payment.cashNeedsOpenSession\": \"Receiving cash needs an open cash session — that is where the end-of-day count happens.\",\n \"financial.payment.openCashSession\": \"Open a cash session\",\n \"financial.payment.configureAccounts\": \"Set up accounts\",\n \"financial.statements.generate\": \"Generate\",\n \"financial.statements.filterPendingHint\": \"The statement still shows the previous selection. Click Generate to apply.\",\n \"financial.statements.accountRequired\": \"Pick an account\",\n \"financial.statements.operationTypes\": \"Operation types\",\n \"financial.statements.opCredits\": \"Credits\",\n \"financial.statements.opDebits\": \"Debits\",\n \"financial.statements.opTransfers\": \"Transfers\",\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.searchPlaceholder\": \"Search by contact, description or document...\",\n \"financial.statements.selectToView\": \"Select an account to view statement\",\n \"financial.statements.subtitle\": \"Bank account transactions and balances\",\n \"financial.statements.title\": \"Statements\",\n \"financial.statements.to\": \"To\",\n \"financial.summary.allAccounts\": \"All accounts\",\n \"financial.summary.cashFlow\": \"Cash Flow\",\n \"financial.summary.cashFlowBreakdown\": \"Cash Flow Breakdown\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Receivables vs. payables this month\",\n \"financial.summary.cashFlowSubtitle\": \"Monthly income vs expenses\",\n \"financial.summary.expenses\": \"Expenses\",\n \"financial.summary.income\": \"Income\",\n \"financial.summary.monthlyFlow\": \"Monthly Flow\",\n \"financial.summary.negativeBalance\": \"Negative balance\",\n \"financial.summary.net\": \"Net\",\n \"financial.summary.noOverdue\": \"No overdue transactions\",\n \"financial.summary.noTransactions\": \"No transactions yet\",\n \"financial.summary.overdue\": \"{{count}} overdue\",\n \"financial.summary.overduePayable\": \"Overdue payable\",\n \"financial.summary.overdueReceivable\": \"Overdue receivable\",\n \"financial.summary.overdueTitle\": \"Overdue\",\n \"financial.summary.paid\": \"Paid\",\n \"financial.summary.payable\": \"Payable\",\n \"financial.summary.positiveBalance\": \"Positive balance\",\n \"financial.summary.receivable\": \"Receivable\",\n \"financial.summary.received\": \"Received\",\n \"financial.summary.recentTransactions\": \"Recent Transactions\",\n \"financial.summary.totalBalance\": \"Total Balance\",\n \"financial.summary.transactionsAppear\": \"Transactions will appear here once recorded\",\n \"financial.summary.viewAll\": \"View all\",\n \"financial.summary.today\": \"Today\",\n \"financial.summary.yesterday\": \"Yesterday\",\n \"financial.summary.transactionsTitle\": \"Transactions\",\n \"financial.home.balance\": \"Balance\",\n \"financial.home.inflow\": \"Income\",\n \"financial.home.outflow\": \"Expenses\",\n \"financial.home.showBalance\": \"Show balance\",\n \"financial.home.hideBalance\": \"Hide balance\",\n \"financial.home.upcomingBills\": \"Upcoming bills\",\n \"financial.home.noBills\": \"No upcoming bills.\",\n \"financial.home.dueToday\": \"Due today\",\n \"financial.home.dueTomorrow\": \"Due tomorrow\",\n \"financial.home.dueInDays\": \"Due in {{count}} days\",\n \"financial.home.overdueDays\": \"Overdue by {{count}} days\",\n \"financial.home.cards\": \"Cards\",\n \"financial.home.currentBill\": \"Current bill\",\n \"financial.home.availableLimit\": \"Available limit\",\n \"financial.home.addCard\": \"New card\",\n \"financial.home.bill\": \"Bill\",\n \"financial.home.spendByCategory\": \"Spending by category\",\n \"financial.home.noSpend\": \"No spending this month.\",\n \"financial.home.category.groceries\": \"Groceries\",\n \"financial.home.category.transport\": \"Transport\",\n \"financial.home.category.subscriptions\": \"Subscriptions\",\n \"financial.home.category.dining\": \"Dining\",\n \"financial.home.category.home\": \"Home\",\n \"financial.home.category.health\": \"Health\",\n \"financial.home.category.leisure\": \"Leisure\",\n \"financial.home.category.shopping\": \"Shopping\",\n \"financial.home.category.other\": \"Other\",\n \"financial.quickActions.newPayable\": \"New Payable\",\n \"financial.quickActions.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.quickActions.newReceivable\": \"New Receivable\",\n \"financial.quickActions.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.quickActions.openCashRegister\": \"Open Cash Register\",\n \"financial.quickActions.openCashRegisterDesc\": \"Start a new cash session\",\n \"financial.cash.title\": \"Cash Registers\",\n \"financial.cash.subtitle\": \"Open, count and close cash sessions\",\n \"financial.cash.bills\": \"Bills\",\n \"financial.cash.coins\": \"Coins\",\n \"financial.cash.noAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cash.empty.heading\": \"Start by opening the day's register\",\n \"financial.cash.empty.because\": \"The cash register tracks money in and out at the desk, and at closing shows whether the drawer matches what the system expected. It needs an account to work.\",\n \"financial.cash.empty.step\": \"An account of type Cash Register\",\n \"financial.cash.empty.stepWhere\": \"Records → Accounts\",\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.expectedInDrawer\": \"Expected in drawer\",\n \"financial.cash.difference\": \"Cash difference\",\n \"financial.cash.receivedInShift\": \"Received this shift\",\n \"financial.method.cash\": \"Cash\",\n \"financial.method.pix\": \"Pix\",\n \"financial.method.credit_card\": \"Credit card\",\n \"financial.method.debit_card\": \"Debit card\",\n \"financial.method.bank_transfer\": \"Transfer\",\n \"financial.method.boleto\": \"Boleto\",\n \"financial.method.check\": \"Check\",\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.reviewQueue\": \"Close review\",\n \"financial.cash.reviewSeeAll\": \"See all {count} closes\",\n \"financial.cash.reviewToday\": \"Today\",\n \"financial.cash.reviewYesterday\": \"Yesterday\",\n \"financial.cash.reviewQueueEmpty\": \"No closes waiting for review.\",\n \"financial.cash.closedBy\": \"Closed by\",\n \"financial.cash.approve\": \"Approve\",\n \"financial.cash.reject\": \"Reject\",\n \"financial.cash.cannotReviewOwn\": \"You closed this register — someone else reviews it.\",\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.cash.noOpenSessions\": \"No open cash sessions.\",\n \"financial.cash.tabOpen\": \"Open\",\n \"financial.cash.tabClosed\": \"Closed\",\n \"financial.cash.tabReview\": \"Review\",\n \"financial.cash.user\": \"User\",\n \"financial.cash.openingDate\": \"Opening Date\",\n \"financial.cash.accountLabel\": \"Cash Register Account\",\n \"financial.cash.review\": \"Review\",\n \"financial.cash.reviewModalTitle\": \"Review closing\",\n \"financial.cash.detailsModalTitle\": \"Session details\",\n \"financial.cash.summary\": \"Summary\",\n \"financial.cash.transactions\": \"Transactions\",\n \"financial.cash.noTransactions\": \"No transactions in this session.\",\n \"financial.cash.finalValue\": \"Final counted value\",\n \"financial.cash.movementCount\": \"Movements\",\n \"financial.cash.totalIn\": \"Total received\",\n \"financial.cash.totalOut\": \"Total withdrawn\",\n \"financial.cash.confirmAndApprove\": \"Confirm & approve\",\n \"financial.cash.details\": \"Details\",\n \"financial.cash.print\": \"Print\",\n \"financial.cash.verdictApproved\": \"Approved\",\n \"financial.cash.verdictRejected\": \"Rejected\",\n \"financial.cash.verdictPending\": \"Pending\",\n \"financial.cash.reviewedBy\": \"Reviewed by\",\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.statusProvisioned\": \"Forecast\",\n \"financial.invoice.consolidate\": \"Consolidate\",\n \"financial.invoice.consolidated\": \"Bill created\",\n \"financial.invoice.consolidateFailed\": \"Could not consolidate\",\n \"financial.invoice.statusPending\": \"Pending\",\n \"financial.invoice.statusDraft\": \"Draft\",\n \"financial.invoice.columnDate\": \"Date\",\n \"financial.invoice.columnDueDate\": \"Due date\",\n \"financial.invoice.columnDescription\": \"Description\",\n \"financial.invoice.columnAmount\": \"Amount\",\n \"financial.invoice.columnPaid\": \"Paid\",\n \"financial.invoice.columnPaymentMethod\": \"Method\",\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.account\": \"Chart account\",\n \"financial.invoiceForm.accountNone\": \"Not assigned\",\n \"financial.invoiceForm.costCenter\": \"Cost center\",\n \"financial.invoiceForm.costCenterNone\": \"Not assigned\",\n \"financial.invoiceForm.surcharge\": \"Surcharge\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Account\",\n \"financial.payment.due\": \"Due:\",\n \"financial.payment.paidAmount\": \"Paid:\",\n \"financial.payment.paidOn\": \"Paid on:\",\n \"financial.title\": \"Financial\",\n \"financial.summary.title\": \"Financial Summary\",\n \"financial.summary.revenue\": \"Revenue\",\n \"financial.invoice.title\": \"Invoices\",\n \"financial.invoice.create\": \"New Invoice\",\n \"financial.invoice.number\": \"Invoice #\",\n \"financial.invoice.client\": \"Client\",\n \"financial.invoice.amount\": \"Amount\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Due Date\",\n \"financial.invoice.addItem\": \"Add Item\",\n \"financial.invoice.tax\": \"Tax\",\n \"financial.invoice.save\": \"Save Invoice\",\n \"financial.invoice.saving\": \"Saving...\",\n \"financial.invoice.markPaid\": \"Mark as Paid\",\n \"financial.invoice.sendReminder\": \"Send Reminder\",\n \"financial.receivable.title\": \"Accounts Receivable\",\n \"financial.payable.title\": \"Accounts Payable\",\n \"financial.statements.loading\": \"Loading...\",\n \"financial.cards.empty\": \"No card transactions yet\",\n \"financial.commissions.title\": \"Commissions\",\n \"financial.cashRegister.title\": \"Cash Register\",\n \"financial.cashRegister.open\": \"Open Register\",\n \"financial.cashRegister.close\": \"Close Register\",\n \"financial.movements.title\": \"Movements\",\n \"financial.bankAccounts.title\": \"Bank Accounts\",\n \"financial.settings.title\": \"Financial Settings\",\n // Settings registry tabs\n \"registry.payment-methods\": \"Payment Methods\",\n \"registry.payment-methods.description\": \"Configured payment methods with fees and installment rules\",\n \"registry.bank-accounts\": \"Accounts\",\n \"registry.bank-accounts.description\": \"Bank accounts, cash registers, credit cards, and digital wallets\",\n \"registry.chart-of-accounts\": \"Chart of Accounts\",\n \"registry.chart-of-accounts.description\": \"Hierarchical chart of accounts for categorizing transactions\",\n \"registry.discount-reasons\": \"Discount reasons\",\n \"settings.plugin.financial.payment-methods\": \"Payment methods\",\n \"settings.plugin.financial._general\": \"Financial preferences\",\n \"settings.plugin.financial._integrations\": \"Financial connectors\",\n \"settings.plugin.financial.payment-method-types\": \"Payment method types\",\n \"settings.plugin.financial.card-brands\": \"Card brands\",\n \"settings.plugin.financial.chart-of-accounts\": \"Chart of accounts\",\n \"settings.plugin.financial.cost-centers\": \"Cost centers\",\n \"settings.plugin.financial.price-tables\": \"Price tables\",\n \"settings.plugin.financial.bank-accounts\": \"Bank accounts\",\n \"settings.plugin.financial.discount-reasons\": \"Discount reasons\",\n \"registry.cost-centers\": \"Cost Centers\",\n \"registry.cost-centers.description\": \"Cost centers for expense tracking and departmental budgets\",\n \"registry.commission-rules\": \"Commission Rules\",\n \"registry.commission-rules.description\": \"Commission rules for service and product revenue sharing\",\n \"registry.price-tables\": \"Price Tables\",\n \"registry.price-tables.description\": \"Price tables for sale and cost pricing\",\n \"registry.price-variations\": \"Price Variations\",\n \"registry.price-variations.description\": \"Discount and surcharge rules for pricing\",\n \"registry.payment-method-types\": \"Payment Types\",\n \"registry.payment-method-types.description\": \"System payment types (cash, card, PIX, etc.)\",\n \"registry.card-brands\": \"Card Brands\",\n \"registry.card-brands.description\": \"Credit and debit card brands\",\n // Statements / extract\n \"financial.statements.columnDate\": \"Date\",\n \"financial.statements.columnDescription\": \"Description\",\n \"financial.statements.columnDebit\": \"Debit\",\n \"financial.statements.columnCredit\": \"Credit\",\n \"financial.statements.columnFee\": \"Fee\",\n \"financial.statements.columnBalance\": \"Balance\",\n \"financial.statements.columnMethod\": \"Method\",\n \"financial.statements.columnDoc\": \"Document\",\n \"financial.statements.installmentShort\": \"Inst. {{n}}\",\n \"financial.statements.viewInvoice\": \"View invoice\",\n \"financial.person.empty\": \"No financial activity for this contact yet\",\n \"financial.statements.opening\": \"Opening balance\",\n \"financial.statements.closing\": \"Closing balance\",\n \"financial.statements.currentBalance\": \"Current balance\",\n \"financial.statements.totalCredits\": \"Credits\",\n \"financial.statements.totalDebits\": \"Debits\",\n \"financial.statements.totalFees\": \"Fees\",\n \"financial.statements.net\": \"Net\",\n \"financial.statements.transfer\": \"Transfer\",\n \"financial.statements.untitledEntry\": \"Transaction\",\n \"financial.statements.reconciled\": \"Reconciled with the bank statement\",\n \"financial.statements.imported\": \"Imported from the bank · not reconciled\",\n \"financial.statements.reconciledWith\": \"Reconciled with {{ref}}\",\n \"financial.statements.newTransfer\": \"New Transfer\",\n // Transfer dialog\n \"financial.transfer.title\": \"Transfer Between Accounts\",\n \"financial.transfer.from\": \"From account\",\n \"financial.transfer.to\": \"To account\",\n \"financial.transfer.amount\": \"Amount\",\n \"financial.transfer.date\": \"Date\",\n \"financial.transfer.notes\": \"Notes\",\n \"financial.transfer.optionalNotes\": \"Optional notes...\",\n \"financial.transfer.selectAccount\": \"Select account...\",\n \"financial.transfer.submit\": \"Transfer\",\n \"financial.transfer.processing\": \"Transferring...\",\n \"financial.transfer.cancel\": \"Cancel\",\n \"financial.transfer.created\": \"Transfer recorded\",\n \"financial.transfer.failed\": \"Failed to record transfer\",\n \"financial.transfer.sameAccount\": \"Source and destination must differ\",\n \"financial.transfer.invalidAmount\": \"Amount must be greater than zero\",\n \"financial.quickTx.title\": \"New transaction\",\n \"financial.quickTx.close\": \"Close\",\n \"financial.quickTx.newTransaction\": \"New transaction\",\n \"financial.quickTx.expense\": \"Expense\",\n \"financial.quickTx.income\": \"Income\",\n \"financial.quickTx.transfer\": \"Transfer\",\n \"financial.quickTx.paid\": \"Paid\",\n \"financial.quickTx.received\": \"Received\",\n \"financial.quickTx.yes\": \"Yes\",\n \"financial.quickTx.no\": \"No\",\n \"financial.quickTx.category\": \"Category\",\n \"financial.quickTx.selectCategory\": \"No category\",\n \"financial.quickTx.account\": \"Account\",\n \"financial.quickTx.selectAccount\": \"Select account\",\n \"financial.quickTx.fromAccount\": \"From account\",\n \"financial.quickTx.toAccount\": \"To account\",\n \"financial.quickTx.card\": \"Card\",\n \"financial.quickTx.recurring\": \"Recurring\",\n \"financial.quickTx.attachment\": \"Attachment\",\n \"financial.quickTx.attachmentSoon\": \"Attachments coming soon\",\n \"financial.quickTx.receipt\": \"Receipt\",\n \"financial.quickTx.receiptCapture\": \"Attach a receipt or bill (photo or PDF)\",\n \"financial.quickTx.receiptAttached\": \"Receipt attached\",\n \"financial.quickTx.receiptReplace\": \"Replace\",\n \"financial.quickTx.receiptRemove\": \"Remove receipt\",\n \"financial.quickTx.receiptInvalid\": \"Please choose an image or PDF\",\n \"financial.quickTx.sendReceipt\": \"Send receipt\",\n \"financial.quickTx.digitizeExpense\": \"Digitize expense\",\n \"financial.quickTx.digitizeReceipt\": \"Digitize receipt\",\n \"financial.invoice.importPayroll\": \"Import payroll\",\n \"financial.invoice.importPayrollSoon\": \"Coming soon\",\n \"financial.receipt.ask\": \"Send the receipt photo…\",\n \"financial.receipt.attachRead\": \"Attach the receipt the assistant read\",\n \"financial.receipt.fromReceipt\": \"From the receipt\",\n \"financial.receipt.finishContact\": \"Finish adding\",\n \"financial.receipt.prompt\": \"Read this receipt and open the payable form with whatever it states.\",\n \"financial.receipt.askReceivable\": \"Send the photo or PDF of the invoice you issued…\",\n \"financial.receipt.promptReceivable\": \"Read this invoice and open the receivable form with the customer (recipient), amount, NF-e number and access key it states.\",\n \"financial.quickTx.descriptionPlaceholder\": \"e.g. Groceries, Salary…\",\n \"financial.quickTx.enterAmount\": \"Enter an amount\",\n \"financial.quickTx.save\": \"Save\",\n \"financial.quickTx.saving\": \"Saving…\",\n // Chart of accounts tree\n \"financial.chartTree.searchPlaceholder\": \"Search by code or name\",\n \"financial.chartTree.clearSearch\": \"Clear search\",\n \"financial.chartTree.expandAll\": \"Expand all\",\n \"financial.chartTree.collapseAll\": \"Collapse all\",\n \"financial.chartTree.expand\": \"Expand\",\n \"financial.chartTree.collapse\": \"Collapse\",\n \"financial.chartTree.addRoot\": \"New root account\",\n \"financial.chartTree.addChild\": \"New account inside this one\",\n \"financial.chartTree.edit\": \"Edit\",\n \"financial.chartTree.deactivate\": \"Deactivate\",\n \"financial.chartTree.reactivate\": \"Reactivate\",\n \"financial.chartTree.delete\": \"Delete\",\n \"financial.chartTree.confirmDelete\": \"Delete this account?\",\n \"financial.chartTree.cancel\": \"Cancel\",\n \"financial.chartTree.save\": \"Save\",\n \"financial.chartTree.saving\": \"Saving…\",\n \"financial.chartTree.searching\": \"Searching…\",\n \"financial.chartTree.count\": \"{{count}} accounts\",\n \"financial.chartTree.countOne\": \"1 account\",\n \"financial.chartTree.matchesOne\": \"1 account found\",\n \"financial.chartTree.matches\": \"{{count}} accounts found\",\n \"financial.chartTree.showInactive\": \"Show inactive ({{count}})\",\n \"financial.chartTree.inactive\": \"Inactive\",\n \"financial.chartTree.empty\": \"No accounts yet. Create the first root account.\",\n \"financial.chartTree.noMatches\": \"No account matches the search.\",\n \"financial.chartTree.noGroups\": \"No group found\",\n \"financial.chartTree.rootLevel\": \"Root level (no parent)\",\n \"financial.chartTree.group\": \"Group (holds other accounts)\",\n \"financial.chartTree.leaf\": \"Account (receives postings)\",\n \"financial.chartTree.field.code\": \"Code\",\n \"financial.chartTree.field.name\": \"Name\",\n \"financial.chartTree.field.structure\": \"Structure\",\n \"financial.chartTree.field.nature\": \"Nature\",\n \"financial.chartTree.field.parent\": \"Parent account\",\n \"financial.chartTree.nature.none\": \"No nature\",\n \"financial.chartTree.nature.revenue\": \"Revenue\",\n \"financial.chartTree.nature.expense\": \"Expense\",\n \"financial.chartTree.nature.asset\": \"Asset\",\n \"financial.chartTree.nature.liability\": \"Liability\",\n \"financial.chartTree.nature.equity\": \"Equity\",\n \"financial.chartTree.created\": \"Account \\\"{{name}}\\\" created\",\n \"financial.chartTree.updated\": \"Account \\\"{{name}}\\\" updated\",\n \"financial.chartTree.deactivated\": \"Account \\\"{{name}}\\\" deactivated\",\n \"financial.chartTree.reactivated\": \"Account \\\"{{name}}\\\" reactivated\",\n \"financial.chartTree.deleted\": \"Account \\\"{{name}}\\\" deleted\",\n \"financial.chartTree.error.save\": \"Could not save. If the account already has postings, deactivate it instead of deleting.\",\n \"financial.chartTree.error.load\": \"Could not load the chart of accounts.\",\n \"financial.chartTree.error.codeRequired\": \"Enter the account code.\",\n \"financial.chartTree.error.nameRequired\": \"Enter the account name.\",\n \"financial.chartTree.error.codeTaken\": \"Code {{code}} is already used by \\\"{{name}}\\\".\",\n \"financial.chartTree.error.leafWithChildren\": \"An account with accounts inside it must stay a group.\",\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"financial.payment.pendingRetry\": \"A confirmação ainda está pendente. Não abra outro pagamento — tente de novo aqui mesmo.\",\n \"financial.cards.addExpense\": \"Adicionar despesa\",\n \"financial.cards.expenseOnCard\": \"Despesa neste cartão\",\n \"financial.cards.allBillsValue\": \"Total das faturas\",\n \"financial.cards.availableLimit\": \"Limite disponível\",\n \"financial.cards.currentBill\": \"Fatura atual\",\n \"financial.cards.dueOn\": \"Vence dia {{day}}\",\n \"financial.cards.installment\": \"Parcela {{current}}/{{total}}\",\n \"financial.cards.loading\": \"Carregando...\",\n \"financial.cards.noCards\": \"Nenhum cartão cadastrado\",\n \"financial.cards.noCardsHint\": \"Adicione um cartão de crédito nas configurações para acompanhar suas faturas aqui\",\n \"financial.cards.empty.step\": \"Uma conta do tipo Cartão de Crédito\",\n \"financial.cards.empty.stepWhere\": \"Cadastros → Contas\",\n \"financial.cards.noTransactions\": \"Nenhuma transação com cartão\",\n \"financial.cards.tabClosed\": \"Fechados\",\n \"financial.cards.tabOpen\": \"Abertos\",\n \"financial.cards.usedOfLimit\": \"{{percent}}% do limite usado\",\n \"financial.cards.pending\": \"Pendente\",\n \"financial.cards.received\": \"Recebido\",\n \"financial.cards.subtitle\": \"Transações de cartão de crédito e débito\",\n \"financial.cards.title\": \"Cartões\",\n \"financial.cards.transactions\": \"({{count}} transações)\",\n \"financial.cards.transactionsAppear\": \"As transações com cartão aparecerão aqui quando pagamentos forem feitos via cartão de crédito/débito\",\n \"financial.cashRegisters.addNotes\": \"Adicionar observações\",\n \"financial.cashRegisters.back\": \"Voltar\",\n \"financial.cashRegisters.bills\": \"Notas\",\n \"financial.cashRegisters.closeSession\": \"Fechar Sessão\",\n \"financial.cashRegisters.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cashRegisters.closing\": \"Fechando...\",\n \"financial.cashRegisters.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cashRegisters.closingNotes\": \"Observações de Fechamento\",\n \"financial.cashRegisters.coins\": \"Moedas\",\n \"financial.cashRegisters.confirmOpen\": \"Confirmar e Abrir\",\n \"financial.cashRegisters.confirmOpening\": \"Confirmar Abertura do Caixa\",\n \"financial.cashRegisters.count\": \"Contagem\",\n \"financial.cashRegisters.countBills\": \"Contar Notas e Moedas\",\n \"financial.cashRegisters.countedTotal\": \"Total Contado\",\n \"financial.cashRegisters.denominationCount\": \"Contagem por denominação\",\n \"financial.cashRegisters.differenceFromOpening\": \"Diferença em relação à abertura\",\n \"financial.cashRegisters.method\": \"Método\",\n \"financial.cashRegisters.noCashAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cashRegisters.noClosedSessions\": \"Nenhuma sessão encerrada ainda\",\n \"financial.cashRegisters.openAnother\": \"Abrir outro caixa\",\n \"financial.cashRegisters.openSession\": \"Abrir Sessão\",\n \"financial.cashRegisters.openSessions\": \"Sessões Abertas\",\n \"financial.cashRegisters.opened\": \"Aberto\",\n \"financial.cashRegisters.opening\": \"Abrindo...\",\n \"financial.cashRegisters.openingBalance\": \"Saldo de Abertura\",\n \"financial.cashRegisters.quickAmount\": \"Valor Rápido\",\n \"financial.cashRegisters.register\": \"Caixa\",\n \"financial.cashRegisters.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cashRegisters.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.commissions.emptyTitle\": \"Nenhuma comissão calculada\",\n \"financial.commissions.emptyDesc\": \"Este módulo guarda as regras de comissão, mas ainda não há nada que calcule comissão a partir das suas vendas.\",\n \"financial.commissions.emptyRulesHint\": \"As regras de comissão ficam em Configurações › Financeiro › Propriedades.\",\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.bulkCancel\": \"Cancelar\",\n \"financial.invoice.rowOpen\": \"Abrir\",\n \"financial.invoice.rowAttachments\": \"Anexos\",\n \"financial.invoice.bulkCancelDone\": \"{{count}} fatura(s) cancelada(s)\",\n \"financial.invoice.bulkCancelFailed\": \"{{count}} fatura(s) não puderam ser canceladas\",\n \"financial.invoice.bulkCancelNone\": \"Nenhuma das faturas selecionadas pode ser cancelada.\",\n \"financial.invoice.bulkCancelTitle\": \"Cancelar {{count}} fatura(s)?\",\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.cancelReason\": \"Motivo do cancelamento\",\n \"financial.invoice.cancelReasonPlaceholder\": \"Explique por que esta fatura está sendo cancelada\",\n \"financial.invoice.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoice.cancelling\": \"Cancelando...\",\n \"financial.invoice.contact\": \"Contato\",\n \"financial.invoice.payTo\": \"Pagar a\",\n \"financial.invoice.receiveFrom\": \"Receber de\",\n \"financial.invoice.unit\": \"Unidade\",\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.item\": \"Item\",\n \"financial.invoice.items\": \"Itens\",\n \"financial.invoice.noLines\": \"Sem itens — o total foi lançado sem as linhas. Edite para detalhar.\",\n \"financial.invoice.keepInvoice\": \"Manter Fatura\",\n \"financial.invoice.new\": \"Nova\",\n \"financial.invoice.newManual\": \"Cadastrar\",\n \"financial.invoiceForm.createContact\": \"Cadastrar\",\n \"financial.invoiceForm.alreadyPaid\": \"Já foi pago\",\n \"financial.invoiceForm.paidWith\": \"Forma de pagamento\",\n \"financial.invoiceForm.paidFrom\": \"Saiu de\",\n \"financial.invoiceForm.selectMethod\": \"Selecione a forma\",\n \"financial.invoiceForm.selectAccount\": \"Selecione a conta\",\n \"financial.invoiceForm.selectMethodFirst\": \"Escolha a forma primeiro\",\n \"financial.invoiceForm.scheduleSourceHint\": \"Forma e conta ficam configuráveis em cada vencimento.\",\n \"financial.invoiceForm.paidNeedsMethod\": \"Diga a forma de pagamento e a conta\",\n \"financial.invoiceForm.willBePaid\": \"Esta parcela entra como paga\",\n \"financial.invoiceForm.attachFailed\": \"A conta foi salva, mas um anexo não subiu\",\n \"financial.invoiceForm.attachOnSave\": \"anexa ao salvar\",\n \"financial.invoiceForm.clear\": \"Limpar\",\n \"financial.invoiceForm.manageAccounts\": \"Gerenciar contas\",\n \"financial.invoiceForm.manageChart\": \"Gerenciar plano de contas\",\n \"financial.invoiceForm.manageCostCenters\": \"Gerenciar centros de custo\",\n \"financial.invoice.newManualHint\": \"Preencher os campos da conta\",\n \"financial.invoice.noDetails\": \"Nenhum detalhe adicional registrado\",\n \"financial.invoice.unlinkedPayments\": \"Pagamentos sem parcela vinculada\",\n \"financial.invoice.unlinkedPaymentsDesc\": \"Dinheiro registrado nesta fatura que não aponta para nenhuma das parcelas acima.\",\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.loadFailed\": \"Não foi possível carregar\",\n \"financial.invoice.loadFailedDesc\": \"A leitura desta fatura falhou. O dado continua no lugar — só não chegou até aqui.\",\n \"financial.invoice.retry\": \"Tentar de novo\",\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.receive\": \"Receber\",\n \"financial.invoice.reverse\": \"Estornar\",\n \"financial.invoice.reverseTitle\": \"Estornar pagamento\",\n \"financial.invoice.reverseReason\": \"Motivo do estorno\",\n \"financial.invoice.reverseHint\": \"{{count}} pagamento(s) · {{total}}\",\n \"financial.invoice.reversePayments\": \"Pagamentos desta parcela\",\n \"financial.invoice.reverseExplain\": \"Todos vêm marcados: estornar só um deixa a parcela parcial. Cada estorno lança a contrapartida na mesma conta, e a parcela volta a ficar em aberto.\",\n \"financial.invoice.reverseConfirm\": \"Estornar {{total}}\",\n \"financial.invoice.paymentSchedule\": \"Vencimentos\",\n \"financial.invoiceForm.scheduleLocked\": \"Parcelas já pagas — o parcelamento não pode mais ser refeito.\",\n \"financial.invoiceForm.scheduleHasCancelled\": \"Esta conta tem parcela cancelada — valor e parcelamento não podem mais ser refeitos, só o vencimento.\",\n \"financial.invoiceForm.issuedLocked\": \"Conta emitida: valor, itens, fornecedor e data ficam travados. Para mudar, cancele e lance uma nova. Observações, unidade, nº do documento e vencimentos continuam editáveis.\",\n \"financial.invoiceForm.issuedEditable\": \"Conta emitida: valor, itens e fornecedor ficam travados. Para mudar, cancele e lance uma nova. Enquanto nada for pago, a data e o parcelamento continuam editáveis.\",\n \"financial.invoiceForm.edit\": \"Editar\",\n \"financial.invoice.payment\": \"Pagamento\",\n \"financial.invoice.balance\": \"Restante\",\n \"financial.invoice.details\": \"Detalhes\",\n \"financial.invoice.remaining\": \"Restante:\",\n \"financial.invoice.searchPlaceholder\": \"Buscar por contato, descrição ou documento…\",\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.tags\": \"Etiquetas\",\n \"financial.invoiceForm.currency\": \"Moeda\",\n \"financial.invoiceForm.addItem\": \"Adicionar Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Adicione itens primeiro\",\n \"financial.invoiceForm.contactRequired\": \"Selecione quem vai pagar ou receber antes de adicionar itens.\",\n \"financial.invoiceForm.additionalNotes\": \"Observações adicionais...\",\n \"financial.itemType.service\": \"Serviço\",\n \"financial.itemType.package\": \"Pacote\",\n \"financial.itemType.product\": \"Produto\",\n \"financial.itemType.other\": \"Outro\",\n \"financial.itemType.gift_card\": \"Gift Card\",\n \"financial.giftCardLine.label\": \"Código do gift card\",\n \"financial.giftCardLine.placeholder\": \"0000 0000 0000 0000\",\n \"financial.giftCardLine.hint\": \"Escaneie ou digite o código completo do cartão.\",\n \"financial.giftCardLine.notFound\": \"Gift card não encontrado\",\n \"financial.giftCardLine.revoked\": \"Gift card cancelado — não pode ser vendido\",\n \"financial.giftCardLine.expired\": \"Gift card expirado\",\n \"financial.giftCardLine.alreadySold\": \"Este gift card já foi vendido\",\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 // Título da migalha (\"← Mensalidades / Nova\"). Genérico de propósito: o nome\n // do documento é do app (Mensalidades, Contas a Receber), e repeti-lo aqui\n // escreveria \"fatura\" numa tela que o app chama de outra coisa.\n \"financial.invoiceForm.editTitle\": \"Editar\",\n \"financial.invoiceForm.newTitle\": \"Nova\",\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.searchMinChars\": \"Digite pelo menos 2 caracteres para buscar.\",\n \"financial.invoiceForm.searchUnit\": \"Buscar unidade...\",\n \"financial.invoiceForm.selectInstallments\": \"Selecione a quantidade de parcelas acima\",\n \"financial.invoiceForm.selectContactFirst\": \"Selecione primeiro quem vai pagar ou receber para adicionar itens.\",\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.goals\": \"Metas\",\n \"financial.nav.giftCards\": \"Gift Cards\",\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.recurring\": \"Recorrentes\",\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.notasFiscais\": \"Notas Fiscais\",\n \"financial.nav.fiscal\": \"Fiscal\",\n \"financial.nav.fiscalIssued\": \"Notas Emitidas\",\n \"financial.nav.fiscalGroups\": \"Grupos Fiscais\",\n \"financial.nav.recurringExpenses\": \"Despesas Recorrentes\",\n \"financial.nav.recurringIncome\": \"Receitas Recorrentes\",\n \"financial.nav.rules\": \"Regras\",\n \"financial.nav.statements\": \"Extratos\",\n \"financial.nav.summary\": \"Resumo\",\n \"financial.invoice.filterAccount\": \"Plano de contas\",\n \"financial.invoice.filterAllAccounts\": \"Todos os planos\",\n \"financial.invoice.filterCostCenter\": \"Centro de custo\",\n \"financial.invoice.filterAllCostCenters\": \"Todos os centros\",\n \"financial.invoice.filterPeriod\": \"Período\",\n \"financial.invoice.filterAllPeriods\": \"Todo o período\",\n \"financial.invoice.filterThisMonth\": \"Este mês\",\n \"financial.invoice.filterLastMonth\": \"Mês passado\",\n \"financial.invoice.filterLast30\": \"Últimos 30 dias\",\n \"financial.invoice.filterLast90\": \"Últimos 90 dias\",\n \"financial.invoice.filterMaxRange\": \"Período máximo de 90 dias\",\n \"financial.invoice.filterThisYear\": \"Este ano\",\n \"financial.invoice.filterCustom\": \"Personalizado\",\n \"financial.invoice.filterFrom\": \"De\",\n \"financial.invoice.filterTo\": \"Até\",\n \"financial.invoice.filterClear\": \"Limpar\",\n \"financial.invoice.filterApply\": \"Buscar\",\n \"financial.invoice.filterMore\": \"Mais filtros\",\n \"financial.invoice.filterLess\": \"Menos filtros\",\n \"financial.invoice.filterPending\": \"Filtros alterados\",\n \"financial.invoice.filterPendingHint\": \"A lista ainda mostra o recorte anterior. Clique em Buscar para aplicar.\",\n \"financial.invoice.filterUnit\": \"Unidade\",\n \"financial.invoice.filtersTitle\": \"Filtros\",\n \"financial.invoice.filterShow\": \"Exibir\",\n \"financial.invoice.filterAllStatuses\": \"Todos\",\n \"financial.invoice.filterContactPlaceholder\": \"Digite...\",\n \"financial.invoice.filterAllContacts\": \"Todos\",\n \"financial.invoice.filterFiscalNumber\": \"Nota Fiscal\",\n \"financial.invoice.filterPaymentAccount\": \"Conta de pagamento\",\n \"financial.invoice.filterReceiptAccount\": \"Conta de recebimento\",\n \"financial.invoice.filterAllBankAccounts\": \"Todas as contas\",\n \"financial.invoice.filterFiscalNumberPlaceholder\": \"Nº\",\n \"financial.invoice.filterAllUnits\": \"Todas as unidades\",\n \"financial.invoice.generateCnab\": \"Gerar CNAB 240\",\n \"financial.invoice.printSelected\": \"Imprimir\",\n \"financial.invoice.exportSelected\": \"Exportar CSV\",\n \"financial.invoice.printBlocked\": \"Permita pop-ups para imprimir a seleção.\",\n \"financial.reconciliation.filtersTitle\": \"Filtros\",\n \"financial.reconciliation.filterApply\": \"Buscar\",\n \"financial.reconciliation.filterPending\": \"Filtros alterados\",\n \"financial.reconciliation.filterPendingHint\": \"O extrato ainda mostra o recorte anterior. Clique em Filtrar para aplicar.\",\n \"financial.paymentReceipt.title\": \"Detalhes do Pagamento\",\n \"financial.paymentReceipt.titleReversal\": \"Detalhes do Estorno\",\n \"financial.paymentReceipt.open\": \"Ver os detalhes deste pagamento\",\n \"financial.paymentReceipt.count\": \"{{count}} pagamentos\",\n \"financial.paymentReceipt.reversedCount\": \"{{count}} pagamento(s) estornado(s)\",\n \"financial.paymentReceipt.show\": \"Ver\",\n \"financial.paymentReceipt.hide\": \"Ocultar\",\n \"financial.paymentReceipt.reversedOn\": \"Estornado em {{date}}\",\n \"financial.paymentReceipt.reversed\": \"Estornado\",\n \"financial.paymentReceipt.paymentNumber\": \"Pagamento {{number}}\",\n \"financial.paymentReceipt.reversalNumber\": \"Estorno {{number}}\",\n \"financial.paymentReceipt.empty\": \"Nenhum pagamento registrado nesta parcela.\",\n \"financial.paymentReceipt.date\": \"Data\",\n \"financial.paymentReceipt.amount\": \"Valor\",\n \"financial.paymentReceipt.methodOut\": \"Forma Pgto.\",\n \"financial.paymentReceipt.methodIn\": \"Forma Receb.\",\n \"financial.paymentReceipt.methodNone\": \"N/A\",\n \"financial.paymentReceipt.account\": \"Conta\",\n \"financial.paymentReceipt.cardBrand\": \"Bandeira\",\n \"financial.paymentReceipt.fee\": \"Taxa\",\n \"financial.paymentReceipt.payer\": \"Pagador\",\n \"financial.paymentReceipt.receivedFrom\": \"Recebido de\",\n \"financial.paymentReceipt.paidBy\": \"Pago por\",\n \"financial.paymentReceipt.receivedBy\": \"Recebido por\",\n \"financial.paymentReceipt.cashSession\": \"Caixinha\",\n \"financial.paymentReceipt.cashSessionYes\": \"Sim\",\n \"financial.paymentReceipt.notes\": \"Obs\",\n \"financial.paymentReceipt.unlink\": \"Desvincular desta parcela\",\n \"financial.paymentReceipt.unlinkUnavailable\": \"Ainda não disponível: desvincular preserva o pagamento e devolve o valor como crédito da contraparte, e isso precisa de uma operação no banco que ainda não existe.\",\n \"financial.paymentReceipt.reverse\": \"Estornar este pagamento\",\n \"financial.reconciliation.title\": \"Conciliação\",\n \"financial.reconciliation.subtitle\": \"Concilie as linhas importadas do banco com seus lançamentos\",\n \"financial.reconciliation.pending\": \"{{count}} para conciliar\",\n \"financial.reconciliation.allDone\": \"Tudo conciliado\",\n \"financial.reconciliation.empty\": \"Nada para conciliar\",\n \"financial.reconciliation.emptyHint\": \"As transações bancárias importadas aparecem aqui para conciliação.\",\n \"financial.reconciliation.bankLines\": \"Linhas do banco\",\n \"financial.reconciliation.candidates\": \"Correspondências sugeridas\",\n \"financial.reconciliation.selectLine\": \"Selecione uma linha do banco para ver as sugestões\",\n \"financial.reconciliation.noCandidates\": \"Nenhuma correspondência sugerida para esta linha\",\n \"financial.reconciliation.match\": \"Conciliar\",\n \"financial.reconciliation.accept\": \"Aceitar como novo\",\n \"financial.reconciliation.acceptHint\": \"Sem contrapartida interna — manter como lançamento avulso\",\n \"financial.reconciliation.matchScore\": \"{{score}}% compatível\",\n \"financial.reconciliation.refresh\": \"Atualizar\",\n \"financial.reconciliation.from\": \"De\",\n \"financial.reconciliation.to\": \"Até\",\n \"financial.reconciliation.filter\": \"Filtrar\",\n \"financial.reconciliation.filterMore\": \"Mais filtros\",\n \"financial.reconciliation.filterLess\": \"Menos filtros\",\n \"financial.reconciliation.syncNow\": \"Sincronizar agora\",\n \"financial.reconciliation.syncing\": \"Buscando no banco…\",\n \"financial.reconciliation.syncImported\": \"{{count}} lançamento(s) novo(s) do banco\",\n \"financial.reconciliation.syncNothingNew\": \"O banco não tem lançamento novo\",\n \"financial.reconciliation.syncFailed\": \"Não foi possível buscar o extrato do banco\",\n \"financial.reconciliation.batchClassify\": \"Classificar em lote\",\n \"financial.reconciliation.syncStatusSyncing\": \"Sincronizando…\",\n \"financial.reconciliation.syncStatusOk\": \"Sincronizado {{when}}\",\n \"financial.reconciliation.syncStatusNever\": \"Ainda não sincronizado\",\n \"financial.reconciliation.syncStatusPending\": \"Aguardando o banco liberar o extrato\",\n \"financial.reconciliation.syncStatusRevoked\": \"Autorização do banco expirou\",\n \"financial.reconciliation.syncStatusError\": \"Falha ao sincronizar: {{reason}}\",\n \"financial.reconciliation.syncStatusErrorUnknown\": \"o banco não respondeu\",\n \"financial.reconciliation.syncWhenNow\": \"agora\",\n \"financial.reconciliation.syncWhenMinutes\": \"há {{count}} min\",\n \"financial.reconciliation.syncWhenHours\": \"há {{count}} h\",\n \"financial.reconciliation.syncWhenDays\": \"há {{count}} dia(s)\",\n \"financial.reconciliation.group.today\": \"Hoje\",\n \"financial.reconciliation.group.yesterday\": \"Ontem\",\n \"financial.reconciliation.group.thisWeek\": \"Esta semana\",\n \"financial.reconciliation.group.lastWeek\": \"Semana passada\",\n \"financial.reconciliation.group.thisMonth\": \"Este mês\",\n \"financial.reconciliation.group.lastMonth\": \"Mês passado\",\n \"financial.reconciliation.group.older\": \"Anteriores\",\n \"financial.reconciliation.investments\": \"Aplicações e rendimentos\",\n \"financial.reconciliation.investmentsHide\": \"Ocultar\",\n \"financial.reconciliation.investmentsShow\": \"Mostrar\",\n \"financial.reconciliation.pickAccountFirst\": \"Escolha uma conta\",\n \"financial.reconciliation.suggest\": \"Sugerir\",\n \"financial.reconciliation.suggestion\": \"Sugestão\",\n \"financial.reconciliation.suggestionLabel\": \"Sugestão:\",\n \"financial.reconciliation.linkManually\": \"Vincular manualmente\",\n \"financial.reconciliation.viewBillUnavailable\": \"Esta linha foi conciliada sem uma conta para abrir.\",\n \"financial.reconciliation.viewBill\": \"Ver conta\",\n \"financial.reconciliation.installment\": \"Parcela\",\n \"financial.reconciliation.dueShort\": \"Venc.\",\n \"financial.reconciliation.moreCandidates\": \"+{{count}} outra(s) sugestão(ões)\",\n \"financial.reconciliation.credit\": \"Crédito\",\n \"financial.reconciliation.debit\": \"Débito\",\n \"financial.reconciliation.payerLabel\": \"Pagador:\",\n \"financial.reconciliation.supplierLabel\": \"Fornecedor:\",\n \"financial.reconciliation.docPrefix\": \"Doc\",\n \"financial.reconciliation.balanceAt\": \"Saldo:\",\n \"financial.reconciliation.noIntegratedAccount\": \"Nenhuma conta integrada. Ligue o Open Banking em Configurações → Integrações.\",\n \"financial.reconciliation.search\": \"Buscar\",\n \"financial.reconciliation.details\": \"Detalhes\",\n \"financial.reconciliation.detailDate\": \"Data\",\n \"financial.reconciliation.detailEffective\": \"Efetivado em\",\n \"financial.reconciliation.detailCounterparty\": \"Contraparte\",\n \"financial.reconciliation.detailDocument\": \"CPF/CNPJ ou documento\",\n \"financial.reconciliation.detailCode\": \"Código\",\n \"financial.reconciliation.detailCategory\": \"Categoria\",\n \"financial.reconciliation.detailKind\": \"Tipo da transação\",\n \"financial.reconciliation.detailBalance\": \"Saldo na linha\",\n \"financial.reconciliation.detailProvider\": \"Provedor\",\n \"financial.reconciliation.detailExternalId\": \"Identificador do provedor\",\n \"financial.reconciliation.rawPayload\": \"Ver o que o provedor mandou\",\n \"financial.reconciliation.createBill\": \"Lançar como conta\",\n \"financial.reconciliation.createBillAction\": \"Lançar e conciliar\",\n \"financial.reconciliation.billCreated\": \"Conta lançada e conciliada\",\n \"financial.reconciliation.billDescription\": \"Descrição\",\n \"financial.reconciliation.supplier\": \"Fornecedor\",\n \"financial.reconciliation.payer\": \"Pagador\",\n \"financial.reconciliation.chartAccount\": \"Plano de contas\",\n \"financial.reconciliation.chartAccountPlaceholder\": \"Escolher classificação...\",\n \"financial.reconciliation.chartAccountNone\": \"Nenhuma conta do plano encontrada\",\n \"financial.reconciliation.chartAccountHint\": \"É a classificação que faz esta conta aparecer na DRE.\",\n \"financial.reconciliation.markTransfer\": \"Marcar como transferência\",\n \"financial.reconciliation.markTransferAction\": \"Marcar e conciliar\",\n \"financial.reconciliation.transferDone\": \"Transferência registrada\",\n \"financial.reconciliation.transferTo\": \"Conta de destino\",\n \"financial.reconciliation.transferFrom\": \"Conta de origem\",\n \"financial.reconciliation.transferNotes\": \"Observação\",\n \"financial.reconciliation.pickAccount\": \"Escolha a conta\",\n \"financial.reconciliation.account\": \"Conta ou cartão\",\n \"financial.reconciliation.accountRequired\": \"Escolha uma conta para ver o extrato.\",\n \"financial.reconciliation.searchPlaceholder\": \"Descrição ou identificador do provedor...\",\n \"financial.reconciliation.type\": \"Tipo\",\n \"financial.reconciliation.typeAll\": \"Todos\",\n \"financial.reconciliation.typeIn\": \"Entrada\",\n \"financial.reconciliation.typeOut\": \"Saída\",\n \"financial.reconciliation.status\": \"Status\",\n \"financial.reconciliation.statusAll\": \"Todos\",\n \"financial.reconciliation.statusReconciled\": \"Conciliado\",\n \"financial.reconciliation.statusPending\": \"Pendente\",\n \"financial.reconciliation.reconciled\": \"Conciliado\",\n \"financial.reconciliation.undo\": \"Desfazer\",\n \"financial.reconciliation.flowTitle\": \"Conciliar movimentação\",\n \"financial.reconciliation.stepClassify\": \"O que deseja fazer\",\n \"financial.reconciliation.stepItems\": \"Os itens\",\n \"financial.reconciliation.stepDetails\": \"Os detalhes\",\n \"financial.reconciliation.stepConfirm\": \"Confirmar\",\n \"financial.reconciliation.confirmAction\": \"Confirmar\",\n \"financial.reconciliation.howToClassify\": \"Como você quer classificar esta transação?\",\n \"financial.reconciliation.pickIntent\": \"Escolha o que esta transação é\",\n \"financial.reconciliation.foundTitle\": \"Contas encontradas\",\n \"financial.reconciliation.searchWiden\": \"Ampliar busca (±15 dias, qualquer valor)\",\n \"financial.reconciliation.stepSelectBill\": \"Selecione a conta\",\n \"financial.reconciliation.stepAdjust\": \"Ajuste\",\n \"financial.reconciliation.selectBillFor\": \"Extrato de {{date}} · {{description}} ·\",\n \"financial.reconciliation.statusOverdue\": \"Vencido\",\n \"financial.reconciliation.colDue\": \"Venc.\",\n \"financial.reconciliation.colCounterparty\": \"Contraparte\",\n \"financial.reconciliation.colDescription\": \"Número / Descrição\",\n \"financial.reconciliation.colInstallment\": \"Parcela\",\n \"financial.reconciliation.colToReconcile\": \"Valor a conciliar\",\n \"financial.reconciliation.colDelta\": \"Δ vs extrato\",\n \"financial.reconciliation.searchStatusAllShort\": \"Todos\",\n \"financial.reconciliation.searchPendingHint\": \"A lista ainda mostra o recorte anterior. Clique em Filtrar para aplicar.\",\n \"financial.reconciliation.searchTitle\": \"Buscar conta\",\n \"financial.reconciliation.searchDueFrom\": \"Vencimento de\",\n \"financial.reconciliation.searchDueTo\": \"até\",\n \"financial.reconciliation.searchStatus\": \"Situação\",\n \"financial.reconciliation.searchStatusAll\": \"Todos (não conciliados)\",\n \"financial.reconciliation.searchStatusOpen\": \"Em aberto\",\n \"financial.reconciliation.searchStatusPaid\": \"Pagos\",\n \"financial.reconciliation.searchText\": \"Buscar (contraparte, número, descrição)\",\n \"financial.reconciliation.searchTextPlaceholder\": \"Digite e pressione Enter\",\n \"financial.reconciliation.searchAmountMin\": \"Valor mín.\",\n \"financial.reconciliation.searchAmountMax\": \"Valor máx.\",\n \"financial.reconciliation.searchAction\": \"Buscar\",\n \"financial.reconciliation.searchEmpty\": \"Nenhuma conta com esses filtros.\",\n \"financial.reconciliation.searchMore\": \"Carregar mais\",\n \"financial.reconciliation.pickCandidate\": \"Escolha o lançamento a vincular\",\n \"financial.reconciliation.needDescription\": \"Descreva o lançamento\",\n \"financial.reconciliation.intentLink\": \"Vincular a um lançamento\",\n \"financial.reconciliation.intentLinkHint\": \"A conta já existe no sistema — esta linha é a prova de que ela foi paga.\",\n \"financial.reconciliation.intentBillOut\": \"Lançar como conta a pagar\",\n \"financial.reconciliation.intentBillIn\": \"Lançar como conta a receber\",\n \"financial.reconciliation.intentBillHint\": \"O lançamento nunca existiu. Ele nasce aqui, classificado e já quitado.\",\n \"financial.reconciliation.intentTransfer\": \"Transferência entre contas\",\n \"financial.reconciliation.intentTransferHint\": \"Não é receita nem despesa: é dinheiro andando entre duas contas da casa.\",\n \"financial.reconciliation.attachReceipt\": \"Anexar comprovante\",\n \"financial.reconciliation.attachReceiptHint\": \"Cupom fiscal, boleto, recibo — imagem ou PDF. A IA lê e preenche o fornecedor, os itens e o plano de contas. O valor, a data e a conta do extrato ficam travados como fonte da verdade.\",\n \"financial.reconciliation.receiptRead_action\": \"Anexar e ler com IA\",\n \"financial.reconciliation.receiptReplace\": \"Trocar comprovante\",\n \"financial.reconciliation.receiptReading\": \"Lendo o comprovante...\",\n \"financial.reconciliation.receiptRead\": \"Comprovante lido\",\n \"financial.reconciliation.receiptTooBig\": \"Comprovante acima de 10 MB.\",\n \"financial.reconciliation.receiptNoAgent\": \"A leitura por IA precisa do assistente configurado neste app.\",\n \"financial.reconciliation.candidateOpen\": \"Em aberto · {{amount}}\",\n \"financial.reconciliation.candidatePaid\": \"Já quitada\",\n \"financial.reconciliation.dueDate\": \"Vencimento\",\n \"financial.reconciliation.billAmount\": \"Valor da conta\",\n \"financial.reconciliation.items\": \"Itens do comprovante\",\n \"financial.reconciliation.addItem\": \"Adicionar item\",\n \"financial.reconciliation.noItemsHint\": \"Nenhum item identificado. Anexe um comprovante para a IA reconhecer os itens, ou adicione à mão.\",\n \"financial.reconciliation.itemDescription\": \"Descrição\",\n \"financial.reconciliation.itemQuantity\": \"Qtd.\",\n \"financial.reconciliation.itemUnitPrice\": \"Valor unit.\",\n \"financial.reconciliation.itemsSum\": \"Soma dos itens\",\n \"financial.reconciliation.statementTotal\": \"Total do extrato\",\n \"financial.reconciliation.costCenter\": \"Centro de custo\",\n \"financial.reconciliation.costCenterPlaceholder\": \"Nenhum\",\n \"financial.reconciliation.transferHint\": \"A conta do extrato entra automaticamente como a outra ponta.\",\n \"financial.reconciliation.linkOnlyExplain\": \"Esta conta já foi paga no sistema. Confirmar apenas amarra a linha do extrato a ela — sem criar um segundo pagamento e sem mexer no valor.\",\n \"financial.reconciliation.noAdjustmentNeeded\": \"O valor bate com a conta. Nada a ajustar.\",\n \"financial.reconciliation.adjustmentNeeded\": \"O banco tirou {{gap}} {{side}} do que a conta pedia. Diga o que é essa diferença.\",\n \"financial.reconciliation.adjustmentNeededIn\": \"Entrou {{gap}} {{side}} do que a conta cobrava. Diga o que é essa diferença.\",\n \"financial.reconciliation.adjustmentNeedsAccount\": \"Escolha o plano de contas de cada ajuste.\",\n \"financial.reconciliation.adjustmentType\": \"Tipo\",\n \"financial.reconciliation.adjustmentDescriptionPlaceholder\": \"Ex.: juros por atraso\",\n \"financial.reconciliation.adjustmentDefaultInterest\": \"Juros por atraso\",\n \"financial.reconciliation.adjustmentDefaultFine\": \"Multa por atraso\",\n \"financial.reconciliation.adjustmentDefaultDiscountOut\": \"Desconto obtido\",\n \"financial.reconciliation.adjustmentDefaultDiscountIn\": \"Desconto concedido\",\n \"financial.reconciliation.adjustmentMore\": \"a mais\",\n \"financial.reconciliation.adjustmentLess\": \"a menos\",\n \"financial.reconciliation.partialQuestion\": \"Como tratar a diferença\",\n \"financial.reconciliation.partialTitle\": \"Pagamento parcial\",\n \"financial.reconciliation.partialLine\": \"Esta saída paga uma parte; {{rest}} ficam em aberto para a próxima.\",\n \"financial.reconciliation.gapTitle\": \"Explicar a diferença\",\n \"financial.reconciliation.gapLine\": \"Desconto, juros ou multa: a conta fecha com esta saída.\",\n \"financial.reconciliation.partialExplain\": \"Esta saída paga {{paid}} da conta. Os {{rest}} restantes ficam em aberto: concilie a próxima saída com esta mesma conta.\",\n \"financial.reconciliation.summaryPartial\": \"Pagamento parcial: {{rest}} continuam em aberto nesta conta.\",\n \"financial.reconciliation.partialDone\": \"Parte paga. Faltam {{rest}} nesta conta.\",\n \"financial.reconciliation.interest\": \"Juros\",\n \"financial.reconciliation.fine\": \"Multa\",\n \"financial.reconciliation.discount\": \"Desconto\",\n \"financial.reconciliation.adjustmentAmount\": \"Valor\",\n \"financial.reconciliation.adjustmentDescription\": \"Descrição do ajuste\",\n \"financial.reconciliation.addAdjustment\": \"Adicionar ajuste\",\n \"financial.reconciliation.howItSettles\": \"Como esta linha quita\",\n \"financial.reconciliation.settleAmount\": \"Valor\",\n \"financial.reconciliation.settleDate\": \"Data\",\n \"financial.reconciliation.settleAccount\": \"Conta\",\n \"financial.reconciliation.settleAccountUnknown\": \"a conta do extrato\",\n \"financial.reconciliation.settleNote\": \"Observação\",\n \"financial.reconciliation.settleNoMethodHint\": \"Sem forma de pagamento: a forma é o próprio extrato. Quando, onde e quanto vêm do banco — não há o que escolher aqui.\",\n \"financial.reconciliation.howItWasPaid\": \"Como o dinheiro andou\",\n \"financial.reconciliation.noPaymentNeeded\": \"Nada a pagar aqui: o dinheiro já está registrado no sistema.\",\n \"financial.reconciliation.noContact\": \"sem contraparte\",\n \"financial.reconciliation.summaryTransfer\": \"Registrar {{amount}} como transferência com {{account}} e conciliar a linha.\",\n \"financial.reconciliation.summaryBillOut\": \"Criar uma conta a pagar de {{amount}} para {{contact}}, quitá-la e conciliar a linha.\",\n \"financial.reconciliation.summaryBillIn\": \"Criar uma conta a receber de {{amount}} de {{contact}}, quitá-la e conciliar a linha.\",\n \"financial.reconciliation.summarySettle\": \"Quitar a conta em {{amount}} e conciliar a linha.\",\n \"financial.reconciliation.summaryLinkOnly\": \"Amarrar a linha à conta já paga, sem criar pagamento.\",\n \"financial.reconciliation.summaryAdjustments\": \"Mais {{count}} lançamento(s) de ajuste, na mesma data e na mesma conta.\",\n \"financial.reconciliation.settled\": \"Conta quitada e conciliada\",\n \"financial.reconciliation.linked\": \"Linha amarrada à conta\",\n \"financial.payment.amountRequired\": \"Informe o valor\",\n \"financial.payment.methodRequired\": \"Escolha a forma de pagamento\",\n \"financial.payment.accountRequired\": \"Escolha a conta\",\n \"financial.payment.amountFromStatement\": \"O valor vem do extrato\",\n \"financial.reconciliation.pageCredits\": \"Créditos (página)\",\n \"financial.reconciliation.pageDebits\": \"Débitos (página)\",\n \"financial.reconciliation.pageBalance\": \"Saldo (página)\",\n \"financial.reconciliation.pageTotalsHint\": \"Os três somam apenas as linhas desta página — trocar de página troca os números.\",\n \"financial.reconciliation.showing\": \"Mostrando {{from}}–{{to}} de {{total}} registros\",\n \"financial.reconciliation.pageOf\": \"Página {{page}} de {{pages}}\",\n \"financial.reconciliation.first\": \"Primeira\",\n \"financial.reconciliation.previous\": \"Anterior\",\n \"financial.reconciliation.next\": \"Próxima\",\n \"financial.reconciliation.last\": \"Última\",\n \"financial.reconciliation.emptyFiltered\": \"Nenhuma transação no período\",\n \"financial.reconciliation.emptyFilteredHint\": \"Ajuste o período ou o filtro, ou importe o extrato em Configurações → Integrações.\",\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.whichCard\": \"Qual cartão\",\n \"financial.payment.noCompanyCards\": \"Nenhum cartão da empresa cadastrado. Pagamento no cartão precisa do cartão cadastrado.\",\n \"financial.payment.registerCard\": \"Cadastrar cartão (conta do tipo \\\"Cartão a pagar\\\")\",\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.receiveAmount\": \"Receber {{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.payment.titleReceive\": \"Registrar Recebimento\",\n \"financial.payment.changeSource\": \"Alterar forma e conta\",\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.modules\": \"Módulos\",\n \"financial.settings.modulesDesc\": \"O que desta casa aparece no Financeiro\",\n \"financial.settings.commissions\": \"Comissões\",\n \"financial.settings.commissionsDesc\": \"A aba de apuração do que a equipe recebe por venda\",\n \"financial.settings.cashRegistersDesc\": \"Abrir, fechar e conferir o caixa do balcão\",\n \"financial.settings.closing\": \"Fechamento\",\n \"financial.settings.closingDesc\": \"Fechar o período e travar datas passadas\",\n \"financial.settings.invoices\": \"Faturas\",\n \"financial.settings.invoicesDesc\": \"Como faturas e pagamentos são processados\",\n \"financial.settings.notifications\": \"Notificações\",\n \"financial.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"financial.settings.overdueAlerts\": \"Alertas de pagamento atrasado\",\n \"financial.settings.overdueAlertsDesc\": \"Notificar quando faturas passarem da data de vencimento\",\n \"financial.settings.requireDoc\": \"Exigir número do documento\",\n \"financial.settings.requireDocDesc\": \"Tornar obrigatório o número do documento/fatura nos pagamentos\",\n \"financial.settings.requireOpening\": \"Exigir saldo de abertura\",\n \"financial.settings.requireOpeningDesc\": \"O saldo de abertura deve ser confirmado antes de iniciar uma sessão\",\n \"financial.settingsPage.subtitle\": \"Gerenciar métodos de pagamento, contas e configurações\",\n \"financial.settingsPage.title\": \"Configurações Financeiras\",\n \"financial.payment.noMethods\": \"Nenhuma forma de pagamento configurada.\",\n \"financial.payment.configureMethods\": \"Configurar formas de pagamento\",\n \"financial.payment.noAccounts\": \"Nenhuma conta compatível. Crie uma nas Configurações.\",\n \"financial.payment.noAccountForMethod\": \"Nenhuma conta aceita {method}. Cartão liquida numa conta de recebíveis, não no banco.\",\n \"financial.payment.cashNeedsOpenSession\": \"Para receber em dinheiro é preciso ter um caixa aberto — é nele que a conferência do fim do dia acontece.\",\n \"financial.payment.openCashSession\": \"Abrir caixa\",\n \"financial.payment.configureAccounts\": \"Configurar contas\",\n \"financial.statements.generate\": \"Gerar\",\n \"financial.statements.filterPendingHint\": \"O extrato ainda mostra o recorte anterior. Clique em Gerar para aplicar.\",\n \"financial.statements.accountRequired\": \"Escolha uma conta\",\n \"financial.statements.operationTypes\": \"Tipos de operação\",\n \"financial.statements.opCredits\": \"Créditos\",\n \"financial.statements.opDebits\": \"Débitos\",\n \"financial.statements.opTransfers\": \"Transferências\",\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.searchPlaceholder\": \"Buscar por contato, descrição ou documento...\",\n \"financial.statements.selectToView\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.subtitle\": \"Transações e saldos de contas bancárias\",\n \"financial.statements.title\": \"Extratos\",\n \"financial.statements.to\": \"Até\",\n \"financial.summary.allAccounts\": \"Todas as contas\",\n \"financial.summary.cashFlow\": \"Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdown\": \"Detalhamento do Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Contas a receber vs. contas a pagar neste mês\",\n \"financial.summary.cashFlowSubtitle\": \"Receitas vs despesas mensais\",\n \"financial.summary.expenses\": \"Despesas\",\n \"financial.summary.income\": \"Receita\",\n \"financial.summary.monthlyFlow\": \"Fluxo Mensal\",\n \"financial.summary.negativeBalance\": \"Saldo negativo\",\n \"financial.summary.net\": \"Líquido\",\n \"financial.summary.noOverdue\": \"Nenhuma transação atrasada\",\n \"financial.summary.noTransactions\": \"Nenhuma transação ainda\",\n \"financial.summary.overdue\": \"{{count}} atrasados\",\n \"financial.summary.overduePayable\": \"Conta a pagar atrasada\",\n \"financial.summary.overdueReceivable\": \"Conta a receber atrasada\",\n \"financial.summary.overdueTitle\": \"Atrasados\",\n \"financial.summary.paid\": \"Pago\",\n \"financial.summary.payable\": \"A Pagar\",\n \"financial.summary.positiveBalance\": \"Saldo positivo\",\n \"financial.summary.receivable\": \"A Receber\",\n \"financial.summary.received\": \"Recebido\",\n \"financial.summary.recentTransactions\": \"Transações Recentes\",\n \"financial.summary.totalBalance\": \"Saldo Total\",\n \"financial.summary.transactionsAppear\": \"As transações aparecerão aqui após serem registradas\",\n \"financial.summary.viewAll\": \"Ver todos\",\n \"financial.summary.today\": \"Hoje\",\n \"financial.summary.yesterday\": \"Ontem\",\n \"financial.summary.transactionsTitle\": \"Transações\",\n \"financial.home.balance\": \"Saldo\",\n \"financial.home.inflow\": \"Entradas\",\n \"financial.home.outflow\": \"Saídas\",\n \"financial.home.showBalance\": \"Mostrar saldo\",\n \"financial.home.hideBalance\": \"Ocultar saldo\",\n \"financial.home.upcomingBills\": \"Próximas contas\",\n \"financial.home.noBills\": \"Nenhuma conta a vencer.\",\n \"financial.home.dueToday\": \"Vence hoje\",\n \"financial.home.dueTomorrow\": \"Vence amanhã\",\n \"financial.home.dueInDays\": \"Vence em {{count}} dias\",\n \"financial.home.overdueDays\": \"Venceu há {{count}} dias\",\n \"financial.home.cards\": \"Cartões\",\n \"financial.home.currentBill\": \"Fatura atual\",\n \"financial.home.availableLimit\": \"Limite disponível\",\n \"financial.home.addCard\": \"Novo cartão\",\n \"financial.home.bill\": \"Conta\",\n \"financial.home.spendByCategory\": \"Gastos por categoria\",\n \"financial.home.noSpend\": \"Sem gastos neste mês.\",\n \"financial.home.category.groceries\": \"Mercado\",\n \"financial.home.category.transport\": \"Transporte\",\n \"financial.home.category.subscriptions\": \"Assinaturas\",\n \"financial.home.category.dining\": \"Alimentação\",\n \"financial.home.category.home\": \"Casa\",\n \"financial.home.category.health\": \"Saúde\",\n \"financial.home.category.leisure\": \"Lazer\",\n \"financial.home.category.shopping\": \"Compras\",\n \"financial.home.category.other\": \"Outros\",\n \"financial.quickActions.newPayable\": \"Nova Conta a Pagar\",\n \"financial.quickActions.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.quickActions.newReceivable\": \"Nova Conta a Receber\",\n \"financial.quickActions.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.quickActions.openCashRegister\": \"Abrir Caixa\",\n \"financial.quickActions.openCashRegisterDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.cash.title\": \"Caixa Registradora\",\n \"financial.cash.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.cash.bills\": \"Notas\",\n \"financial.cash.coins\": \"Moedas\",\n \"financial.cash.noAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cash.empty.heading\": \"Comece abrindo o caixa do dia\",\n \"financial.cash.empty.because\": \"O caixa registra o dinheiro que entra e sai na recepção, e no fim do dia mostra se o que está na gaveta bate com o que o sistema esperava. Falta uma conta para ele funcionar.\",\n \"financial.cash.empty.step\": \"Uma conta do tipo Caixa Físico\",\n \"financial.cash.empty.stepWhere\": \"Cadastros → Contas\",\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.expectedInDrawer\": \"Esperado na gaveta\",\n \"financial.cash.difference\": \"Quebra de caixa\",\n \"financial.cash.receivedInShift\": \"Recebido no turno\",\n \"financial.method.cash\": \"Dinheiro\",\n \"financial.method.pix\": \"Pix\",\n \"financial.method.credit_card\": \"Cartão de crédito\",\n \"financial.method.debit_card\": \"Cartão de débito\",\n \"financial.method.bank_transfer\": \"Transferência\",\n \"financial.method.boleto\": \"Boleto\",\n \"financial.method.check\": \"Cheque\",\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.reviewQueue\": \"Conferência de fechamentos\",\n \"financial.cash.reviewSeeAll\": \"Ver todos os {count} fechamentos\",\n \"financial.cash.reviewToday\": \"Hoje\",\n \"financial.cash.reviewYesterday\": \"Ontem\",\n \"financial.cash.reviewQueueEmpty\": \"Nenhum fechamento esperando conferência.\",\n \"financial.cash.closedBy\": \"Fechado por\",\n \"financial.cash.approve\": \"Aprovar\",\n \"financial.cash.reject\": \"Rejeitar\",\n \"financial.cash.cannotReviewOwn\": \"Você fechou este caixa — a conferência é de outra pessoa.\",\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.cash.noOpenSessions\": \"Nenhuma sessão de caixa aberta.\",\n \"financial.cash.tabOpen\": \"Abertos\",\n \"financial.cash.tabClosed\": \"Fechados\",\n \"financial.cash.tabReview\": \"Conferência\",\n \"financial.cash.user\": \"Usuário\",\n \"financial.cash.openingDate\": \"Data de Abertura\",\n \"financial.cash.accountLabel\": \"Conta do Caixa\",\n \"financial.cash.review\": \"Conferir\",\n \"financial.cash.reviewModalTitle\": \"Conferir fechamento\",\n \"financial.cash.detailsModalTitle\": \"Detalhes da sessão\",\n \"financial.cash.summary\": \"Resumo\",\n \"financial.cash.transactions\": \"Transações\",\n \"financial.cash.noTransactions\": \"Nenhuma transação nesta sessão.\",\n \"financial.cash.finalValue\": \"Valor final contado\",\n \"financial.cash.movementCount\": \"Movimentações\",\n \"financial.cash.totalIn\": \"Total recebido\",\n \"financial.cash.totalOut\": \"Total retirado\",\n \"financial.cash.confirmAndApprove\": \"Confirmar e aprovar\",\n \"financial.cash.details\": \"Detalhes\",\n \"financial.cash.print\": \"Imprimir\",\n \"financial.cash.verdictApproved\": \"Aprovado\",\n \"financial.cash.verdictRejected\": \"Rejeitado\",\n \"financial.cash.verdictPending\": \"Pendente\",\n \"financial.cash.reviewedBy\": \"Conferido por\",\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.statusProvisioned\": \"Previsto\",\n \"financial.invoice.consolidate\": \"Consolidar\",\n \"financial.invoice.consolidated\": \"Conta gerada\",\n \"financial.invoice.consolidateFailed\": \"Não foi possível consolidar\",\n \"financial.invoice.statusPending\": \"Pendente\",\n \"financial.invoice.statusDraft\": \"Rascunho\",\n \"financial.invoice.columnDate\": \"Data\",\n \"financial.invoice.columnDueDate\": \"Vencimento\",\n \"financial.invoice.columnDescription\": \"Descrição\",\n \"financial.invoice.columnAmount\": \"Valor\",\n \"financial.invoice.columnPaid\": \"Pago\",\n \"financial.invoice.columnPaymentMethod\": \"Forma\",\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.account\": \"Plano de Contas\",\n \"financial.invoiceForm.accountNone\": \"Não atribuída\",\n \"financial.invoiceForm.costCenter\": \"Centro de custo\",\n \"financial.invoiceForm.costCenterNone\": \"Não atribuído\",\n \"financial.invoiceForm.surcharge\": \"Acréscimo\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Conta\",\n \"financial.payment.due\": \"Venc.:\",\n \"financial.payment.paidAmount\": \"Pago:\",\n \"financial.payment.paidOn\": \"Pago em:\",\n \"financial.title\": \"Financeiro\",\n \"financial.summary.title\": \"Resumo Financeiro\",\n \"financial.summary.revenue\": \"Receita\",\n \"financial.invoice.title\": \"Faturas\",\n \"financial.invoice.create\": \"Nova Fatura\",\n \"financial.invoice.number\": \"Fatura #\",\n \"financial.invoice.client\": \"Cliente\",\n \"financial.invoice.amount\": \"Valor\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Vencimento\",\n \"financial.invoice.addItem\": \"Adicionar Item\",\n \"financial.invoice.tax\": \"Imposto\",\n \"financial.invoice.save\": \"Salvar Fatura\",\n \"financial.invoice.saving\": \"Salvando...\",\n \"financial.invoice.markPaid\": \"Marcar como Pago\",\n \"financial.invoice.sendReminder\": \"Enviar Lembrete\",\n \"financial.receivable.title\": \"Contas a Receber\",\n \"financial.payable.title\": \"Contas a Pagar\",\n \"financial.statements.loading\": \"Carregando...\",\n \"financial.cards.empty\": \"Nenhuma transação de cartão ainda\",\n \"financial.commissions.title\": \"Comissões\",\n \"financial.cashRegister.title\": \"Caixa\",\n \"financial.cashRegister.open\": \"Abrir Caixa\",\n \"financial.cashRegister.close\": \"Fechar Caixa\",\n \"financial.movements.title\": \"Movimentações\",\n \"financial.bankAccounts.title\": \"Contas Bancárias\",\n \"financial.settings.title\": \"Configurações Financeiras\",\n // Abas de registros nas configurações\n \"registry.payment-methods\": \"Formas de recebimento\",\n \"registry.payment-methods.description\": \"Formas de pagamento configuradas com taxas e regras de parcelamento\",\n \"registry.bank-accounts\": \"Contas\",\n \"registry.bank-accounts.description\": \"Contas bancárias, caixas, cartões de crédito e carteiras digitais\",\n \"registry.chart-of-accounts\": \"Plano de Contas\",\n \"registry.chart-of-accounts.description\": \"Plano de contas hierárquico para categorizar transações\",\n \"registry.discount-reasons\": \"Motivos de desconto\",\n \"settings.plugin.financial.payment-methods\": \"Formas de recebimento\",\n \"settings.plugin.financial._general\": \"Preferências financeiras\",\n \"settings.plugin.financial._integrations\": \"Conectores financeiros\",\n \"settings.plugin.financial.payment-method-types\": \"Tipos de pagamento\",\n \"settings.plugin.financial.card-brands\": \"Bandeiras de cartão\",\n \"settings.plugin.financial.chart-of-accounts\": \"Plano de contas\",\n \"settings.plugin.financial.cost-centers\": \"Centros de custo\",\n \"settings.plugin.financial.price-tables\": \"Tabelas de preço\",\n \"settings.plugin.financial.bank-accounts\": \"Contas bancárias\",\n \"settings.plugin.financial.discount-reasons\": \"Motivos de desconto\",\n \"registry.cost-centers\": \"Centros de Custo\",\n \"registry.cost-centers.description\": \"Centros de custo para controle de despesas e orçamentos por departamento\",\n \"registry.commission-rules\": \"Regras de Comissão\",\n \"registry.commission-rules.description\": \"Regras de comissão para serviços e produtos\",\n \"registry.price-tables\": \"Tabelas de Preço\",\n \"registry.price-tables.description\": \"Tabelas de preço de venda e custo\",\n \"registry.price-variations\": \"Variações de Preço\",\n \"registry.price-variations.description\": \"Regras de desconto e acréscimo de preços\",\n \"registry.payment-method-types\": \"Tipos de Pagamento\",\n \"registry.payment-method-types.description\": \"Tipos de pagamento do sistema (dinheiro, cartão, PIX, etc.)\",\n \"registry.card-brands\": \"Bandeiras de Cartão\",\n \"registry.card-brands.description\": \"Bandeiras de cartão de crédito e débito\",\n // Extrato\n \"financial.statements.columnDate\": \"Data\",\n \"financial.statements.columnDescription\": \"Descrição\",\n \"financial.statements.columnDebit\": \"Débito\",\n \"financial.statements.columnCredit\": \"Crédito\",\n \"financial.statements.columnFee\": \"Taxa\",\n \"financial.statements.columnBalance\": \"Saldo\",\n \"financial.statements.columnMethod\": \"Forma\",\n \"financial.statements.columnDoc\": \"Documento\",\n \"financial.statements.installmentShort\": \"Parc. {{n}}\",\n \"financial.statements.viewInvoice\": \"Ver fatura\",\n \"financial.person.empty\": \"Nenhuma atividade financeira para este contato ainda\",\n \"financial.statements.opening\": \"Saldo inicial\",\n \"financial.statements.closing\": \"Saldo final\",\n \"financial.statements.currentBalance\": \"Saldo atual\",\n \"financial.statements.totalCredits\": \"Créditos\",\n \"financial.statements.totalDebits\": \"Débitos\",\n \"financial.statements.totalFees\": \"Taxas\",\n \"financial.statements.net\": \"Líquido\",\n \"financial.statements.transfer\": \"Transferência\",\n \"financial.statements.untitledEntry\": \"Lançamento\",\n \"financial.statements.reconciled\": \"Conciliado com o extrato bancário\",\n \"financial.statements.imported\": \"Importado do banco · não conciliado\",\n \"financial.statements.reconciledWith\": \"Conciliado com {{ref}}\",\n \"financial.statements.newTransfer\": \"Nova Transferência\",\n // Diálogo de transferência\n \"financial.transfer.title\": \"Transferência entre Contas\",\n \"financial.transfer.from\": \"Conta de origem\",\n \"financial.transfer.to\": \"Conta de destino\",\n \"financial.transfer.amount\": \"Valor\",\n \"financial.transfer.date\": \"Data\",\n \"financial.transfer.notes\": \"Observações\",\n \"financial.transfer.optionalNotes\": \"Observações opcionais...\",\n \"financial.transfer.selectAccount\": \"Selecione a conta...\",\n \"financial.transfer.submit\": \"Transferir\",\n \"financial.transfer.processing\": \"Transferindo...\",\n \"financial.transfer.cancel\": \"Cancelar\",\n \"financial.transfer.created\": \"Transferência registrada\",\n \"financial.transfer.failed\": \"Falha ao registrar transferência\",\n \"financial.transfer.sameAccount\": \"Origem e destino devem ser diferentes\",\n \"financial.transfer.invalidAmount\": \"O valor deve ser maior que zero\",\n \"financial.quickTx.title\": \"Nova transação\",\n \"financial.quickTx.close\": \"Fechar\",\n \"financial.quickTx.newTransaction\": \"Nova transação\",\n \"financial.quickTx.expense\": \"Despesa\",\n \"financial.quickTx.income\": \"Receita\",\n \"financial.quickTx.transfer\": \"Transferência\",\n \"financial.quickTx.paid\": \"Pago\",\n \"financial.quickTx.received\": \"Recebido\",\n \"financial.quickTx.yes\": \"Sim\",\n \"financial.quickTx.no\": \"Não\",\n \"financial.quickTx.category\": \"Categoria\",\n \"financial.quickTx.selectCategory\": \"Sem categoria\",\n \"financial.quickTx.account\": \"Conta\",\n \"financial.quickTx.selectAccount\": \"Selecione a conta\",\n \"financial.quickTx.fromAccount\": \"Conta de origem\",\n \"financial.quickTx.toAccount\": \"Conta de destino\",\n \"financial.quickTx.card\": \"Cartão\",\n \"financial.quickTx.recurring\": \"Recorrente\",\n \"financial.quickTx.attachment\": \"Anexo\",\n \"financial.quickTx.attachmentSoon\": \"Anexos em breve\",\n \"financial.quickTx.receipt\": \"Recibo\",\n \"financial.quickTx.receiptCapture\": \"Anexar comprovante ou boleto (foto ou PDF)\",\n \"financial.quickTx.receiptAttached\": \"Recibo anexado\",\n \"financial.quickTx.receiptReplace\": \"Substituir\",\n \"financial.quickTx.receiptRemove\": \"Remover recibo\",\n \"financial.quickTx.receiptInvalid\": \"Escolha uma imagem ou PDF\",\n \"financial.quickTx.sendReceipt\": \"Enviar recibo\",\n \"financial.quickTx.digitizeExpense\": \"Digitalizar despesa\",\n \"financial.quickTx.digitizeReceipt\": \"Digitalizar comprovante\",\n \"financial.invoice.importPayroll\": \"Importar folha\",\n \"financial.invoice.importPayrollSoon\": \"Em breve\",\n \"financial.receipt.ask\": \"Mande a foto do recibo…\",\n \"financial.receipt.attachRead\": \"Anexar o recibo que o assistente leu\",\n \"financial.receipt.fromReceipt\": \"Do recibo\",\n \"financial.receipt.finishContact\": \"Concluir cadastro\",\n \"financial.receipt.prompt\": \"Leia este recibo e abra o cadastro da conta com o que estiver escrito nele.\",\n \"financial.receipt.askReceivable\": \"Mande a foto ou o PDF da nota que você emitiu…\",\n \"financial.receipt.promptReceivable\": \"Leia esta nota e abra a conta a receber com o cliente (destinatário), o valor, o número e a chave da NF-e que estiverem nela.\",\n \"financial.quickTx.descriptionPlaceholder\": \"ex.: Mercado, Salário…\",\n \"financial.quickTx.enterAmount\": \"Informe um valor\",\n \"financial.quickTx.save\": \"Salvar\",\n \"financial.quickTx.saving\": \"Salvando…\",\n // Chart of accounts tree\n \"financial.chartTree.searchPlaceholder\": \"Buscar por código ou nome\",\n \"financial.chartTree.clearSearch\": \"Limpar busca\",\n \"financial.chartTree.expandAll\": \"Expandir tudo\",\n \"financial.chartTree.collapseAll\": \"Recolher tudo\",\n \"financial.chartTree.expand\": \"Expandir\",\n \"financial.chartTree.collapse\": \"Recolher\",\n \"financial.chartTree.addRoot\": \"Nova conta raiz\",\n \"financial.chartTree.addChild\": \"Nova conta dentro desta\",\n \"financial.chartTree.edit\": \"Editar\",\n \"financial.chartTree.deactivate\": \"Desativar\",\n \"financial.chartTree.reactivate\": \"Reativar\",\n \"financial.chartTree.delete\": \"Excluir\",\n \"financial.chartTree.confirmDelete\": \"Excluir esta conta?\",\n \"financial.chartTree.cancel\": \"Cancelar\",\n \"financial.chartTree.save\": \"Salvar\",\n \"financial.chartTree.saving\": \"Salvando…\",\n \"financial.chartTree.searching\": \"Buscando…\",\n \"financial.chartTree.count\": \"{{count}} contas\",\n \"financial.chartTree.countOne\": \"1 conta\",\n \"financial.chartTree.matchesOne\": \"1 conta encontrada\",\n \"financial.chartTree.matches\": \"{{count}} contas encontradas\",\n \"financial.chartTree.showInactive\": \"Mostrar inativas ({{count}})\",\n \"financial.chartTree.inactive\": \"Inativa\",\n \"financial.chartTree.empty\": \"Nenhuma conta no plano ainda. Crie a primeira conta raiz.\",\n \"financial.chartTree.noMatches\": \"Nenhuma conta corresponde à busca.\",\n \"financial.chartTree.noGroups\": \"Nenhum grupo encontrado\",\n \"financial.chartTree.rootLevel\": \"Nível raiz (sem pai)\",\n \"financial.chartTree.group\": \"Grupo (agrupa outras contas)\",\n \"financial.chartTree.leaf\": \"Conta (recebe lançamentos)\",\n \"financial.chartTree.field.code\": \"Código\",\n \"financial.chartTree.field.name\": \"Nome\",\n \"financial.chartTree.field.structure\": \"Estrutura\",\n \"financial.chartTree.field.nature\": \"Natureza\",\n \"financial.chartTree.field.parent\": \"Conta pai\",\n \"financial.chartTree.nature.none\": \"Sem natureza\",\n \"financial.chartTree.nature.revenue\": \"Receita\",\n \"financial.chartTree.nature.expense\": \"Despesa\",\n \"financial.chartTree.nature.asset\": \"Ativo\",\n \"financial.chartTree.nature.liability\": \"Passivo\",\n \"financial.chartTree.nature.equity\": \"Patrimônio\",\n \"financial.chartTree.created\": \"Conta \\\"{{name}}\\\" criada\",\n \"financial.chartTree.updated\": \"Conta \\\"{{name}}\\\" atualizada\",\n \"financial.chartTree.deactivated\": \"Conta \\\"{{name}}\\\" desativada\",\n \"financial.chartTree.reactivated\": \"Conta \\\"{{name}}\\\" reativada\",\n \"financial.chartTree.deleted\": \"Conta \\\"{{name}}\\\" excluída\",\n \"financial.chartTree.error.save\": \"Não foi possível salvar. Se a conta já tem lançamentos, desative em vez de excluir.\",\n \"financial.chartTree.error.load\": \"Não foi possível carregar o plano de contas.\",\n \"financial.chartTree.error.codeRequired\": \"Informe o código da conta.\",\n \"financial.chartTree.error.nameRequired\": \"Informe o nome da conta.\",\n \"financial.chartTree.error.codeTaken\": \"O código {{code}} já é usado por \\\"{{name}}\\\".\",\n \"financial.chartTree.error.leafWithChildren\": \"Uma conta com contas dentro dela precisa continuar como grupo.\",\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 { FinancialContextProvider } from '../context'\nimport { createFinancialStore, createSafeFinancialProvider } from '@fayz-ai/financial/store'\nimport { registerTranslations } from '@fayz-ai/core'\nimport { resolveConfig } from '../config'\nimport type { ResolvedFinancialConfig } from '../context'\nimport { financialLocales } from '../locales'\nimport { PaymentModal } from './PaymentModal'\nimport type { ReceivePaymentSlotProps } from '@fayz-ai/financial/views/zones'\n\n// ---------------------------------------------------------------------------\n// Receber uma parcela, de qualquer tela — não só de dentro do Financeiro.\n//\n// `PaymentModal` sozinho não sai daqui: ele lê `useFinancialConfig` e\n// `useFinancialStore`, e o provider desses dois só é montado dentro de\n// `FinancialPage`. Solto na tela de pedidos da loja ele quebra na primeira\n// linha, e quebra por falta de contexto — o erro mais confuso que existe,\n// porque o componente parece certo.\n//\n// Então o que é exportado é o modal COM a sua casca. Quem usa passa a parcela e\n// pronto; a configuração, o provider e a store nascem aqui.\n//\n// POR QUE ISTO EXISTE. A loja registrava recebimento por `shop_confirm_payment`,\n// que adivinha: o método vem do pedido e a conta vem de `shop_receiving_account`,\n// que exige EXATAMENTE uma conta ativa e recusa o resto. Numa loja sem conta\n// cadastrada — ou com duas — o lojista via um parágrafo vermelho em vez de um\n// campo. O modal pergunta o que precisa saber, que é o que uma pergunta faz.\n//\n// A escrita é a mesma nos dois caminhos desde a reconciliação do `payMovement`:\n// `financial_receive_payment`, com sessão de caixa validada, conta exigida por\n// método e chave de idempotência.\n// ---------------------------------------------------------------------------\n\n/**\n * O config das cascas avulsas — o Financeiro embutido fora do Financeiro.\n *\n * Era `{ currency } as never`: os três campos que ESTE modal lê, e o `as never`\n * engolindo o resto. Funcionou enquanto só o pagamento e a ficha do cliente\n * moravam aqui — nenhum dos dois toca em `itemTypes`. No dia em que o\n * FORMULÁRIO da conta passou a abrir neste modal, ele leu `config.itemTypes`,\n * achou `undefined`, e a tela caiu num «Cannot read properties of undefined\n * (reading 'map')» que o `as never` tinha impedido o TypeScript de ver.\n *\n * `resolveConfig()` é o mesmo objeto que o plugin monta, com todos os padrões.\n * O que é DO APP continua ausente — catálogo de produtos, unidades —, e disso\n * as telas já sabem: lookup que falta é entrada manual, não erro.\n */\nexport const STANDALONE_CONFIG: ResolvedFinancialConfig = resolveConfig()\n\n// Os textos do modal vêm do bundle do Financeiro, e ele só é registrado quando\n// o PLUGIN é montado — o que a loja não faz. Sem isto o modal abria dizendo\n// `financial.payment.title`, que é pior do que não abrir: parece funcionando.\n// `registerTranslations` mescla, então registrar de novo num app que já tem o\n// plugin não custa nada.\nregisterTranslations(financialLocales)\n\nexport function ReceivePaymentModal({\n installment,\n receiptUrl,\n onClose,\n onPaid,\n}: ReceivePaymentSlotProps) {\n // Uma store por abertura. O modal lê contas, métodos e sessões de caixa ao\n // montar, e uma store viva entre aberturas guardaria o saldo de antes do\n // pagamento anterior — que é exatamente o bug que fez a tela da loja jurar\n // que um pedido estava em aberto segundos depois de ter sido pago.\n const provider = React.useMemo(() => createSafeFinancialProvider(), [])\n const store = React.useMemo(() => createFinancialStore(provider), [provider])\n\n return (\n <FinancialContextProvider config={STANDALONE_CONFIG} provider={provider} store={store}>\n <PaymentModal\n movement={installment}\n receiptUrl={receiptUrl}\n onClose={onClose}\n onPaid={onPaid}\n />\n </FinancialContextProvider>\n )\n}\n","import React from 'react'\nimport { CircleDollarSign, FileText } from 'lucide-react'\nimport { Button, ModalTask, Input } from '@fayz-ai/ui'\nimport { useFinancialProvider, formatCurrency } from '../context'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { invoiceOpensForEditing } from '@fayz-ai/financial/domain/invoice'\nimport type { ClientAccount } from '@fayz-ai/financial/domain/client-account'\n\n// ---------------------------------------------------------------------------\n// A conta do CLIENTE, aberta a partir de um atendimento.\n//\n// A pergunta que a recepção faz não é \"quanto é este agendamento\" — é \"como\n// está esta pessoa\": o que contratou, o que pagou, o que ainda deve. O V1 mostra\n// isso ao lado do botão que cria a cobrança, e é por isso que a decisão de\n// cobrar acontece com contexto em vez de no escuro.\n//\n// O \"pago a executar\" do V1 (recebido de serviço ainda não prestado — passivo,\n// não receita) NÃO aparece aqui: o V2 modela pagamento e não modela ENTREGA, e\n// um zero fixo ali afirmaria que não existe dívida de execução. Um indicador\n// ausente é honesto; um indicador errado é pior que nenhum.\n// ---------------------------------------------------------------------------\n\nconst RECUSA_COMPRA: Record<string, string> = {\n sem_sessao: 'Faça login para registrar a compra.',\n sem_tenant: 'Escolha a conta antes de registrar.',\n cliente_nao_encontrado: 'Este cliente não está nesta conta.',\n nada_escolhido: 'Escolha pelo menos um serviço.',\n}\n\nexport interface ClientAccountPanelProps {\n personId: string\n /** O atendimento de onde se veio: destaca a fatura dele e habilita a cobrança. */\n orderId?: string | null\n clientName?: string | null\n /** Levanta a cobrança deste atendimento. */\n onGenerate?: () => Promise<void> | void\n currency?: { code: string; locale: string; symbol: string }\n}\n\nconst BRL = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\n/** O selo de status da fatura, no vocabulário do balcão (nunca o enum cru). */\nconst STATUS_CHIP: Record<string, { label: string; cls: string }> = {\n paid: { label: 'Pago', cls: 'bg-success-soft text-success-soft-foreground' },\n partial: { label: 'Parcial', cls: 'bg-warning-soft text-warning-soft-foreground' },\n pending: { label: 'Aberto', cls: 'bg-info-soft text-info-soft-foreground' },\n open: { label: 'Aberto', cls: 'bg-info-soft text-info-soft-foreground' },\n overdue: { label: 'Vencida', cls: 'bg-destructive-soft text-destructive-soft-foreground' },\n cancelled: { label: 'Cancelada', cls: 'bg-muted text-muted-foreground' },\n}\n\nexport function ClientAccountPanel({\n personId, orderId, clientName, onGenerate, currency = BRL,\n}: ClientAccountPanelProps) {\n const provider = useFinancialProvider()\n const [account, setAccount] = React.useState<ClientAccount | null>(null)\n const [busy, setBusy] = React.useState(false)\n // Receber abre a FATURA, não um formulário avulso — a regra do V1 (\"Editar\n // Recebimento\"): parcelas, itens, comprovantes e cancelar no mesmo lugar, e\n // o pagamento acontece de dentro dela.\n // O ID, não a linha: guardar a linha congelava o status no instante do\n // clique, e pagar DENTRO do modal deixava o chip dizendo «Vencida» sobre uma\n // conta já paga — e o formulário aberto sobre algo que virou extrato. Pelo id,\n // o recarregamento reaponta para a linha viva e a tela se corrige sozinha.\n const [viewInvoiceId, setViewInvoiceId] = React.useState<string | null>(null)\n /** A compra antecipada: serviço vendido hoje para ser feito um dia. */\n const [comprando, setComprando] = React.useState(false)\n const [buscaServico, setBuscaServico] = React.useState('')\n const [catalogo, setCatalogo] = React.useState<Array<{ id: string; name: string; price: number }>>([])\n const [escolhidos, setEscolhidos] = React.useState<Array<{ id: string; name: string; price: number; qtd: number }>>([])\n const [comprandoBusy, setComprandoBusy] = React.useState(false)\n const [erroCompra, setErroCompra] = React.useState<string | null>(null)\n\n const load = React.useCallback(async () => {\n if (!personId) return\n setAccount(await provider.getClientAccount(personId))\n }, [personId, provider])\n\n React.useEffect(() => { void load() }, [load])\n\n const viewInvoice = account?.invoices.find((i) => i.id === viewInvoiceId) ?? null\n // Em aberto abre para EDITAR; paga ou cancelada abre em leitura — a mesma\n // regra da lista e da agenda.\n const viewEditable = invoiceOpensForEditing(viewInvoice?.status)\n\n const forThis = account?.invoices.filter((i) => orderId && i.orderId === orderId) ?? []\n const hasForThis = forThis.length > 0\n\n React.useEffect(() => {\n if (!comprando) return\n let vivo = true\n const t = setTimeout(async () => {\n try {\n const r = await provider.searchSellableServices?.(buscaServico)\n if (vivo) setCatalogo(r ?? [])\n } catch { if (vivo) setCatalogo([]) }\n }, 250)\n return () => { vivo = false; clearTimeout(t) }\n }, [comprando, buscaServico])\n\n async function confirmarCompra() {\n if (!escolhidos.length) return\n setComprandoBusy(true)\n try {\n const r = await provider.prepayServices?.(personId, escolhidos.map((e) => ({\n serviceId: e.id, name: e.name, quantity: e.qtd, unitPrice: e.price,\n })))\n // Recusa DITA. Antes o botão simplesmente não fazia nada e o diálogo\n // ficava aberto — e quem clica acha que clicou errado.\n if (!r?.ok) { setErroCompra(RECUSA_COMPRA[r?.reason ?? ''] ?? 'Não foi possível registrar a compra.'); return }\n setComprando(false)\n setEscolhidos([])\n await load()\n } finally { setComprandoBusy(false) }\n }\n\n const tiles: Array<{ label: string; value: number; hint?: string }> = [\n { label: 'Contratado', value: account?.contracted ?? 0, hint: 'Tudo que o cliente já contratou' },\n { label: 'Pago', value: account?.paid ?? 0 },\n { label: 'Em aberto', value: account?.open ?? 0 },\n ]\n\n // O cartão do V1 — \"A executar\" — só entra quando há resposta. Ausente é\n // honesto: significa que não há prontuário para saber o que já saiu; zero\n // fixo afirmaria que a casa não deve entrega nenhuma.\n const aExecutar = (account?.paidToExecute ?? 0) + (account?.openToExecute ?? 0)\n if (account?.paidToExecute !== undefined || account?.openToExecute !== undefined) {\n tiles.push({\n label: 'A executar',\n value: aExecutar,\n hint: (account?.paidToExecute ?? 0) > 0\n ? `${formatCurrency(account?.paidToExecute ?? 0, currency)} já pagos — serviço que a casa ainda deve prestar`\n : 'Contratado e ainda não executado',\n })\n }\n\n // Esqueleto com a FORMA do painel: os cartões e as linhas de fatura. Sem\n // ele a aba abria vazia e saltava quando a conta chegava.\n if (account === null) {\n return (\n <div className=\"fz-container space-y-3\" aria-busy=\"true\" aria-label=\"Carregando a conta do cliente\">\n <div className=\"fz-tiles fz-tiles-3\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"space-y-2 rounded-xl border px-3 py-2\">\n <div className=\"h-3 w-16 animate-pulse rounded bg-muted\" />\n <div className=\"h-5 w-20 animate-pulse rounded bg-muted/70\" />\n </div>\n ))}\n </div>\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between rounded-xl border px-3 py-3\">\n <div className=\"h-4 w-40 animate-pulse rounded bg-muted\" />\n <div className=\"h-7 w-32 animate-pulse rounded-button bg-muted/70\" />\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div className=\"fz-container space-y-3\">\n {clientName && <p className=\"text-sm font-medium\">{clientName}</p>}\n\n <div className={`fz-tiles ${tiles.length > 3 ? 'fz-tiles-4' : 'fz-tiles-3'}`}>\n {tiles.map((t) => (\n <div key={t.label} title={t.hint} className=\"rounded-xl border px-3 py-2\">\n <p className=\"text-[10px] uppercase text-muted-foreground\">{t.label}</p>\n <p className=\"mt-0.5 text-sm font-semibold tabular-nums\">\n {formatCurrency(t.value, currency)}\n </p>\n </div>\n ))}\n </div>\n\n {/* COMPRA ANTECIPADA — \"tá na promoção, vou comprar e deixar guardado\".\n Sem agendamento atrás, sem contrato e sem proposta: o que nasce é um\n item A EXECUTAR na conta desta pessoa. Só aparece onde há prontuário\n para sustentar esse estado. */}\n {provider.prepayServices && !comprando && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setComprando(true)}\n className=\"whitespace-normal w-full rounded-xl border border-dashed px-3 py-2 text-xs font-medium text-muted-foreground hover:bg-muted/40 hover:text-foreground\"\n >\n + Compra antecipada\n </Button>\n )}\n\n {comprando && (\n <div className=\"space-y-2 rounded-xl border px-3 py-3\">\n <p className=\"text-xs font-medium\">Compra antecipada</p>\n <p className=\"text-[11px] text-muted-foreground\">\n O serviço fica pago e <strong>a executar</strong>, esperando o dia. Não gera contrato\n nem proposta.\n </p>\n\n {escolhidos.length > 0 && (\n <ul className=\"divide-y rounded-lg border\">\n {escolhidos.map((e) => (\n <li key={e.id} className=\"flex items-center gap-2 px-2 py-1.5\">\n <span className=\"min-w-0 flex-1 truncate text-xs\">{e.name}</span>\n <div className=\"w-12 shrink-0\">\n <Input\n type=\"number\" min={1} value={e.qtd}\n onChange={(ev) => setEscolhidos((xs) => xs.map((x) => x.id === e.id\n ? { ...x, qtd: Math.max(1, Math.floor(Number(ev.target.value) || 1)) } : x))}\n className=\"h-auto px-1 py-0.5 text-center text-xs shadow-none\"\n aria-label={`Quantidade de ${e.name}`}\n />\n </div>\n <span className=\"w-20 shrink-0 text-right text-xs tabular-nums\">\n {formatCurrency(e.price * e.qtd, currency)}\n </span>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => setEscolhidos((xs) => xs.filter((x) => x.id !== e.id))}\n className=\"font-normal shrink-0 text-[11px] text-destructive hover:underline\">Tirar</Button>\n </li>\n ))}\n </ul>\n )}\n\n <Input\n value={buscaServico}\n onChange={(e) => setBuscaServico(e.target.value)}\n placeholder=\"Buscar serviço…\"\n className=\"h-auto px-2 py-1.5 text-xs\"\n />\n <ul className=\"max-h-40 space-y-0.5 overflow-y-auto\">\n {catalogo.filter((c) => !escolhidos.some((e) => e.id === c.id)).map((c) => (\n <li key={c.id}>\n <Button variant=\"bare\" size=\"bare\" type=\"button\"\n onClick={() => setEscolhidos((xs) => [...xs, { ...c, qtd: 1 }])}\n className=\"font-normal justify-start whitespace-normal flex w-full items-center gap-2 rounded px-2 py-1 text-left hover:bg-muted\">\n <span className=\"min-w-0 flex-1 truncate text-xs\">{c.name}</span>\n <span className=\"shrink-0 text-[11px] tabular-nums text-muted-foreground\">\n {formatCurrency(c.price, currency)}\n </span>\n </Button>\n </li>\n ))}\n </ul>\n\n {erroCompra && (\n <p className=\"rounded-lg bg-destructive/10 px-2 py-1.5 text-[11px] text-destructive\">{erroCompra}</p>\n )}\n\n <div className=\"flex items-center justify-end gap-2 pt-1\">\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => { setComprando(false); setEscolhidos([]) }}\n className=\"font-normal rounded-button px-2 py-1 text-xs text-muted-foreground hover:text-foreground\">\n Agora não\n </Button>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={confirmarCompra}\n disabled={comprandoBusy || !escolhidos.length}\n className=\"rounded-button bg-foreground px-3 py-1.5 text-xs font-semibold text-background disabled:opacity-40\">\n {comprandoBusy ? 'Registrando…' : `Registrar · ${formatCurrency(\n escolhidos.reduce((t, e) => t + e.price * e.qtd, 0), currency)}`}\n </Button>\n </div>\n </div>\n )}\n\n {/* `onGenerate`, não `orderId`: o agendamento migrado do V1 chega SEM\n pedido, e era exatamente ele que ficava sem caminho — o vermelho do\n V1 acendia e a conta não oferecia o botão (Juliane, 23-09). A RPC\n levanta o pedido das linhas com preço quando ele não existe. */}\n {onGenerate && !hasForThis && (\n <div className=\"flex items-center justify-between gap-3 rounded-xl border border-dashed px-3 py-3\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium\">Este atendimento ainda não tem cobrança</p>\n <p className=\"text-[11px] text-muted-foreground\">\n Gere o recebimento para cobrar os serviços deste atendimento.\n </p>\n </div>\n {onGenerate && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n disabled={busy}\n onClick={async () => { setBusy(true); try { await onGenerate(); await load() } finally { setBusy(false) } }}\n className=\"inline-flex shrink-0 items-center gap-1.5 rounded-button bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n <CircleDollarSign className=\"h-3.5 w-3.5\" />\n {busy ? 'Gerando…' : 'Gerar recebimento'}\n </Button>\n )}\n </div>\n )}\n\n <div>\n <p className=\"mb-1 text-[10px] font-medium uppercase text-muted-foreground\">Cobranças</p>\n {!account?.invoices.length ? (\n <p className=\"rounded-xl border border-dashed px-3 py-4 text-center text-xs text-muted-foreground\">\n Nada cobrado deste cliente ainda.\n </p>\n ) : (\n <ul className=\"space-y-1\">\n {account.invoices.map((i) => {\n // A deste atendimento primeiro na leitura: é a que a pessoa veio resolver.\n const mine = orderId && i.orderId === orderId\n return (\n <li\n key={i.id}\n className={`flex items-center gap-3 rounded-xl border px-3 py-2 ${mine ? 'border-primary bg-primary/5' : ''}`}\n >\n <FileText className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-xs font-medium\">\n {i.number ?? '—'}{i.description ? ` · ${i.description}` : ''}\n </p>\n <p className=\"text-[10px] text-muted-foreground\">{i.competenceDate ?? ''}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-xs font-semibold tabular-nums\">{formatCurrency(i.total, currency)}</p>\n <p className={`text-[10px] tabular-nums ${i.balance > 0 ? 'text-destructive' : 'text-success'}`}>\n {i.balance > 0 ? `resta ${formatCurrency(i.balance, currency)}` : 'pago'}\n </p>\n </div>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setViewInvoiceId(i.id)}\n className=\"inline-flex shrink-0 items-center gap-1 rounded-button border border-input px-2.5 py-1.5 text-xs font-medium hover:bg-muted\"\n >\n {i.balance > 0\n ? <><CircleDollarSign className=\"h-3.5 w-3.5\" /> Receber</>\n : <><FileText className=\"h-3.5 w-3.5\" /> Ver fatura</>}\n </Button>\n </li>\n )\n })}\n </ul>\n )}\n </div>\n\n {viewInvoice && (\n <ModalTask\n open\n // O NÚMERO no breadcrumb, não \"Recebimento\" genérico — é ele que a\n // recepção fala em voz alta; o status vai junto, como no V1.\n title={\n <span className=\"inline-flex min-w-0 items-center gap-2\">\n <span className=\"truncate\">{viewInvoice.number ?? 'Recebimento'}</span>\n {(() => {\n const s = STATUS_CHIP[viewInvoice.status]\n return s ? (\n <span className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium ${s.cls}`}>{s.label}</span>\n ) : null\n })()}\n </span>\n }\n hint={clientName ?? undefined}\n width=\"max-w-3xl\"\n onClose={() => { setViewInvoiceId(null); void load() }}\n >\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {viewEditable ? (\n <InvoiceFormView\n embedded\n direction=\"credit\"\n editId={viewInvoice.id}\n // Salvou: relê e FICA. Fechar esconderia o resultado da\n // edição, e a ficha é onde se confere.\n onSaved={() => { void load() }}\n // RECEBEU: fecha e volta para a aba Financeiro do agendamento,\n // com a cobrança já dizendo «pago». Receber é a tarefa inteira\n // — terminada ela, continuar dentro do formulário é deixar a\n // pessoa fechar à mão uma janela que não tem mais o que fazer.\n onChanged={() => { setViewInvoiceId(null); void load() }}\n />\n ) : (\n <InvoiceDetailView\n embedded\n invoiceId={viewInvoice.id}\n direction=\"credit\"\n onBack={() => { setViewInvoiceId(null); void load() }}\n />\n )}\n </div>\n </ModalTask>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { RightRailPage } from '@fayz-ai/admin'\nimport { FinancialContextProvider } from '../context'\nimport { createFinancialStore, createSafeFinancialProvider } from '@fayz-ai/financial/store'\nimport { STANDALONE_CONFIG } from './ReceivePaymentModal'\nimport { ClientAccountPanel, type ClientAccountPanelProps } from '../views/ClientAccountPanel'\nimport type { ClientAccountSlotProps } from '@fayz-ai/financial/views/zones'\n\n// A conta do cliente COM a casca de contexto, para telas fora do Financeiro —\n// a fila de check-in e a aba Financeiro do agendamento. Mesmo motivo do\n// ReceivePaymentModal: o painel sozinho quebra por falta de provider, e quebra\n// parecendo defeito dele.\n//\n// Uma store por abertura: uma store viva entre aberturas mostraria o saldo de\n// antes da cobrança que acabou de ser criada.\n\n/** O painel com a casca, SEM moldura própria — para embutir numa aba. */\nexport function ClientAccountInline(props: ClientAccountPanelProps) {\n const provider = React.useMemo(() => createSafeFinancialProvider(), [])\n const store = React.useMemo(() => createFinancialStore(provider), [provider])\n return (\n <FinancialContextProvider config={STANDALONE_CONFIG} provider={provider} store={store}>\n <ClientAccountPanel {...props} />\n </FinancialContextProvider>\n )\n}\n\n// Coluna da direita pelo mesmo motivo da conferência de check-in: ela é aberta\n// DE LÁ, e trocar de coluna para modal no meio do caminho faria a fila\n// desaparecer justo quando a recepção decide cobrar.\nexport function ClientAccountModal({\n personId, orderId, clientName, onGenerate, onClose,\n}: ClientAccountSlotProps) {\n return (\n <RightRailPage title=\"Conta do cliente\" open onClose={onClose} width=\"max-w-md\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n <ClientAccountInline\n personId={personId}\n orderId={orderId}\n clientName={clientName}\n onGenerate={onGenerate}\n />\n </div>\n </RightRailPage>\n )\n}\n","import type React from 'react'\nimport type { PluginWidgetDefinition } from '@fayz-ai/core'\nimport { FINANCIAL_ZONES } from '@fayz-ai/financial/views/zones'\nimport { ClientAccountInline, ClientAccountModal } from './ClientAccountModal'\nimport { ReceivePaymentModal } from './ReceivePaymentModal'\n\n/** The financial screens other plugins open in place, each rendered only where a host renders its zone. */\nexport const financialZoneWidgets: PluginWidgetDefinition[] = [\n {\n id: 'financial-receive-payment',\n zone: FINANCIAL_ZONES.receivePayment,\n component: ReceivePaymentModal as React.ComponentType<unknown>,\n },\n {\n id: 'financial-client-account',\n zone: FINANCIAL_ZONES.clientAccount,\n component: ClientAccountModal as React.ComponentType<unknown>,\n },\n {\n id: 'financial-client-account-inline',\n zone: FINANCIAL_ZONES.clientAccountInline,\n component: ClientAccountInline as React.ComponentType<unknown>,\n },\n]\n","import React from 'react'\nimport {\n ChevronRight, Folder, FolderOpen, FileText, Plus, Pencil, Trash2, Ban, RotateCcw,\n Search, ChevronsUpDown, ChevronsDownUp, X,\n} from 'lucide-react'\nimport { Badge, Button, Input, PageHeaderActions, SearchSelect, SegmentedControl, Skeleton, toast, type SearchSelectOption, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Checkbox } from '@fayz-ai/ui'\nimport { emitDataChanged, resolveDataProvider, tl, useTranslation, type DataProvider, type EntityDef, type PluginRegistryViewProps } from '@fayz-ai/core'\nimport { usePermissionOptional } from '@fayz-ai/admin'\nimport type { AccountNodeType, AccountType, ChartOfAccountsNode } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport { accountLabel } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport { buildChartTree, childIds, descendantIds, isGroupNode, rootIds, searchVisibleIds, suggestNextCode } from '@fayz-ai/financial/domain/chart-of-accounts'\n\ntype Provider = DataProvider<ChartOfAccountsNode>\n\nconst NATURES: AccountType[] = ['revenue', 'expense', 'asset', 'liability', 'equity']\n// Radix Select reserves the empty string for \"nothing chosen\".\nconst NO_NATURE = '__none__'\nconst NATURE_VARIANT: Record<AccountType, 'success' | 'destructive' | 'info' | 'warning' | 'magic'> = {\n revenue: 'success',\n expense: 'destructive',\n asset: 'info',\n liability: 'warning',\n equity: 'magic',\n}\nconst PAGE = 1000\n\n// V1 splits the chart in two: money coming in and money going out. Balance\n// accounts (asset, liability, equity) get a third side only when there are any.\ntype Side = 'in' | 'out' | 'other'\nconst sideOf = (type?: AccountType | ''): Side | undefined =>\n type === 'revenue' ? 'in' : type === 'expense' ? 'out' : type ? 'other' : undefined\nconst SIDE_TYPE: Record<Side, AccountType> = { in: 'revenue', out: 'expense', other: 'asset' }\n\n/** The nodes on one side, with every ancestor kept so the tree still hangs\n * together; an untyped branch with nothing typed under it shows on all. */\nfunction onSide(nodes: ChartOfAccountsNode[], side: Side): ChartOfAccountsNode[] {\n const byId = new Map(nodes.map((n) => [n.id, n]))\n const keep = new Set<string>()\n const typedBelow = new Set<string>()\n for (const n of nodes) {\n if (!n.accountType) continue\n let cur: ChartOfAccountsNode | undefined = n\n const match = sideOf(n.accountType) === side\n while (cur) {\n typedBelow.add(cur.id)\n if (match) keep.add(cur.id)\n cur = cur.parentId ? byId.get(cur.parentId) : undefined\n }\n }\n return nodes.filter((n) => keep.has(n.id) || (!n.accountType && !typedBelow.has(n.id)))\n}\n\ninterface Draft {\n code: string\n name: string\n nodeType: AccountNodeType\n accountType: AccountType | ''\n parentId: string | null\n}\n\ntype Editing =\n | { mode: 'create'; parentId: string | null; draft: Draft }\n | { mode: 'edit'; id: string; draft: Draft }\n\nasync function loadAll(provider: Provider): Promise<ChartOfAccountsNode[]> {\n const rows: ChartOfAccountsNode[] = []\n for (let page = 1; ; page++) {\n const res = await provider.list({ page, pageSize: PAGE, sortBy: 'code', sortDir: 'asc', countMode: 'none' })\n rows.push(...res.data)\n if (res.data.length < PAGE) return rows\n }\n}\n\nfunction errorMessage(err: unknown): string {\n if (err && typeof err === 'object' && 'message' in err) return String((err as { message: unknown }).message)\n return String(err)\n}\n\nexport interface ChartOfAccountsTreeProps extends Partial<PluginRegistryViewProps> {\n /** The registry's entity — the tree writes through the same provider the generic CRUD would. */\n entity: EntityDef<any>\n mockData?: Record<string, unknown>[]\n dataProvider?: DataProvider<never>\n}\n\nexport function ChartOfAccountsTree({ entity, mockData, dataProvider, embedded }: ChartOfAccountsTreeProps) {\n const t = useTranslation()\n const can = usePermissionOptional()\n const canCreate = can('financial', 'create')\n const canEdit = can('financial', 'edit')\n const canDelete = can('financial', 'delete')\n\n const provider = React.useMemo<Provider>(\n () => (dataProvider as unknown as Provider) ?? resolveDataProvider(entity, (mockData ?? []) as any[]) as unknown as Provider,\n [entity, mockData, dataProvider],\n )\n const table = entity.data?.table\n\n const [nodes, setNodes] = React.useState<ChartOfAccountsNode[] | null>(null)\n const [loadError, setLoadError] = React.useState<string | null>(null)\n const [expanded, setExpanded] = React.useState<Set<string>>(new Set())\n const [query, setQuery] = React.useState('')\n const [showInactive, setShowInactive] = React.useState(true)\n const [side, setSide] = React.useState<Side>('in')\n const [editing, setEditing] = React.useState<Editing | null>(null)\n const [confirmDelete, setConfirmDelete] = React.useState<string | null>(null)\n const [busy, setBusy] = React.useState(false)\n const initialized = React.useRef(false)\n\n const reload = React.useCallback(async () => {\n try {\n const rows = await loadAll(provider)\n setNodes(rows)\n setLoadError(null)\n // First load opens the top level only: a 120-account chart fully open is a wall.\n if (!initialized.current) {\n initialized.current = true\n const tree = buildChartTree(rows)\n setExpanded(new Set(rootIds(tree)))\n }\n } catch (err) {\n setLoadError(errorMessage(err))\n setNodes((prev) => prev ?? [])\n }\n }, [provider])\n\n React.useEffect(() => { void reload() }, [reload])\n\n const shown = React.useMemo(\n () => onSide((nodes ?? []).filter((n) => showInactive || n.isActive), side),\n [nodes, showInactive, side],\n )\n const tree = React.useMemo(() => buildChartTree(shown), [shown])\n const fullTree = React.useMemo(() => buildChartTree(nodes ?? []), [nodes])\n const search = React.useMemo(() => searchVisibleIds(tree, query), [tree, query])\n\n const groupIds = React.useMemo(\n () => [...tree.byId.values()].filter((n) => isGroupNode(tree, n)).map((n) => n.id),\n [tree],\n )\n\n function toggle(id: string) {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }\n\n function startCreate(parentId: string | null) {\n const parent = parentId ? fullTree.byId.get(parentId) : undefined\n setConfirmDelete(null)\n setEditing({\n mode: 'create',\n parentId,\n draft: {\n code: suggestNextCode(fullTree, parentId),\n name: '',\n nodeType: 'leaf',\n accountType: parent?.accountType ?? SIDE_TYPE[side],\n parentId,\n },\n })\n if (parentId) setExpanded((prev) => new Set(prev).add(parentId))\n }\n\n function startEdit(node: ChartOfAccountsNode) {\n setConfirmDelete(null)\n setEditing({\n mode: 'edit',\n id: node.id,\n draft: {\n code: node.code,\n name: node.name,\n nodeType: node.nodeType === 'group' ? 'group' : 'leaf',\n accountType: node.accountType ?? '',\n parentId: node.parentId ?? null,\n },\n })\n }\n\n function validate(draft: Draft, selfId?: string): string | null {\n const code = draft.code.trim()\n if (!code) return t('financial.chartTree.error.codeRequired')\n if (!draft.name.trim()) return t('financial.chartTree.error.nameRequired')\n const clash = (nodes ?? []).find((n) => n.code === code && n.id !== selfId)\n if (clash) return t('financial.chartTree.error.codeTaken', { code, name: clash.name })\n if (selfId && draft.nodeType === 'leaf' && childIds(fullTree, selfId).length > 0) {\n return t('financial.chartTree.error.leafWithChildren')\n }\n return null\n }\n\n async function run(action: () => Promise<unknown>, success: string) {\n setBusy(true)\n try {\n await action()\n if (table) emitDataChanged({ table })\n toast.success(success)\n await reload()\n return true\n } catch (err) {\n toast.error(t('financial.chartTree.error.save'), { description: errorMessage(err) })\n return false\n } finally {\n setBusy(false)\n }\n }\n\n async function submit() {\n if (!editing) return\n const { draft } = editing\n const invalid = validate(draft, editing.mode === 'edit' ? editing.id : undefined)\n if (invalid) {\n toast.error(invalid)\n return\n }\n const payload = {\n code: draft.code.trim(),\n name: draft.name.trim(),\n nodeType: draft.nodeType,\n accountType: draft.accountType || null,\n parentId: draft.parentId,\n }\n const ok = editing.mode === 'create'\n ? await run(() => provider.create({ ...payload, isActive: true } as any), t('financial.chartTree.created', { name: payload.name }))\n : await run(() => provider.update(editing.id, payload as any), t('financial.chartTree.updated', { name: payload.name }))\n if (ok) setEditing(null)\n }\n\n async function setActive(node: ChartOfAccountsNode, isActive: boolean) {\n await run(\n () => provider.update(node.id, { isActive } as Partial<ChartOfAccountsNode>),\n t(isActive ? 'financial.chartTree.reactivated' : 'financial.chartTree.deactivated', { name: node.name }),\n )\n }\n\n async function remove(node: ChartOfAccountsNode) {\n const ok = await run(() => provider.remove(node.id), t('financial.chartTree.deleted', { name: node.name }))\n if (ok) setConfirmDelete(null)\n }\n\n const parentOptions = React.useCallback((q: string, selfId?: string): SearchSelectOption[] => {\n const blocked = selfId ? descendantIds(fullTree, selfId).add(selfId) : new Set<string>()\n const needle = q.trim().toLowerCase()\n return [...fullTree.byId.values()]\n .filter((n) => !blocked.has(n.id) && isGroupNode(fullTree, n))\n .filter((n) => !needle || accountLabel(n).toLowerCase().includes(needle))\n .sort((a, b) => a.code.localeCompare(b.code, undefined, { numeric: true }))\n .slice(0, 50)\n .map((n) => ({ id: n.id, label: accountLabel(n) }))\n }, [fullTree])\n\n if (nodes === null) {\n return (\n <div className=\"space-y-2\" aria-busy=\"true\">\n {Array.from({ length: 6 }).map((_, i) => <Skeleton key={i} className=\"h-9 w-full\" />)}\n </div>\n )\n }\n\n const roots = rootIds(tree).filter((id) => !search || search.visible.has(id))\n const inactiveCount = (nodes ?? []).filter((n) => !n.isActive).length\n\n function renderForm(draft: Draft, level: number, selfId?: string) {\n const update = (patch: Partial<Draft>) =>\n setEditing((prev) => (prev ? { ...prev, draft: { ...prev.draft, ...patch } } as Editing : prev))\n const parent = draft.parentId ? fullTree.byId.get(draft.parentId) : undefined\n return (\n // Not a <form>: Enter would \"click\" the first button inside SearchSelect\n // (its clear action) and wipe the parent instead of saving.\n <div\n role=\"group\"\n className=\"rounded-md border border-border bg-muted/40 p-3 space-y-3\"\n style={{ marginLeft: Math.min(level, 8) * 16 }}\n onKeyDown={(e) => {\n if (e.key === 'Escape') setEditing(null)\n if (e.key === 'Enter' && (e.target as HTMLElement).dataset.submitOnEnter) {\n e.preventDefault()\n void submit()\n }\n }}\n >\n <div className=\"grid gap-3 sm:grid-cols-[8rem_1fr]\">\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.code')}\n <Input data-submit-on-enter=\"1\" value={draft.code} onChange={(e) => update({ code: e.target.value })} required />\n </label>\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.name')}\n <Input data-submit-on-enter=\"1\" autoFocus value={draft.name} onChange={(e) => update({ name: e.target.value })} required />\n </label>\n </div>\n <div className=\"grid gap-3 sm:grid-cols-3\">\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.structure')}\n <Select value={draft.nodeType} onValueChange={(v) => update({ nodeType: v as AccountNodeType })}>\n <SelectTrigger className=\"px-2 font-normal text-foreground\"><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"leaf\">{t('financial.chartTree.leaf')}</SelectItem>\n <SelectItem value=\"group\">{t('financial.chartTree.group')}</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.nature')}\n <Select\n value={draft.accountType || NO_NATURE}\n onValueChange={(v) => update({ accountType: v === NO_NATURE ? '' : v as AccountType })}\n >\n <SelectTrigger className=\"px-2 font-normal text-foreground\"><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value={NO_NATURE}>{t('financial.chartTree.nature.none')}</SelectItem>\n {NATURES.map((n) => <SelectItem key={n} value={n}>{t(`financial.chartTree.nature.${n}`)}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n <div className=\"space-y-1 text-xs font-medium text-muted-foreground\">\n {t('financial.chartTree.field.parent')}\n <SearchSelect\n value={draft.parentId ?? undefined}\n displayValue={parent ? accountLabel(parent) : undefined}\n onChange={(id) => update({ parentId: id || null })}\n onSearch={(q) => parentOptions(q, selfId)}\n minChars={0}\n placeholder={t('financial.chartTree.rootLevel')}\n noResultsLabel={t('financial.chartTree.noGroups')}\n searchingLabel={t('financial.chartTree.searching')}\n clearLabel={t('financial.chartTree.rootLevel')}\n />\n </div>\n </div>\n <div className=\"flex flex-wrap justify-end gap-2\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => setEditing(null)} disabled={busy}>\n {t('financial.chartTree.cancel')}\n </Button>\n <Button type=\"button\" size=\"sm\" disabled={busy} onClick={() => void submit()}>\n {busy ? t('financial.chartTree.saving') : t('financial.chartTree.save')}\n </Button>\n </div>\n </div>\n )\n }\n\n function renderNode(id: string, level: number): React.ReactNode {\n const node = tree.byId.get(id)!\n const kids = childIds(tree, id).filter((c) => !search || search.visible.has(c))\n const group = isGroupNode(tree, node)\n const open = search ? true : expanded.has(id)\n const isEditingThis = editing?.mode === 'edit' && editing.id === id\n const creatingHere = editing?.mode === 'create' && editing.parentId === id\n const isMatch = search?.matches.has(id)\n const hasAnyChildren = childIds(fullTree, id).length > 0\n const FolderIcon = open ? FolderOpen : Folder\n\n return (\n <li key={id} role=\"treeitem\" aria-level={level + 1} aria-expanded={group ? open : undefined}>\n {isEditingThis && editing ? renderForm(editing.draft, level, id) : (\n <div\n className={\n 'group/row flex min-h-10 items-center gap-2 rounded-md px-2 py-1 hover:bg-muted/60 '\n + (node.isActive ? '' : 'opacity-60')\n }\n style={{ paddingLeft: 8 + Math.min(level, 8) * 16 }}\n >\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n className={'flex h-6 w-6 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted ' + (kids.length ? '' : 'invisible')}\n onClick={() => toggle(id)}\n aria-label={open ? t('financial.chartTree.collapse') : t('financial.chartTree.expand')}\n disabled={!!search}\n >\n <ChevronRight className={'h-4 w-4 transition-transform ' + (open ? 'rotate-90' : '')} />\n </Button>\n {group\n ? <FolderIcon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n : <FileText className=\"h-4 w-4 shrink-0 text-muted-foreground\" />}\n <span className=\"shrink-0 font-mono text-xs tabular-nums text-muted-foreground\">{node.code}</span>\n <span className={'min-w-0 flex-1 truncate text-sm ' + (group ? 'font-semibold' : '') + (isMatch ? ' text-primary' : '')}>\n {node.name}\n </span>\n <span className=\"hidden shrink-0 items-center gap-1 sm:flex\">\n {node.accountType && (\n <Badge variant={NATURE_VARIANT[node.accountType] ?? 'default'} dot={false}>\n {t(`financial.chartTree.nature.${node.accountType}`)}\n </Badge>\n )}\n {!node.isActive && <Badge variant=\"outline\">{t('financial.chartTree.inactive')}</Badge>}\n </span>\n {confirmDelete === id ? (\n <span className=\"flex shrink-0 items-center gap-1\">\n <span className=\"hidden text-xs text-muted-foreground md:inline\">{t('financial.chartTree.confirmDelete')}</span>\n <Button size=\"sm\" variant=\"destructive\" disabled={busy} onClick={() => void remove(node)}>\n {t('financial.chartTree.delete')}\n </Button>\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={() => setConfirmDelete(null)}>\n {t('financial.chartTree.cancel')}\n </Button>\n </span>\n ) : (\n <span className=\"flex shrink-0 items-center justify-end gap-0.5 sm:w-32 sm:opacity-0 sm:group-hover/row:opacity-100 sm:focus-within:opacity-100\">\n {canCreate && group && node.isActive && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.addChild')} aria-label={t('financial.chartTree.addChild')} onClick={() => startCreate(id)} disabled={busy}>\n <Plus className=\"h-4 w-4\" />\n </Button>\n )}\n {canEdit && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.edit')} aria-label={t('financial.chartTree.edit')} onClick={() => startEdit(node)} disabled={busy}>\n <Pencil className=\"h-4 w-4\" />\n </Button>\n )}\n {canEdit && !hasAnyChildren && (\n node.isActive ? (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.deactivate')} aria-label={t('financial.chartTree.deactivate')} onClick={() => void setActive(node, false)} disabled={busy}>\n <Ban className=\"h-4 w-4\" />\n </Button>\n ) : null\n )}\n {canEdit && !node.isActive && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.reactivate')} aria-label={t('financial.chartTree.reactivate')} onClick={() => void setActive(node, true)} disabled={busy}>\n <RotateCcw className=\"h-4 w-4\" />\n </Button>\n )}\n {canDelete && !hasAnyChildren && (\n <Button size=\"icon\" variant=\"ghost\" title={t('financial.chartTree.delete')} aria-label={t('financial.chartTree.delete')} onClick={() => { setEditing(null); setConfirmDelete(id) }} disabled={busy}>\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n )}\n </span>\n )}\n </div>\n )}\n {open && (kids.length > 0 || creatingHere) && (\n <ul role=\"group\" className=\"space-y-0.5\">\n {creatingHere && editing && <li>{renderForm(editing.draft, level + 1)}</li>}\n {kids.map((c) => renderNode(c, level + 1))}\n </ul>\n )}\n </li>\n )\n }\n\n const hasOther = (nodes ?? []).some((n) => sideOf(n.accountType) === 'other')\n\n return (\n <div className=\"space-y-3\">\n <SegmentedControl\n value={side}\n onChange={(v) => { setSide(v as Side); setEditing(null) }}\n options={[\n { value: 'in', label: tl('Income (in)', 'Receitas (entradas)') },\n { value: 'out', label: tl('Expenses (out)', 'Despesas (saídas)') },\n ...(hasOther ? [{ value: 'other', label: tl('Balance', 'Patrimoniais') }] : []),\n ]}\n />\n <div className=\"flex flex-wrap items-center gap-2\">\n <div className=\"relative min-w-[12rem] flex-1\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={t('financial.chartTree.searchPlaceholder')}\n className=\"pl-8 pr-8\"\n aria-label={t('financial.chartTree.searchPlaceholder')}\n />\n {query && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n className=\"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground\"\n onClick={() => setQuery('')}\n aria-label={t('financial.chartTree.clearSearch')}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setExpanded(new Set(groupIds))} disabled={!!search} title={t('financial.chartTree.expandAll')} aria-label={t('financial.chartTree.expandAll')}>\n <ChevronsUpDown className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('financial.chartTree.expandAll')}</span>\n </Button>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setExpanded(new Set())} disabled={!!search} title={t('financial.chartTree.collapseAll')} aria-label={t('financial.chartTree.collapseAll')}>\n <ChevronsDownUp className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('financial.chartTree.collapseAll')}</span>\n </Button>\n </div>\n\n {/* O botão principal sobe para a faixa da página, como em qualquer lista\n do produto — era o único \"Novo\" do sistema desenhado no meio do corpo,\n ao lado da busca, e por isso nascia com um peso e num lugar que\n nenhuma outra tela usa. Embutido noutra tela (`embedded`) ele fica\n onde está: ali a faixa nomeia a tela inteira, não este bloco. */}\n {canCreate && (embedded\n ? (\n <Button size=\"sm\" onClick={() => startCreate(null)} disabled={busy}>\n <Plus className=\"h-4 w-4\" />\n {t('financial.chartTree.addRoot')}\n </Button>\n )\n : (\n <PageHeaderActions>\n <Button size=\"sm\" onClick={() => startCreate(null)} disabled={busy}>\n <Plus className=\"h-4 w-4\" />\n {t('financial.chartTree.addRoot')}\n </Button>\n </PageHeaderActions>\n ))}\n\n <div className=\"flex flex-wrap items-center justify-between gap-2 text-xs text-muted-foreground\">\n <span>\n {search\n ? t(search.matches.size === 1 ? 'financial.chartTree.matchesOne' : 'financial.chartTree.matches', { count: search.matches.size })\n : t(tree.byId.size === 1 ? 'financial.chartTree.countOne' : 'financial.chartTree.count', { count: tree.byId.size })}\n </span>\n {inactiveCount > 0 && (\n <label className=\"inline-flex cursor-pointer items-center gap-1.5\">\n <Checkbox checked={showInactive} onChange={setShowInactive} />\n {t('financial.chartTree.showInactive', { count: inactiveCount })}\n </label>\n )}\n </div>\n\n {loadError && (\n <p className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n {t('financial.chartTree.error.load')} {loadError}\n </p>\n )}\n\n {editing?.mode === 'create' && editing.parentId === null && renderForm(editing.draft, 0)}\n\n {roots.length === 0 && !(editing?.mode === 'create' && editing.parentId === null) ? (\n <div className=\"rounded-md border border-dashed border-border p-8 text-center text-sm text-muted-foreground\">\n {search ? t('financial.chartTree.noMatches') : t('financial.chartTree.empty')}\n </div>\n ) : (\n <ul role=\"tree\" aria-label={t('registry.chart-of-accounts')} className=\"space-y-0.5\">\n {roots.map((id) => renderNode(id, 0))}\n </ul>\n )}\n </div>\n )\n}\n\n","import React from 'react'\nimport { renderCardChip, renderAccountAvatar } from '../views/cardChip'\nimport { RECORD_GROUP, recordRailFields, activeFacet, tl } from '@fayz-ai/core'\nimport type { PluginRegistryDef, PluginRegistryViewProps } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { T } from '@fayz-ai/financial/data/tables'\nimport { ChartOfAccountsTree } from '../components/ChartOfAccountsTree'\nimport { BankPicker } from '../components/BankPicker'\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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n { key: 'transactionType', label: tl('Transaction Type', 'Tipo de transação'), type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check', 'voucher'], showInTable: true, required: true },\n ...recordRailFields({ tagsTable: 'plg_financial_payment_method_types', activeLabel: 'Ativo', unit: false }),\n ],\n data: { table: T.paymentMethodTypes, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Payment Methods (user-created — e.g. \"Visa 2x\", \"PIX Store\")\n// ---------------------------------------------------------------------------\n\nconst paymentMethodEntity: EntityDef = {\n name: 'Payment Method',\n namePlural: 'Payment Methods',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n // FK to the seeded payment_method_types catalog — load real ids at runtime\n // (a static enum select would write the string into the uuid column).\n { key: 'paymentMethodTypeId', label: tl('Type', 'Tipo'), type: 'relation', relation: { table: T.paymentMethodTypes, labelField: 'name' }, showInTable: true, required: true },\n { key: 'discountValue', label: tl('Discount %', 'Desconto %'), type: 'number', showInTable: true },\n { key: 'interestValue', label: tl('Interest %', 'Juros %'), type: 'number', showInTable: true },\n { key: 'minInstallments', label: tl('Min Installments', 'Parcelas mín.'), type: 'number', defaultValue: 1 },\n { key: 'maxInstallments', label: tl('Max Installments', 'Parcelas máx.'), type: 'number', defaultValue: 1, showInTable: true },\n { key: 'isActive', label: tl('Active', 'Ativo'), type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: T.paymentMethods, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Chart of Accounts (tree structure)\n// ---------------------------------------------------------------------------\n\nconst chartOfAccountsEntity: EntityDef = {\n name: 'Ledger Account',\n namePlural: 'Chart of Accounts',\n icon: 'BookOpen',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'code',\n fields: [\n { key: 'code', label: tl('Code', 'Código'), type: 'text', required: true, showInTable: true },\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n { key: 'nodeType', label: tl('Structure', 'Estrutura'), type: 'select', options: ['group', 'leaf'], showInTable: true, required: true, defaultValue: 'leaf' },\n // What the account IS, as opposed to where it sits in the tree (nodeType).\n // Migration 013 leaves it unconstrained; the picker offers the five the\n // module reasons about.\n { key: 'accountType', label: tl('Nature', 'Natureza'), type: 'select', options: [\n { label: tl('Revenue', 'Receita'), value: 'revenue' },\n { label: tl('Expense', 'Despesa'), value: 'expense' },\n { label: tl('Asset', 'Ativo'), value: 'asset' },\n { label: tl('Liability', 'Passivo'), value: 'liability' },\n { label: tl('Equity', 'Patrimônio'), value: 'equity' },\n ], showInTable: true },\n // Pai é FK para a própria árvore, e só GRUPO pode ser pai — uma folha é\n // onde o lançamento cai, não um cabeçalho. Rótulo com o código junto\n // porque é por ele que um plano de contas se lê e se ordena.\n { key: 'parentId', label: tl('Parent', 'Conta pai'), type: 'relation', showInTable: false,\n relation: { table: T.chartOfAccounts, labelFields: ['code', 'name'], filter: { node_type: 'group' } } },\n ...recordRailFields({ tagsTable: 'plg_financial_chart_of_accounts', activeLabel: 'Ativo', unit: true }),\n ],\n data: { table: T.chartOfAccounts, tenantScoped: true },\n}\n\nconst chartOfAccountsSeed = [\n { id: 'coa-1', code: '1', name: 'Revenue', nodeType: 'group', accountType: 'revenue', isActive: true },\n { id: 'coa-1.1', code: '1.1', name: 'Sales Revenue', nodeType: 'group', accountType: 'revenue', parentId: 'coa-1', isActive: true },\n { id: 'coa-1.1.01', code: '1.1.01', name: 'Services', nodeType: 'leaf', accountType: 'revenue', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-1.1.02', code: '1.1.02', name: 'Products', nodeType: 'leaf', accountType: 'revenue', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-2', code: '2', name: 'Other Revenue', nodeType: 'group', accountType: 'revenue', isActive: true },\n { id: 'coa-2.1', code: '2.1', name: 'Financial Income', nodeType: 'leaf', accountType: 'revenue', parentId: 'coa-2', isActive: true },\n { id: 'coa-3', code: '3', name: 'Operational Costs', nodeType: 'group', accountType: 'expense', isActive: true },\n { id: 'coa-3.1', code: '3.1', name: 'Materials & Supplies', nodeType: 'group', accountType: 'expense', parentId: 'coa-3', isActive: true },\n { id: 'coa-3.1.01', code: '3.1.01', name: 'Raw Materials', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-3.1.02', code: '3.1.02', name: 'Consumables', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-4', code: '4', name: 'Expenses', nodeType: 'group', accountType: 'expense', isActive: true },\n { id: 'coa-4.1', code: '4.1', name: 'Rent', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.2', code: '4.2', name: 'Utilities', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.3', code: '4.3', name: 'Payroll', nodeType: 'leaf', accountType: 'expense', parentId: 'coa-4', isActive: true },\n]\n\n// Same entity and provider the generic CRUD would use — only the screen differs.\nconst ChartOfAccountsRegistryView: React.FC<PluginRegistryViewProps> = (props) =>\n React.createElement(ChartOfAccountsTree, { ...props, entity: chartOfAccountsEntity, mockData: chartOfAccountsSeed })\nChartOfAccountsRegistryView.displayName = 'ChartOfAccountsRegistryView'\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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'code',\n fields: [\n { key: 'code', label: tl('Code', 'Código'), type: 'text', required: true, showInTable: true },\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n ...recordRailFields({ tagsTable: 'plg_financial_cost_centers', activeLabel: 'Ativo', unit: true }),\n ],\n data: { table: T.costCenters, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Bank Accounts (physical cash, bank, credit card, digital wallet)\n// ---------------------------------------------------------------------------\n\n// O TIPO DA CONTA DECIDE QUAIS CAMPOS EXISTEM.\n//\n// O V1 pergunta coisas diferentes para cada tipo, e com razão: agência e conta\n// num caixa físico não têm resposta, e dia de fechamento num caixa também não.\n// Aqui era uma lista só, com os dez campos abertos para todo mundo — quem\n// cadastrava a tesouraria via \"Banco\", \"Agência\", \"Dia de fechamento\" e tinha\n// de adivinhar que eram para outra coisa. Um campo que não se aplica não é\n// neutro: ele pede uma resposta e depois guarda o que vier.\nconst isCard = (t: unknown) => t === 'card_receivable_credit' || t === 'card_receivable_debit' || t === 'card_payable'\nconst isBank = (t: unknown) => t === 'bank'\n// A credit card is issued by a bank, so it answers \"which bank\" too.\nconst hasIssuer = (t: unknown) => isBank(t) || t === 'card_payable'\n\n// AS ESPÉCIES QUE SÃO CADASTRO.\n//\n// `plg_financial_accounts` é a tabela de TODA conta do razão: além destas\n// cinco, ela guarda uma conta por PESSOA (122 mil delas no cluster), uma por\n// unidade, uma por sessão de caixa e as do sistema. Sem este recorte o\n// cadastro de Contas abria com a lista de clientes dentro — foi o que a tela\n// mostrou na primeira vez que ganhou porta.\nconst ACCOUNT_KINDS = ['cash_physical', 'bank', 'card_receivable_credit', 'card_receivable_debit', 'card_payable']\n\nconst bankAccountEntity: EntityDef = {\n name: 'Conta',\n namePlural: 'Contas',\n icon: 'Landmark',\n displayField: 'name',\n defaultSort: 'name',\n // O V1 abre esta lista em «Somente Ativas»: inativar uma conta tem de tirá-la\n // da frente de quem lança, e não só trocar o selo da linha.\n // O cartão toma o lugar da foto no alto da ficha; as outras espécies caem\n // no desenho de sempre (renderAvatar devolve null para elas).\n renderAvatar: renderAccountAvatar,\n facets: [activeFacet({ active: 'Ativas', inactive: 'Inativas', all: 'Todas' })],\n formColumns: 2,\n // Os grupos são sobre SIGNIFICADO, e aqui eles seguem o `kind`: uma conta de\n // caixa não tem agência, um cartão não tem titular. Como cada campo já diz\n // com `visibleWhen` a que espécie pertence, o grupo inteiro desaparece\n // sozinho quando nenhum dos seus campos se aplica.\n fieldGroups: [\n { id: 'identity', label: 'Identificação', columns: 2 },\n { id: 'bank', label: 'Onde o dinheiro está', columns: 2,\n labelWhen: (v) => (v.kind === 'card_payable' ? 'Quem emitiu o cartão' : undefined) },\n { id: 'holder', label: 'Titular', columns: 2, description: 'A conta de uma rede raramente está no nome da rede.' },\n { id: 'card', label: 'Cartão', columns: 2 },\n { ...RECORD_GROUP },\n ],\n fields: [\n { key: 'name', label: 'Nome', type: 'text', required: true, showInTable: true, searchable: true, group: 'identity' },\n // Canonical `kind` values. Credit and debit receivables are separate on\n // purpose: they settle on different days, and one account would make the\n // reconciliation wrong from the first sale.\n // A CHAVE É `kind`, a coluna canônica — e um `columnMap` não resolveria.\n //\n // `account_type` guarda a string legada do V1 (`caixa_fisico`,\n // `cartao_credito_recebimento`) e é NULA em 53 das 89 contas bancárias. Ler\n // dela é a V1-014 que o documento do porte registra como defeito: o\n // vocabulário técnico do V1 na tela, e um traço no resto das linhas.\n //\n // Mapear `kind → accountType` também não serve: `mapRow` percorre as\n // colunas em ordem e `account_type` vira `accountType` logo depois,\n // sobrescrevendo o valor bom com o legado. Nomear o campo pela coluna é a\n // única leitura que não depende da ordem das chaves.\n { key: 'kind', label: 'Tipo', type: 'select', options: [\n { label: 'Caixa (dinheiro)', value: 'cash_physical' },\n { label: 'Conta bancária', value: 'bank' },\n { label: 'Recebíveis de crédito', value: 'card_receivable_credit' },\n { label: 'Recebíveis de débito', value: 'card_receivable_debit' },\n { label: 'Cartão a pagar', value: 'card_payable' },\n ], showInTable: true, required: true, group: 'identity' },\n // Banco: onde o dinheiro está de fato.\n //\n // O NÚMERO do banco vem primeiro porque é o que identifica a instituição em\n // qualquer lugar fora desta tela — boleto, CNAB, PIX. «Inter» é como a\n // pessoa chama; «077» é como o sistema bancário chama, e o cadastro precisa\n // dos dois. O porte do V1 mostrou por quê: lá as duas coisas dividem a mesma\n // coluna e 3 contas em 14 guardam o código onde deveria estar o nome.\n { key: 'bankCode', label: 'Número do banco', type: 'text', showInTable: false,\n visibleWhen: (v) => hasIssuer(v.kind) , group: 'bank' },\n // Picking the bank fills its number too, so the two cannot disagree.\n { key: 'bankName', label: 'Banco', type: 'custom', showInTable: false,\n labelWhen: (v) => (v.kind === 'card_payable' ? 'Banco emissor' : undefined),\n visibleWhen: (v) => hasIssuer(v.kind) , group: 'bank',\n renderInput: ({ value, values, onChange, setValue }) => React.createElement(BankPicker, {\n code: (values.bankCode as string) ?? '',\n name: (value as string) ?? '',\n onChange: (next) => {\n onChange(next.name)\n if (next.code || !next.name) setValue?.('bankCode', next.code)\n },\n }) },\n { key: 'agencyNumber', label: 'Agência', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'bank' },\n { key: 'accountNumber', label: 'Número da conta', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'bank' },\n // TITULAR. A conta de uma rede raramente está no nome da rede: está no do\n // sócio, da holding, da empresa de serviços. Quem confere um extrato precisa\n // saber de quem é a conta antes de bater o valor, e quem faz uma\n // transferência precisa do documento para não pagar o titular errado com o\n // nome certo.\n //\n // Só em conta bancária, e é o que o dado diz: das 102 contas do V1, as 13\n // com titular e as 7 com documento são TODAS `conta_bancaria` — nenhum\n // cartão tem nem um nem outro.\n { key: 'holderName', label: 'Titular', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'holder' },\n { key: 'holderDocument', label: 'CPF/CNPJ do titular', type: 'text', showInTable: false,\n visibleWhen: (v) => isBank(v.kind) , group: 'holder' },\n // SALDO INICIAL saiu daqui, e não é esquecimento: `plg_financial_accounts`\n // NÃO TEM coluna de saldo. O razão calcula o saldo pelos movimentos, e o\n // `initial_balance` da tabela legada virou `metadata.legacy_initial_balance`\n // no gatilho de encaminhamento — ou seja, a abertura é um LANÇAMENTO, não\n // uma coluna.\n //\n // O campo estava aqui mesmo assim, com `defaultValue: 0`, e derrubava o\n // insert de toda conta de caixa e de banco criada pela tela:\n // «Could not find the 'initial_balance' column ... in the schema cache».\n // Quando o saldo de abertura voltar, volta como movimento.\n // Cartão: limite, cor e o par fechamento/vencimento da fatura.\n // OS QUATRO ÚLTIMOS. É por eles que a fatura e o extrato da adquirente\n // dizem qual cartão é — e é o que o operador já vinha digitando DENTRO do\n // nome («Cartão Silvio Master 0307», «Cartão Silvio Amex 0016») porque a\n // tela não tinha onde perguntar. Com campo, o nome volta a ser o nome.\n //\n // Quatro, e só: o CHECK da 101 recusa o resto. Guardar o número inteiro de\n // um cartão é um problema de outra natureza, e conciliar não precisa dele.\n { key: 'lastFour', label: 'Final do cartão', type: 'text', showInTable: true,\n placeholder: '0000', max: 4,\n hint: 'Os quatro últimos dígitos — é como a fatura identifica o cartão.',\n renderCell: renderCardChip,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n { key: 'creditLimit', label: 'Limite', type: 'currency', showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n // A cor que ele tem na carteira. A coluna existe desde a 028 e nunca teve\n // campo: o roxo do Nubank e o preto do Amex distinguem três linhas que\n // começam com a mesma palavra mais rápido do que qualquer texto.\n { key: 'color', label: 'Cor do cartão', type: 'color', showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n { key: 'closingDay', label: 'Dia de fechamento', type: 'number', min: 1, max: 31, showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n { key: 'dueDay', label: 'Dia de vencimento', type: 'number', min: 1, max: 31, showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n // MELHOR DIA DE COMPRA: o dia seguinte ao fechamento, quando a compra cai na\n // fatura mais distante. É pergunta de cartão, e vem junto do par\n // fechamento/vencimento porque é deles que ela se deduz.\n //\n // O V1 deixa preencher em qualquer espécie — 6 caixas físicos têm «melhor\n // dia de compra» lá dentro —, e este cadastro não repete o convite: um campo\n // que não se aplica pede uma resposta e depois guarda o que vier. Mesma\n // decisão que `closingDay` e `dueDay` já tomaram nesta lista.\n { key: 'bestPurchaseDay', label: 'Melhor dia de compra', type: 'number', min: 1, max: 31, showInTable: false,\n visibleWhen: (v) => isCard(v.kind) , group: 'card' },\n // BANDEIRA. Sem ela uma conta `card_payable` é só «um cartão»: a fatura não\n // se concilia com a adquirente, e as taxas de `plg_financial_card_fee_configs`\n // — que JÁ são por bandeira — não têm como encontrar a conta.\n //\n // Relação, não texto: «Master», «MASTERCARD» e «mastercard» digitados em\n // três contas são a mesma bandeira, e só o catálogo faz a taxa encontrar as\n // três.\n { key: 'cardBrandId', label: 'Bandeira', type: 'relation', showInTable: false, group: 'card',\n relation: { table: T.cardBrands, labelField: 'name' },\n visibleWhen: (v) => isCard(v.kind) },\n // Inativa-se, não se apaga — a regra que o V1 enuncia com o filtro\n // \"Somente Ativas\": uma conta com histórico não pode sumir do extrato.\n // O rail direito, igual ao de todo cadastro — unidade, o interruptor no\n // canto do título, observações e etiquetas. Ver recordRailFields.\n ...recordRailFields({ tagsTable: 'plg_financial_accounts', activeLabel: 'Ativa' }),\n ],\n // The canonical table — the same one getBankAccounts reads.\n data: {\n table: 'plg_financial_accounts',\n tenantScoped: true,\n searchColumns: ['name'],\n // snake → camel, que é a direção que `mapRow` lê. Invertido, a tela\n // mostrava a coluna legada `account_type` — `caixa_fisico`,\n // `cartao_credito_recebimento` — que é o vocabulário técnico do V1\n // vazando, exatamente a V1-014.\n filters: { kind: ACCOUNT_KINDS },\n },\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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativos', inactive: 'Inativos', all: 'Todos' })],\n fieldGroups: [{ ...RECORD_GROUP }],\n defaultSort: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n ...recordRailFields({ tagsTable: 'plg_financial_card_brands', activeLabel: 'Ativo', unit: false }),\n ],\n data: { table: T.cardBrands, tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Commission Rules\n// ---------------------------------------------------------------------------\n\n// A regra é cadastro; nada ainda calcula comissão a partir dela — a apuração\n// precisa saber quem EXECUTOU o item, e é isso que a tela de Comissões diz.\nconst commissionRuleEntity: EntityDef = {\n name: 'Regra de Comissão',\n namePlural: 'Regras de Comissão',\n icon: 'TrendingUp',\n displayField: 'name',\n formColumns: 2,\n facets: [activeFacet({ active: 'Ativas', inactive: 'Inativas', all: 'Todas' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'priority',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Nome', type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'priority', label: 'Prioridade', type: 'number', required: true, showInTable: true, defaultValue: 1, group: 'identity' },\n { key: 'valueType', label: 'Tipo', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, defaultValue: 'percentage', group: 'identity' },\n { key: 'value', label: 'Valor', type: 'number', required: true, showInTable: true, group: 'identity' },\n { key: 'description', label: 'Descrição', type: 'textarea', group: 'identity' },\n ...recordRailFields({ tagsTable: T.commissionRules, activeLabel: 'Ativa', unit: true }),\n ],\n data: { table: T.commissionRules, 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: tl('Description', 'Descrição'), type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'type', label: tl('Type', 'Tipo'), type: 'select', options: ['sale', 'cost'], required: true, showInTable: true, defaultValue: 'sale', group: 'identity' },\n { key: 'validFrom', label: tl('Valid From', 'Válida desde'), type: 'date', showInTable: true, group: 'identity' },\n { key: 'validUntil', label: tl('Valid Until', 'Válida até'), type: 'date', showInTable: true, group: 'identity' },\n ...recordRailFields({ tagsTable: 'price_tables', activeLabel: 'Ativa', unit: true }),\n ],\n data: { table: 'price_tables', tenantScoped: true },\n}\n\n\n// V1 \"Regras de desconto → Motivos\": a discount names its reason, and the\n// reason may cap it or send it for approval (financial migration 013).\nconst discountReasonEntity: EntityDef = {\n name: 'Discount Reason',\n namePlural: 'Discount Reasons',\n icon: 'Tag',\n displayField: 'name',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true },\n { key: 'code', label: tl('Code', 'Código'), type: 'text', required: true, showInTable: true },\n { key: 'maxPercent', label: tl('Max %', 'Máximo %'), type: 'number', showInTable: true },\n { key: 'requiresApproval', label: tl('Requires approval', 'Exige aprovação'), type: 'boolean', defaultValue: false, showInTable: true },\n { key: 'isActive', label: tl('Active', 'Ativo'), type: 'boolean', defaultValue: true, showInTable: true },\n ],\n data: { table: 'plg_financial_discount_reasons', 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 formColumns: 2,\n facets: [activeFacet({ active: 'Ativas', inactive: 'Inativas', all: 'Todas' })],\n fieldGroups: [{ id: 'identity', label: 'Identificação', columns: 2 }, { ...RECORD_GROUP }],\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: tl('Name', 'Nome'), type: 'text', required: true, showInTable: true, group: 'identity' },\n { key: 'variationType', label: tl('Type', 'Tipo'), type: 'select', options: ['discount', 'increase'], required: true, showInTable: true, group: 'identity' },\n { key: 'valueType', label: tl('Value Type', 'Tipo de valor'), type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, group: 'identity' },\n { key: 'value', label: tl('Value', 'Valor'), type: 'number', required: true, showInTable: true, group: 'identity' },\n { key: 'firstAppointmentOnly', label: tl('First Appointment Only', 'Só no primeiro atendimento'), type: 'boolean', defaultValue: false, group: 'identity' },\n ...recordRailFields({ tagsTable: 'price_variations', activeLabel: 'Ativa', unit: true }),\n ],\n data: { table: 'price_variations', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Export all registries\n// ---------------------------------------------------------------------------\n\n/** O cadastro de CONTAS, para quem quiser montá-lo como tela própria em vez de\n * aba de configuração — é onde o V1 o põe: Cadastros → Contas. */\nexport const financialAccountEntity = bankAccountEntity\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 // O nome convida ao erro: pedido \"salva essa conta a pagar do fornecedor X,\n // pago hoje\", o assistente cadastrou o FORNECEDOR aqui como forma de\n // pagamento. Isto é configuração de como o CLIENTE paga a empresa.\n agentHint:\n 'CONFIGURATION of how customers pay this business (card brand, fee, installment rules). '\n + 'NEVER for a supplier, a bill or an expense — those are payables, see the createPayable tool',\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 component: ChartOfAccountsRegistryView,\n seedData: chartOfAccountsSeed,\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: 'Caixa, banco e contas de recebimento de cartão — onde o dinheiro fica.',\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: 'discount-reasons',\n entity: discountReasonEntity,\n icon: 'Tag',\n description: 'Why a discount was given; a reason may cap it or require approval',\n display: 'table',\n },\n // Price variations stay off until a pricing-rule engine reads them: the\n // table was never created (#108), so the screen could only fail. See the\n // \"Em breve\" settings tab in settings/v1-settings.ts.\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","import type { SetupGuideDef } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Como cada tela do Financeiro entra em pé.\n//\n// O que estes guias resolvem é a distância entre \"a tela existe\" e \"a tela\n// serve para alguma coisa\". Comissão sem regra é uma lista vazia; recebimento\n// sem forma de pagamento é um formulário que não salva; nota fiscal sem\n// emissor é um caderno. Nada disso está escrito na tela em que a pessoa está,\n// porque quase sempre está em OUTRA tela — e é exatamente isso que o\n// assistente não tinha como saber.\n//\n// Regras de escrita, porque estes textos são lidos por um modelo e ditos por\n// ele a uma pessoa:\n//\n// • `about` é para que serve, na língua de quem toca a casa. Nunca o rótulo\n// do botão.\n// • todo pré-requisito tem `check` — o jeito de VER que já está feito. Sem\n// isso o assistente devolve lista de tarefa em vez de conferir.\n// • `byAssistant` só onde existe ferramenta de verdade. Prometer e não fazer\n// é pior do que apontar o botão.\n// • `warnings` é o que faria a pessoa perder uma hora. Vem antes, não depois.\n// ---------------------------------------------------------------------------\n\nconst SETTINGS = '/settings/financial'\n\n/** A raiz de tudo: sem forma de recebimento nenhum dinheiro entra no sistema. */\nconst paymentMethods: SetupGuideDef = {\n feature: 'financial.formas-de-recebimento',\n title: 'Formas de Recebimento',\n about:\n 'Os jeitos pelos quais o dinheiro entra na casa — dinheiro, Pix, cartão em X vezes — com o desconto da maquininha e o prazo de cada um. É o primeiro cadastro do Financeiro: enquanto ele estiver vazio, nenhuma venda consegue virar recebimento.',\n route: `${SETTINGS}/payment-methods`,\n step: 'financial.receiving',\n requires: [\n {\n title: 'Tipos de transação',\n where: 'Configurações › Financeiro › Tipos de forma de pagamento',\n route: `${SETTINGS}/payment-method-types`,\n check: 'a lista já vem com Dinheiro, PIX, Crédito, Débito, Transferência e Cheque',\n required: false,\n },\n {\n title: 'Conta ou caixa que recebe',\n where: 'Configurações › Financeiro › Contas bancárias',\n route: `${SETTINGS}/bank-accounts`,\n check: 'existe pelo menos uma conta com saldo inicial',\n },\n ],\n steps: [\n { do: 'Abra Configurações › Financeiro › Formas de recebimento.', route: `${SETTINGS}/payment-methods` },\n {\n do: 'Cadastre uma forma para cada jeito REAL de receber, com o nome que a equipe usa (\"Crédito 3x\", \"Pix da conta velha\").',\n why: 'É este nome que aparece na hora de fechar a conta do cliente — nome genérico faz o caixa errar.',\n },\n {\n do: 'Preencha o desconto (%) da maquininha e o número máximo de parcelas de cada uma.',\n why: 'O desconto é o que separa o que a cliente pagou do que caiu na conta. Sem ele a conciliação nunca fecha.',\n },\n { do: 'Deixe ativa só o que a casa aceita hoje; desative o resto em vez de apagar.' },\n ],\n rules: [\n 'Uma forma de recebimento desativada some das telas novas, mas continua nos recebimentos antigos — por isso desativar, e não excluir.',\n 'Parcelamento é da FORMA, não da venda: quem define \"até 6x\" é este cadastro.',\n ],\n pitfalls: [\n 'Cadastrar \"Cartão\" sem separar crédito de débito: os prazos e as taxas são diferentes, e a conciliação passa a ter erro todo mês.',\n 'Esquecer o desconto da maquininha faz todo relatório de faturamento vir maior do que o extrato do banco.',\n ],\n answers: [\n 'Como eu cadastro as formas de pagamento?',\n 'Não consigo receber uma venda, não aparece opção nenhuma',\n 'Como coloco a taxa da maquininha?',\n ],\n next: ['financial.contas-a-receber', 'financial.caixas'],\n}\n\nconst chartOfAccounts: SetupGuideDef = {\n feature: 'financial.plano-de-contas',\n title: 'Plano de Contas',\n about:\n 'As gavetas em que cada real entra ou sai — aluguel, folha, insumo, serviço. É o que transforma uma pilha de lançamentos em \"para onde foi o meu dinheiro\".',\n route: `${SETTINGS}/chart-of-accounts`,\n step: 'financial.accounts',\n requires: [],\n steps: [\n {\n do: 'Abra Configurações › Financeiro › Plano de contas e olhe o que já existe.',\n why: 'Já vem uma estrutura pronta (Receita, Custos operacionais, Despesas) — na maioria das casas é ajuste, não criação.',\n route: `${SETTINGS}/chart-of-accounts`,\n },\n { do: 'Renomeie as contas folha para o vocabulário da casa, mantendo os códigos.' },\n { do: 'Acrescente só o que faltar, sempre pendurado num grupo existente.' },\n ],\n rules: [\n 'Grupo não recebe lançamento — só folha (`leaf`). Um grupo com movimento é sinal de conta cadastrada no nível errado.',\n 'A natureza (receita, despesa, ativo, passivo) é o que decide o sinal nos relatórios. Trocar depois reescreve a leitura de meses fechados.',\n ],\n pitfalls: [\n 'Criar uma conta por fornecedor. O plano é por NATUREZA do gasto; fornecedor é o outro lado da conta a pagar.',\n 'Plano de contas gigante: quem lança na correria escolhe a primeira opção, e a análise fica pior do que com dez contas boas.',\n ],\n answers: [\n 'Como eu organizo minhas despesas por categoria?',\n 'O que é plano de contas?',\n 'Para onde está indo o meu dinheiro?',\n ],\n next: ['financial.contas-a-pagar'],\n}\n\nconst payables: SetupGuideDef = {\n feature: 'financial.contas-a-pagar',\n title: 'Contas a Pagar',\n about:\n 'O que a casa deve e quando vence — do aluguel ao fornecedor da nota que entrou ontem. Parcelado, cada parcela vence sozinha.',\n route: '/financial/payables/list',\n requires: [\n {\n title: 'Plano de contas',\n feature: 'financial.plano-de-contas',\n where: 'Configurações › Financeiro › Plano de contas',\n route: `${SETTINGS}/chart-of-accounts`,\n check: 'o seletor de classificação traz contas de despesa',\n },\n {\n title: 'Conta de onde sai o dinheiro',\n where: 'Configurações › Financeiro › Contas bancárias',\n route: `${SETTINGS}/bank-accounts`,\n check: 'existe pelo menos uma conta cadastrada',\n },\n ],\n // The anchored steps ARE the tour: startFeatureSetup turns each one into a\n // spotlight stop, in this order, navigating per stop. The unanchored ones\n // stay prose — briefing for the assistant to say in its own words.\n // O tour NAVEGA até a tela de cadastro (3 paradas, cada uma com rota, então\n // reiniciar renavega). Chegando, a `practice` assume: a pessoa preenche os\n // campos sozinha com os marcadores numerados, para FIXAR o cadastro.\n steps: [\n { do: 'O Financeiro mora aqui.', anchor: 'nav./financial', route: '/financial' },\n { do: 'Abra Contas a Pagar neste menu.', anchor: 'modnav.payables', route: '/financial/payables/list' },\n { do: 'Clique em Cadastrar manualmente para abrir uma conta nova.', anchor: 'action.manual', route: '/financial/payables/list' },\n { do: 'Diga a quem se deve, adicione um item com o valor, confira as parcelas e salve.' },\n { do: 'Ao pagar, dê baixa NA PARCELA, escolhendo a conta de onde o dinheiro saiu.' },\n ],\n practice: [\n { anchor: 'financial.contact', label: 'Selecione o fornecedor' },\n { anchor: 'financial.items', label: 'Adicione um item com o valor' },\n { anchor: 'financial.installments', label: 'Confira as parcelas' },\n { anchor: 'savebar.save', label: 'Salve a conta', final: true },\n ],\n rules: [\n 'Uma conta a pagar é um cabeçalho com parcelas: o que vence, o que se paga e o que aparece no extrato é sempre a PARCELA.',\n 'Baixa exige dizer de qual conta saiu — é o que faz o extrato bater.',\n ],\n warnings: [\n 'O formulário de edição pode abrir marcando \"Alterações não salvas\" antes de qualquer toque. É defeito conhecido da tela; salvar sem necessidade recria o parcelamento.',\n ],\n pitfalls: [\n 'Lançar a conta do fornecedor à mão quando a nota fiscal dele já entrou — vira despesa em dobro.',\n 'Dar baixa no cabeçalho em vez da parcela: some da lista e não aparece no extrato.',\n ],\n answers: [\n 'Como eu lanço uma despesa?',\n 'Como faço uma conta parcelada?',\n 'Paguei o boleto, como registro?',\n ],\n next: ['financial.conciliacao'],\n}\n\nconst receivables: SetupGuideDef = {\n feature: 'financial.contas-a-receber',\n title: 'Contas a Receber',\n about:\n 'O que entra: o que a cliente já consumiu e ainda não pagou, e o que foi parcelado no cartão. A venda concluída levanta a fatura sozinha — esta tela é para o que sobra e para o que se cobra à parte.',\n route: '/financial/receivables/list',\n requires: [\n {\n title: 'Formas de recebimento',\n feature: 'financial.formas-de-recebimento',\n where: 'Configurações › Financeiro › Formas de recebimento',\n route: `${SETTINGS}/payment-methods`,\n check: 'a tela de receber oferece pelo menos uma forma',\n },\n ],\n // Só as abas de TOPO do módulo viram `modnav.<id>`; os filhos (list/new) são\n // um SegmentedControl sem âncora, então o tour navega pela aba e pela rota.\n steps: [\n { do: 'O Financeiro mora aqui.', anchor: 'nav./financial', route: '/financial' },\n { do: 'Abra Contas a Receber neste menu — a lista mostra o que está em aberto.', anchor: 'modnav.receivables', route: '/financial/receivables/list' },\n { do: 'Cadastre uma cobrança à mão só para o que não nasceu de uma venda.', anchor: 'action.manual', route: '/financial/receivables/list' },\n {\n do: 'O normal é receber pela própria linha, escolhendo a forma e — no cartão — o número de parcelas.',\n byAssistant: true,\n tool: 'markPaymentReceived',\n why: 'Eu consigo dar baixa direto quando você me disser qual atendimento ou pedido foi pago.',\n },\n ],\n rules: [\n 'Venda concluída vira fatura por gatilho: NENHUMA tela escreve fatura por fora. Se você está cadastrando à mão o que foi vendido, alguma coisa está errada antes daqui.',\n 'Cartão em X vezes gera X parcelas com vencimentos próprios, e cada uma é recebida sozinha.',\n ],\n answers: [\n 'Como recebo o pagamento de um atendimento?',\n 'Cliente pagou no cartão em 3x, como lanço?',\n 'O que está em aberto para receber?',\n ],\n next: ['financial.caixas', 'financial.conciliacao'],\n}\n\nconst cashRegisters: SetupGuideDef = {\n feature: 'financial.caixas',\n title: 'Caixas e Conferência',\n about:\n 'A sessão de caixa do dia: abre com um valor, recebe o movimento e fecha conferindo o que o sistema diz contra o que tem na gaveta. A diferença é o assunto, não o erro.',\n route: '/financial/cash/registers',\n step: 'financial.cash',\n requires: [\n {\n title: 'Formas de recebimento',\n feature: 'financial.formas-de-recebimento',\n route: `${SETTINGS}/payment-methods`,\n check: 'existe forma cadastrada — sem isso o movimento do dia não classifica',\n },\n {\n title: 'Quem pode conferir',\n where: 'Configurações › Equipe › papel da pessoa',\n route: '/settings/team',\n check: 'quem vai aprovar tem permissão de gestão no Financeiro',\n },\n ],\n steps: [\n { do: 'O Financeiro mora aqui.', anchor: 'nav./financial', route: '/financial' },\n { do: 'Abra Caixas neste menu.', anchor: 'modnav.cash-registers', route: '/financial/cash/registers' },\n { do: 'Abra o caixa dizendo o valor que está na gaveta agora.', anchor: 'financial.cash-open', route: '/financial/cash/registers' },\n { do: 'Durante o dia, o movimento entra sozinho pelo que for recebido.' },\n { do: 'No fim, feche informando o que foi CONTADO de verdade — inclusive quando não bate.', anchor: 'financial.cash-close', route: '/financial/cash/registers' },\n { do: 'Quem tem alçada confere e aprova a sessão fechada.', why: 'É a aprovação que congela o dia.' },\n ],\n rules: [\n 'Quem fechou o caixa NÃO pode aprovar o próprio fechamento — o servidor recusa, e é assim de propósito.',\n 'A diferença apurada fica registrada. Ela é informação de gestão, não algo a esconder acertando o número.',\n ],\n pitfalls: [\n 'Informar no fechamento o valor que o sistema mostra em vez do que está na gaveta: some a diferença e some o motivo dela.',\n 'Deixar o caixa do dia anterior aberto — o movimento de hoje cai na sessão de ontem.',\n ],\n answers: [\n 'Como abro e fecho o caixa?',\n 'Meu caixa não bateu, e agora?',\n 'Quem pode aprovar o fechamento?',\n ],\n next: ['financial.conciliacao'],\n}\n\nconst commissions: SetupGuideDef = {\n feature: 'financial.commissions',\n title: 'Comissões',\n about:\n 'O quanto cada pessoa ganha pelo que atendeu, e o caminho até o dinheiro na mão dela: apurar o período, aprovar, gerar o borderô e pagar.',\n route: '/financial/commissions',\n requires: [\n {\n title: 'Regras de comissão',\n feature: 'financial.commission-rules',\n where: 'Configurações › Comissões',\n route: '/settings/financial-commissions',\n check: 'existe pelo menos uma regra ativa, e o funil de teste mostra que ela casa com um atendimento real',\n },\n {\n title: 'Atendimentos concluídos no período',\n where: 'Agenda / Pedidos',\n check: 'existe faturamento reconhecido no mês que você vai apurar — apuração sem movimento devolve lista vazia',\n },\n ],\n steps: [\n { do: 'Financeiro › Comissões: escolha o período e apure.', route: '/financial/commissions' },\n { do: 'Confira lançamento por lançamento antes de aprovar — depois de aprovado o lote é o que vira dinheiro.' },\n { do: 'Aprove e gere o borderô: ele agrupa por pessoa e vira conta a pagar.' },\n { do: 'Pague as contas geradas como qualquer outra conta a pagar.' },\n ],\n rules: [\n 'Aprovar, gerar borderô e pagar trabalham sobre o LOTE apurado. Reapurar o mesmo período cria um lote novo — apure uma vez e trabalhe nele.',\n 'A separação por unidade é proposital: a mesma pessoa em duas unidades gera duas contas.',\n ],\n pitfalls: [\n 'Regra sem critério casa com tudo e parece configurada. Use o funil de teste na tela de regras antes de apurar o mês inteiro.',\n 'Linha de atendimento sem produto/serviço amarrado escapa dos critérios e é capturada pela regra mais específica da casa — confira o que a apuração pegou antes de aprovar.',\n ],\n answers: [\n 'Como pago a comissão da equipe?',\n 'A comissão saiu errada, por quê?',\n 'O que é borderô?',\n ],\n next: ['financial.contas-a-pagar'],\n}\n\nconst commissionRules: SetupGuideDef = {\n feature: 'financial.commission-rules',\n title: 'Regras de Comissão',\n about:\n 'A política da casa escrita uma vez: quem ganha quanto, por qual serviço, em qual unidade. É configuração de quem manda, não operação do dia.',\n route: '/settings/financial-commissions',\n requires: [\n {\n title: 'Serviços e produtos cadastrados',\n where: 'Catálogo / Estoque › Produtos',\n route: '/inventory/products/list',\n check: 'dá para escolher um serviço no critério da regra',\n },\n {\n title: 'Equipe cadastrada com função',\n where: 'Configurações › Equipe',\n route: '/settings/team',\n check: 'as pessoas aparecem para vincular à regra',\n },\n ],\n steps: [\n { do: 'Configurações › Comissões.', route: '/settings/financial-commissions' },\n { do: 'Crie a regra dizendo o CRITÉRIO (serviço, categoria, unidade) antes do valor.' },\n { do: 'Defina percentual ou valor fixo, e a prioridade — a regra mais específica tem de vir na frente.' },\n { do: 'Use o funil de teste da própria tela com uma combinação real antes de sair.', why: 'É o único jeito de ver qual regra casaria de verdade.' },\n ],\n rules: [\n 'Quando duas regras casam, ganha a de maior prioridade. Empate é sorteio disfarçado — resolva pela prioridade.',\n 'Regra sem critério nenhum casa com TODO atendimento. Se é isso que você quer, deixe explícito; se não, é o defeito mais caro desta tela.',\n ],\n answers: [\n 'Como configuro a comissão de cada profissional?',\n 'Por que a comissão dela não foi calculada?',\n 'Dá para comissionar só um serviço?',\n ],\n next: ['financial.commissions'],\n}\n\nconst goals: SetupGuideDef = {\n feature: 'financial.goals',\n title: 'Metas',\n about:\n 'A meta de faturamento de uma unidade num mês, em três degraus: Meta, Super e Hiper. O realizado vem do faturamento reconhecido e aparece mesmo onde ninguém cadastrou alvo.',\n route: '/financial/goals',\n requires: [\n {\n title: 'Unidades cadastradas',\n where: 'Configurações › Locais e unidades',\n route: '/settings/locations',\n check: 'o seletor de unidade da tela de Metas traz pelo menos uma opção',\n required: false,\n },\n {\n title: 'Faturamento acontecendo',\n check: 'a coluna \"Realizado\" mostra valor — se está tudo zerado, o problema é o faturamento, não a meta',\n },\n ],\n steps: [\n { do: 'Financeiro › Metas, escolha o ano e a unidade.', route: '/financial/goals' },\n { do: 'Abra o mês e informe os três degraus: Meta, Super e Hiper.' },\n { do: 'Repita para os meses que valem — não é preciso preencher o ano inteiro.' },\n ],\n rules: [\n 'A meta é sempre de UMA unidade e de UM mês. Rede inteira não tem meta própria: é a soma.',\n 'O realizado é lido do faturamento reconhecido; não se digita.',\n ],\n pitfalls: [\n 'Cadastrar meta na unidade errada e concluir que a equipe não vende — o percentual fica dividido por um alvo que ninguém perseguiu.',\n ],\n answers: [\n 'Como coloco meta para a equipe?',\n 'De onde vem o valor realizado?',\n 'O que são Meta, Super e Hiper?',\n ],\n}\n\nconst giftCards: SetupGuideDef = {\n feature: 'financial.gift-cards',\n title: 'Gift Cards',\n about:\n 'Vales-presente emitidos em lote. O valor de face é promessa de serviço, não receita: enquanto não for usado, é passivo da casa.',\n route: '/financial/gift/cards',\n requires: [\n {\n title: 'Forma de recebimento para a venda do vale',\n feature: 'financial.formas-de-recebimento',\n route: `${SETTINGS}/payment-methods`,\n check: 'dá para receber o pagamento de quem comprou o vale',\n },\n ],\n steps: [\n { do: 'Financeiro › Gift Cards.', route: '/financial/gift/cards' },\n { do: 'Emita o lote dizendo o valor de face e a quantidade.' },\n { do: 'Acompanhe o passivo: o total do lote e o que já foi consumido aparecem ao vivo.' },\n ],\n rules: [\n 'Emitir não é faturar. A receita só é reconhecida quando o vale é usado.',\n 'O valor de face do lote inteiro é o tamanho da promessa que a casa assumiu.',\n ],\n warnings: [\n 'Imprimir os vales ainda não existe aqui — dá para emitir, não para imprimir em lote.',\n ],\n answers: [\n 'Como vendo vale-presente?',\n 'O vale-presente conta como faturamento?',\n 'Quanto ainda devo em vales?',\n ],\n}\n\n/**\n * O exemplo que motivou este arquivo.\n *\n * A tela é de ACOMPANHAMENTO e diz isso num aviso amarelo que quase ninguém\n * lê — \"Emitir\" numera localmente, não fala com a SEFAZ. Um guia que fingisse\n * o contrário faria alguém emitir cinquenta notas achando que estão válidas.\n */\nconst notasFiscais: SetupGuideDef = {\n feature: 'financial.notas-fiscais',\n title: 'Notas Fiscais',\n about:\n 'O acompanhamento das notas da casa — NF-e, NFC-e e NFS-e — do rascunho até a emissão, com link para o XML e o DANFE quando existirem.',\n route: '/financial/fiscal/documents',\n status: 'manual-only',\n statusNote:\n 'A emissão fiscal de verdade (SEFAZ) ainda NÃO está integrada neste produto. \"Emitir\" atribui número e série localmente, para controle interno. Serve para acompanhar e organizar; não substitui o emissor fiscal da casa, e a nota daqui não tem validade fiscal.',\n requires: [\n {\n title: 'Dados fiscais da empresa',\n where: 'Configurações › Geral (CNPJ, inscrição, endereço)',\n route: '/settings/general',\n check: 'o CNPJ e o endereço estão preenchidos — é o que qualquer emissor vai exigir no dia da integração',\n },\n {\n title: 'Destinatário com cadastro',\n where: 'Clientes',\n check: 'dá para escolher o destinatário na nota em vez de digitar o nome solto',\n required: false,\n },\n ],\n steps: [\n { do: 'Financeiro › Notas Fiscais.', route: '/financial/fiscal/documents' },\n { do: 'Nova nota: escolha o modelo (NF-e, NFC-e ou NFS-e), o destinatário e o valor total.' },\n { do: 'A nota nasce como Rascunho. \"Emitir\" a numera e passa para Emitida — localmente.' },\n { do: 'Cancele pela própria linha quando precisar; o histórico continua.' },\n ],\n rules: [\n 'Rascunho → Emitida → Cancelada é todo o ciclo. Não existe fila de SEFAZ atrás disto.',\n 'XML e DANFE só aparecem quando um emissor de verdade estiver ligado e preencher os links.',\n ],\n pitfalls: [\n 'Tratar a numeração daqui como numeração fiscal. Ela é interna, e vai conflitar com a do emissor real no dia da integração.',\n 'Entrada de nota de FORNECEDOR (XML que dá entrada no estoque e cria conta a pagar) é outra coisa, e não existe neste produto. Se a pergunta é \"importei a nota e o estoque não mudou\", a resposta é que essa importação não existe aqui.',\n ],\n answers: [\n 'Como emito nota fiscal?',\n 'Como começo a usar notas fiscais?',\n 'Importei o XML da nota e o estoque não mudou',\n 'Onde vejo o DANFE?',\n ],\n}\n\nconst reconciliation: SetupGuideDef = {\n feature: 'financial.conciliacao',\n title: 'Conciliação Bancária',\n about:\n 'Casar o que o sistema diz que entrou e saiu com o que o banco diz. O que sobra dos dois lados é o assunto: taxa não lançada, recebimento esquecido, venda que ninguém registrou.',\n route: '/financial/reconciliation',\n requires: [\n {\n title: 'Conta bancária cadastrada',\n where: 'Configurações › Financeiro › Contas bancárias',\n route: `${SETTINGS}/bank-accounts`,\n check: 'a conta aparece no seletor da conciliação',\n },\n {\n title: 'Movimento lançado no período',\n feature: 'financial.contas-a-receber',\n check: 'há recebimentos e pagamentos com baixa no mês que você vai conciliar',\n },\n ],\n steps: [\n { do: 'Financeiro › Conciliação, escolha a conta e o período.', route: '/financial/reconciliation' },\n { do: 'Case as linhas que são o mesmo fato dos dois lados.' },\n { do: 'Investigue o que sobrou — é aí que está a informação.' },\n ],\n rules: [\n 'Conciliar não corrige lançamento: o que estiver errado se conserta na origem (a conta, o recebimento), não aqui.',\n ],\n pitfalls: [\n 'Faturamento maior que o extrato quase sempre é desconto de maquininha não cadastrado na forma de recebimento.',\n ],\n answers: [\n 'O sistema não bate com o banco',\n 'Como faço conciliação bancária?',\n ],\n}\n\nexport const financialSetupGuides: SetupGuideDef[] = [\n paymentMethods,\n chartOfAccounts,\n receivables,\n payables,\n cashRegisters,\n commissionRules,\n commissions,\n goals,\n giftCards,\n notasFiscais,\n reconciliation,\n]\n","import { countByTenant, type OnboardingProgramDef } from '@fayz-ai/core'\nimport { T } from '@fayz-ai/financial/data/tables'\n\n/**\n * Implantação do Financeiro — o que \"de pé\" quer dizer para o dinheiro.\n *\n * O checklist da plataforma manda ligar o recebimento e para por aí, porque\n * para ele receber é uma tela de configuração. Aqui não é: uma casa está com o\n * financeiro de pé quando o dinheiro tem CAMINHO (forma de recebimento),\n * GAVETA (plano de contas) e CONFERÊNCIA (caixa fechado por alguém). Faltando\n * qualquer um dos três, o módulo funciona e não informa nada.\n *\n * Cada passo tem um guia de implantação por trás (`setup-guides.ts`), e a\n * chave dele é a mesma: `financial.<key>`. É o que faz o passo do checklist e\n * o \"Configure comigo\" da tela serem o mesmo conhecimento, escrito uma vez.\n */\nexport function buildFinancialOnboarding(): OnboardingProgramDef {\n return {\n id: 'financial',\n title: 'Seu dinheiro no lugar',\n // Depois da base da plataforma: não adianta cadastrar forma de recebimento\n // antes de a pessoa ter dito o nome do próprio negócio.\n order: 70,\n role: 'finance',\n instructions: `Você está implantando o FINANCEIRO. Quem está do outro lado não quer aprender contabilidade — quer saber quanto entrou, quanto saiu e se bate.\n\n- A ordem é: como o dinheiro entra (formas de recebimento) → onde ele é classificado (plano de contas) → como se confere (caixa). Não fale de conciliação nem de comissão antes disso.\n- Pergunte COMO a casa recebe hoje — dinheiro, Pix, maquininha, quantas vezes no cartão — e cadastre o que ela disser. Não ofereça uma lista genérica de formas de pagamento.\n- A taxa da maquininha é a pergunta que ninguém faz e que estraga todo relatório depois. Faça.\n- O plano de contas já vem com uma estrutura. O trabalho é RENOMEAR para o vocabulário da casa, não criar do zero — diga isso, senão a pessoa acha que precisa montar um plano contábil.\n- Cada passo tem um guia (\\`readSetupGuide\\`) com os pré-requisitos e as armadilhas. Leia antes de conduzir; é lá que está o que não está na tela.\n- Comissão e metas NÃO são passos de implantação: são o que a pessoa faz depois que o dinheiro está entrando. Só puxe o assunto se ela puxar.`,\n steps: [\n {\n key: 'receiving',\n title: 'Diga como a casa recebe',\n description: 'Dinheiro, Pix, cartão em X vezes — cada um com a taxa e o prazo dele.',\n icon: 'CreditCard',\n route: '/settings/financial/payment-methods',\n priority: 'high',\n // A plataforma tem um passo genérico de \"ligue o recebimento\"; quando o\n // Financeiro está instalado, é este que sabe o que a casa precisa.\n replaces: 'payments',\n agentHint:\n 'Pergunte como ela recebe HOJE, na ordem em que ela mesma listar. Cadastre o que ela disser, com a taxa da maquininha, e pare — não complete a lista com formas que ela não usa.',\n howTo:\n 'Configurações › Financeiro › Formas de recebimento. Cadastre uma linha para cada jeito real de receber, com o nome que a equipe usa (\"Crédito 3x\"), o desconto da maquininha em % e o número máximo de parcelas. É este nome que aparece na hora de fechar a conta do cliente.',\n celebrate: 'O dinheiro tem por onde entrar 💳',\n script: [\n { kind: 'say', text: 'Vamos começar pelo caminho do dinheiro: como a casa recebe.' },\n { kind: 'goto', route: '/settings/financial/payment-methods' },\n {\n kind: 'ask',\n text: 'Estamos em Formas de recebimento. Pergunte como a pessoa recebe hoje — dinheiro, Pix, maquininha, quantas vezes no cartão — e cadastre com ela, perguntando a taxa de cada uma.',\n },\n ],\n check: async () => (await countByTenant(T.paymentMethods)) > 0,\n },\n {\n key: 'accounts',\n title: 'Organize as gavetas do dinheiro',\n description: 'Onde cada gasto entra: aluguel, insumo, folha. É o que responde \"para onde foi\".',\n icon: 'FolderTree',\n route: '/settings/financial/chart-of-accounts',\n agentHint:\n 'A estrutura já vem pronta. Conduza como AJUSTE: renomear para a língua da casa e acrescentar o que faltar. Nunca peça para montar um plano de contas do zero.',\n howTo:\n 'Configurações › Financeiro › Plano de contas. Já vem Receita, Custos operacionais e Despesas — renomeie as contas folha para o vocabulário da casa e acrescente só o que faltar, sempre pendurado num grupo que já existe. Grupo não recebe lançamento; folha sim.',\n celebrate: 'Cada real tem uma gaveta 🗂️',\n script: [\n { kind: 'goto', route: '/settings/financial/chart-of-accounts' },\n {\n kind: 'ask',\n text: 'Estamos no plano de contas, que já vem preenchido. Mostre a estrutura, pergunte quais nomes não são os que a casa usa, e ajuste com a pessoa.',\n },\n ],\n check: async () => (await countByTenant(T.chartOfAccounts)) > 0,\n },\n {\n key: 'cash',\n title: 'Feche o caixa uma vez',\n description: 'Abrir, receber o dia e conferir contra o que tem na gaveta.',\n icon: 'Landmark',\n route: '/financial/cash/registers',\n agentHint:\n 'É o passo que prova que os dois anteriores funcionaram. Acompanhe a abertura e diga que o fechamento é no fim do dia — não espere pelo fechamento dentro da conversa.',\n howTo:\n 'Financeiro › Caixas. Abra o caixa dizendo o valor que está na gaveta agora. Durante o dia o movimento entra sozinho pelo que for recebido. No fim, feche informando o que foi CONTADO de verdade, mesmo quando não bate: a diferença é informação, não erro a esconder. Quem fechou não pode aprovar o próprio fechamento.',\n celebrate: 'Caixa conferido 🧾',\n },\n ],\n }\n}\n","import { lazyComponent, onAppPathChange } from '@fayz-ai/core'\nimport React from 'react'\nimport { Wallet } from 'lucide-react'\nimport { Button, Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalBody } from '@fayz-ai/ui'\nimport { useStore as useZustand } from 'zustand'\nimport type { StoreApi } from 'zustand'\nimport { FinancialContextProvider } from '../context'\nimport { useTenantPluginSettings } from '@fayz-ai/admin'\nimport { FINANCIAL_MODULE_DEFAULTS } from './FinancialGeneralSettings'\nimport type { FinancialUIState } from '@fayz-ai/financial/store'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { ResolvedFinancialConfig } from '../context'\n\n// Code loads when it is first drawn, not with the app. Pages use React.lazy\n// (the shell's route boundary shows the page skeleton); anything that may\n// render elsewhere uses lazyComponent, which carries its own boundary.\nconst CashRegistersView = lazyComponent(() => import('../views/CashRegistersView').then((m) => m.CashRegistersView))\n\n// ---------------------------------------------------------------------------\n// O caixa mora na CASCA, não dentro do Financeiro.\n//\n// A recepcionista abre a gaveta uma vez, no balcão, e depois cobra a partir da\n// agenda, da fila de check-in e da fatura — três telas que não são o Financeiro.\n// Enterrar o controle dentro do módulo obrigava a sair do balcão para chegar\n// nele. O V1 põe um ícone no cabeçalho, com um ponto verde quando há sessão\n// aberta, e abre o diálogo ali mesmo; não existe rota `/caixa`.\n//\n// O ponto é o estado inteiro que a casca mostra: quem abriu e quanto tem ficam\n// no diálogo, porque cabeçalho não é lugar de saldo.\n// ---------------------------------------------------------------------------\n\nexport interface CashSessionHeaderControlProps {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}\n\n/**\n * O controle recebe a LOJA do plugin em vez de pedi-la ao contexto.\n *\n * `useFinancialStore` exige o provider que a FinancialPage monta, e um controle\n * de casca vive FORA dele — montá-lo assim quebrava com \"useStore must be used\n * within FinancialPage\". Uma peça que a casca hospeda não pode depender do\n * provider de um módulo: ou ela é auto-suficiente, ou não é de casca.\n */\n/** The shell icon, only where the house uses the till (its own switch, not the app's). */\nexport function CashSessionHeaderControl(props: CashSessionHeaderControlProps) {\n const house = useTenantPluginSettings('financial', FINANCIAL_MODULE_DEFAULTS)\n if (!house.get('cashRegisters')) return null\n return <CashSessionControl {...props} />\n}\n\nfunction CashSessionControl({ config, provider, store }: CashSessionHeaderControlProps) {\n const sessions = useZustand(store, (s) => s.cashSessions)\n const fetchCashSessions = useZustand(store, (s) => s.fetchCashSessions)\n // Shared with the page button (CashRegistersView) via FinancialUIState —\n // so \"Abrir caixa\" on the módulo page and the ícone da casca drive the SAME\n // diálogo instead of each drawing its own.\n const open = useZustand(store, (s) => s.cashSessionModalOpen)\n const setOpen = useZustand(store, (s) => s.setCashSessionModalOpen)\n\n React.useEffect(() => { void fetchCashSessions?.() }, [fetchCashSessions])\n\n // Um diálogo de casca não pertence a rota nenhuma, então ele sobrevivia à\n // navegação: o link \"Histórico de Sessões\" levava à página do caixa e deixava\n // o próprio diálogo por cima dela, tapando o que a pessoa tinha ido ver.\n React.useEffect(() => {\n if (!open) return\n const close = () => setOpen(false)\n return onAppPathChange(close)\n }, [open])\n\n const hasOpen = (sessions ?? []).some((s) => s.status === 'open')\n\n return (\n <>\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => setOpen(true)}\n aria-label={hasOpen ? 'Fechar caixa' : 'Abrir caixa'}\n title={hasOpen ? 'Fechar caixa' : 'Abrir caixa'}\n className=\"font-normal gap-0 fz-tap relative inline-flex shrink-0 items-center justify-center rounded-button p-2 text-sidebar-muted transition-colors hover:bg-sidebar-accent/50 hover:text-sidebar-accent-foreground\"\n >\n <Wallet className=\"h-4 w-4\" />\n {hasOpen && (\n <span className=\"absolute right-1 top-1 h-2 w-2 rounded-full bg-success ring-2 ring-background\" />\n )}\n </Button>\n\n {/*\n PELO PORTAL, E NÃO ALI MESMO.\n\n A primeira versão desenhava o overlay como irmão do botão — ou seja,\n DENTRO da barra escura da casca, que declara `text-sidebar-foreground`.\n Todo texto do diálogo que não pintava a própria cor herdava um\n quase-branco (rgb(228,224,235)) e caía sobre um cartão branco: o título,\n \"Sessões Abertas\", o nome do caixa e o saldo sumiam, enquanto os\n subtítulos em `text-muted-foreground` — que pintam a sua — continuavam\n legíveis. Parecia contraste invertido; era herança.\n\n `ModalContent` monta no portal, fora daquele escopo, e de brinde traz o\n que eu tinha reescrito pior à mão: Esc, foco preso, clique fora,\n empilhamento correto e tela cheia no celular. A altura passa a ser\n `max-h-[85vh]` com o corpo rolando sozinho, no lugar de um `70vh` fixo\n que cortava o painel de fechamento com 155px de tela sobrando.\n */}\n <Modal open={open} onOpenChange={setOpen}>\n <ModalContent size=\"md\" noPadding className=\"gap-0\">\n <ModalHeader className=\"border-b px-4 py-3\">\n <ModalTitle className=\"text-sm\">\n {hasOpen ? 'Meu caixa' : 'Abertura de caixa'}\n </ModalTitle>\n <ModalDescription className=\"text-xs\">\n {hasOpen ? 'Confira a gaveta e feche o turno.' : 'Informe o troco inicial para começar a cobrar.'}\n </ModalDescription>\n </ModalHeader>\n {/* A MESMA tela do módulo, servida onde a pessoa está — com o\n provider por volta, porque aqui não há um. */}\n <ModalBody>\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <CashRegistersView variant=\"panel\" />\n </FinancialContextProvider>\n </ModalBody>\n </ModalContent>\n </Modal>\n </>\n )\n}\n","import { tl, type AnalyticsCardDef, type AnalyticsRow } from '@fayz-ai/core'\nimport type { ResolvedFinancialConfig } from '../context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\n\nexport function buildFinancialAnalyticsCards(\n config: ResolvedFinancialConfig,\n provider: FinancialDataProvider,\n): AnalyticsCardDef[] {\n const unitFilter = config.locations.length > 1 ? [{\n key: 'unit_id',\n label: tl('Unit', 'Unidade'),\n type: 'select' as const,\n group: tl('General', 'Geral'),\n options: config.locations.map((unit) => ({ label: unit.name, value: unit.id })),\n }] : []\n\n const dre: AnalyticsCardDef = {\n id: 'financial.dre',\n name: tl('Profit & Loss Statement', 'DRE — Demonstração do Resultado do Exercício'),\n description: tl(\n 'Revenue, operating expenses and result by chart account and accrual month.',\n 'Receitas, despesas operacionais e resultado por plano de contas e mês de competência.',\n ),\n icon: 'ChartNoAxesCombined',\n category: tl('Finance', 'Financeiro'),\n domain: 'financial',\n canonicalOwner: 'public.plg_financial_rep_dre',\n grain: 'chart_account_month',\n permission: { feature: 'financial', action: 'read' },\n query: {\n source: {\n kind: 'fn',\n run: async (context) => {\n const fromYear = new Date(`${context.dateRange.from}T00:00:00`).getFullYear()\n const toYear = new Date(`${context.dateRange.to}T00:00:00`).getFullYear()\n const unitId = typeof context.filters.unit_id === 'string' ? context.filters.unit_id : undefined\n const years = Array.from({ length: Math.max(1, toYear - fromYear + 1) }, (_, index) => fromYear + index)\n const batches = await Promise.all(years.map((year) => provider.getDre({ year, unitId })))\n return batches.flat().map((row): AnalyticsRow => ({\n statement_code: row.statementCode,\n statement_name: row.statementName,\n competence_month: row.competenceMonth,\n account_type: row.accountType,\n unit_id: row.unitId ?? unitId ?? null,\n amount: row.amount,\n }))\n },\n },\n dateColumn: 'competence_month',\n dimensions: [\n { key: 'statement_code', label: tl('Account', 'Conta') },\n { key: 'statement_name', label: tl('Description', 'Descrição') },\n { key: 'competence_month', label: tl('Accrual month', 'Competência'), grain: 'month' },\n { key: 'account_type', label: tl('Type', 'Tipo') },\n ],\n measures: [{ key: 'amount', label: tl('Amount', 'Valor'), agg: 'sum', format: 'currency' }],\n filters: unitFilter,\n defaultSort: 'statement_code',\n defaultSortDir: 'asc',\n },\n viz: {\n type: 'statement',\n statement: {\n codeKey: 'statement_code',\n labelKey: 'statement_name',\n periodKey: 'competence_month',\n valueKey: 'amount',\n sectionKey: 'account_type',\n sections: [\n { value: 'revenue', label: tl('Revenue', 'Receitas'), unclassifiedLabel: tl('Unclassified revenue', 'Receitas sem classificação') },\n { value: 'expense', label: tl('Operating expenses', 'Despesas operacionais'), unclassifiedLabel: tl('Unclassified expenses', 'Despesas sem classificação') },\n ],\n lines: [\n { kind: 'section', section: 'revenue' },\n { kind: 'total', label: tl('= Net revenue', '= Receita líquida'), of: { revenue: 1 }, emphasis: 'strong' },\n { kind: 'section', section: 'expense' },\n { kind: 'total', label: tl('= Operating result', '= Resultado operacional'), of: { revenue: 1, expense: -1 }, emphasis: 'rule' },\n ],\n defaultDepth: 1,\n },\n },\n }\n // The V1 report is an annual statement. The reports surface reads this\n // per-card hint and restores its own default when the viewer closes.\n ;(dre as AnalyticsCardDef & { defaultRange: 'this_year' }).defaultRange = 'this_year'\n return [dre]\n}\n","// Stripe as the Financeiro module's receivable rail: an invoice raised in Fayz\n// is issued at Stripe, and the payment Stripe collects comes back as a baixa.\n//\n// ── Not the same connector as courses' `stripe-connect` ─────────────────────\n// That one is Connect: the platform routing a student's payment to a creator and\n// taking a fee, where the money is never the tenant's to begin with. This one is\n// the tenant charging their own customer on their own account. Two connectors,\n// one brand, and the ids say which is which — `stripe-connect` overrides\n// `catalogSlug` precisely because it is not the catalogue's `stripe` row; this\n// one IS, so its id is the slug.\n//\n// ── Direction ───────────────────────────────────────────────────────────────\n// The invoice is Fayz's and the payment is Stripe's, so the mirror runs one way\n// per object rather than one way per connector: we tell Stripe about the\n// receivable (outbound), Stripe tells us it was paid (inbound webhook). Declared\n// `outbound` because that is who initiates — the settlement arriving is the\n// answer to a charge we raised, not an independent inbound feed.\n//\n// No SQL. The connection is a connections row (packages/db 029) and the\n// Stripe ids mirror onto `Invoice.metadata`, which already exists for this.\nimport {\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n type ConnectorSetting,\n} from '@fayz-ai/core'\n\nimport { fayzConnectorOAuth } from '@fayz-ai/admin'\n\nexport const STRIPE_CONNECTOR_ID = 'stripe'\n\n/**\n * What the merchant may offer on a Stripe invoice — commercial policy, decided\n * after the account is linked and changed whenever they like.\n *\n * A multi-select over what Stripe actually supports in BR, so the value cannot\n * be a misspelling the invoice then silently does not offer. Required to\n * OPERATE: an invoice with no method selected has no way to be paid, so the\n * connection is real and reported as \"conectado, falta configurar\".\n */\nexport const STRIPE_SETTINGS: ConnectorSetting[] = [\n {\n key: 'paymentMethods',\n label: 'Formas de pagamento',\n description: 'O que o cliente pode escolher para pagar a fatura.',\n type: 'multi-select',\n options: [\n { value: 'card', label: 'Cartão de crédito' },\n { value: 'pix', label: 'Pix' },\n { value: 'boleto', label: 'Boleto' },\n ],\n requiredToOperate: true,\n },\n {\n key: 'daysUntilDue',\n label: 'Prazo de vencimento',\n description: 'Dias entre a emissão e o vencimento da fatura.',\n type: 'text',\n placeholder: '7',\n pattern: '\\\\d{1,3}',\n patternHint: 'Só números, até três dígitos.',\n defaultValue: '7',\n },\n {\n // The difference between \"a fatura foi emitida\" and \"o cliente recebeu a\n // cobrança\" is a decision, not a default: finalizing at Stripe sends the\n // e-mail, and a tenant that reviews before sending needs the draft.\n key: 'finalizeAutomatically',\n label: 'Enviar a cobrança automaticamente',\n description: 'Desligado, a fatura fica como rascunho na Stripe até você enviar.',\n type: 'toggle',\n defaultValue: true,\n },\n]\n\nconst store = createConnectionStore(STRIPE_CONNECTOR_ID, {\n settings: STRIPE_SETTINGS,\n})\n\nconst METHOD_LABELS: Record<string, string> = { card: 'Cartão', pix: 'Pix', boleto: 'Boleto' }\n\n/** The row's one-line summary — what the merchant accepts, in their words. */\nfunction methodsDetail(value: unknown): string | undefined {\n const list = Array.isArray(value) ? value : []\n const labels = list.map((v) => METHOD_LABELS[String(v)] ?? String(v)).filter(Boolean)\n return labels.length > 0 ? labels.join(', ') : undefined\n}\n\nexport const stripeConnectorDef: ConnectorDefinition = {\n id: STRIPE_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Stripe · Faturas',\n description: 'Emita as faturas do Financeiro na Stripe e receba a baixa quando o cliente pagar.',\n icon: 'CreditCard',\n category: 'payments',\n authKind: 'oauth',\n // Issuing the invoice is an effect that files a run; the settlement arrives by\n // webhook. Neither happens while a buyer waits, so nothing here is `request`.\n planes: ['sync'],\n direction: 'outbound',\n docsUrl: 'https://docs.stripe.com/invoicing',\n // Declared here and not as the legacy `entities`/`subscribesTo` pair: those are\n // mirrors this list already derives (connectorEntities/connectorSubscribesTo),\n // and two spellings of the same claim is one that can disagree with itself.\n //\n // `invoice_due_soon` and `invoice_overdue` are deliberately absent. Stripe has\n // its own dunning and neither fact changes anything we would send it; asking to\n // hear them would be asking for reach this connector does not use.\n permissions: [\n {\n kind: 'data',\n resource: 'invoice',\n actions: ['read', 'write'],\n reason:\n 'Ler a fatura a receber para emiti-la na Stripe, e gravar de volta o número da fatura e o link de pagamento. Nome do cliente e itens vão na cobrança.',\n sensitive: true,\n },\n {\n kind: 'data',\n resource: 'payment',\n actions: ['write'],\n reason: 'Lançar a baixa no recebível quando a Stripe confirmar que o cliente pagou.',\n sensitive: true,\n },\n {\n kind: 'event',\n resource: 'financial.invoice_created',\n actions: ['listen'],\n reason: 'Saber que uma fatura foi emitida, para criar a cobrança na Stripe.',\n },\n {\n kind: 'event',\n resource: 'financial.invoice_cancelled',\n actions: ['listen'],\n reason: 'Saber que uma fatura foi cancelada, para anular a cobrança na Stripe.',\n },\n {\n // The connector is what makes this fact appear, so the tenant should agree\n // to it here: the app's own automations (recibo, mensagem) react to it.\n kind: 'event',\n resource: 'financial.invoice_paid',\n actions: ['emit'],\n reason: 'Anunciar dentro do app que a fatura foi paga, para o que depende disso acontecer.',\n },\n ],\n // Consent is the whole form: an OAuth connector declares no fields, and the\n // grant never reaches this code.\n fields: [],\n settings: STRIPE_SETTINGS,\n invokedAt: [\n {\n key: 'financial.invoice.issue',\n label: 'Uma fatura a receber é emitida na Stripe com o link de pagamento',\n plane: 'sync',\n trigger: 'manual',\n },\n {\n key: 'financial.payment.settle',\n label: 'A Stripe avisa que o cliente pagou e a baixa é lançada no recebível',\n plane: 'sync',\n trigger: 'webhook',\n },\n ],\n ...connectionStatus(\n STRIPE_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(connection?.settings?.paymentMethods),\n plane: 'sync',\n ...settingsStatus(STRIPE_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n /**\n * The whole connect step, through the platform broker (FAY-1390).\n *\n * It used to call an edge function's `oauth_start` — a function that was\n * never written, so pressing Conectar reached a URL that did not exist and\n * the browser reported it as a CORS failure. The broker replaces it\n * end-to-end: consent starts at the platform, the callback lands there, and\n * the grant is stored in the platform vault.\n *\n * `saveConnection` is deliberately absent, like every other OAuth connector\n * here: `active = true` is written by the redirect route AFTER the grant.\n * Nothing in a browser is in a position to know an account was linked.\n */\n startOAuth: fayzConnectorOAuth(STRIPE_CONNECTOR_ID),\n // Local only. Handing the grant back to Stripe is the platform's job — it\n // holds the client pair and the connected account id, and its deauthorize is\n // not the same call every other provider takes.\n disconnect: async () => { await store.disconnect() },\n}\n","import type { ConnectorPermission, ConnectorSetting, ConnectorSettingOption } from '@fayz-ai/core'\n\n// The provider name is a parameter because the sentence a tenant judges names it.\nexport function receivablePermissions(provider: string): ConnectorPermission[] {\n return [\n {\n kind: 'data',\n resource: 'payment',\n actions: ['write'],\n reason:\n `Lançar no Financeiro cada venda que o ${provider} recebeu: valor, forma de pagamento, ` +\n `parcelas, taxa cobrada e a data em que o dinheiro cai na conta.`,\n sensitive: true,\n },\n {\n kind: 'data',\n resource: 'invoice',\n actions: ['read', 'write'],\n reason:\n `Encontrar o recebível que corresponde àquela venda e dar a baixa quando o ${provider} ` +\n `confirmar o repasse. O valor do recebível não é alterado.`,\n sensitive: true,\n },\n ]\n}\n\n/**\n * When the receivable is written off: at the sale, or when the money lands.\n *\n * The one decision an acquirer forces that a gateway does not — a card sale is\n * received today and paid out in thirty days, and which of the two the Financeiro\n * calls \"recebido\" is the tenant's accounting, not ours.\n */\nexport const SETTLE_ON_SETTING: ConnectorSetting = {\n key: 'settleOn',\n label: 'Quando dar a baixa',\n description: 'A venda no cartão entra hoje e o dinheiro cai depois. Escolha o que conta como recebido.',\n type: 'select',\n options: [\n { value: 'payout', label: 'Quando o dinheiro cai na conta (repasse)' },\n { value: 'sale', label: 'Na hora da venda' },\n ],\n defaultValue: 'payout',\n}\n\n/** The \"quais vendas trazer\" setting, over the methods this provider actually has. */\nexport function methodsSetting(options: ConnectorSettingOption[]): ConnectorSetting {\n return {\n key: 'methods',\n label: 'Quais vendas trazer',\n description: 'Só o que estiver marcado aqui vira lançamento no Financeiro.',\n type: 'multi-select',\n options,\n // Nothing marked is a feed with nothing to bring: the connection is real and\n // reads as \"conectado, falta configurar\".\n requiredToOperate: true,\n }\n}\n\n/** One-line summary for the connection row. Tolerates a hand-edited jsonb string. */\nexport function methodsDetail(labels: Record<string, string>, value: unknown): string | undefined {\n const list = Array.isArray(value) ? value : typeof value === 'string' ? value.split(',') : []\n const named = list.map((v) => labels[String(v).trim()] ?? String(v).trim()).filter(Boolean)\n return named.length > 0 ? named.join(', ') : undefined\n}\n","// One button: client_id/client_secret are the platform's and the merchant\n// authorizes at auth.mercadopago.com. See ../acquirers/ACQUIRERS.md.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n} from '@fayz-ai/core'\nimport { fayzConnectorOAuth } from '@fayz-ai/admin'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const MERCADOPAGO_CONNECTOR_ID = 'mercadopago'\n\nconst METHOD_LABELS: Record<string, string> = {\n credit_card: 'Crédito',\n debit_card: 'Débito',\n pix: 'Pix',\n ticket: 'Boleto',\n account_money: 'Saldo em conta',\n}\n\nexport const MERCADOPAGO_SETTINGS = [\n methodsSetting([\n { value: 'credit_card', label: METHOD_LABELS.credit_card },\n { value: 'debit_card', label: METHOD_LABELS.debit_card },\n { value: 'pix', label: METHOD_LABELS.pix },\n { value: 'ticket', label: METHOD_LABELS.ticket },\n { value: 'account_money', label: METHOD_LABELS.account_money },\n ]),\n SETTLE_ON_SETTING,\n]\n\n// `collectorId` is Mercado Pago's own id for the account, and it comes back with\n// the grant — discovered, never typed.\nconst store = createConnectionStore(MERCADOPAGO_CONNECTOR_ID, {\n settings: MERCADOPAGO_SETTINGS,\n settingsKeys: ['collectorId'],\n})\n\nexport const mercadoPagoConnectorDef: ConnectorDefinition = {\n id: MERCADOPAGO_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Mercado Pago · Recebimentos',\n description: 'Traga para o Financeiro tudo que entrou no Mercado Pago — Pix, cartão e maquininha — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n category: 'payments',\n authKind: 'oauth',\n // We reach Mercado Pago for what it received; nothing here charges anyone.\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://www.mercadopago.com.br/developers/pt/docs/checkout-api/additional-content/security/oauth/creation',\n permissions: receivablePermissions('Mercado Pago'),\n fields: [],\n settings: MERCADOPAGO_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que o Mercado Pago recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem no Mercado Pago.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n MERCADOPAGO_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(MERCADOPAGO_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n startOAuth: fayzConnectorOAuth(MERCADOPAGO_CONNECTOR_ID),\n saveConnection: async () => {\n await store.save({ active: true })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","// One button: the application pair is the platform's and the merchant authorizes\n// through PagBank's Connect Authorization. See ../acquirers/ACQUIRERS.md.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n} from '@fayz-ai/core'\nimport { fayzConnectorOAuth } from '@fayz-ai/admin'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const PAGBANK_CONNECTOR_ID = 'pagbank'\n\nconst METHOD_LABELS: Record<string, string> = {\n CREDIT_CARD: 'Crédito',\n DEBIT_CARD: 'Débito',\n PIX: 'Pix',\n BOLETO: 'Boleto',\n}\n\nexport const PAGBANK_SETTINGS = [\n methodsSetting([\n { value: 'CREDIT_CARD', label: METHOD_LABELS.CREDIT_CARD },\n { value: 'DEBIT_CARD', label: METHOD_LABELS.DEBIT_CARD },\n { value: 'PIX', label: METHOD_LABELS.PIX },\n { value: 'BOLETO', label: METHOD_LABELS.BOLETO },\n ]),\n SETTLE_ON_SETTING,\n]\n\nconst store = createConnectionStore(PAGBANK_CONNECTOR_ID, {\n settings: PAGBANK_SETTINGS,\n settingsKeys: ['accountId'],\n})\n\nexport const pagBankConnectorDef: ConnectorDefinition = {\n id: PAGBANK_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'PagBank',\n description: 'Traga para o Financeiro tudo que entrou no PagBank — Pix, cartão e maquininha — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n // The catalogue carries no `pagbank` row yet, so the mark is declared here\n // rather than borrowed. Without it the row renders as a grey plug.\n logoUrl: 'https://assets.fayz.ai/connectors/pagbank_pagseguro.png',\n category: 'payments',\n authKind: 'oauth',\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://developer.pagbank.com.br/docs/connect-authorization',\n permissions: receivablePermissions('PagBank'),\n fields: [],\n settings: PAGBANK_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que o PagBank recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem no PagBank.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n PAGBANK_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(PAGBANK_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n startOAuth: fayzConnectorOAuth(PAGBANK_CONNECTOR_ID),\n saveConnection: async () => {\n await store.save({ active: true })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","// The one on this shelf that CANNOT be one button, and it is Cielo's protocol\n// that decides it: the API e-commerce authenticates with a MerchantId and a\n// MerchantKey that Cielo issues TO THE MERCHANT, in the merchant's own\n// backoffice. There is no consent screen, no authorization code, and no\n// application-level pair for us to hold — so there is nothing to broker.\n// ../acquirers/ACQUIRERS.md keeps the evidence.\n//\n// Both values still leave this package: the hub routes them to the platform\n// vault, and the connector never sees either.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n type ConnectorField,\n} from '@fayz-ai/core'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const CIELO_CONNECTOR_ID = 'cielo'\n\n// Both are the credential: the MerchantId is the affiliation number and the\n// MerchantKey is shown once, at generation. Only the key is masked, so a\n// merchant can check the id it pasted.\nexport const CIELO_FIELDS: ConnectorField[] = [\n { key: 'merchantId', label: 'Merchant ID', type: 'text', secret: true, placeholder: 'Cielo → Gestão API → Credencial API' },\n { key: 'merchantKey', label: 'Merchant Key', type: 'password', placeholder: 'Mostrada uma única vez, ao gerar' },\n]\n\nconst METHOD_LABELS: Record<string, string> = {\n CreditCard: 'Crédito',\n DebitCard: 'Débito',\n Pix: 'Pix',\n}\n\nexport const CIELO_SETTINGS = [\n methodsSetting([\n { value: 'CreditCard', label: METHOD_LABELS.CreditCard },\n { value: 'DebitCard', label: METHOD_LABELS.DebitCard },\n { value: 'Pix', label: METHOD_LABELS.Pix },\n ]),\n SETTLE_ON_SETTING,\n]\n\nconst store = createConnectionStore(CIELO_CONNECTOR_ID, {\n fields: CIELO_FIELDS,\n settings: CIELO_SETTINGS,\n})\n\nexport const cieloConnectorDef: ConnectorDefinition = {\n id: CIELO_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Cielo',\n description: 'Traga para o Financeiro tudo que entrou na Cielo — crédito, débito e Pix — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n // The catalogue carries no `cielo` row yet, so the mark is declared here.\n logoUrl: 'https://assets.fayz.ai/connectors/cielo.jpg',\n category: 'payments',\n authKind: 'api-key',\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://developercielo.github.io/manual/cielo-ecommerce',\n providerInstall: { url: 'https://www.cielo.com.br/' },\n permissions: receivablePermissions('Cielo'),\n fields: CIELO_FIELDS,\n settings: CIELO_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que a Cielo recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem na Cielo.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n CIELO_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(CIELO_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n // Reached only after the vault accepted the pair; neither half arrives here.\n saveConnection: async () => {\n await store.save({ active: true })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","// The second one that cannot be a button, for the same reason as Cielo and a\n// different protocol: Stone Connect authenticates with a Secret Key issued to\n// the merchant, sent as HTTP Basic. Stone's Partner Hub does have an\n// application-level pair, but it onboards merchants — it is not a consent screen\n// a restaurant is sent to. ../acquirers/ACQUIRERS.md keeps the evidence and what\n// would have to be true for this to become one button.\nimport {\n connectionRuns,\n connectionSettings,\n connectionStatus,\n createConnectionStore,\n settingsStatus,\n type ConnectorDefinition,\n type ConnectorField,\n} from '@fayz-ai/core'\nimport { methodsDetail, methodsSetting, receivablePermissions, SETTLE_ON_SETTING } from '../acquirers/shared'\n\nexport const STONE_CONNECTOR_ID = 'stone'\n\n// The Stone Code is the merchant's affiliation number — which store, not a\n// secret — so it stays readable on the row. The Secret Key is the credential.\nexport const STONE_FIELDS: ConnectorField[] = [\n { key: 'stoneCode', label: 'Stone Code', type: 'text', placeholder: 'Número de afiliação da sua loja' },\n { key: 'secretKey', label: 'Secret Key', type: 'password', placeholder: 'Stone → painel → chaves de API' },\n]\n\nconst METHOD_LABELS: Record<string, string> = {\n credit: 'Crédito',\n debit: 'Débito',\n pix: 'Pix',\n voucher: 'Vale-refeição',\n}\n\nexport const STONE_SETTINGS = [\n methodsSetting([\n { value: 'credit', label: METHOD_LABELS.credit },\n { value: 'debit', label: METHOD_LABELS.debit },\n { value: 'pix', label: METHOD_LABELS.pix },\n { value: 'voucher', label: METHOD_LABELS.voucher },\n ]),\n SETTLE_ON_SETTING,\n]\n\nconst store = createConnectionStore(STONE_CONNECTOR_ID, {\n fields: STONE_FIELDS,\n settings: STONE_SETTINGS,\n})\n\nexport const stoneConnectorDef: ConnectorDefinition = {\n id: STONE_CONNECTOR_ID,\n hostPluginId: 'financial',\n name: 'Stone',\n description: 'Traga para o Financeiro tudo que entrou na Stone — crédito, débito, Pix e vale — com a taxa e a data do repasse.',\n icon: 'CreditCard',\n category: 'payments',\n authKind: 'api-key',\n direction: 'inbound',\n planes: ['sync'],\n docsUrl: 'https://docs.stone.com.br',\n permissions: receivablePermissions('Stone'),\n fields: STONE_FIELDS,\n settings: STONE_SETTINGS,\n howItSyncs: [\n 'De tempos em tempos, o que a Stone recebeu vira lançamento no Financeiro.',\n 'Uma venda já lançada não entra duas vezes: ela guarda o número que tem na Stone.',\n 'A taxa vem junto, então o valor líquido é o que aparece no caixa.',\n ],\n ...connectionStatus(\n STONE_CONNECTOR_ID,\n (connection) => ({\n connected: !!connection?.active,\n detail: methodsDetail(METHOD_LABELS, connection?.settings?.methods),\n plane: 'sync',\n ...settingsStatus(STONE_SETTINGS, connection),\n }),\n { store: () => store },\n ),\n ...connectionSettings(store),\n ...connectionRuns(store),\n saveConnection: async (values) => {\n await store.save({\n active: true,\n providerAccountKey: values.stoneCode ?? null,\n settings: { stoneCode: values.stoneCode },\n })\n },\n disconnect: () => store.disconnect(),\n disconnectNote: 'Desconectar para de trazer vendas novas. O que já foi lançado no Financeiro continua lá.',\n}\n","import * as React from 'react'\nimport {\n SettingsForm, useConnectors, ConnectorMark, StateChip, ConnectorDetail,\n openConnectorsPanel, useConnectorsPanelAvailable, type UnifiedConnector,\n} from '@fayz-ai/admin'\nimport { tl } from '@fayz-ai/core'\nimport { Button, Badge } from '@fayz-ai/ui'\n\n// The acquirers that sell card machines; Stripe charges online and stays out.\nconst ACQUIRERS = ['stone', 'cielo', 'pagbank', 'mercadopago']\n// On the shelf with no connector yet: listed so the operator sees their\n// acquirer is known, not missing.\nconst LOGOS = 'https://assets.fayz.ai/connectors'\nconst UPCOMING: Array<{ slug: string; name: string; logo: string }> = [\n { slug: 'rede', name: 'Rede', logo: `${LOGOS}/rede.png` },\n { slug: 'getnet', name: 'Getnet', logo: `${LOGOS}/getnet.png` },\n { slug: 'sipag', name: 'Sipag', logo: `${LOGOS}/sipag.png` },\n { slug: 'safrapay', name: 'SafraPay', logo: `${LOGOS}/safrapay.jpg` },\n]\n\n/**\n * Maquininhas (TEF / POS): how the counter charges a card, and which acquirer\n * each machine belongs to. The acquirer rows are the connectors hub filtered,\n * the same rows and connect journey as the store's Pagamentos.\n */\nexport function CardMachinesSettings() {\n const { connectors } = useConnectors({ hostPluginId: 'financial', includeGrants: false })\n const panelAvailable = useConnectorsPanelAvailable()\n const [selected, setSelected] = React.useState<UnifiedConnector | null>(null)\n const acquirers = React.useMemo(\n () => (connectors ?? []).filter((c) => ACQUIRERS.includes(c.slug))\n .sort((a, b) => ACQUIRERS.indexOf(a.slug) - ACQUIRERS.indexOf(b.slug)),\n [connectors],\n )\n const open = (c: UnifiedConnector) => (panelAvailable ? openConnectorsPanel(c) : setSelected(c))\n\n return (\n <div className=\"space-y-4\">\n <SettingsForm\n pending\n description={tl('How the counter charges a card in each unit, and which acquirer receives it.',\n 'Como o caixa cobra no cartão em cada unidade, e qual adquirente recebe.')}\n defaults={{ 'card_machines.mode': 'pos', 'card_machines.auto_map': true }}\n sections={[{\n title: tl('How the counter charges', 'Como o caixa cobra'),\n fields: [\n { key: 'card_machines.mode', type: 'select', scope: 'unit', label: tl('Card machine', 'Maquininha'), options: [\n { value: 'pos', label: tl('POS — standalone, the operator types the amount', 'POS — avulsa, o operador digita o valor') },\n { value: 'tef', label: tl('TEF — integrated, the amount goes from the till', 'TEF — integrada, o valor sai do caixa') },\n { value: 'off', label: tl('No card machine', 'Sem maquininha') },\n ] },\n { key: 'card_machines.auto_map', type: 'boolean', scope: 'unit', label: tl('Map new terminals automatically', 'Mapear terminais novos automaticamente') },\n ],\n }]}\n />\n\n <div>\n <h3 className=\"px-1 pb-1 pt-4 text-sm font-semibold\">{tl('Acquirers', 'Adquirentes')}</h3>\n <ul className=\"divide-y rounded-card border bg-card shadow-sm\">\n {acquirers.map((c) => {\n const live = c.state === 'connected'\n return (\n <li key={c.id} className=\"flex items-center gap-3 p-4\">\n <ConnectorMark connector={c} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium\">{c.name.split(' · ')[0]}</span>\n <StateChip state={c.state} />\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {live\n ? tl('Active: sales on its machines are reconciled.', 'Ativa: as vendas nas maquininhas dela são conciliadas.')\n : tl('Inactive: connect to bring its sales and fees in.', 'Inativa: conecte para trazer as vendas e as taxas.')}\n </span>\n </span>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={() => open(c)}\n className=\"font-normal whitespace-normal shrink-0 rounded-input border px-3 py-1.5 text-sm font-medium transition-colors hover:bg-muted\">\n {live ? tl('Configure', 'Configurar') : tl('Connect', 'Conectar')}\n </Button>\n </li>\n )\n })}\n {UPCOMING.map((a) => (\n <li key={a.slug} className=\"flex items-center gap-3 p-4\">\n <img src={a.logo} alt=\"\" width={40} height={40} loading=\"lazy\"\n className=\"h-10 w-10 shrink-0 rounded-lg border bg-white object-contain\" />\n <span className=\"min-w-0 flex-1 font-medium text-muted-foreground\">{a.name}</span>\n <Badge variant=\"secondary\">{tl('Coming soon', 'Em breve')}</Badge>\n </li>\n ))}\n </ul>\n </div>\n\n <ConnectorDetail connector={selected} open={!!selected} onOpenChange={(o) => { if (!o) setSelected(null) }} />\n </div>\n )\n}\n","import { defineSettingsTab } from '@fayz-ai/admin'\nimport type * as React from 'react'\nimport { tl } from '@fayz-ai/core'\nimport { CardMachinesSettings } from './CardMachinesSettings'\n\n// V1 financial settings with no V2 engine behind them yet. Read-only.\nexport const financialV1SettingsTabs = [\n defineSettingsTab({\n id: 'financial-price-variations',\n label: tl('Price variations', 'Variações de preço'),\n icon: 'Percent',\n section: 'financial',\n pending: true,\n defaults: { 'price_variation.type': 'discount', 'price_variation.value_type': 'percentage', 'price_variation.first_appointment_only': false },\n sections: [{\n description: tl('Discount or surcharge rules filtered by category, professional, partnership, unit and service — they arrive with price calculation.',\n 'Regras de desconto ou acréscimo por categoria, profissional, parceria, unidade e serviço — chegam com o cálculo de preço.'),\n fields: [\n { key: 'price_variation.type', type: 'select', label: tl('Type', 'Tipo'), options: [\n { value: 'discount', label: tl('Discount', 'Desconto') }, { value: 'addition', label: tl('Surcharge', 'Acréscimo') },\n ] },\n { key: 'price_variation.value_type', type: 'select', label: tl('Value in', 'Valor em'), options: [\n { value: 'percentage', label: '%' }, { value: 'fixed', label: 'R$' },\n ] },\n { key: 'price_variation.first_appointment_only', type: 'boolean', label: tl('First attendance only', 'Apenas para o primeiro atendimento') },\n ],\n }],\n }),\n {\n id: 'financial-pos-methods',\n label: tl('Card machines (TEF / POS)', 'Maquininhas (TEF / POS)'),\n icon: 'Nfc',\n section: 'financial' as const,\n keywords: ['TEF', 'POS', tl('Card machine', 'Maquininha'), tl('Acquirer', 'Adquirente'), 'Stone', 'Cielo', 'PagBank', 'Mercado Pago', 'Rede', 'Getnet'],\n component: CardMachinesSettings as unknown as React.ComponentType<unknown>,\n },\n]\n","import React from 'react'\nimport type { PluginManifest } from '@fayz-ai/core'\nimport { registerTranslations } from '@fayz-ai/core'\nimport { PluginSettingsPanel } from '@fayz-ai/admin'\nimport { financialRegistries } from '../data/registries'\nimport { financialLocales } from '../locales'\nimport { financialZoneWidgets } from '../components/financialZoneWidgets'\n\n// ---------------------------------------------------------------------------\n// Só as configurações que RECEBER exige — sem o resto do Financeiro.\n//\n// A loja precisa de conta e forma de pagamento para o modal de recebimento ter\n// o que perguntar. Não precisa de plano de contas, centro de custo, comissão ou\n// conciliação: uma loja que ainda não faz escrituração não sabe o que fazer com\n// eles, e um módulo cheio de telas que o lojista não usa é o mesmo que nenhuma.\n//\n// A alternativa era montar o `plugin-financial` inteiro. Ela resolve o mesmo\n// problema e traz junto seis telas que ninguém pediu — e a tela de recebíveis,\n// que é a que mais parece o que o lojista quer e é a que mais confunde, porque\n// duplica o que a própria lista de pedidos já mostra.\n//\n// O DIA EM QUE A LOJA QUISER O MÓDULO INTEIRO, ela troca este manifesto pelo\n// `createFinancialPlugin()`. Os dados são os mesmos tabelas — nada aqui é uma\n// segunda cópia de nada, e por isso a troca não migra coisa alguma.\n// ---------------------------------------------------------------------------\n\n/** As quatro que o recebimento toca, e a ordem em que se configuram. */\nconst RECEIVING_REGISTRIES = ['bank-accounts', 'payment-method-types', 'payment-methods', 'card-brands']\n\nexport interface FinancialSettingsPluginOptions {\n /**\n * Outras registries do host, se ele tiver. Nada é acrescentado por padrão: o\n * ponto deste manifesto é o que ele NÃO traz.\n */\n extraRegistries?: typeof financialRegistries\n}\n\nexport function createFinancialSettingsPlugin(\n options?: FinancialSettingsPluginOptions,\n): PluginManifest {\n // Os textos do modal e das abas vêm daqui. `registerTranslations` mescla, então\n // registrar de novo num app que já tem o módulo inteiro não custa nada.\n registerTranslations(financialLocales)\n\n const registries = [\n ...financialRegistries.filter((r) => RECEIVING_REGISTRIES.includes(r.id)),\n ...(options?.extraRegistries ?? []),\n ]\n\n const SettingsTab: React.FC = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Pagamentos',\n registries,\n hostPluginId: 'financial',\n routeBase: '/settings/financial',\n })\n SettingsTab.displayName = 'FinancialReceivingSettingsTab'\n\n return {\n id: 'financial',\n name: 'Pagamentos',\n icon: 'DollarSign',\n version: '1.0.0',\n scope: 'universal',\n defaultEnabled: true,\n // Sem `navigation` e sem `routes`: este manifesto não põe nada no rail. Ele\n // existe para que Configurações tenha onde cadastrar conta e forma de\n // pagamento, e para nada além disso.\n navigation: [],\n routes: [],\n widgets: financialZoneWidgets,\n registries,\n settings: [\n {\n id: 'financial',\n label: 'Pagamentos',\n icon: 'DollarSign',\n component: SettingsTab as unknown as React.ComponentType<unknown>,\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n locales: financialLocales,\n }\n}\n","import React from 'react'\nimport type { PluginManifest, PluginRegistryDef, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { EntityLookupMap } from '@fayz-ai/admin'\nimport { resolveConfig } from './config'\nimport { createFinancialDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedFinancialConfig } from './context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { NotaFiscalModel } from '@fayz-ai/financial/domain/nota-fiscal'\nimport { createFinancialStore, createSafeFinancialProvider } from '@fayz-ai/financial/store'\nimport { lazyComponent, registerTranslations, registerMessageDefaults } from '@fayz-ai/core'\nimport { buildFinancialDomainEvents, buildFinancialMessageDefaults } from './lib/message-events'\nimport { financialZoneWidgets } from './components/financialZoneWidgets'\nimport { financialRegistries, financialAccountEntity } from './data/registries'\n\n/** Cadastros → Contas. Sob `/registry/*` porque é o prefixo que a rubrica\n * \"Cadastros\" do rail recolhe em todo ofício. */\nimport { ACCOUNTS_ROUTE } from './lib/routes'\nimport { financialSetupGuides } from './lib/setup-guides'\nimport { buildFinancialOnboarding } from './lib/onboarding'\nimport { CashSessionHeaderControl } from './components/CashSessionHeaderControl'\nimport { financialLocales } from './locales'\nimport { buildFinancialAnalyticsCards } from './lib/analytics-cards'\nimport { stripeConnectorDef } from './integrations/stripe/connectorDef'\nimport { mercadoPagoConnectorDef } from './integrations/mercadopago/connectorDef'\nimport { pagBankConnectorDef } from './integrations/pagbank/connectorDef'\nimport { cieloConnectorDef } from './integrations/cielo/connectorDef'\nimport { stoneConnectorDef } from './integrations/stone/connectorDef'\nimport { PluginSettingsPanel, createCrudPage } from '@fayz-ai/admin'\nimport { MIGRATIONS } from './migrations'\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 goals: string\n giftCards: string\n cardsOverview: string\n cardsReconciliation: string\n notasFiscais: string\n}\n\nexport interface ItemTypeOption {\n value: string\n label: string\n icon?: string\n}\n\n/**\n * Provider-neutral fiscal capability. The Financial plugin owns the document;\n * an addon supplies the gateway and tells the host which journey is available.\n */\nexport interface FinancialFiscalProviderConfig {\n label: string\n models: NotaFiscalModel[]\n /** NFC-e providers derive the legal payload from an order, never a typed total. */\n requiresOrder?: boolean\n}\n\nexport interface FinancialPluginOptions {\n /** Where the module's sub-nav lives. The views already read it; only the\n * option was missing, so an app asking for 'sidebar' failed to compile. */\n moduleNav?: 'rail' | 'tabs' | 'sidebar'\n modules?: {\n payables?: boolean\n receivables?: boolean\n cashRegisters?: boolean\n statements?: boolean\n commissions?: boolean\n cards?: boolean\n /** Metas mensais por unidade, em três degraus. */\n goals?: boolean\n /** Vales-presente, lidos da loja e emitidos em lote pelo Financeiro. */\n giftCards?: boolean\n /** Bank reconciliation (conciliação). Defaults off — enable with a bank connector. */\n reconciliation?: boolean\n /** Notas fiscais (NF-e/NFC-e/NFS-e). Defaults off — opt-in per app. */\n notasFiscais?: boolean\n }\n labels?: Partial<FinancialPluginLabels>\n currency?: {\n code?: string\n locale?: string\n symbol?: string\n }\n navPosition?: number\n /**\n * Onde a sub-navegação do módulo aparece. Default: o que a shell decidir.\n * 'sidebar' não desenha sub-nav na página — o app assume que a sidebar lista\n * as views como filhas do item do módulo (ver ModuleNavVariant).\n */\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 /** Installed fiscal addon capability. Omit to keep local/manual tracking. */\n fiscalProvider?: FinancialFiscalProviderConfig\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/admin').EntityLookup\n\n /** App-owned registries shown under /settings/financial Properties. */\n settingsRegistries?: PluginRegistryDef[]\n\n /** Callback when user clicks a booking link on an invoice. Receives the order ID. */\n onBookingClick?: (orderId: string) => void\n\n /**\n * Which internal-nav links this APP gates, as `nav item id → feature id`.\n * Empty by default: the plugin ships no opinion about what is paid — packaging\n * is the app's decision, declared alongside its `permissions.ts` (RBAC) and\n * `billing.ts` (plan entitlements). An id absent from this map is never hidden\n * and never gated, in the nav OR in the content.\n *\n * {@link FINANCIAL_NAV_FEATURES} is an opt-in preset of the `fin_*` ids used\n * by the reference apps — spread the entries you actually want:\n *\n * ```ts\n * navFeatureMap: { reconciliation: FINANCIAL_NAV_FEATURES.reconciliation }\n * ```\n */\n navFeatureMap?: Record<string, string>\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\n\n\n/**\n * OPT-IN preset of feature ids for the financial sub-modules — a naming\n * convention offered to apps, NOT a default. Nothing here is applied unless an\n * app passes the entries it wants through `options.navFeatureMap`, because what\n * is paid is a product decision that belongs to the app (its `permissions.ts` +\n * `billing.ts`), never to the plugin.\n */\nexport const FINANCIAL_NAV_FEATURES = {\n reconciliation: 'fin_reconciliation',\n cards: 'fin_cards',\n commissions: 'fin_commissions',\n statements: 'fin_statements',\n receivables: 'fin_receivables',\n payables: 'fin_payables',\n 'cash-registers': 'fin_cash_registers',\n} as const satisfies Record<string, string>\n\n\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialPlugin(options?: FinancialPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(financialLocales)\n // O texto sugerido para cada fato do financeiro. Os FATOS vão no manifesto\n // (`events`) — automações, integrações e auditoria leem o mesmo contrato.\n registerMessageDefaults(buildFinancialMessageDefaults())\n\n const provider = options?.dataProvider ?? createSafeFinancialProvider()\n const store = createFinancialStore(provider)\n const dashboardWidgets = createFinancialDashboardWidgets({ config, provider, store })\n const registries = [...financialRegistries, ...(options?.settingsRegistries ?? [])]\n\n // UMA PORTA SÓ. O cadastro de Contas ganhou tela própria em Cadastros, então\n // ele sai da aba de propriedades do Financeiro: duas portas para o mesmo\n // cadastro é a duplicação que o rail existe para evitar, e a de Configurações\n // era a mais difícil de achar das duas.\n // Bank accounts live under Cadastros; commission rules have their own screen (Comissões).\n const settingsRegistries = registries.filter((r) => r.id !== 'bank-accounts' && r.id !== 'commission-rules')\n\n const AccountsRegistryPage: React.ComponentType<unknown> =\n createCrudPage(financialAccountEntity, { feature: 'financial' }) as React.ComponentType<unknown>\n AccountsRegistryPage.displayName = 'FinancialAccountsRegistryPage'\n\n // Per-person statement tab (account_central-style): bound to this plugin's provider.\n const PersonStatementBound: React.FC<any> = (props) =>\n React.createElement(PersonStatementWidget, { person: props.item, provider, config })\n PersonStatementBound.displayName = 'FinancialPersonStatement'\n const SupplierFinancialSettingsBound: React.FC<any> = (props) =>\n React.createElement(SupplierFinancialSettings, { person: props.item, provider })\n SupplierFinancialSettingsBound.displayName = 'FinancialSupplierSettings'\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(FinancialPage, { config, provider, store, registries })\n\n // A porta de \"lançar uma conta a pagar\", aberta em toda rota do app. Mounted\n // on every route but not needed for the first paint: its code (the payable\n // agent, ~40 KB with the invoice form it opens) arrives right after.\n const AgentMount = lazyComponent(() =>\n import('./views/payable-agent').then((m) => m.createFinancialAgentMount({ config, provider })))\n\n return {\n id: 'financial',\n defaultAgentRole: 'finance',\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 // The parts of this plugin a plan can permit separately (#281, ADR 0025).\n //\n // This is the module the decision was written about: the two-leg ledger is\n // what every customer needs and what makes the plugin worth installing;\n // bank reconciliation is what some of them pay for. Without a facet the\n // only choices were to give the paid half away or to split one coherent\n // domain into two plugins with a seam down the middle of it.\n //\n // The grain matters: `app.plan_grants` and `app.tenant_plugins` are both\n // keyed on (plugin, facet), so a plan permits a facet and a tenant has one\n // through the same predicate. A facet is not a feature flag — it is what\n // somebody is entitled to.\n facets: [\n {\n id: 'ledger',\n label: config.labels.pageTitle,\n description: 'Lançamentos, contas a pagar e a receber, e o razão de duas pernas.',\n includedWithPlugin: true,\n },\n {\n id: 'reconciliation',\n label: 'Conciliação bancária',\n description: 'Importa o extrato e casa cada linha com o lançamento que já existe.',\n },\n {\n id: 'dre',\n label: 'DRE e fluxo de caixa',\n description: 'Demonstrativo de resultado e projeção de caixa a partir do razão.',\n },\n ],\n // Os FATOS do financeiro — só expostos enquanto o módulo está ATIVO.\n events: buildFinancialDomainEvents(),\n // The plugin owns ALL of its SQL and says so: what installing it provisions\n // is this list, byte-for-byte the files under src/migrations (embed barrel).\n // Loose SQL was the standing contract violation (DECISIONS 2026-07-06).\n migrations: MIGRATIONS.map((m) => ({\n id: `financial-${m.id}`,\n version: '1.0.0',\n sql: m.sql,\n description: m.id,\n })),\n // O caixa é do balcão, não do módulo: quem cobra está na agenda, na fila e\n // na fatura, e sair dessas telas para abrir a gaveta é o atrito que o V1 não\n // tem — lá é um ícone no cabeçalho, de qualquer tela.\n headerControls: config.modules.cashRegisters\n ? [{\n id: 'financial.cash-session',\n component: (() =>\n React.createElement(CashSessionHeaderControl, { config, provider, store })\n ) as React.ComponentType<unknown>,\n order: 90,\n permission: { feature: 'financial', action: 'read' as const },\n }]\n : [],\n\n declaredFeatures: [\n { id: 'financial', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.receivables ? [{ id: 'financial.receivables', label: config.labels.receivables, group: config.labels.pageTitle }] : []),\n ...(config.modules.payables ? [{ id: 'financial.payables', label: config.labels.payables, group: config.labels.pageTitle }] : []),\n ...(config.modules.commissions ? [{ id: 'financial.commissions', label: config.labels.commissions, group: config.labels.pageTitle }] : []),\n ],\n // Recurring monthly quota — counts financial movement rows created this\n // month (invoices write one per installment; quick transactions one, or two\n // for a transfer).\n declaredLimits: [\n { key: 'movements_month', label: 'Financial movements this month', table: 'plg_financial_movements', period: 'month' },\n ],\n queryEntities: [\n {\n key: 'financial:invoices',\n entity: {\n name: 'Invoice',\n namePlural: 'Invoices (receipts REC- / payables PAG-)',\n icon: 'Receipt',\n permission: { feature: 'financial', action: 'read' },\n fields: [\n { key: 'number', label: 'Number (REC-/PAG-)', type: 'text', searchable: true },\n { key: 'direction', label: 'Flow (receivable/payable)', type: 'text' },\n { key: 'counterpartyName', label: 'Counterparty', type: 'text', searchable: true },\n { key: 'total', label: 'Amount', type: 'number' },\n { key: 'paid', label: 'Paid', type: 'number' },\n { key: 'balance', label: 'Balance', type: 'number' },\n { key: 'status', label: 'Status', type: 'text' },\n { key: 'competenceDate', label: 'Competence date', type: 'text' },\n { key: 'nextDueDate', label: 'Next due date', type: 'text' },\n ],\n data: {\n // v_invoice_balances agrupa POR ORDER e descarta o que não nasceu de\n // uma venda — o agente ficava cego para toda conta a pagar avulsa.\n table: 'v_financial_invoice_balances',\n tenantScoped: true,\n searchColumns: ['number', 'counterparty_name', 'description'],\n },\n },\n },\n {\n key: 'financial:movements',\n entity: {\n name: 'Financial movement',\n namePlural: 'Financial movements (installment ledger)',\n icon: 'Banknote',\n permission: { feature: 'financial', action: 'read' },\n fields: [\n { key: 'direction', label: 'Direction', type: 'text' },\n { key: 'movementKind', label: 'Kind (bill/payment)', type: 'text' },\n { key: 'amount', label: 'Amount', type: 'number' },\n { key: 'paidAmount', label: 'Paid amount', type: 'number' },\n { key: 'status', label: 'Status', type: 'text' },\n { key: 'dueDate', label: 'Due date', type: 'text' },\n { key: 'paymentDate', label: 'Payment date', type: 'text' },\n { key: 'installmentNumber', label: 'Installment', type: 'number' },\n { key: 'cardInstallments', label: 'Card installments', type: 'number' },\n { key: 'createdAt', label: 'Created at', type: 'text' },\n ],\n data: {\n table: 'plg_financial_movements',\n tenantScoped: true,\n },\n },\n },\n ],\n declaredRpcs: [\n {\n name: 'agent_financial_mark_payment_received',\n kind: 'write' as const,\n description:\n 'Guarded settle: invoices the order via fn_invoice_from_order (installments for credit card) and marks the receivable paid, audited with the acting user.',\n audits: true,\n },\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 6,\n label: config.labels.pageTitle,\n route: '/financial',\n icon: 'DollarSign',\n permission: { feature: 'financial', action: 'read' as const },\n },\n // CONTAS EM CADASTROS, que é onde o V1 a põe (Cadastros → Contas).\n //\n // A tela já existia — como aba de `/settings/financial` —, e quatro\n // cliques atrás de Configurações é onde um cadastro que a recepção abre\n // toda semana não devia estar. Em `/registry/*` de propósito: a rubrica\n // \"Cadastros\" do rail recolhe esse prefixo como pega-tudo, então a linha\n // nasce no lugar certo em todo ofício sem editar preset nenhum.\n {\n section: options?.navSection ?? 'main',\n position: (options?.navPosition ?? 6) + 0.1,\n label: 'Contas',\n route: ACCOUNTS_ROUTE,\n icon: 'Landmark',\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 path: ACCOUNTS_ROUTE,\n component: AccountsRegistryPage,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n widgets: [\n {\n id: 'financial-supplier-settings',\n zone: 'person.detail.financial-settings',\n component: SupplierFinancialSettingsBound as unknown as React.ComponentType<unknown>,\n order: 0,\n permission: { feature: 'financial', action: 'read' as const },\n },\n {\n id: 'financial-person-statement',\n zone: 'person.detail.financial',\n component: PersonStatementBound as unknown as React.ComponentType<unknown>,\n order: 0,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ...financialZoneWidgets,\n {\n // Headless. Publica ao assistente a porta de lançar uma conta a pagar\n // em QUALQUER rota — ver payable-agent.tsx. `shell.topbar.end` é a\n // única zona global do shell que de fato é renderizada e que fica FORA\n // do switch de rota (mesma leitura do pill do plugin-scribe).\n id: 'financial-agent-mount',\n zone: 'shell.topbar.end',\n component: AgentMount as unknown as React.ComponentType<unknown>,\n order: -20,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n dashboardWidgets,\n analyticsCards: buildFinancialAnalyticsCards(config, provider),\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: 'Quanto faturamos hoje?' },\n { label: \"Qual o faturamento deste mês?\" },\n { label: \"Compare o faturamento desta semana com a anterior\" },\n ],\n },\n // (removed) `createInvoice`. It declared mode:'persist' with no handler, no\n // dataTools entry and no RPC, so buildAgentToolset filtered it out — a\n // capability advertised to nobody. It was not given an RPC because its\n // three parameters (contact, amount, description) cannot express what\n // CreateInvoiceInput requires: `direction` (payable vs receivable),\n // `invoiceDate`, and `installments[]` with their due dates. An RPC would\n // have to invent all three, and a bill with a guessed due date is worse\n // than no bill. Creating an invoice stays the form's job — /financial\n // #payables-new, which the agent can navigate to.\n {\n id: 'financial.mark-payment-received',\n name: 'markPaymentReceived',\n description:\n 'Marks an order/appointment as paid: invoices it (with installments for credit card, e.g. \"cartão 2x\") and settles the receivable. Resolve the booking or order id via search tools first.',\n icon: 'BadgeDollarSign',\n mode: 'persist' as const,\n execution: { plane: 'server' as const, kind: 'rpc' as const, rpc: 'agent_financial_mark_payment_received' },\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n booking_id: { type: 'string' as const, description: 'Appointment id (alternative to order_id)' },\n order_id: { type: 'string' as const, description: 'Order id' },\n method: {\n type: 'string' as const,\n description: 'Payment method',\n enum: ['cash', 'pix', 'credit_card', 'debit_card', 'transfer'],\n },\n installments: { type: 'number' as const, description: 'Credit-card installments (1-12), e.g. 2 for \"cartão 2x\"' },\n },\n required: ['method'],\n },\n suggestions: [\n { label: 'Marcar o atendimento como pago no cartão em 2x' },\n ],\n permission: { feature: 'financial.receivables', action: 'update' as const },\n },\n {\n id: 'financial.list-payables',\n name: 'listPayables',\n description: 'Lists outstanding payables/bills.',\n icon: 'FileDown',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n status: { type: 'string' as const, enum: ['pending', 'overdue', 'paid'] },\n contact: { type: 'string' as const, description: 'Filter by contact name' },\n },\n },\n permission: { feature: 'financial', action: 'read' as const },\n suggestions: [\n { label: 'Mostre as contas em atraso' },\n { label: 'Quais contas vencem esta semana?' },\n ],\n },\n ],\n registries,\n settings: [\n ...financialV1SettingsTabs,\n {\n id: 'financial',\n label: 'Financial',\n icon: 'DollarSign',\n // Mesmo grupo da aba de Comissões: dois cartões do mesmo assunto lado a\n // lado, e a corrida de \"Plugins\" não é partida ao meio.\n group: 'Financeiro',\n section: 'financial',\n // V1 lists these as settings of their own, not as tabs inside Financeiro —\n // and with all of them listed, a \"Financeiro\" line under the Financeiro\n // section would only repeat the heading.\n itemsOnly: true,\n aliases: [{ id: 'financial-general', href: '/settings/financial/_general' }],\n items: [\n { id: '_general', label: 'Financial preferences', icon: 'SlidersHorizontal', keywords: ['Financeiro', 'Caixa', 'Fechamento', 'Comissões'] },\n { id: '_integrations', label: 'Financial connectors', icon: 'Plug', keywords: ['Stripe', 'Mercado Pago', 'PagBank', 'Cielo', 'Stone', 'Banco'] },\n { id: 'payment-methods', label: 'Payment methods', icon: 'CreditCard' },\n { id: 'chart-of-accounts', label: 'Chart of accounts', icon: 'FolderTree' },\n { id: 'cost-centers', label: 'Cost centers', icon: 'Target' },\n { id: 'price-tables', label: 'Price tables', icon: 'Tags' },\n { id: 'discount-reasons', label: 'Discount reasons', icon: 'Tag' },\n { id: 'payment-method-types', label: 'Payment method types', icon: 'Tags' },\n { id: 'card-brands', label: 'Card brands', icon: 'CreditCard' },\n ],\n component: (() => {\n const FinancialSettingsTab: React.FC = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Financial Settings',\n generalSettings: React.createElement(FinancialGeneralSettings, { config }),\n registries: settingsRegistries,\n hostPluginId: 'financial',\n routeBase: '/settings/financial',\n })\n FinancialSettingsTab.displayName = 'FinancialSettingsTab'\n return FinancialSettingsTab as unknown as React.ComponentType<unknown>\n })(),\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n // A regra de comissão é POLÍTICA, e por isso ganha aba própria em vez de\n // uma linha em Propriedades do Financeiro.\n //\n // O CRUD genérico que ela era não alcançava critério, função, faixa nem\n // piso — deixava criar uma regra sem critério nenhum, que casa com tudo e\n // parece configurada. Como no V1, onde \"Regras de Comissões\" é um cartão\n // de Configurações e não uma tela do Financeiro: escrita uma vez por quem\n // manda, e não operação do dia. A APURAÇÃO continua no Financeiro.\n {\n id: 'financial-commissions',\n label: 'Comissões',\n icon: 'HandCoins',\n group: 'Financeiro',\n component: (() => {\n const CommissionRulesTab: React.FC = () =>\n React.createElement(CommissionRulesView, { provider })\n CommissionRulesTab.displayName = 'CommissionRulesTab'\n return CommissionRulesTab as unknown as React.ComponentType<unknown>\n })(),\n order: 11,\n // Quem configura comissão mexe no que a casa paga: é `manage`, não\n // `read`. `manage` é coringa e precisa chegar inteiro até aqui.\n permission: { feature: 'financial', action: 'manage' as const },\n },\n ],\n // Stripe is the first connector this module implements rather than merely\n // shelves — it stays in `integrations` too, because the union is what the\n // catalogue row joins on.\n // Stripe emits the receivable; the four below bring back what was actually\n // received, which is the other half of a conciliação. Mercado Pago and\n // PagBank broker the merchant's consent, so they ask for nothing; Cielo and\n // Stone issue their credential TO the merchant and have no consent flow to\n // broker — see src/integrations/acquirers/ACQUIRERS.md.\n connectors: [\n stripeConnectorDef,\n mercadoPagoConnectorDef,\n pagBankConnectorDef,\n cieloConnectorDef,\n stoneConnectorDef,\n ],\n // TecnoSpeed is live already — the openbanking addon's `plugbank`\n // connector IS this slug. AbacatePay and Pagar.me were named as what\n // having Financeiro should put on the shelf; Mercado Pago, Bling and Stone\n // come from the Fayz plugin page.\n integrations: ['tecnospeed', 'abacatepay', 'pagarme', 'stripe', 'mercadopago', 'bling', 'stone'],\n // Como cada tela do Financeiro entra em pé — lido pelo assistente.\n onboarding: { program: buildFinancialOnboarding() },\n setupGuides: financialSetupGuides,\n locales: financialLocales,\n }\n}\n\n// The published names this plugin always had; their home is now @fayz-ai/financial.\nexport { createSafeFinancialProvider } from '@fayz-ai/financial/store'\nexport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nexport type { ResolvedFinancialConfig } from './context'\nexport type { GiftCard, GiftCardState, GiftCardQuery, IssueGiftCardsInput } from '@fayz-ai/financial/domain/gift-card'\nexport type { NotaFiscal, NotaFiscalModel, NotaFiscalStatus, NotaFiscalQuery, CreateNotaFiscalInput } from '@fayz-ai/financial/domain/nota-fiscal'\nimport { financialV1SettingsTabs } from './settings/v1-settings'\n\n// Code loads when it is first drawn, not with the app. Pages use React.lazy\n// (the shell's route boundary shows the page skeleton); anything that may\n// render elsewhere uses lazyComponent, which carries its own boundary.\nconst FinancialPage = React.lazy(() => import('./views/FinancialPage').then((m) => ({ default: m.FinancialPage })))\nconst FinancialGeneralSettings = lazyComponent(() => import('./components/FinancialGeneralSettings').then((m) => m.FinancialGeneralSettings))\nconst CommissionRulesView = lazyComponent(() => import('./views/CommissionRulesView').then((m) => m.CommissionRulesView))\nconst PersonStatementWidget = lazyComponent(() => import('./components/PersonStatementWidget').then((m) => m.PersonStatementWidget))\nconst SupplierFinancialSettings = lazyComponent(() => import('./components/PersonStatementWidget').then((m) => m.SupplierFinancialSettings))\n// Seedable in-memory provider — apps pass a seed to render the module populated\n// (demo/dogfood data) instead of the empty onboarding state.\nexport { createMockFinancialProvider } from '@fayz-ai/financial/data/mock'\nexport { FINANCIAL_INVOICE_ZONES } from './lib/routes'\nexport type { MockFinancialSeed, MockFinancialProviderOptions } from '@fayz-ai/financial/data/mock'\n// (removido) O gatilho global de lançamento rápido saiu junto com a folha: o\n// cadastro de fatura é o único caminho, e ele é uma rota — um app que queira um\n// \"+\" global navega para /financial#payables-new.\n\n// O catálogo de fatos do financeiro — o mesmo contrato que webhook e auditoria\n// leem, disponível sem passar pelo manifesto.\nexport { buildFinancialDomainEvents, buildFinancialMessageDefaults } from './lib/message-events'\n\n// O modal de recebimento COM a sua casca de contexto, para telas fora do\n// Financeiro — a de pedidos da loja é a primeira. Ver o cabeçalho do arquivo:\n// `PaymentModal` sozinho quebra por falta de provider, e quebra de um jeito que\n// parece defeito do componente.\nexport { ReceivePaymentModal } from './components/ReceivePaymentModal'\n\n// O Financeiro reduzido às configurações que RECEBER exige — conta, forma de\n// pagamento, bandeira. Para um app que precisa registrar um recebimento e não\n// quer o módulo inteiro. Ver o cabeçalho do arquivo.\nexport { createFinancialSettingsPlugin } from './lib/settings-only'\nexport type { FinancialSettingsPluginOptions } from './lib/settings-only'\n\n// A conta do cliente com a sua casca, para a fila de check-in e qualquer tela\n// fora do Financeiro que precise decidir uma cobrança COM contexto.\nexport { ClientAccountModal, ClientAccountInline } from './components/ClientAccountModal'\nexport { ClientAccountPanel } from './views/ClientAccountPanel'\n"]}