@fayz-ai/plugin-financial 0.26.1 → 0.26.2
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.
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/views/GapScreens.tsx","../src/views/SummaryView.tsx","../src/lib/list-window.ts","../src/views/ReceiptAgentSurface.tsx","../src/components/CnabRemittanceModal.tsx","../src/views/InvoiceListView.tsx","../src/views/navReferrer.ts","../src/views/PayablesView.tsx","../src/views/ReceivablesView.tsx","../src/components/TransferModal.tsx","../src/views/StatementsView.tsx","../src/views/CommissionsView.tsx","../src/views/CardsView.tsx","../src/views/GoalsView.tsx","../src/views/GiftCardsView.tsx","../src/components/ReconcileModals.tsx","../src/lib/receipt-reading.ts","../src/components/ReconcileFlow.tsx","../src/components/BatchClassify.tsx","../src/views/ReconciliationView.tsx","../src/views/RecurringBillsView.tsx","../src/components/FinancialOnboarding.tsx","../src/views/FinancialPage.tsx"],"names":["jsx","dateLabel","today","React2","React","account","jsxs","Fragment","useTranslation","useMemo","Button","Loader2","Zap","Paperclip","useEffect","describeError","FileText","DatePicker","SearchSelect","Input","invoiceOpensForEditing","useState","X","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Landmark","ArrowRightLeft","MAX_RANGE_DAYS","spanDays","useUnitFilter","useCallback","PersonLink","exportCSV","FilterPanel","FilterPanelField","RequiredFilter","Building2","FilterMenuRow","Download","formatCurrency","PageActions","ArrowRight","Receipt","Users","DataTable","SubpageHeader","Wallet","CalendarClock","Card","money","head","CELL","Pencil","Modal","ModalContent","ModalTitle","usePermissionOptional","PermissionGate","Tooltip","TooltipTrigger","TooltipContent","TooltipProvider","ListView","ModalHeader","ModalDescription","ModalBody","ModalFooter","shortDate","LinhaDoExtrato","openAmount","useRef","toast","postableAccounts","accountLabel","Skeleton","Plus","Hint","CurrencyInput","Check","ACCOUNT_GROUPS","PageHeaderActions","SegmentedControl","Search","ChevronDown","resolveCandidates","adminNavigateTo","round2","Sparkles","Link2","Eye","Badge","Play","Field","Textarea","STEPS","CreditCard","ChevronRight"],"mappings":"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","file":"FinancialPage-3JOQUJ6B.js","sourcesContent":["// ---------------------------------------------------------------------------\n// O que o Financeiro do V1 tem e este ainda não.\n// ---------------------------------------------------------------------------\n// Lido no menu do V1 rodando (localhost:8080/financeiro, conta Artorius,\n// 30/09/2026) e medido no banco de produção do V1. Os números são de lá: quanto\n// existe em todos os clientes, e quanto é da Artorius. Um «em breve» sem\n// tamanho não ajuda a priorizar — e aqui ele conta uma história clara: quase\n// nada disto a Artorius usa, porque ela é uma retaguarda de COMPRAS.\n// ---------------------------------------------------------------------------\nimport React from 'react'\nimport { ComingSoon } from '@fayz-ai/ui'\n\n// ── Contas a Pagar: as três filhas que faltam ──────────────────────────────\n\n/** Da minha caixinha — despesa paga do dinheiro que está na gaveta. */\nexport function PettyCashView() {\n return (\n <ComingSoon\n title=\"Da minha caixinha\"\n summary=\"A despesa que alguém pagou do dinheiro do caixa — o táxi, o gelo que faltou, a chave que se mandou fazer. Ela sai do caixa aberto daquela pessoa e não do banco.\"\n v1Path=\"Financeiro → Contas a Pagar → Da minha caixinha\"\n measured=\"2.006 movimentos ligados a um caixa no V1 inteiro — e ZERO da Artorius, que não abre caixa (0 sessões). É tela de quem vende no balcão.\"\n missing={[\n 'O item só aparece com o caixa da pessoa ABERTO: é estado, não permissão — fechou o caixa, some',\n 'A despesa nasce paga e baixa o saldo daquele caixa, não de uma conta bancária',\n 'Entra na conferência de fechamento do caixa, senão o valor some entre o que entrou e o que se contou',\n ]}\n />\n )\n}\n\n/** Importar Folha — a folha de pagamento vira contas a pagar. */\nexport function ImportPayrollView() {\n return (\n <ComingSoon\n title=\"Importar Folha\"\n summary=\"Trazer a folha do escritório de contabilidade e transformá-la em títulos a pagar, cada rubrica na sua conta do plano.\"\n v1Path=\"Financeiro → Contas a Pagar → Importar Folha\"\n measured=\"34 mapeamentos de rubrica no V1, NENHUM da Artorius. Hoje o salário dela é lançado como conta avulsa, uma por pessoa.\"\n missing={[\n 'O mapa rubrica → conta contábil, que é o que faz a importação valer a pena na segunda vez',\n 'Salário é despesa de PROFISSIONAL e não de fornecedor — o título tem de nascer com a contraparte certa',\n 'Reimportar a mesma folha não pode duplicar: a competência mais a rubrica é a chave',\n ]}\n />\n )\n}\n\n// ── As três abas de topo que faltam ────────────────────────────────────────\n\n/** Conferentes de Caixa — quem tem o direito de conferir o caixa alheio. */\nexport function CashReviewersView() {\n return (\n <ComingSoon\n title=\"Conferentes de Caixa\"\n summary=\"Quem pode conferir o fechamento de um caixa que não é o seu. Sem essa lista, quem fecha é quem confere — e aí ninguém confere.\"\n v1Path=\"Financeiro → Conferentes de Caixa\"\n measured=\"5 conferentes no V1 inteiro, nenhum da Artorius (que não abre caixa).\"\n missing={[\n 'A lista de quem confere, por unidade — é um cadastro pequeno com uma consequência grande',\n 'O caixa fechado fica pendente até um conferente assinar, e é isso que dá valor ao papel',\n 'Depende de Caixas estar em uso; numa casa que só compra, esta tela não tem o que fazer',\n ]}\n />\n )\n}\n\n/** Fechamento de Período — o que a casa vendeu no período. */\nexport function PeriodClosingView() {\n return (\n <ComingSoon\n title=\"Fechamento de Período\"\n summary=\"O apanhado do período: o que se vendeu, o que entrou em cada forma de pagamento, e o que ficou de fora — com e sem o dinheiro da caixinha.\"\n v1Path=\"Financeiro → Fechamento de Período\"\n measured=\"Tela de leitura no V1: soma movimentos e faturas do intervalo, sem tabela própria. A Artorius não fecha período porque não vende pelo sistema.\"\n missing={[\n 'O relatório do intervalo, somando por forma de pagamento e por conta do plano',\n 'A diferença entre o que o sistema diz e o que se contou — é ela que se procura aqui',\n 'Não confundir com o Fechamento de Data, que TRAVA o passado; este só mostra',\n ]}\n />\n )\n}\n\n/** Fechamento de Data — tranca o passado para ninguém mexer. */\nexport function DateClosingView() {\n return (\n <ComingSoon\n title=\"Fechamento de Data\"\n summary=\"Escolher até que dia a unidade fica travada. Depois disso ninguém lança, edita ou apaga nada para trás — e quem precisar, pede uma janela.\"\n v1Path=\"Financeiro → Fechamento de Data\"\n measured=\"1 trava em todo o V1, nenhuma da Artorius. É a tela que menos se usa e a que mais custa quando falta: sem ela, corrigir o mês passado é sempre possível.\"\n missing={[\n 'A trava por unidade e por data, com pré-visualização de saldos e pendências ANTES de confirmar',\n 'A janela de exceção, com quem abriu e por quê — travar sem escape vira travar de vez',\n 'O registro de quem travou e quando: é o que se mostra ao contador',\n 'A trava tem de valer no BANCO e não só na tela, senão a primeira integração a fura',\n ]}\n />\n )\n}\n\n// ── Filhas de Comissões e Cartões, que aqui são telas planas ───────────────\n\n/** Comissões → Pré-geração. */\nexport function CommissionPreviewView() {\n return (\n <ComingSoon\n title=\"Pré-geração de comissões\"\n summary=\"O que cada profissional vai receber antes de virar título: conferir, ajustar e só então gerar o repasse.\"\n v1Path=\"Financeiro → Comissões → Pré-geração\"\n measured=\"105 lançamentos de comissão e 5 gerações no V1, NENHUM da Artorius — a casa dela não paga por atendimento.\"\n missing={[\n 'A prévia por profissional e por período, antes de gerar qualquer coisa',\n 'O ajuste manual com motivo registrado — a conversa sobre comissão acontece aqui',\n 'Gerar é irreversível na prática; por isso a prévia é uma tela e não um passo do formulário',\n ]}\n />\n )\n}\n\n/** Comissões → Repasses Gerados. */\nexport function CommissionPayoutsView() {\n return (\n <ComingSoon\n title=\"Repasses gerados\"\n summary=\"O histórico do que já virou título: quando se gerou, para quem, quanto, e se já foi pago.\"\n v1Path=\"Financeiro → Comissões → Repasses Gerados\"\n measured=\"1 repasse gerado em todo o V1. A tela existe e quase não se usou.\"\n missing={[\n 'A lista do que foi gerado, ligada aos títulos a pagar que ela criou',\n 'Estornar um repasse gerado por engano, sem apagar o histórico',\n ]}\n />\n )\n}\n\n/** Cartões → Cartões de Recebimento. */\nexport function ReceivingCardsView() {\n return (\n <ComingSoon\n title=\"Cartões de recebimento\"\n summary=\"As bandeiras e maquininhas que a casa aceita, com a taxa e o prazo de cada uma — é isso que diz quanto do que se vendeu vai mesmo cair.\"\n v1Path=\"Financeiro → Cartões → Cartões de Recebimento\"\n measured=\"147 configurações de taxa no V1 e UMA da Artorius. 705 transações de recebimento, nenhuma dela.\"\n missing={[\n 'A taxa e o prazo por bandeira e por número de parcelas',\n 'A previsão de recebimento que sai daí — a venda de hoje entra no fluxo na data certa',\n 'Depende de vender pelo sistema; a Artorius tem a configuração e nenhuma transação',\n ]}\n />\n )\n}\n\n// ── Fiscal: as duas telas que o V1 tirou do Estoque e pôs num assunto só ───\n//\n// Lidas no V1 rodando (localhost:8080/fiscal, conta Artorius, 30/09/2026). Lá\n// «Fiscal» é linha de rail com duas filhas — Notas emitidas e Grupos fiscais —\n// e a Entrada de Notas ficou no Estoque, porque ela dá entrada de mercadoria e\n// estas duas não. Aqui as duas entram como filhas de «Fiscal» no Financeiro,\n// que é onde o documento fiscal já mora (plg_financial_nfe).\n\n/** Fiscal → Notas Emitidas. No V1 FUNCIONA, e é o gap maior dos dois. */\nexport function IssuedNotesView() {\n return (\n <ComingSoon\n title=\"Notas Emitidas\"\n summary=\"As NF-e, NFC-e e NFS-e que a casa emitiu, com o estado de cada uma na SEFAZ — autorizada, processando, rejeitada ou cancelada — e a comanda ou fatura que deu origem a ela.\"\n v1Path=\"Fiscal → Notas emitidas\"\n measured=\"4 notas na Artorius em 30 dias: 1 autorizada (NFC-e de R$ 1.700,73) e 3 rejeitadas. As rejeitadas são o motivo da tela existir — sem ela ninguém descobre que a nota não saiu.\"\n missing={[\n 'Ligar o emissor da PlugNotas a este CNPJ — sem credencial neste ambiente a lista nasce vazia mesmo com nota emitida lá',\n 'As cinco faixas do V1 (Autorizadas, Processando, Rejeitadas, Canceladas e «Sem nota») com o período de 7, 30 ou 90 dias — o rastro já existe em plg_fiscalbr_nfce_jobs e _events',\n 'Abrir o DANFE e o XML autorizado de cada nota, e exportar os XMLs do período para a contabilidade',\n 'Cancelar uma nota emitida com justificativa, e SUBSTITUIR uma NFS-e — que no V1 é gesto próprio, não um cancelar seguido de emitir',\n '«Sem nota» não é estado de documento: é a venda que ainda não gerou nota, e é ela que pega o buraco antes do contador',\n ]}\n />\n )\n}\n\n/** Fiscal → Grupos Fiscais. O cadastro já existe no V2 — falta a porta aqui. */\nexport function TaxGroupsView() {\n return (\n <ComingSoon\n title=\"Grupos Fiscais\"\n summary=\"Perfis tributários reutilizáveis — CFOP, CSOSN/CST, origem do ICMS, PIS, COFINS, alíquota e modalidade de base — que os produtos herdam na hora de emitir.\"\n v1Path=\"Fiscal → Grupos fiscais\"\n measured=\"5 grupos na Artorius (Barbecue e Molhos, Carnes Bovina e Suína Defumada, Preparações Alimentícias, Produtos de Panificação). A tabela plg_fiscalbr_tax_groups já existe no V2 e já recebeu os grupos do V1.\"\n missing={[\n 'Trazer o cadastro para dentro do assunto: hoje ele só aparece na lista genérica de cadastros, longe de onde a nota é usada',\n 'Os produtos de cada grupo, que é o que faz o perfil valer a pena na segunda vez',\n '«Preencher NCM com IA»: o V1 varre os itens DE VENDA sem NCM e sem grupo — que são exatamente os que travam a NFC-e — e sugere a classificação',\n 'Só faz sentido junto com Notas Emitidas: grupo fiscal é insumo de emissão, não cadastro decorativo',\n ]}\n />\n )\n}\n","import React, { useEffect, useMemo } from 'react'\nimport {\n ShoppingCart, Car, Home, Utensils, Zap, Film, HeartPulse, Dumbbell,\n Music, ShoppingBag, Landmark, Wallet, CircleDollarSign, Paperclip,\n} from 'lucide-react'\nimport { DashboardCanvas } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../context'\nimport type { StatementEntry } from '@fayz-ai/financial/domain/statement'\n\n/**\n * Financial summary. On desktop (md+) it renders the rich multi-column dashboard\n * (KPI cards + Fluxo de Caixa chart + breakdown + overdue alerts + recent-\n * transactions table) via the shared DashboardCanvas. On mobile (<md) it swaps\n * to a Mobills-grade experience: a compact KPI strip over a date-grouped\n * transaction list. The two paths share the same store — no forked screen.\n */\nexport function SummaryView() {\n return (\n <>\n {/* Mobile: Mobills-style transaction-led summary */}\n <div className=\"md:hidden\">\n <MobileSummary />\n </div>\n {/* Desktop: rich dashboard canvas (unchanged) */}\n <DashboardCanvas\n surface=\"plugin-home\"\n domain=\"financial\"\n showHeader={false}\n className=\"hidden space-y-6 md:block\"\n />\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Mobile summary (Mobills-grade)\n// ---------------------------------------------------------------------------\n\n// keyword → category glyph, so each row leads with a recognizable colored circle\n// (Mobills-style). Purely cosmetic and safe while categories aren't modeled yet;\n// falls back to a generic money glyph.\nfunction categoryIcon(label: string): React.ElementType {\n const s = label.toLowerCase()\n if (/(mercado|super|padaria|extra|p[aã]o|hortifr)/.test(s)) return ShoppingCart\n if (/(uber|99|posto|shell|gasol|combust|carro)/.test(s)) return Car\n if (/(aluguel|casa|condom|im[oó]vel)/.test(s)) return Home\n if (/(ifood|restaurante|outback|lanche|food|bar\\b)/.test(s)) return Utensils\n if (/(luz|energia|enel|internet|vivo|conta de|[aá]gua)/.test(s)) return Zap\n if (/(cinema|netflix|cinemark|filme|disney|prime)/.test(s)) return Film\n if (/(farm|drogasil|sa[uú]de|plano|hospital|m[eé]dic)/.test(s)) return HeartPulse\n if (/(academia|smartfit|gym|treino)/.test(s)) return Dumbbell\n if (/(spotify|music|deezer)/.test(s)) return Music\n if (/(amazon|shopping|loja|magaz|americanas|mercado livre)/.test(s)) return ShoppingBag\n if (/(fatura|cart[aã]o|nubank|banco|boleto)/.test(s)) return Landmark\n if (/(sal[aá]rio|freel|pix|reembolso|receb|renda|d[ií]vidend)/.test(s)) return Wallet\n return CircleDollarSign\n}\n\nfunction useDateLabel() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n return useMemo(() => {\n const todayStr = new Date().toISOString().slice(0, 10)\n const y = new Date(); y.setDate(y.getDate() - 1)\n const yesterdayStr = y.toISOString().slice(0, 10)\n return (dateStr: string): string => {\n if (dateStr === todayStr) return t('financial.summary.today')\n if (dateStr === yesterdayStr) return t('financial.summary.yesterday')\n try {\n return new Date(`${dateStr}T00:00:00`).toLocaleDateString(currency.locale, {\n weekday: 'short', day: '2-digit', month: 'short',\n })\n } catch {\n return dateStr\n }\n }\n }, [t, currency.locale])\n}\n\nfunction MobileSummary() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const statement = useFinancialStore((s) => s.statement)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n const dateLabel = useDateLabel()\n\n useEffect(() => {\n void fetchSummary()\n void fetchBankAccounts()\n const to = new Date().toISOString().slice(0, 10)\n const from = new Date(); from.setDate(from.getDate() - 90)\n void fetchStatement({ dateRange: { from: from.toISOString().slice(0, 10), to } })\n }, [])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n\n const accountName = useMemo(() => {\n const map = new Map(bankAccounts.map((a) => [a.id, a.name]))\n return (id?: string) => (id ? map.get(id) ?? '' : '')\n }, [bankAccounts])\n\n // Realized cash events grouped by day (most recent first). Transfers are\n // dropped — they're internal and would double-count in a personal feed.\n const groups = useMemo(() => {\n const entries = (statement?.entries ?? []).filter((e) => e.entryKind === 'movement')\n const byDate = new Map<string, StatementEntry[]>()\n for (const e of entries) {\n const d = e.movement.paymentDate ?? e.movement.dueDate\n const bucket = byDate.get(d)\n if (bucket) bucket.push(e)\n else byDate.set(d, [e])\n }\n return [...byDate.entries()].sort((a, b) => b[0].localeCompare(a[0]))\n }, [statement])\n\n return (\n <div className=\"space-y-4\">\n {/* Compact KPI strip */}\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"col-span-2 rounded-card border bg-card p-4\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.summary.totalBalance')}</p>\n <p className=\"mt-0.5 text-2xl font-semibold\">{fmt(summary?.totalBalance ?? 0)}</p>\n </div>\n <div className=\"rounded-card border bg-card p-3\">\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.summary.income')}</p>\n <p className=\"mt-0.5 text-base font-semibold text-success\">{fmt(inflow)}</p>\n </div>\n <div className=\"rounded-card border bg-card p-3\">\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.summary.expenses')}</p>\n <p className=\"mt-0.5 text-base font-semibold text-destructive\">{fmt(outflow)}</p>\n </div>\n </div>\n\n {/* Date-grouped transaction list */}\n {groups.length === 0 ? (\n <div className=\"rounded-xl border border-dashed py-12 text-center text-sm text-muted-foreground\">\n {t('financial.summary.noTransactions')}\n </div>\n ) : (\n <div className=\"space-y-4\">\n {groups.map(([date, rows]) => (\n <div key={date} className=\"space-y-1.5\">\n <p className=\"px-1 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {dateLabel(date)}\n </p>\n <div className=\"divide-y overflow-hidden rounded-card border bg-card\">\n {rows.map((e) => {\n const isCredit = e.movement.direction === 'credit'\n const title = e.invoice?.contactName || e.movement.notes || t('financial.summary.transactionsTitle')\n const Icon = categoryIcon(title)\n const category = isCredit ? t('financial.summary.income') : t('financial.summary.expenses')\n const acct = accountName(e.movement.bankAccountId)\n const subtitle = acct ? `${category} · ${acct}` : category\n // FAY-1226: a snapped receipt lives on the invoice metadata.\n const receiptUrl = (e.invoice?.metadata as { receiptUrl?: string } | undefined)?.receiptUrl\n return (\n <div key={e.movement.id} className=\"flex items-center gap-3 px-3 py-2.5\">\n <span\n className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-full ${\n isCredit\n ? 'bg-success-soft text-success-soft-foreground'\n : 'bg-destructive-soft text-destructive-soft-foreground'\n }`}\n >\n <Icon className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"flex items-center gap-1.5 truncate text-sm font-medium\">\n {title}\n {receiptUrl && (\n <Paperclip className=\"h-3 w-3 shrink-0 text-muted-foreground\" aria-label={t('financial.quickTx.receiptAttached')} />\n )}\n </p>\n <p className=\"truncate text-xs text-muted-foreground\">{subtitle}</p>\n </div>\n {receiptUrl && (\n <img\n src={receiptUrl}\n alt={t('financial.quickTx.receiptAttached')}\n className=\"h-9 w-9 shrink-0 rounded-md border object-cover\"\n />\n )}\n <span className={`shrink-0 text-sm font-semibold ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {isCredit ? '+' : '-'}{fmt(e.net)}\n </span>\n </div>\n )\n })}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/** Whether the YYYY-MM-DD window [from, to] contains today, in local time. */\nexport function windowReachesToday(from: string, to: string, now = new Date()): boolean {\n const today = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`\n return from <= today && today <= to\n}\n","import * as React from 'react'\nimport { useAgentSurface, type AgentSurfaceContribution } from '@fayz-ai/admin'\n\nimport { RECEIPT_INSTRUCTIONS, RECEIVABLE_RECEIPT_INSTRUCTIONS, createReceiptTools, type ReceiptDirection } from './receipt-agent'\n\n/**\n * A lista de contas, entregue ao assistente enquanto está na tela.\n *\n * Não desenha nada e não some sozinha: publica a ferramenta que abre o cadastro\n * preenchido, e ela vale só enquanto a lista estiver montada — que é o contrato\n * do Agent Surface. Fora desta tela o assistente não tem para onde abrir nada.\n */\nexport function ReceiptAgentSurface({ onOpenDraft, direction = 'payable' }: {\n onOpenDraft: () => void\n /** The list this surface sits on: it decides who the counterparty on the paper is. */\n direction?: ReceiptDirection\n}) {\n const live = React.useRef(onOpenDraft)\n live.current = onOpenDraft\n\n const contribution = React.useMemo<AgentSurfaceContribution>(() => (direction === 'receivable'\n ? {\n id: 'financial.receivables.receipt',\n pluginId: 'financial',\n role: 'finance',\n instructions: RECEIVABLE_RECEIPT_INSTRUCTIONS,\n describe: () => ({\n title: 'Lista — Contas a receber',\n state: { screen: '/financial/receivables', canOpenDraft: true },\n }),\n tools: createReceiptTools({ onDraft: () => live.current(), direction }),\n }\n : {\n id: 'financial.payables.receipt',\n pluginId: 'financial',\n role: 'finance',\n instructions: RECEIPT_INSTRUCTIONS,\n describe: () => ({\n title: 'Lista — Contas a pagar',\n state: { screen: '/financial/payables', canOpenDraft: true },\n }),\n tools: createReceiptTools({ onDraft: () => live.current() }),\n }), [direction])\n\n useAgentSurface(contribution)\n return null\n}\n","import React from 'react'\nimport { AlertTriangle, ArrowLeft, ArrowRight, FileDown, FileText, Loader2, X } from 'lucide-react'\nimport {\n Button, DatePicker, SearchSelect, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, WizardSteps, Input, Modal, ModalContent, ModalTitle,\n} from '@fayz-ai/ui'\nimport { useFinancialConfig, formatCurrency } from '../context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { BankAccount } from '@fayz-ai/financial/domain/account'\nimport type { CnabContext, CnabPayeeRecord } from '@fayz-ai/financial/domain/cnab240'\nimport type { Invoice } from '@fayz-ai/financial/domain/invoice'\nimport { cnabPayeeGaps, generateCnab240, inferPixKeyType, splitAccountDigit, suggestPaymentForm, type CnabItem, type CnabPaymentForm } from '@fayz-ai/financial/domain/cnab240'\nimport { BankLogo, BankPicker } from './BankPicker'\nimport { findBrBank } from '../lib/br-banks'\nimport { describeError } from '@fayz-ai/core'\n\ntype BankDraft = {\n bankName: string\n bankCode: string\n agencyNumber: string\n agencyDigit: string\n accountNumber: string\n accountDigit: string\n agreementCode: string\n}\n\n/** One selected instalment, with what the wizard still has to decide about it. */\ntype Line = {\n invoice: Invoice\n paymentForm: CnabPaymentForm\n paymentDate: string\n barcode: string\n payee: CnabPayeeRecord\n}\n\nconst STEPS = [\n { id: 'account', label: 'Conta bancária' },\n { id: 'payments', label: 'Pagamentos' },\n { id: 'beneficiaries', label: 'Favorecidos' },\n { id: 'review', label: 'Revisão' },\n]\n\nconst FORM_LABEL: Record<CnabPaymentForm, string> = {\n pix: 'PIX',\n ted: 'TED/DOC',\n boleto: 'Boleto',\n tributo: 'Tributo',\n}\n\nconst PIX_KEY_TYPES = [\n { value: 'cpf', label: 'CPF' },\n { value: 'cnpj', label: 'CNPJ' },\n { value: 'email', label: 'E-mail' },\n { value: 'telefone', label: 'Telefone' },\n { value: 'aleatoria', label: 'Aleatória' },\n]\n\nconst todayISO = () => {\n const now = new Date()\n return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`\n}\n\nfunction textMetadata(account: BankAccount, key: string) {\n const value = account.metadata?.[key]\n return typeof value === 'string' ? value : ''\n}\n\n/**\n * The payer's data, read from the account's own columns first.\n *\n * `bank_code`, `bank_name`, `agency_number` and `account_number` are columns on\n * `plg_financial_accounts` — this used to read all four out of `metadata`, which\n * is why an account with its bank already filled in opened this screen blank.\n * Only the digits and the convênio have no column yet.\n */\nfunction draftFromAccount(account: BankAccount): BankDraft {\n const [agencyNumber, agencyDigit] = splitAccountDigit(account.agencyNumber || '', textMetadata(account, 'agencyDigit'))\n const [accountNumber, accountDigit] = splitAccountDigit(account.accountNumber || '', textMetadata(account, 'accountDigit'))\n return {\n bankName: account.bankName || '',\n bankCode: account.bankCode || textMetadata(account, 'bankCode'),\n agencyNumber,\n agencyDigit,\n accountNumber,\n accountDigit,\n agreementCode: textMetadata(account, 'cnabAgreementCode'),\n }\n}\n\nfunction missingFields(draft: BankDraft, companyDocument: string) {\n return [\n !draft.bankCode.trim() && 'código do banco',\n !draft.agencyNumber.trim() && 'agência',\n !draft.accountNumber.trim() && 'conta',\n !companyDocument.replace(/\\D/g, '') && 'CNPJ da empresa',\n ].filter(Boolean) as string[]\n}\n\nconst emptyPayee = (invoice: Invoice): CnabPayeeRecord => ({\n contactId: invoice.contactId ?? '',\n name: invoice.contactName || invoice.itemsSummary || 'Sem favorecido',\n document: '',\n})\n\n/**\n * The remittance line a bill starts as.\n *\n * The form is suggested from whatever code the bill carries — a 44-48 digit\n * number is a boleto, anything else is a PIX key — and the key falls back to\n * the payee's own CPF/CNPJ, which is what most small suppliers register.\n */\nfunction lineFromInvoice(invoice: Invoice, payee: CnabPayeeRecord | undefined): Line {\n const base = payee ?? emptyPayee(invoice)\n const barcode = typeof invoice.metadata?.barcode === 'string' ? invoice.metadata.barcode : ''\n const paymentForm = suggestPaymentForm(barcode)\n\n const resolved: CnabPayeeRecord = { ...base, name: base.name || invoice.contactName || 'Sem favorecido' }\n if (!resolved.pixKey?.trim() && resolved.document.replace(/\\D/g, '')) {\n resolved.pixKey = resolved.document\n resolved.pixKeyType = inferPixKeyType(resolved.document)\n } else if (resolved.pixKey?.trim() && !resolved.pixKeyType?.trim()) {\n resolved.pixKeyType = inferPixKeyType(resolved.pixKey)\n }\n\n const today = todayISO()\n return {\n invoice,\n paymentForm,\n // Paying on a date already past is a rejected line; the due date only wins\n // while it is still ahead.\n paymentDate: invoice.dueDate && invoice.dueDate >= today ? invoice.dueDate : today,\n barcode: paymentForm === 'boleto' ? barcode : '',\n payee: resolved,\n }\n}\n\nconst openAmount = (invoice: Invoice) => Math.max(0, invoice.totalAmount - invoice.paidAmount)\n\nexport function CnabRemittanceModal({ invoices, bankAccounts, provider, onClose }: {\n invoices: Invoice[]\n bankAccounts: BankAccount[]\n provider: FinancialDataProvider\n onClose: () => void\n}) {\n const { currency } = useFinancialConfig()\n const [step, setStep] = React.useState(0)\n const [bankAccountId, setBankAccountId] = React.useState('')\n const [draft, setDraft] = React.useState<BankDraft | null>(null)\n const [context, setContext] = React.useState<CnabContext | null>(null)\n const [companyName, setCompanyName] = React.useState('')\n const [companyDocument, setCompanyDocument] = React.useState('')\n const [lines, setLines] = React.useState<Line[]>([])\n const [companyUnsaved, setCompanyUnsaved] = React.useState(false)\n const [loadingContext, setLoadingContext] = React.useState(false)\n const [busy, setBusy] = React.useState(false)\n const [error, setError] = React.useState('')\n\n const eligibleAccounts = bankAccounts.filter((account) => account.accountType === 'bank' && account.isActive)\n const total = invoices.reduce((sum, invoice) => sum + openAmount(invoice), 0)\n const account = eligibleAccounts.find((candidate) => candidate.id === bankAccountId)\n const missingBankData = draft ? missingFields(draft, companyDocument) : []\n\n const items: CnabItem[] = React.useMemo(() => lines.map((line) => ({\n reference: line.invoice.id,\n amount: openAmount(line.invoice),\n paymentDate: line.paymentDate,\n paymentForm: line.paymentForm,\n barcode: line.barcode,\n payee: {\n name: line.payee.name,\n document: line.payee.document,\n bankCode: line.payee.bankCode,\n agency: line.payee.agencyNumber,\n agencyDigit: line.payee.agencyDigit,\n account: line.payee.accountNumber,\n accountDigit: line.payee.accountDigit,\n pixKey: line.payee.pixKey,\n pixKeyType: line.payee.pixKeyType,\n street: line.payee.street,\n number: line.payee.number,\n complement: line.payee.complement,\n district: line.payee.district,\n city: line.payee.city,\n state: line.payee.state,\n postalCode: line.payee.postalCode,\n },\n })), [lines])\n\n const gaps = React.useMemo(() => cnabPayeeGaps(items), [items])\n const batches = React.useMemo(() => {\n const grouped = new Map<CnabPaymentForm, { count: number; total: number }>()\n for (const line of lines) {\n const current = grouped.get(line.paymentForm) ?? { count: 0, total: 0 }\n current.count += 1\n current.total += openAmount(line.invoice)\n grouped.set(line.paymentForm, current)\n }\n return [...grouped.entries()]\n }, [lines])\n\n const selectAccount = async (id: string) => {\n const selected = eligibleAccounts.find((candidate) => candidate.id === id)\n setBankAccountId(id)\n setDraft(selected ? draftFromAccount(selected) : null)\n setError('')\n if (!selected || !provider.getCnabContext) {\n setLines(invoices.map((invoice) => lineFromInvoice(invoice, undefined)))\n return\n }\n\n setLoadingContext(true)\n try {\n const loaded = await provider.getCnabContext({\n contactIds: invoices.map((invoice) => invoice.contactId ?? '').filter(Boolean),\n bankAccountId: id,\n unitId: selected.unitId,\n })\n setContext(loaded)\n setCompanyName(loaded.company.name)\n setCompanyDocument(loaded.company.document)\n const byContact = new Map(loaded.payees.map((payee) => [payee.contactId, payee]))\n setLines(invoices.map((invoice) => lineFromInvoice(invoice, byContact.get(invoice.contactId ?? ''))))\n } catch (cause) {\n setError(describeError(cause, 'Não foi possível carregar os favorecidos.'))\n setLines(invoices.map((invoice) => lineFromInvoice(invoice, undefined)))\n } finally {\n setLoadingContext(false)\n }\n }\n\n const updateDraft = (key: keyof BankDraft, value: string) => {\n setDraft((current) => current ? { ...current, [key]: value } : current)\n setError('')\n }\n\n const updateLine = (index: number, patch: Partial<Line>) =>\n setLines((current) => current.map((line, i) => i === index ? { ...line, ...patch } : line))\n\n const updatePayee = (index: number, patch: Partial<CnabPayeeRecord>) =>\n setLines((current) => current.map((line, i) => i === index ? { ...line, payee: { ...line.payee, ...patch } } : line))\n\n const saveBankDraft = async () => {\n if (!account || !draft) return\n await provider.updateBankAccount(account.id, {\n bankCode: draft.bankCode.trim(),\n bankName: draft.bankName.trim() || undefined,\n agencyNumber: draft.agencyNumber.trim(),\n accountNumber: draft.accountNumber.trim(),\n metadata: {\n ...account.metadata,\n agencyDigit: draft.agencyDigit.trim(),\n accountDigit: draft.accountDigit.trim(),\n cnabAgreementCode: draft.agreementCode.trim(),\n },\n })\n }\n\n /**\n * O CNPJ digitado vira cadastro.\n *\n * Sem isto ele serviria a este arquivo e sumiria, e a remessa seguinte abriria\n * com o campo vazio de novo — que é exatamente o estado em que esta tela foi\n * encontrada.\n */\n const saveCompany = async () => {\n if (!provider.saveCompany) return\n const loaded = context?.company\n const unchanged = loaded\n && loaded.document.replace(/\\D/g, '') === companyDocument.replace(/\\D/g, '')\n && loaded.name === companyName\n if (unchanged) return\n try {\n const saved = await provider.saveCompany({\n id: loaded?.id,\n unitId: account?.unitId,\n name: companyName,\n document: companyDocument,\n })\n setContext((current) => current\n ? { ...current, company: { ...current.company, id: saved.id, name: companyName, document: companyDocument } }\n : current)\n } catch {\n // Gravar a empresa exige `tenancy.create`, que recepção e operador não\n // têm. Barrar a remessa inteira por causa do cadastro seria trocar um\n // incômodo por um bloqueio: o arquivo sai com o que foi digitado, e quem\n // tem permissão cadastra depois.\n setCompanyUnsaved(true)\n }\n }\n\n const advance = async () => {\n setError('')\n if (step === 0) {\n if (!account || !draft || missingBankData.length > 0) return\n setBusy(true)\n try {\n await saveBankDraft()\n await saveCompany()\n setStep(1)\n } catch (cause) {\n setError(describeError(cause, 'Não foi possível salvar os dados bancários.'))\n } finally {\n setBusy(false)\n }\n return\n }\n if (step === 2 && gaps.length > 0) return\n setStep((value) => Math.min(value + 1, 3))\n }\n\n const generate = async () => {\n if (!account || !draft) return\n setBusy(true)\n setError('')\n try {\n const sequence = context?.nextSequence ?? 1\n const file = generateCnab240({\n sequence,\n company: { name: companyName, document: companyDocument },\n bank: {\n code: draft.bankCode,\n name: draft.bankName,\n agency: draft.agencyNumber,\n agencyDigit: draft.agencyDigit,\n account: draft.accountNumber,\n accountDigit: draft.accountDigit,\n agreement: draft.agreementCode,\n },\n items,\n })\n\n // The cadastro first: a file that downloads while the payee data stays\n // unsaved makes the next remittance ask for all of it again.\n if (provider.saveCnabPayees) {\n // One write per payee: the same supplier can own several instalments in\n // the file, and writing their account once per line races itself.\n const seen = new Set<string>()\n const payload = lines\n .filter((line) => {\n if (!line.payee.contactId || seen.has(line.payee.contactId)) return false\n seen.add(line.payee.contactId)\n return true\n })\n .map((line) => ({\n contactId: line.payee.contactId,\n payeeAccountId: line.payee.payeeAccountId,\n document: line.payee.document,\n bankCode: line.payee.bankCode,\n bankName: line.payee.bankName,\n agencyNumber: line.payee.agencyNumber,\n agencyDigit: line.payee.agencyDigit,\n accountNumber: line.payee.accountNumber,\n accountDigit: line.payee.accountDigit,\n accountType: line.payee.accountType,\n pixKey: line.payee.pixKey,\n pixKeyType: line.payee.pixKeyType,\n }))\n if (payload.length) await provider.saveCnabPayees(payload)\n }\n\n if (provider.recordCnabBatch) {\n await provider.recordCnabBatch({\n bankAccountId: account.id,\n unitId: account.unitId,\n layout: file.layout,\n sequenceNumber: sequence,\n totalAmount: file.totalAmount,\n fileName: file.fileName,\n fileContent: file.content,\n items: lines.map((line) => ({\n movementId: line.invoice.id,\n paymentForm: line.paymentForm,\n paymentDate: line.paymentDate,\n amount: openAmount(line.invoice),\n })),\n })\n }\n\n const blob = new Blob([file.content], { type: 'text/plain;charset=us-ascii' })\n const url = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = file.fileName\n anchor.click()\n URL.revokeObjectURL(url)\n onClose()\n } catch (cause) {\n setError(describeError(cause, 'Não foi possível gerar o arquivo.'))\n } finally {\n setBusy(false)\n }\n }\n\n const canAdvance =\n step === 0 ? !!account && !!draft && missingBankData.length === 0 && !loadingContext\n : step === 2 ? gaps.length === 0\n : true\n\n return (\n <Modal open onOpenChange={(open) => { if (!open) onClose() }}>\n <ModalContent size=\"3xl\" noPadding hideClose className=\"overflow-hidden sm:max-h-[90vh]\">\n <div className=\"border-b px-5 py-4\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-full bg-primary/10\"><FileText className=\"h-4 w-4 text-primary\" /></div>\n <div>\n <ModalTitle className=\"text-base leading-normal tracking-normal\">Gerar Remessa CNAB 240</ModalTitle>\n <p className=\"text-xs text-muted-foreground\">{invoices.length} parcela(s) · {formatCurrency(total, currency)}</p>\n </div>\n </div>\n <Button variant=\"bare\" size=\"bare\" type=\"button\" onClick={onClose} className=\"rounded-md p-2 text-muted-foreground hover:bg-muted hover:text-foreground\" aria-label=\"Fechar\"><X className=\"h-4 w-4\" /></Button>\n </div>\n <WizardSteps steps={STEPS} current={step} onSelect={setStep} className=\"mt-4\" aria-label=\"Etapas da remessa CNAB\" />\n </div>\n\n <div className=\"min-h-[340px] flex-1 overflow-y-auto p-5\">\n {step === 0 ? (\n <div className=\"space-y-5\">\n <SearchSelect\n label=\"Conta bancária para débito\"\n required\n value={bankAccountId}\n displayValue={account?.name ?? ''}\n placeholder=\"Busque pelo nome da conta\"\n minChars={0}\n loadOnOpen\n noResultsLabel=\"Nenhuma conta bancária ativa encontrada.\"\n searchingLabel=\"Buscando contas...\"\n onSearch={(query) => {\n const normalized = query.trim().toLocaleLowerCase('pt-BR')\n return eligibleAccounts\n .filter((candidate) => !normalized || `${candidate.name} ${candidate.bankName ?? ''} ${candidate.agencyNumber ?? ''} ${candidate.accountNumber ?? ''}`.toLocaleLowerCase('pt-BR').includes(normalized))\n .map((candidate) => ({\n id: candidate.id,\n label: candidate.name,\n subtitle: [candidate.bankName, candidate.agencyNumber && `Ag ${candidate.agencyNumber}`, candidate.accountNumber && `Cc ${candidate.accountNumber}`].filter(Boolean).join(' · '),\n icon: <BankLogo bank={findBrBank(candidate.bankCode || textMetadata(candidate, 'bankCode'), candidate.bankName)} />,\n }))\n }}\n onChange={(id) => void selectAccount(id)}\n />\n\n {draft ? (\n <>\n <div className=\"space-y-3 rounded-lg border bg-muted/20 p-4\">\n <div>\n <h3 className=\"text-sm font-semibold\">Empresa pagadora</h3>\n <p className=\"text-xs text-muted-foreground\">\n {companyUnsaved\n ? 'Vale para este arquivo: seu perfil não pode gravar o cadastro da empresa. Peça a um responsável para cadastrá-la.'\n : context?.company.id\n ? 'É este CNPJ que vai no cabeçalho do arquivo.'\n : 'Esta unidade ainda não tem empresa cadastrada. O que você informar aqui vira o cadastro dela, e a próxima remessa já abre preenchida.'}\n </p>\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <Field label=\"Razão social / nome\" value={companyName} onChange={setCompanyName} />\n <Field label=\"CNPJ\" required value={companyDocument} placeholder=\"00.000.000/0000-00\" onChange={setCompanyDocument} />\n </div>\n </div>\n\n <div className=\"space-y-3 rounded-lg border bg-muted/20 p-4\">\n <div>\n <h3 className=\"text-sm font-semibold\">Dados da conta para a remessa</h3>\n <p className=\"text-xs text-muted-foreground\">Preencha uma vez; os próximos arquivos reutilizam esta configuração.</p>\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"space-y-1.5 sm:col-span-2\">\n <span className=\"text-xs font-medium\">Banco<span className=\"text-destructive\"> *</span></span>\n <BankPicker\n code={draft.bankCode}\n name={draft.bankName}\n search={provider.searchBanks ? (query) => provider.searchBanks!(query) : undefined}\n onChange={({ code, name }) => setDraft((current) => current ? { ...current, bankCode: code || current.bankCode, bankName: name } : current)}\n />\n {draft.bankCode ? <p className=\"text-xs text-muted-foreground\">Código {draft.bankCode}</p> : null}\n </div>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Agência\" required value={draft.agencyNumber} onChange={(value) => updateDraft('agencyNumber', value)} className=\"col-span-2\" />\n <Field label=\"Dígito\" value={draft.agencyDigit} onChange={(value) => updateDraft('agencyDigit', value)} />\n </div>\n <div className=\"grid grid-cols-3 gap-2\">\n <Field label=\"Conta\" required value={draft.accountNumber} onChange={(value) => updateDraft('accountNumber', value)} className=\"col-span-2\" />\n <Field label=\"Dígito\" value={draft.accountDigit} onChange={(value) => updateDraft('accountDigit', value)} />\n </div>\n <Field label=\"Convênio / código da empresa\" value={draft.agreementCode} placeholder=\"Opcional para alguns bancos\" onChange={(value) => updateDraft('agreementCode', value)} className=\"sm:col-span-2\" />\n </div>\n {missingBankData.length > 0 ? (\n <Warning>Complete {missingBankData.join(', ')} para continuar.</Warning>\n ) : null}\n </div>\n </>\n ) : null}\n {eligibleAccounts.length === 0 ? <p className=\"text-sm text-muted-foreground\">Cadastre uma conta bancária ativa para iniciar uma remessa.</p> : null}\n </div>\n ) : null}\n\n {step === 1 ? (\n <div className=\"space-y-3\">\n <div>\n <h3 className=\"text-sm font-semibold\">Pagamentos selecionados</h3>\n <p className=\"text-xs text-muted-foreground\">Defina a forma de pagamento e a data de pagamento de cada parcela.</p>\n </div>\n {lines.map((line, index) => (\n <div key={line.invoice.id} className=\"grid items-center gap-3 rounded-lg border p-3 sm:grid-cols-12\">\n <div className=\"min-w-0 sm:col-span-4\">\n <p className=\"truncate text-sm font-medium\">{line.payee.name}</p>\n <p className=\"text-xs text-muted-foreground\">\n Venc.: {line.invoice.dueDate || '—'}{line.invoice.fiscalNumber ? ` · NF ${line.invoice.fiscalNumber}` : ''}\n </p>\n </div>\n <div className=\"text-sm font-semibold tabular-nums sm:col-span-2\">{formatCurrency(openAmount(line.invoice), currency)}</div>\n <div className=\"sm:col-span-3\">\n <Select value={line.paymentForm} onValueChange={(value) => updateLine(index, { paymentForm: value as CnabPaymentForm })}>\n <SelectTrigger className=\"h-9\"><SelectValue /></SelectTrigger>\n <SelectContent>\n {(Object.keys(FORM_LABEL) as CnabPaymentForm[]).map((form) => (\n <SelectItem key={form} value={form}>{FORM_LABEL[form]}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"sm:col-span-3\">\n <DatePicker value={line.paymentDate} format=\"numeric\" onChange={(value) => updateLine(index, { paymentDate: value })} />\n </div>\n </div>\n ))}\n </div>\n ) : null}\n\n {step === 2 ? (\n <div className=\"space-y-3\">\n <div>\n <h3 className=\"text-sm font-semibold\">Dados dos favorecidos</h3>\n <p className=\"text-xs text-muted-foreground\">Confirme ou preencha o que falta. O que você informar é salvo no cadastro para o próximo arquivo.</p>\n </div>\n {lines.map((line, index) => (\n <div key={line.invoice.id} className=\"space-y-3 rounded-lg border p-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-medium\">\n {line.payee.name}\n <span className=\"ml-2 rounded-full border px-2 py-0.5 text-xs font-normal text-muted-foreground\">{FORM_LABEL[line.paymentForm]}</span>\n </p>\n <span className=\"shrink-0 text-sm font-semibold tabular-nums\">{formatCurrency(openAmount(line.invoice), currency)}</span>\n </div>\n <div className=\"grid gap-3 sm:grid-cols-12\">\n <Field label=\"CPF/CNPJ\" required value={line.payee.document} onChange={(value) => updatePayee(index, { document: value })} className=\"sm:col-span-4\" />\n\n {line.paymentForm === 'pix' ? (\n <>\n <div className=\"space-y-1.5 sm:col-span-3\">\n <span className=\"text-xs font-medium\">Tipo da chave</span>\n <Select value={line.payee.pixKeyType || ''} onValueChange={(value) => updatePayee(index, { pixKeyType: value })}>\n <SelectTrigger className=\"h-9\"><SelectValue placeholder=\"Tipo\" /></SelectTrigger>\n <SelectContent>\n {PIX_KEY_TYPES.map((option) => <SelectItem key={option.value} value={option.value}>{option.label}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n <Field label=\"Chave PIX\" required value={line.payee.pixKey || ''} onChange={(value) => updatePayee(index, { pixKey: value, pixKeyType: line.payee.pixKeyType || inferPixKeyType(value) })} className=\"sm:col-span-5\" />\n </>\n ) : null}\n\n {line.paymentForm === 'ted' ? (\n <>\n <Field label=\"Banco\" required value={line.payee.bankCode || ''} onChange={(value) => updatePayee(index, { bankCode: value })} className=\"sm:col-span-2\" />\n <Field label=\"Agência\" required value={line.payee.agencyNumber || ''} onChange={(value) => updatePayee(index, { agencyNumber: value })} className=\"sm:col-span-2\" />\n <Field label=\"DV\" value={line.payee.agencyDigit || ''} onChange={(value) => updatePayee(index, { agencyDigit: value })} className=\"sm:col-span-1\" />\n <Field label=\"Conta\" required value={line.payee.accountNumber || ''} onChange={(value) => updatePayee(index, { accountNumber: value })} className=\"sm:col-span-2\" />\n <Field label=\"DV\" value={line.payee.accountDigit || ''} onChange={(value) => updatePayee(index, { accountDigit: value })} className=\"sm:col-span-1\" />\n </>\n ) : null}\n\n {line.paymentForm === 'boleto' || line.paymentForm === 'tributo' ? (\n <Field label=\"Código de barras / linha digitável\" required value={line.barcode} onChange={(value) => updateLine(index, { barcode: value })} className=\"sm:col-span-8\" />\n ) : null}\n </div>\n </div>\n ))}\n {gaps.length > 0 ? (\n <Warning>\n <span className=\"font-medium\">Falta preencher:</span>\n <ul className=\"mt-1 space-y-0.5\">\n {gaps.slice(0, 5).map((gap, index) => <li key={`${gap.reference}-${gap.field}-${index}`}>{gap.name}: {gap.message}</li>)}\n {gaps.length > 5 ? <li className=\"text-muted-foreground\">e mais {gaps.length - 5}…</li> : null}\n </ul>\n </Warning>\n ) : null}\n </div>\n ) : null}\n\n {step === 3 ? (\n <div className=\"space-y-4\">\n <h3 className=\"text-sm font-semibold\">Resumo da remessa</h3>\n <div className=\"grid gap-3 text-sm sm:grid-cols-2\">\n <Summary label=\"Banco pagador\" value={`${draft?.bankCode ?? ''} — ${draft?.bankName || '—'}`} />\n <Summary label=\"Conta\" value={`Ag ${draft?.agencyNumber ?? ''} / Cc ${draft?.accountNumber ?? ''}${draft?.accountDigit ? `-${draft.accountDigit}` : ''}`} />\n <Summary label=\"Empresa\" value={`${companyName || '—'} (${companyDocument || '—'})`} />\n <Summary label=\"Total\" value={formatCurrency(total, currency)} strong />\n <Summary label=\"Nº da remessa (NSA)\" value={String(context?.nextSequence ?? 1)} />\n </div>\n <div className=\"border-t pt-3\">\n <h4 className=\"mb-2 text-sm font-medium\">Lotes</h4>\n <div className=\"space-y-1 text-sm\">\n {batches.map(([form, group]) => (\n <div key={form} className=\"flex justify-between\">\n <span>{FORM_LABEL[form]} — {group.count} título(s)</span>\n <span className=\"font-medium tabular-nums\">{formatCurrency(group.total, currency)}</span>\n </div>\n ))}\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Ao gerar, o arquivo .REM é baixado, a remessa é registrada no histórico e os dados informados são salvos nos cadastros. O status das contas não muda.\n </p>\n </div>\n ) : null}\n\n {error ? <p role=\"alert\" className=\"mt-4 text-sm text-destructive\">{error}</p> : null}\n </div>\n\n <div className=\"flex items-center justify-between border-t px-5 py-4\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => step === 0 ? onClose() : setStep((value) => value - 1)} disabled={busy}>\n {step > 0 ? <ArrowLeft className=\"h-4 w-4\" /> : null}{step === 0 ? 'Cancelar' : 'Voltar'}\n </Button>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-muted-foreground\">{invoices.length} parcela(s) selecionada(s)</span>\n {step < 3 ? (\n <Button size=\"sm\" onClick={() => void advance()} disabled={busy || !canAdvance}>\n {busy || loadingContext ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : null}\n {step === 0 ? 'Salvar e avançar' : 'Avançar'} <ArrowRight className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button size=\"sm\" onClick={() => void generate()} disabled={busy || gaps.length > 0}>\n {busy ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <FileDown className=\"h-4 w-4\" />} Gerar arquivo .REM\n </Button>\n )}\n </div>\n </div>\n </ModalContent>\n </Modal>\n )\n}\n\nfunction Warning({ children }: { children: React.ReactNode }) {\n return (\n <div className=\"flex gap-2 rounded-lg border border-warning/30 bg-warning/10 p-3 text-sm\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-warning\" />\n <div>{children}</div>\n </div>\n )\n}\n\nfunction Summary({ label, value, strong }: { label: string; value: string; strong?: boolean }) {\n return (\n <div>\n <div className=\"text-xs text-muted-foreground\">{label}</div>\n <div className={strong ? 'text-lg font-semibold' : 'font-medium'}>{value}</div>\n </div>\n )\n}\n\nfunction Field({ label, value, onChange, required, placeholder, className = '' }: {\n label: string\n value: string\n onChange: (value: string) => void\n required?: boolean\n placeholder?: string\n className?: string\n}) {\n return (\n <label className={`block space-y-1.5 ${className}`}>\n <span className=\"text-xs font-medium\">{label}{required ? <span className=\"text-destructive\"> *</span> : null}</span>\n <Input value={value} onChange={(event) => onChange(event.target.value)} placeholder={placeholder} />\n </label>\n )\n}\n","import React, { useCallback, useEffect, useState, useMemo } from 'react'\nimport { FileText, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, Ban, CalendarClock, Building2, Camera, Paperclip, Users, Download, Printer, Zap, Loader2, Pencil } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Button, RowActions, printDocument, FilterMenuRow, FilterPanel, FilterPanelField, Input, RequiredFilter, SearchSelect, ListView, toast, type RowBulkAction, type PageActionItem, DatePicker, Modal, ModalContent, ModalTitle, Textarea,\n ChoiceList,\n} from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency, type FinancialCurrency } from '../context'\nimport { PersonLink, QuickActionsButton, usePermissionOptional, useUnitFilter } from '@fayz-ai/admin'\nimport { useTranslation, exportCSV, useDataChanged, useUnitMode, describeError, resolveCurrency } from '@fayz-ai/core'\nimport { T } from '@fayz-ai/financial/data/tables'\nimport type { TransactionDirection } from '@fayz-ai/financial/domain/movement'\nimport type { InvoiceStatus, Invoice, InvoiceAttachment } from '@fayz-ai/financial/domain/invoice'\nimport type { ChartOfAccountsNode, CostCenter } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport type { PaymentMethod, PaymentMethodType } from '@fayz-ai/financial/domain/payment-method'\nimport type { BankAccount } from '@fayz-ai/financial/domain/account'\nimport { postableAccounts, accountLabel } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport { startReceiptCapture } from './receipt-agent'\nimport { windowReachesToday } from '../lib/list-window'\nimport { ReceiptAgentSurface } from './ReceiptAgentSurface'\nimport { createIdempotencyKey } from '@fayz-ai/financial/data/idempotency'\nimport { CnabRemittanceModal } from '../components/CnabRemittanceModal'\nimport { CancelInvoicesDialog } from '../components/CancelInvoiceDialog'\nimport { InvoiceAttachmentsModal } from '../components/InvoiceAttachmentsModal'\nimport { createFinancialCounterpartyLookup } from '../components/FinancialCounterpartySearchSelect'\n\nconst STATUS_OPTIONS: { value: InvoiceStatus; labelKey: string; color: string; icon: React.ElementType }[] = [\n { value: 'open', labelKey: 'financial.invoice.statusOpen', color: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed },\n { value: 'partial', labelKey: 'financial.invoice.statusPartial', color: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis },\n { value: 'paid', labelKey: 'financial.invoice.statusPaid', color: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig },\n { value: 'overdue', labelKey: 'financial.invoice.statusOverdue', color: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert },\n { value: 'cancelled', labelKey: 'financial.invoice.statusCancelled', color: 'bg-muted text-muted-foreground', icon: Ban },\n // PREVISTO não é um estado de conta — é a ausência de conta. Por isso o selo\n // é vazado (borda tracejada, sem preenchimento): ele diz \"ainda não existe\".\n { value: 'provisioned', labelKey: 'financial.invoice.statusProvisioned', color: 'border border-dashed border-muted-foreground/50 text-muted-foreground', icon: CalendarClock },\n]\n\n// SEM \"todo o período\", de propósito: 90 dias é o teto — a lista sem recorte\n// de data varre o histórico inteiro do tenant (273 mil títulos no Espaço\n// Facial) e é a consulta que derruba a tela. `last90` substitui `thisYear`\n// pela mesma razão.\nconst DATE_PRESETS = ['thisMonth', 'lastMonth', 'last30', 'last90'] as const\n/** Teto do recorte de datas, em dias. */\nconst MAX_RANGE_DAYS = 90\ntype DatePreset = (typeof DATE_PRESETS)[number]\n\nconst isoDate = (d: Date) =>\n `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n\n/** Local-time boundaries so \"this month\" means the user's month, not UTC's. */\nfunction presetRange(preset: DatePreset): { from: string; to: string } {\n const now = new Date()\n switch (preset) {\n case 'thisMonth':\n return { from: isoDate(new Date(now.getFullYear(), now.getMonth(), 1)), to: isoDate(new Date(now.getFullYear(), now.getMonth() + 1, 0)) }\n case 'lastMonth':\n return { from: isoDate(new Date(now.getFullYear(), now.getMonth() - 1, 1)), to: isoDate(new Date(now.getFullYear(), now.getMonth(), 0)) }\n case 'last30': {\n const from = new Date(now)\n from.setDate(from.getDate() - 29)\n return { from: isoDate(from), to: isoDate(now) }\n }\n case 'last90': {\n const from = new Date(now)\n from.setDate(from.getDate() - (MAX_RANGE_DAYS - 1))\n return { from: isoDate(from), to: isoDate(now) }\n }\n }\n}\n\n/** Dias entre duas datas ISO (inclusivo). */\nfunction spanDays(from: string, to: string): number {\n return Math.round((new Date(`${to}T00:00:00`).getTime() - new Date(`${from}T00:00:00`).getTime()) / 86_400_000) + 1\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const t = useTranslation()\n const opt = STATUS_OPTIONS.find((o) => o.value === status)\n const Icon = opt?.icon ?? CircleDashed\n return (\n <span className={`inline-flex items-center gap-0.5 rounded-full px-2 py-0.5 text-[10px] font-medium ${opt?.color ?? 'bg-muted text-muted-foreground'}`}>\n <Icon className=\"h-2.5 w-2.5\" /> {opt ? t(opt.labelKey) : status}\n </span>\n )\n}\n\n/** ISO date to dd/MM/yyyy without a timezone round-trip. */\nfunction formatDueDate(iso: string | null | undefined): string {\n if (!iso) return '—'\n const [y, m, d] = iso.slice(0, 10).split('-')\n return d && m && y ? `${d}/${m}/${y}` : iso\n}\n\nfunction useInvoiceColumns(\n currency: { code: string; locale: string; symbol: string },\n paymentMethods: PaymentMethod[],\n paymentMethodTypes: PaymentMethodType[],\n bankAccounts: BankAccount[],\n consolidar: (occurrenceId: string) => void,\n consolidating: string | null,\n openAttachments: (invoiceId: string) => void,\n rowMenu: { open?: (row: Invoice) => void; cancel?: (row: Invoice) => void },\n): ColumnDef<Invoice, any>[] {\n const t = useTranslation()\n // Six columns, not ten: a scrolling table hides the row actions on the\n // right. Like the V1, the secondary facts ride under the primary ones.\n return useMemo(() => [\n {\n accessorKey: 'dueDate', header: t('financial.invoice.columnDueDate'),\n cell: ({ row }) => {\n const total = row.original.totalInstallments ?? 1\n const atual = row.original.installmentNumber ?? 1\n return (\n <div className=\"whitespace-nowrap\">\n <p className=\"text-sm tabular-nums\">\n {formatDueDate(row.original.dueDate)}\n {total > 1 && <span className=\"ml-1.5 text-xs text-muted-foreground\" title={t('financial.invoice.columnInst')}>{atual}/{total}</span>}\n </p>\n {row.original.fiscalNumber && <p className=\"font-mono text-[10px] text-muted-foreground\">#{row.original.fiscalNumber}</p>}\n </div>\n )\n },\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n meta: { mobile: 'title' },\n cell: ({ row }) => (\n // Full cell width with the badge pinned right, so the statuses line up in\n // one column instead of trailing each name.\n <div className=\"flex w-full min-w-[250px] items-center gap-3\" onClick={(e) => e.stopPropagation()}>\n <div className=\"w-0 min-w-0 flex-1\">\n {row.original.contactName ? (\n <PersonLink personId={row.original.contactId} name={row.original.contactName} size=\"sm\" className=\"block max-w-full truncate text-sm font-medium\" />\n ) : (\n <p className=\"font-medium\">—</p>\n )}\n {row.original.itemsSummary && <p className=\"truncate text-[10px] text-muted-foreground\">{row.original.itemsSummary}</p>}\n </div>\n <span className=\"shrink-0\"><StatusBadge status={row.original.status} /></span>\n </div>\n ),\n },\n {\n accessorKey: 'totalAmount', header: t('financial.invoice.columnAmount'), enableSorting: true,\n cell: ({ row }) => (\n <span className={`whitespace-nowrap font-medium ${row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>\n {formatCurrency(row.original.totalAmount, resolveCurrency(currency, row.original.currency))}\n </span>\n ),\n },\n {\n accessorKey: 'paidAmount', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => (\n <span className={`whitespace-nowrap ${row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : 'text-muted-foreground'}`}>\n {formatCurrency(row.original.paidAmount, resolveCurrency(currency, row.original.currency))}\n </span>\n ),\n },\n {\n id: 'paymentMethod', header: t('financial.invoice.columnPaymentMethod'),\n cell: ({ row }) => {\n const method = paymentMethods.find((candidate) => candidate.id === row.original.paymentMethodId)\n const type = paymentMethodTypes.find((candidate) => candidate.id === (method?.paymentMethodTypeId ?? row.original.paymentMethodTypeId))\n const account = bankAccounts.find((candidate) => candidate.id === row.original.paymentAccountId)\n if (!type && !method && !account) return <span className=\"text-muted-foreground\">—</span>\n return (\n <div className=\"max-w-[150px] text-xs\">\n <p className=\"truncate font-medium\">{method?.name ?? type?.name ?? '—'}{row.original.paymentCardInstallments ? ` · ${row.original.paymentCardInstallments}x` : ''}</p>\n {account && <p className=\"truncate text-[10px] text-muted-foreground\">{account.name}</p>}\n </div>\n )\n },\n },\n {\n id: 'actions',\n header: '',\n // O ÚNICO CAMINHO QUE TRANSFORMA PREVISÃO EM DÍVIDA.\n //\n // O V1 troca as ações da linha recorrente por este botão só — não há\n // anexo, nem estorno, nem fatura para abrir: a ocorrência ainda não é\n // nada disso. Consolidar é o clique que a faz existir.\n //\n // Fora dela, o clipe, como no V1: diz que a conta tem comprovante sem\n // obrigar a abri-la. Sem anexo não desenha nada.\n cell: ({ row }) => {\n if (row.original.isProvisionedOccurrence) {\n const id = row.original.occurrenceId\n return (\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-8 px-2\"\n disabled={!id || consolidating === id}\n title={t('financial.invoice.consolidate')}\n onClick={(e) => { e.stopPropagation(); if (id) void consolidar(id) }}\n >\n {consolidating === id\n ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" aria-hidden />\n : <Zap className=\"h-3.5 w-3.5\" aria-hidden />}\n <span className=\"ml-1 hidden xl:inline\">{t('financial.invoice.consolidate')}</span>\n </Button>\n </div>\n )\n }\n // Same rule as the bill's schedule: the receipt shows on the installments it paid.\n const n = row.original.paidAmount > 0 ? (row.original.attachmentCount ?? 0) : 0\n const label = n === 1 ? '1 anexo' : `${n} anexos`\n return (\n <div className=\"flex items-center justify-end gap-0.5\">\n {n > 0 && <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"relative h-8 w-8 text-muted-foreground hover:text-foreground\"\n title={label}\n aria-label={label}\n onClick={(e) => { e.stopPropagation(); openAttachments(row.original.invoiceId ?? row.original.id) }}\n >\n <Paperclip className=\"h-4 w-4\" aria-hidden />\n {n > 0 && (\n <span className=\"absolute -right-0.5 -top-0.5 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[10px] font-semibold leading-none text-primary-foreground tabular-nums\">{n}</span>\n )}\n </Button>}\n <RowActions actions={[\n { id: 'open', label: t('financial.invoice.rowOpen'), icon: Pencil, hidden: !rowMenu.open, onSelect: () => rowMenu.open?.(row.original) },\n { id: 'attachments', label: t('financial.invoice.rowAttachments'), icon: Paperclip, hidden: !n, onSelect: () => openAttachments(row.original.invoiceId ?? row.original.id) },\n { id: 'cancel', label: t('financial.invoice.bulkCancel'), icon: Ban, intent: 'danger', hidden: !rowMenu.cancel || row.original.status === 'cancelled', onSelect: () => rowMenu.cancel?.(row.original) },\n ]} />\n </div>\n )\n },\n },\n ], [currency, t, paymentMethods, paymentMethodTypes, bankAccounts, consolidar, consolidating, openAttachments, rowMenu])\n}\n\nexport function InvoiceListView({ direction, onNew, onNewReceipt, onEdit }: {\n direction: TransactionDirection\n onNew?: () => void\n /** Mesmo cadastro, entrando pela foto do recibo. */\n onNewReceipt?: () => void\n /** A situação viaja junto: é ela que decide se a conta abre em edição ou em leitura. */\n onEdit?: (id: string, status?: InvoiceStatus) => void\n}) {\n const t = useTranslation()\n // Role-side create gate: hide the \"new invoice\" affordance (header + empty-state\n // action) when the role lacks `create` — the module's single route only guards read.\n const can = usePermissionOptional()\n const canCreate = can('financial', 'create')\n const canEdit = can('financial', 'edit')\n const onNewGated = canCreate ? onNew : undefined\n const onNewReceiptGated = canCreate ? onNewReceipt : undefined\n const { currency, locations } = useFinancialConfig()\n const provider = useFinancialProvider()\n const invoices = useFinancialStore((s) => s.invoices)\n const invoicesTotal = useFinancialStore((s) => s.invoicesTotal)\n const invoicesLoading = useFinancialStore((s) => s.invoicesLoading)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [search, setSearch] = useState('')\n const [statusFilter, setStatusFilter] = useState<InvoiceStatus[]>([])\n const [accountId, setAccountId] = useState('')\n const [costCenterId, setCostCenterId] = useState('')\n const [unitId, setUnitId] = useState('')\n // A CONTRAPARTE TEM CAMPO PRÓPRIO, como no V1 (\"Pagar a\" / \"Receber de\").\n // Ela já cabia na busca livre, e é justamente por isso que não servia:\n // procurar \"Ambalagens\" na busca traz também a conta cuja OBSERVAÇÃO cita o\n // fornecedor. Quem recorta por fornecedor quer o fornecedor, não a menção.\n const [contactId, setContactId] = useState('')\n const [contactName, setContactName] = useState('')\n const [fiscalNumber, setFiscalNumber] = useState('')\n // \"Conta de pagamento\" / \"Conta de recebimento\" do V1: por onde o dinheiro\n // passou, e não em que conta a despesa foi classificada (isso é o plano).\n const [bankAccountId, setBankAccountId] = useState('')\n // Unit mode (franchise): the list opens on the unit the person stands in and\n // offers only the units they reach. The `locations` filter below is the\n // pre-units fallback for apps that pass their own list.\n const unitMode = useUnitMode()\n const unitFilter = useUnitFilter()\n const effectiveUnitId = unitMode ? unitFilter.value : (unitId || undefined)\n const [accounts, setAccounts] = useState<ChartOfAccountsNode[]>([])\n // Only leaves: the parents are headings, not somewhere a line can be posted.\n const postable = useMemo(() => postableAccounts(accounts), [accounts])\n const [costCenters, setCostCenters] = useState<CostCenter[]>([])\n // Bounded default window (never \"all time\": that query scans the tenant's\n // whole history and is what timed the screen out).\n // Through the end of NEXT month, not \"today\": the form's default 1x\n // installment is due invoiceDate + 1 month, so a window ending today hid\n // every bill the user had just created. Still well under MAX_RANGE_DAYS.\n const mesCorrente = useMemo(() => {\n const hoje = new Date()\n return {\n from: isoDate(new Date(hoje.getFullYear(), hoje.getMonth(), 1)),\n to: isoDate(new Date(hoje.getFullYear(), hoje.getMonth() + 2, 0)),\n }\n }, [])\n const [datePreset, setDatePreset] = useState<DatePreset | 'custom'>('custom')\n const [dateFrom, setDateFrom] = useState(mesCorrente.from)\n const [dateTo, setDateTo] = useState(mesCorrente.to)\n\n // O recorte de datas SEMPRE existe (teto de 90 dias): \"sem período\" era a\n // consulta que varria o histórico inteiro, e o Limpar não pode reabri-la.\n const dateRange = useMemo(() => ({ from: dateFrom, to: dateTo }), [dateFrom, dateTo])\n\n const applyPreset = (value: DatePreset | 'custom') => {\n setDatePreset(value)\n if (value === 'custom') return\n const range = presetRange(value)\n setDateFrom(range.from)\n setDateTo(range.to)\n }\n\n /** As duas pontas com o teto: mexeu numa e estourou 90 dias, a OUTRA anda\n * junto — o recorte nunca fica inválido nem sem resposta. */\n const setFromClamped = (from: string) => {\n if (!from) return\n setDatePreset('custom')\n setDateFrom(from)\n if (dateTo && spanDays(from, dateTo) > MAX_RANGE_DAYS) {\n const to = new Date(`${from}T00:00:00`)\n to.setDate(to.getDate() + (MAX_RANGE_DAYS - 1))\n setDateTo(isoDate(to))\n }\n }\n const setToClamped = (to: string) => {\n if (!to) return\n setDatePreset('custom')\n setDateTo(to)\n if (dateFrom && spanDays(dateFrom, to) > MAX_RANGE_DAYS) {\n const from = new Date(`${to}T00:00:00`)\n from.setDate(from.getDate() - (MAX_RANGE_DAYS - 1))\n setDateFrom(isoDate(from))\n }\n }\n\n useEffect(() => {\n let active = true\n Promise.all([provider.getChartOfAccounts(), provider.getCostCenters()])\n .then(([accountRows, costCenterRows]) => {\n if (!active) return\n setAccounts(accountRows.filter((account) => account.nodeType === 'leaf'))\n setCostCenters(costCenterRows)\n })\n .catch(() => {\n if (!active) return\n setAccounts([])\n setCostCenters([])\n })\n return () => { active = false }\n }, [provider])\n\n useEffect(() => {\n void Promise.all([fetchPaymentMethods(), fetchBankAccounts()])\n }, [fetchPaymentMethods, fetchBankAccounts])\n\n // Kept in one place: the bulk actions have to refetch the SAME slice after\n // writing, or the list would come back showing rows the filters exclude.\n // ── O RASCUNHO E O RECORTE EM VIGOR ──────────────────────────────────────\n //\n // Sete campos e cada um custa uma ida ao banco: mexer em quatro é quatro\n // consultas, três das quais ninguém pediu — e a terceira pode chegar depois\n // da quarta e pintar a tela com a resposta errada. Os campos escrevem no\n // rascunho; a lista só muda no Buscar (ver FilterPanel).\n //\n // A UNIDADE fica de fora: ela é o ALCANCE de quem está olhando, não um\n // refinamento da consulta. Se a casca trocar a unidade, uma lista presa ao\n // rascunho anterior mostraria dados de outra unidade até alguém clicar em\n // buscar — e esse é o único erro desta tela que não se percebe olhando.\n const rascunho = useMemo(() => ({\n status: statusFilter,\n contactId,\n fiscalNumber: fiscalNumber.trim(),\n bankAccountId,\n accountId,\n costCenterId,\n from: dateFrom,\n to: dateTo,\n }), [statusFilter, contactId, fiscalNumber, bankAccountId, accountId, costCenterId, dateFrom, dateTo])\n const [emVigor, setEmVigor] = useState(rascunho)\n const filtrosPendentes = useMemo(\n () => JSON.stringify(rascunho) !== JSON.stringify(emVigor),\n [rascunho, emVigor],\n )\n // Lê de dentro do setter: clicar logo depois de digitar enxergaria o valor\n // velho se a captura fosse do render anterior.\n const aplicarFiltros = useCallback(() => setEmVigor(() => rascunho), [rascunho])\n\n const query = useMemo(() => ({\n direction,\n status: emVigor.status.length > 0 ? emVigor.status : undefined,\n search: search || undefined,\n contactId: emVigor.contactId || undefined,\n fiscalNumber: emVigor.fiscalNumber || undefined,\n bankAccountId: emVigor.bankAccountId || undefined,\n accountId: emVigor.accountId || undefined,\n costCenterId: emVigor.costCenterId || undefined,\n unitId: effectiveUnitId,\n dateRange: { from: emVigor.from, to: emVigor.to },\n // A window that reaches today is \"what is on my plate now\", and the\n // most urgent part of that is last month's unpaid bill: without this, the\n // default month view hid every overdue line and people took them for lost.\n // A window entirely in the past or future is a deliberate look at that\n // period, and stays exactly that period.\n includeOverdue: windowReachesToday(emVigor.from, emVigor.to) || undefined,\n }), [direction, emVigor, search, effectiveUnitId])\n\n useEffect(() => {\n fetchInvoices(query)\n }, [query])\n\n // O mesmo motivo da tela de detalhe: uma conta lançada ou quitada pelo\n // assistente é uma escrita que esta lista não fez, e sem ouvir o sinal a\n // linha ficava \"pendente\" — ou a conta nova nem aparecia — até recarregar.\n // Refaz a MESMA fatia (`query`), para não trazer linhas que os filtros\n // excluem.\n useDataChanged({ table: T.invoiceBalances }, () => {\n void fetchInvoices(query)\n void fetchSummary()\n }, [query])\n\n // CONSOLIDAR: o previsto vira conta, e a lista relê.\n //\n // Auto-consolidar está DESLIGADO de propósito — `financial_recurring_run`\n // existe no banco e ninguém a chama. Enquanto a casa não decidir que quer a\n // rotina, quem manda é o clique: uma dívida que nasce sozinha é uma dívida\n // que ninguém conferiu.\n const [consolidating, setConsolidating] = useState<string | null>(null)\n const consolidar = useCallback((occurrenceId: string) => {\n if (!provider.consolidateOccurrence) return\n setConsolidating(occurrenceId)\n void provider.consolidateOccurrence(occurrenceId)\n .then((invoiceId) => {\n toast.success(t('financial.invoice.consolidated'))\n // A CONTA ACABOU DE NASCER: abre ELA.\n //\n // Ficar na lista depois de consolidar obriga a caçar a linha nova no\n // meio das outras — e é justamente o momento em que se quer conferir o\n // que foi gerado (as parcelas, os itens, o plano de contas). Sem id de\n // volta (ocorrência já consolidada por outra pessoa), a lista relê.\n // Acabou de nascer: está em aberto, e abre para editar.\n if (invoiceId && onEdit) onEdit(invoiceId, 'open')\n else void fetchInvoices(query)\n })\n .catch((err: unknown) => {\n toast.error(t('financial.invoice.consolidateFailed'), {\n description: describeError(err),\n })\n })\n .finally(() => setConsolidating(null))\n }, [provider, t, fetchInvoices, query, onEdit])\n\n const filtered = invoices.filter((inv) => inv.direction === direction)\n // The clip opens the receipts right from the list, like the V1 — no detour\n // through the bill.\n const [attachmentsOf, setAttachmentsOf] = useState<string | null>(null)\n const openAttachments = useCallback((invoiceId: string) => setAttachmentsOf(invoiceId), [])\n // CANCELADA SAIU DA LISTA E ENTROU NO FILTRO.\n //\n // Ela era o contrário das duas coisas: vinha na lista sem ninguém pedir — e\n // quem clicava em excluir via a linha continuar ali, concluía que a exclusão\n // falhou e criava a cópia ao lado — e não tinha pastilha, então não havia\n // como ir vê-las quando a pergunta era justamente \"o que foi cancelado?\".\n //\n // O padrão agora exclui (ver `getInvoices`); a pastilha é o caminho de volta.\n // O MESMO cadastro que o formulário oferece em \"Pagar a\": fornecedor,\n // profissional e cliente, na ordem que o sentido da conta pede.\n const contactLookup = useMemo(() => createFinancialCounterpartyLookup(direction), [direction])\n\n const tags = useMemo(\n // `provisioned` fora da barra: ele não é um recorte do que existe, é o\n // previsto que a lista já traz junto. Filtrar por estado pede ao banco\n // contas, e ocorrência não é conta.\n () => STATUS_OPTIONS.filter((o) => o.value !== 'provisioned').map((o) => ({ value: o.value, label: t(o.labelKey) })),\n [t],\n )\n\n // Summary totals from currently visible data\n // One total per currency: reais and euros on the same page are never added.\n const summaries = useMemo(() => {\n const byCode = new Map<string, { currency: FinancialCurrency; totalAmount: number; paidAmount: number; openAmount: number }>()\n for (const inv of filtered) {\n if (inv.status === 'cancelled') continue\n const cur = resolveCurrency(currency, inv.currency)\n const sum = byCode.get(cur.code) ?? { currency: cur, totalAmount: 0, paidAmount: 0, openAmount: 0 }\n sum.totalAmount += inv.totalAmount\n sum.paidAmount += inv.paidAmount\n sum.openAmount = sum.totalAmount - sum.paidAmount\n byCode.set(cur.code, sum)\n }\n return [...byCode.values()]\n }, [filtered])\n\n // --- Bulk: cancel the ticked invoices ------------------------------------\n // Cancelling goes row by row through the provider instead of the store action:\n // the store refetches and toasts on EVERY call, so ten invoices meant ten\n // round-trips and ten toasts. One pass, one refresh, one count.\n const [cancelTarget, setCancelTarget] = useState<Invoice[] | null>(null)\n const [cnabTarget, setCnabTarget] = useState<Invoice[] | null>(null)\n const closeBulkCancel = useCallback(() => setCancelTarget(null), [])\n\n // The same dialog as the invoice's own screen. Rows are installments, so two\n // ticked rows of one invoice are one thing to cancel.\n const cancelTargets = useMemo(() => {\n const byInvoice = new Map<string, { id: string; label: string; counterpartyName?: string; totalAmount: number }>()\n for (const inv of cancelTarget ?? []) {\n const id = inv.invoiceId ?? inv.id\n const seen = byInvoice.get(id)\n if (seen) { seen.totalAmount += inv.totalAmount; continue }\n byInvoice.set(id, {\n id,\n label: [inv.contactName, inv.itemsSummary].filter(Boolean).join(' · ') || inv.fiscalNumber || id,\n counterpartyName: inv.contactName,\n totalAmount: inv.totalAmount,\n })\n }\n return [...byInvoice.values()]\n }, [cancelTarget])\n\n const afterBulkCancel = useCallback(async () => {\n setCancelTarget(null)\n await Promise.all([fetchInvoices(query), fetchSummary()])\n }, [fetchInvoices, fetchSummary, query])\n\n // Row \"…\": the same cancel dialog as the bulk bar, for one row without ticking it.\n const rowMenu = useMemo(() => ({\n open: onEdit ? (row: Invoice) => onEdit(row.invoiceId ?? row.id, row.status) : undefined,\n cancel: canEdit ? (row: Invoice) => setCancelTarget([row]) : undefined,\n }), [onEdit, canEdit])\n const columns = useInvoiceColumns(currency, paymentMethods, paymentMethodTypes, bankAccounts, consolidar, consolidating, openAttachments, rowMenu)\n\n const exportSelected = useCallback((rows: Invoice[]) => {\n exportCSV(\n [\n { key: 'fiscalNumber', label: '#' },\n { key: 'dueDate', label: t('financial.invoice.columnDueDate') },\n { key: 'contactName', label: t('financial.invoice.columnDescription') },\n { key: 'itemsSummary', label: t('financial.invoiceForm.items') },\n { key: 'totalAmount', label: t('financial.invoice.columnAmount') },\n { key: 'paidAmount', label: t('financial.invoice.columnPaid') },\n { key: 'status', label: t('financial.invoice.columnStatus') },\n ],\n rows as unknown as Record<string, unknown>[],\n direction === 'debit' ? 'contas-a-pagar-selecionadas' : 'contas-a-receber-selecionadas',\n )\n }, [direction, t])\n\n const printSelected = useCallback((rows: Invoice[]) => {\n const safe = (value: unknown) => String(value ?? '').replace(/[&<>\"']/g, (character) => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' })[character] ?? character)\n const body = rows.map((row) => `<tr><td>${safe(row.dueDate)}</td><td>${safe(row.contactName)}<small>${safe(row.itemsSummary)}</small></td><td>${safe(formatCurrency(row.totalAmount, resolveCurrency(currency, row.currency)))}</td><td>${row.installmentNumber ?? 1}/${row.totalInstallments ?? 1}</td></tr>`).join('')\n const title = direction === 'debit' ? 'Contas a pagar' : 'Contas a receber'\n const popup = printDocument({\n title,\n css: 'body{font:12px sans-serif}table{width:100%;border-collapse:collapse}th,td{border-bottom:1px solid #ddd;padding:8px;text-align:left}small{display:block;color:#666;margin-top:2px}',\n body: `<h1>${title}</h1><table><thead><tr><th>Vencimento</th><th>Descrição / itens</th><th>Valor</th><th>Parcela</th></tr></thead><tbody>${body}</tbody></table>`,\n })\n if (!popup) { toast.error(t('financial.invoice.printBlocked')); return }\n popup.opener = null\n }, [currency, direction, t])\n\n const bulkActions = useMemo<RowBulkAction<Invoice>[]>(() => {\n const actions: RowBulkAction<Invoice>[] = [\n { id: 'print', label: t('financial.invoice.printSelected'), icon: Printer, desktopOnly: true, onSelect: printSelected },\n { id: 'export', label: t('financial.invoice.exportSelected'), icon: Download, desktopOnly: true, onSelect: exportSelected },\n ]\n if (!canEdit) return actions\n // The CNAB wizard writes the payee's bank data back (payee_accounts needs financial.edit).\n if (direction === 'debit') {\n actions.unshift({ id: 'cnab', label: t('financial.invoice.generateCnab'), icon: FileText, onSelect: (rows: Invoice[]) => setCnabTarget(rows.filter((row) => row.status !== 'paid' && row.status !== 'cancelled')) })\n }\n actions.push({\n id: 'cancel',\n label: t('financial.invoice.bulkCancel'),\n icon: Ban,\n destructive: true,\n onSelect: (rows) => {\n const targets = rows.filter((inv) => inv.status !== 'cancelled')\n if (targets.length === 0) {\n toast.error(t('financial.invoice.bulkCancelNone'))\n return\n }\n setCancelTarget(targets)\n },\n })\n return actions\n }, [canEdit, direction, exportSelected, printSelected, t])\n\n const receivedLabel = direction === 'debit' ? t('financial.invoice.summaryPaid') : t('financial.invoice.summaryReceived')\n const pendingLabel = direction === 'debit' ? t('financial.invoice.summaryPayable') : t('financial.invoice.summaryReceivable')\n\n // Exporta o que está na tela: as mesmas linhas que os filtros e a busca\n // deixaram passar, com os valores já formatados na moeda do app — uma planilha\n // que alguém abre para conferir com o contador, não um dump da tabela.\n const exportRows = () => {\n exportCSV(\n [\n { key: 'fiscalNumber', label: '#' },\n { key: 'dueDate', label: t('financial.invoice.columnDueDate') },\n { key: 'contactName', label: t('financial.invoice.columnDescription') },\n { key: 'totalAmount', label: t('financial.invoice.columnAmount'), format: (v) => formatCurrency(Number(v) || 0, currency) },\n { key: 'paidAmount', label: t('financial.invoice.columnPaid'), format: (v) => formatCurrency(Number(v) || 0, currency) },\n { key: 'status', label: t('financial.invoice.columnStatus'), format: (v) => {\n const opt = STATUS_OPTIONS.find((o) => o.value === v)\n return opt ? t(opt.labelKey) : String(v ?? '')\n } },\n { key: 'totalInstallments', label: t('financial.invoice.columnInst') },\n ],\n filtered as unknown as Record<string, unknown>[],\n direction === 'debit' ? 'contas-a-pagar' : 'contas-a-receber',\n )\n }\n\n // ── O PAINEL DE FILTROS É SEU PRÓPRIO CARTÃO, ACIMA DA LISTA ─────────────\n //\n // Espremidos na barra da tabela, os recortes cabiam em três pastilhas e o\n // resto sumia atrás de um funil — dois cliques para responder \"o que está\n // pendente?\", que é a pergunta que quem vive no financeiro faz o dia inteiro.\n //\n // A anatomia é a do V1 (e a da Conciliação, que já veio assim): um bloco de\n // campos rotulados ANTES das contas, duas fileiras, com o período aberto em\n // vez de escondido. A fileira de rótulos é o que diz, sem abrir nada, o que\n // esta lista sabe recortar.\n const clearFilters = () => {\n setAccountId('')\n setCostCenterId('')\n setUnitId('')\n setStatusFilter([])\n setContactId('')\n setContactName('')\n setFiscalNumber('')\n setBankAccountId('')\n }\n\n // As datas NÃO entram na conta: elas sempre existem (teto de 90 dias) e o\n // Limpar não pode devolver a lista ao estado que derruba a tela.\n const activeFilterCount =\n (accountId ? 1 : 0) + (costCenterId ? 1 : 0) + (unitId ? 1 : 0) +\n (statusFilter.length > 0 ? 1 : 0) + (contactId ? 1 : 0) + (fiscalNumber ? 1 : 0) +\n (bankAccountId ? 1 : 0)\n\n const unitField = unitFilter.visible ? (\n <RequiredFilter\n label={unitFilter.label}\n value={unitFilter.options.find((u) => u.id === unitFilter.value)?.name ?? unitFilter.allLabel}\n icon={Building2}\n className=\"h-9 w-full justify-start\"\n align=\"end\"\n >\n {(close: () => void) => (\n <ChoiceList\n options={unitFilter.options.map((u) => ({ value: u.id, label: u.name }))}\n value={unitFilter.value}\n onSelect={unitFilter.setValue}\n allLabel={unitFilter.allLabel}\n searchable\n searchPlaceholder={unitFilter.def?.searchPlaceholder}\n manage={unitFilter.def?.manage}\n onDone={close}\n />\n )}\n </RequiredFilter>\n ) : (locations.length > 1 ? (\n <RequiredFilter\n label={t('financial.invoice.filterUnit')}\n value={locations.find((u) => u.id === unitId)?.name ?? t('financial.invoice.filterAllUnits')}\n icon={Building2}\n className=\"h-9 w-full justify-start\"\n align=\"end\"\n >\n {(close: () => void) => (\n <ChoiceList\n options={locations.map((u) => ({ value: u.id, label: u.name }))}\n value={unitId || undefined}\n onSelect={(v) => setUnitId(v ?? '')}\n allLabel={t('financial.invoice.filterAllUnits')}\n searchable\n onDone={close}\n />\n )}\n </RequiredFilter>\n ) : null)\n\n // PAGO OU PENDENTE É A PERGUNTA DE TODO DIA, e ela não pode custar dois\n // cliques dentro de um funil, ao lado de plano de contas e centro de custo,\n // que se escolhe uma vez por mês.\n const statusField = (\n <RequiredFilter\n label={t('financial.invoice.filterShow')}\n value={\n statusFilter.length === 0\n ? t('financial.invoice.filterAllStatuses')\n : statusFilter.length === 1\n ? (tags.find((o) => o.value === statusFilter[0])?.label ?? '')\n : t('crud.list.selectedMany', { count: statusFilter.length })\n }\n icon={CircleDashed}\n className=\"h-9 w-full justify-start\"\n align=\"start\"\n >\n <div className=\"space-y-0.5\">\n <FilterMenuRow active={statusFilter.length === 0} onClick={() => setStatusFilter([])}>\n {t('financial.invoice.filterAllStatuses')}\n </FilterMenuRow>\n {tags.map((o) => {\n const on = statusFilter.includes(o.value as InvoiceStatus)\n return (\n <FilterMenuRow key={o.value} active={on}\n onClick={() => setStatusFilter(on ? statusFilter.filter((s) => s !== o.value) : [...statusFilter, o.value as InvoiceStatus])}\n >\n <span className=\"truncate\">{o.label}</span>\n </FilterMenuRow>\n )\n })}\n </div>\n </RequiredFilter>\n )\n\n // AS DUAS PONTAS ABERTAS. O V1 mostra dois campos de data e pronto; esconder\n // o intervalo atrás de \"Personalizado\" cobrava dois cliques antes do primeiro\n // dígito. Os atalhos continuam — embaixo, como atalho.\n const periodField = (\n <div className=\"space-y-1.5\">\n {/* `input` e não `chip`: no painel as duas datas são campos como os\n outros, e a pastilha miúda no meio de uma fileira de campos de 36px\n lia como enfeite, não como coisa em que se digita. */}\n <div className=\"flex items-center gap-1.5\">\n <DatePicker variant=\"input\" format=\"numeric\" className=\"w-full\" value={dateFrom} onChange={setFromClamped} />\n <span className=\"shrink-0 text-xs text-muted-foreground\">{t('financial.invoice.filterTo').toLowerCase()}</span>\n <DatePicker variant=\"input\" format=\"numeric\" className=\"w-full\" value={dateTo} onChange={setToClamped} />\n </div>\n <div className=\"flex flex-wrap items-center gap-1\">\n {DATE_PRESETS.map((preset) => (\n <Button variant=\"bare\" size=\"bare\"\n key={preset}\n type=\"button\"\n onClick={() => applyPreset(preset)}\n className={`font-normal rounded-full border px-2 py-0.5 text-[10px] transition-colors ${\n datePreset === preset\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-transparent bg-muted/60 text-muted-foreground hover:bg-muted'\n }`}\n >\n {t(`financial.invoice.filter${preset.charAt(0).toUpperCase()}${preset.slice(1)}`)}\n </Button>\n ))}\n <span className=\"ml-auto text-[10px] text-muted-foreground\">{t('financial.invoice.filterMaxRange')}</span>\n </div>\n </div>\n )\n\n const filtrosAvancados = (\n <>\n {postable.length > 0 && (\n <FilterPanelField label={t('financial.invoice.filterAccount')} compact>\n <SearchSelect\n value={accountId}\n displayValue={postable.find((a) => a.id === accountId) ? accountLabel(postable.find((a) => a.id === accountId)!) : ''}\n placeholder={t('financial.invoice.filterAllAccounts')}\n clearLabel={t('financial.invoice.filterAllAccounts')}\n noResultsLabel={t('financial.invoice.filterAllAccounts')}\n onChange={(id) => setAccountId(id)}\n onSearch={async (termo) => {\n const q = termo.trim().toLocaleLowerCase('pt-BR')\n return postable\n .filter((a) => !q || accountLabel(a).toLocaleLowerCase('pt-BR').includes(q))\n .slice(0, 50)\n .map((a) => ({ id: a.id, label: accountLabel(a) }))\n }}\n />\n </FilterPanelField>\n )}\n\n {costCenters.length > 0 && (\n <FilterPanelField label={t('financial.invoice.filterCostCenter')} compact>\n <SearchSelect\n value={costCenterId}\n displayValue={(() => {\n const c = costCenters.find((x) => x.id === costCenterId)\n return c ? `${c.code} - ${c.name}` : ''\n })()}\n placeholder={t('financial.invoice.filterAllCostCenters')}\n clearLabel={t('financial.invoice.filterAllCostCenters')}\n noResultsLabel={t('financial.invoice.filterAllCostCenters')}\n onChange={(id) => setCostCenterId(id)}\n onSearch={async (termo) => {\n const q = termo.trim().toLocaleLowerCase('pt-BR')\n return costCenters\n .filter((c) => !q || `${c.code} ${c.name}`.toLocaleLowerCase('pt-BR').includes(q))\n .slice(0, 50)\n .map((c) => ({ id: c.id, label: `${c.code} - ${c.name}` }))\n }}\n />\n </FilterPanelField>\n )}\n\n {bankAccounts.length > 0 && (\n <FilterPanelField compact label={direction === 'debit'\n ? t('financial.invoice.filterPaymentAccount')\n : t('financial.invoice.filterReceiptAccount')}>\n <SearchSelect\n value={bankAccountId}\n displayValue={bankAccounts.find((a) => a.id === bankAccountId)?.name ?? ''}\n placeholder={t('financial.invoice.filterAllBankAccounts')}\n clearLabel={t('financial.invoice.filterAllBankAccounts')}\n noResultsLabel={t('financial.invoice.filterAllBankAccounts')}\n onChange={(id) => setBankAccountId(id)}\n onSearch={async (termo) => {\n const q = termo.trim().toLocaleLowerCase('pt-BR')\n return bankAccounts\n .filter((a) => !q || `${a.name} ${a.bankName ?? ''}`.toLocaleLowerCase('pt-BR').includes(q))\n .slice(0, 50)\n .map((a) => ({ id: a.id, label: a.name, subtitle: a.bankName || a.accountNumber }))\n }}\n />\n </FilterPanelField>\n )}\n\n <FilterPanelField label={t('financial.invoice.filterFiscalNumber')}>\n <Input\n value={fiscalNumber}\n onChange={(e) => setFiscalNumber(e.target.value)}\n placeholder={t('financial.invoice.filterFiscalNumberPlaceholder')}\n className=\"h-9\"\n inputMode=\"numeric\"\n // Enter num campo de texto é buscar. Sem isso o único caminho é\n // tirar a mão do teclado para achar o botão.\n onKeyDown={(e) => { if (e.key === 'Enter') aplicarFiltros() }}\n />\n </FilterPanelField>\n </>\n )\n\n\n const filtersPanel = (\n <FilterPanel\n title={t('financial.invoice.filtersTitle')}\n dirty={filtrosPendentes}\n onApply={aplicarFiltros}\n applyLabel={t('financial.invoice.filterApply')}\n pendingTitle={t('financial.invoice.filterPending')}\n pendingHint={t('financial.invoice.filterPendingHint')}\n onClear={activeFilterCount > 0 ? clearFilters : undefined}\n clearLabel={t('financial.invoice.filterClear')}\n busy={invoicesLoading}\n advanced={filtrosAvancados}\n advancedCount={(accountId ? 1 : 0) + (costCenterId ? 1 : 0) + (bankAccountId ? 1 : 0) + (fiscalNumber ? 1 : 0)}\n moreLabel={t('financial.invoice.filterMore')}\n lessLabel={t('financial.invoice.filterLess')}\n >\n <FilterPanelField label={t('financial.invoice.filterPeriod')} className=\"sm:col-span-2\">\n {periodField}\n </FilterPanelField>\n\n <FilterPanelField label={t('financial.invoice.filterShow')}>{statusField}</FilterPanelField>\n\n {unitField && <FilterPanelField label={t('financial.invoice.filterUnit')}>{unitField}</FilterPanelField>}\n\n <FilterPanelField label={direction === 'debit' ? t('financial.invoice.payTo') : t('financial.invoice.receiveFrom')} compact>\n <SearchSelect\n value={contactId}\n displayValue={contactName}\n placeholder={t('financial.invoice.filterContactPlaceholder')}\n minChars={2}\n minCharsLabel=\"Digite pelo menos 2 caracteres para buscar.\"\n noResultsLabel=\"Nenhum cadastro encontrado.\"\n searchingLabel=\"Buscando cadastros...\"\n loadOnOpen={false}\n clearLabel={t('financial.invoice.filterAllContacts')}\n onChange={(id, option) => {\n setContactId(id)\n setContactName(option?.label ?? '')\n }}\n onSearch={async (termo) => {\n const results = await contactLookup.search(termo)\n return results.map((r) => ({ id: r.id, label: r.label, subtitle: r.subtitle, group: r.group, data: r }))\n }}\n />\n </FilterPanelField>\n\n </FilterPanel>\n )\n\n const newActions: PageActionItem[] = onNewGated\n ? [\n {\n id: 'manual',\n label: t('financial.invoice.newManual'),\n description: t('financial.invoice.newManualHint'),\n icon: FileText,\n intent: 'primary',\n // Duas portas, uma inserção: é o que decide a cara do FAB, já que\n // nem uma folha nem uma câmera se parecem com um mais.\n creates: true,\n onSelect: onNewGated,\n },\n ...(onNewReceiptGated\n ? [{\n id: 'receipt',\n // Same flow for payables and receivables: the photo is the request and\n // the assistant returns the form filled in.\n label: t(direction === 'debit' ? 'financial.quickTx.digitizeExpense' : 'financial.quickTx.digitizeReceipt'),\n description: t('financial.quickTx.receiptCapture'),\n icon: Camera,\n intent: 'secondary' as const,\n creates: true,\n // Fotografar É o pedido, e não mais o primeiro campo de um\n // formulário: o assistente lê o papel e devolve o cadastro\n // preenchido. Ver receipt-agent.ts.\n onSelect: () => startReceiptCapture({\n ask: t(direction === 'debit' ? 'financial.receipt.ask' : 'financial.receipt.askReceivable'),\n uploadLabel: t(direction === 'debit' ? 'financial.quickTx.digitizeExpense' : 'financial.quickTx.digitizeReceipt'),\n uploadHint: t('financial.quickTx.receiptCapture'),\n prompt: t(direction === 'debit' ? 'financial.receipt.prompt' : 'financial.receipt.promptReceivable'),\n direction: direction === 'debit' ? 'payable' : 'receivable',\n }),\n }]\n : []),\n ...(direction === 'debit'\n ? [{\n id: 'payroll',\n label: t('financial.invoice.importPayroll'),\n description: t('financial.invoice.importPayrollSoon'),\n icon: Users,\n intent: 'secondary' as const,\n // Importing a payroll inserts payables: without this the set is\n // no longer all-create and the FAB falls back to the neutral \"⋮\".\n creates: true,\n disabled: true,\n onSelect: () => {},\n }]\n : []),\n ]\n : []\n\n return (\n <div className=\"space-y-4\">\n {/* A ferramenta que abre o cadastro preenchido vale enquanto esta lista\n estiver na tela — fora dela o assistente não tem para onde abrir. */}\n {onNewGated && <ReceiptAgentSurface direction={direction === 'debit' ? 'payable' : 'receivable'} onOpenDraft={() => onNewGated()} />}\n {filtersPanel}\n {/* Sem título aqui: a barra de topo da shell já nomeia a tela, e repetir\n \"Contas a Pagar\" duas vezes é o que nenhuma outra lista faz. */}\n <ListView<Invoice>\n columns={columns}\n data={filtered}\n loading={invoicesLoading}\n searchPlaceholder={t('financial.invoice.searchPlaceholder')}\n search={search}\n onSearchChange={setSearch}\n searchDebounce={0}\n onExport={filtered.length > 0 ? exportRows : undefined}\n exportLabel={t('crud.export.action')}\n actions={newActions}\n bulkActions={bulkActions}\n // O título, não a parcela: a linha é uma parcela, o documento que se\n // abre é a conta inteira.\n onRowClick={(row) => { if (!row.isProvisionedOccurrence) onEdit?.(row.invoiceId ?? row.id, row.status) }}\n // A LINHA PREVISTA SE PARECE COM UMA PREVISÃO.\n //\n // Tracejada por cima e por baixo, e o texto um tom abaixo: ela divide a\n // lista com contas de verdade, e quem passa o olho precisa saber em\n // meio segundo o que já é dívida e o que ainda é plano. Sem cursor de\n // clique, porque não há fatura para abrir.\n rowClassName={(row) => (row.isProvisionedOccurrence\n ? 'border-dashed !cursor-default bg-muted/10 text-muted-foreground'\n : undefined)}\n emptyIcon={FileText}\n emptyMessage={t('financial.invoice.noInvoices')}\n emptyActionLabel={onNewGated ? t('financial.invoice.createFirst') : undefined}\n onEmptyAction={onNewGated}\n />\n {attachmentsOf && (\n <InvoiceAttachmentsModal\n invoiceId={attachmentsOf}\n onClose={() => setAttachmentsOf(null)}\n onChanged={() => { void fetchInvoices(query) }}\n />\n )}\n {filtered.length > 0 && !invoicesLoading && summaries.map((summary) => (\n <div key={summary.currency.code} className=\"flex flex-wrap items-center justify-end gap-x-6 gap-y-1 rounded-lg border bg-muted/30 px-5 py-3 text-sm\">\n {summaries.length > 1 && <span className=\"mr-auto text-xs font-medium text-muted-foreground\">{summary.currency.code}</span>}\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.summaryTotal')}</span>\n <span className=\"font-semibold\">{formatCurrency(summary.totalAmount, summary.currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{receivedLabel}</span>\n <span className=\"font-semibold text-success\">{formatCurrency(summary.paidAmount, summary.currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{pendingLabel}</span>\n <span className=\"font-semibold text-warning\">{formatCurrency(summary.openAmount, summary.currency)}</span>\n </div>\n </div>\n ))}\n\n {cancelTarget !== null && cancelTargets.length > 0 && (\n <CancelInvoicesDialog targets={cancelTargets} onClose={closeBulkCancel} onCancelled={() => void afterBulkCancel()} />\n )}\n {cnabTarget !== null ? <CnabRemittanceModal invoices={cnabTarget} bankAccounts={bankAccounts} provider={provider} onClose={() => setCnabTarget(null)} /> : null}\n </div>\n )\n}\n","type TFunc = (key: string, params?: Record<string, string | number>) => string\n\n// Maps a previous in-module view to the i18n key for its human label, used to\n// render a context-aware back link (\"Back to {where you came from}\") on detail\n// pages. Views not listed here (e.g. the edit/detail of the record we're\n// returning from, or unknown views) are not meaningful referrers — callers fall\n// back to the default parent label.\nconst REFERRER_LABEL_KEYS: Record<string, string> = {\n summary: 'financial.nav.summary',\n statements: 'financial.nav.statements',\n 'cash-registers': 'financial.nav.cashRegisters',\n reconciliation: 'financial.nav.reconciliation',\n commissions: 'financial.nav.commissions',\n cards: 'financial.nav.cards',\n 'receivables-list': 'financial.nav.receivables',\n 'payables-list': 'financial.nav.payables',\n}\n\n/** Human label for the page the user came from, or null when it isn't a meaningful referrer. */\nexport function referrerLabel(view: string | null | undefined, t: TFunc): string | null {\n if (!view) return null\n const key = REFERRER_LABEL_KEYS[view]\n return key ? t(key) : null\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport { invoiceOpensForEditing } from '@fayz-ai/financial/domain/invoice'\nimport { marcarItemParaAbrir } from './focusItem'\nimport type { ViewIntent } from './FinancialPage'\n\nexport function PayablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"debit\" focusReceipt={intent.receipt} fromCardId={intent.cardId} onSaved={(id) => onNavigate(id ? `payables-detail:${id}` : 'payables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"debit\" editId={intent.editId} onSaved={() => onNavigate(`payables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"debit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('payables-list') : () => onNavigate('payables-list')}\n onEdit={(itemIndex) => {\n // O lápis do item manda a linha por fora da URL — ver focusItem.\n if (itemIndex !== undefined && intent.editId) marcarItemParaAbrir(intent.editId, itemIndex)\n onNavigate(`payables-edit:${intent.editId}`)\n }}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"debit\"\n onNew={() => onNavigate('payables-new')}\n onNewReceipt={() => onNavigate('payables-new-receipt')}\n // Conta em aberto abre para EDITAR; paga ou cancelada abre em leitura.\n // Ver invoiceOpensForEditing.\n onEdit={(id, status) => onNavigate(`payables-${invoiceOpensForEditing(status) ? 'edit' : 'detail'}:${id}`)}\n />\n )\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport { invoiceOpensForEditing } from '@fayz-ai/financial/domain/invoice'\nimport { marcarItemParaAbrir } from './focusItem'\nimport type { ViewIntent } from './FinancialPage'\n\nexport function ReceivablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"credit\" focusReceipt={intent.receipt} onSaved={(id) => onNavigate(id ? `receivables-detail:${id}` : 'receivables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"credit\" editId={intent.editId} onSaved={() => onNavigate(`receivables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"credit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('receivables-list') : () => onNavigate('receivables-list')}\n onEdit={(itemIndex) => {\n // O lápis do item manda a linha por fora da URL — ver focusItem.\n if (itemIndex !== undefined && intent.editId) marcarItemParaAbrir(intent.editId, itemIndex)\n onNavigate(`receivables-edit:${intent.editId}`)\n }}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"credit\"\n onNew={() => onNavigate('receivables-new')}\n onNewReceipt={() => onNavigate('receivables-new-receipt')}\n // Conta em aberto abre para EDITAR; paga ou cancelada abre em leitura.\n // Ver invoiceOpensForEditing.\n onEdit={(id, status) => onNavigate(`receivables-${invoiceOpensForEditing(status) ? 'edit' : 'detail'}:${id}`)}\n />\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, ArrowRightLeft } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore } from '../context'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput, DatePicker, Button, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@fayz-ai/ui'\n\nexport function TransferModal({ onClose, onDone, defaultFromId }: {\n onClose: () => void\n onDone: () => void\n defaultFromId?: string\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const createTransfer = useFinancialStore((s) => s.createTransfer)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [fromAccountId, setFromAccountId] = useState(defaultFromId ?? '')\n const [toAccountId, setToAccountId] = useState('')\n const [amount, setAmount] = useState(0)\n const [date, setDate] = useState(new Date().toISOString().slice(0, 10))\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n fetchBankAccounts()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n const sameAccount = !!fromAccountId && fromAccountId === toAccountId\n const canSubmit = !!fromAccountId && !!toAccountId && !sameAccount && amount > 0 && !saving\n\n // Enter anywhere in the modal submits (unless typing in a textarea / Shift+Enter).\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'Enter' || e.shiftKey) return\n if ((e.target as HTMLElement).tagName === 'TEXTAREA') return\n e.preventDefault()\n if (canSubmit) void handleSubmit()\n }\n\n async function handleSubmit() {\n if (!canSubmit) return\n setSaving(true)\n try {\n await createTransfer({ fromAccountId, toAccountId, amount, date, notes: notes || undefined })\n setVisible(false)\n setTimeout(onDone, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{ opacity: visible ? 1 : 0, transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)' }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b\">\n <div className=\"flex items-center gap-2\">\n <ArrowRightLeft className=\"h-4 w-4 text-warning\" />\n <h3 className=\"text-base font-semibold\">{t('financial.transfer.title')}</h3>\n </div>\n <Button variant=\"bare\" size=\"bare\" onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.from')}</label>\n <Select value={fromAccountId} onValueChange={setFromAccountId}>\n <SelectTrigger className=\"mt-1\"><SelectValue placeholder={t('financial.transfer.selectAccount')} /></SelectTrigger>\n <SelectContent>\n {bankAccounts.map((a) => <SelectItem key={a.id} value={a.id}>{a.name}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.to')}</label>\n <Select value={toAccountId} onValueChange={setToAccountId}>\n <SelectTrigger className=\"mt-1\"><SelectValue placeholder={t('financial.transfer.selectAccount')} /></SelectTrigger>\n <SelectContent>\n {bankAccounts.map((a) => <SelectItem key={a.id} value={a.id}>{a.name}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {sameAccount && (\n <p className=\"text-xs text-destructive\">{t('financial.transfer.sameAccount')}</p>\n )}\n\n <div className=\"grid grid-cols-2 gap-3\">\n <CurrencyInput\n label={t('financial.transfer.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.date')}</label>\n <DatePicker value={date} onChange={setDate} className=\"mt-1\" />\n </div>\n </div>\n\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.notes')}</label>\n <Input\n type=\"text\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n placeholder={t('financial.transfer.optionalNotes')}\n className=\"mt-1\"\n />\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.transfer.cancel')}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleSubmit} disabled={!canSubmit}>\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.transfer.processing') : t('financial.transfer.submit')}\n </Button>\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n","import React, { useCallback, useEffect, useState, useMemo } from 'react'\nimport { Receipt, ArrowRightLeft, Building2, CheckCheck, Landmark, Download, Search } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, DatePicker, Button, Card, FilterMenuRow, FilterPanel, FilterPanelField, RequiredFilter, SearchSelect, Hint, PageHeaderActions, Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, Input } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider, useFinancialStore, formatCurrency } from '../context'\nimport { useTranslation, exportCSV } from '@fayz-ai/core'\nimport { PageActions, PersonLink, useUnitFilter, type PageAction } from '@fayz-ai/admin'\nimport type { BankAccount } from '@fayz-ai/financial/domain/account'\nimport type { StatementEntry } from '@fayz-ai/financial/domain/statement'\nimport { TransferModal } from '../components/TransferModal'\nimport { newestStatementEntriesFirst } from '@fayz-ai/financial/domain/statement'\n\nconst shortDate = (value: string) => {\n const [year, month, day] = value.split('-')\n return year && month && day ? `${day}/${month}/${year}` : value\n}\n\nconst ACCOUNT_GROUPS: Record<BankAccount['accountType'], string> = {\n person: 'Pessoas',\n unit: 'Unidades',\n bank: 'Contas bancárias',\n cash_physical: 'Caixas',\n cash_session: 'Caixas',\n card_receivable_credit: 'Cartões e recebíveis',\n card_receivable_debit: 'Cartões e recebíveis',\n card_payable: 'Cartões e recebíveis',\n unidentified: 'Outras contas',\n system: 'Contas do sistema',\n}\n\nconst financialAccountGroup = (kind: BankAccount['accountType']) => ACCOUNT_GROUPS[kind] ?? 'Outras contas'\n\n// Soft reconciliation marker for an extract row — a muted glyph with a hover\n// tooltip explaining what it means. Rendered only when the movement carries the\n// relevant state (reconciledAt / externalSource).\nfunction ReconcileMarker({ kind, label }: { kind: 'reconciled' | 'imported'; label: string }) {\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex shrink-0 cursor-default\">\n {kind === 'reconciled'\n ? <CheckCheck className=\"h-3 w-3 text-success/70\" />\n : <Landmark className=\"h-3 w-3 text-muted-foreground/40\" />}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\n// Reference to the internal transaction a reconciled bank line was matched to —\n// a small \"⇄ {ref}\" chip, clickable when the counterpart has an invoice to open.\nfunction ReconciledWithRef({ refLabel, tooltip, onOpen }: { refLabel: string; tooltip: string; onOpen?: () => void }) {\n const inner = (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] text-muted-foreground max-w-[160px]\">\n <ArrowRightLeft className=\"h-2.5 w-2.5 shrink-0\" />\n <span className=\"truncate\">{refLabel}</span>\n </span>\n )\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n {onOpen\n ? <Button variant=\"bare\" size=\"bare\" onClick={onOpen} className=\"font-normal hover:text-primary transition-colors\">{inner}</Button>\n : <span className=\"cursor-default\">{inner}</span>}\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{tooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\nexport function StatementsView({ onNavigate }: { onNavigate?: (view: string) => void }) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const statement = useFinancialStore((s) => s.statement)\n const statementLoading = useFinancialStore((s) => s.statementLoading)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n\n const [accountId, setAccountId] = useState('')\n const [selectedAccount, setSelectedAccount] = useState<BankAccount | null>(null)\n // 30 dias por padrão, 90 no teto — a mesma regra das contas: extrato sem\n // recorte de data varre o histórico inteiro, e o teto não é limpável.\n const MAX_RANGE_DAYS = 90\n const hojeIso = () => {\n const d = new Date()\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n }\n const defaultFrom = useMemo(() => {\n const d = new Date(); d.setDate(d.getDate() - 29)\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n }, [])\n const [dateFrom, setDateFrom] = useState(defaultFrom)\n const [dateTo, setDateTo] = useState(hojeIso)\n const spanDays = (from: string, to: string) =>\n Math.round((new Date(`${to}T00:00:00`).getTime() - new Date(`${from}T00:00:00`).getTime()) / 86_400_000) + 1\n const setFromClamped = (from: string) => {\n if (!from) return\n setDateFrom(from)\n if (dateTo && spanDays(from, dateTo) > MAX_RANGE_DAYS) {\n const d = new Date(`${from}T00:00:00`); d.setDate(d.getDate() + (MAX_RANGE_DAYS - 1))\n setDateTo(`${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`)\n }\n }\n const setToClamped = (to: string) => {\n if (!to) return\n setDateTo(to)\n if (dateFrom && spanDays(dateFrom, to) > MAX_RANGE_DAYS) {\n const d = new Date(`${to}T00:00:00`); d.setDate(d.getDate() - (MAX_RANGE_DAYS - 1))\n setDateFrom(`${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`)\n }\n }\n const [search, setSearch] = useState('')\n const [showTransfer, setShowTransfer] = useState(false)\n // OS TRÊS TIPOS DE OPERAÇÃO do V1 (créditos · débitos · transferências).\n // Recorte de CLIENTE: o extrato já está na mão, e esconder metade dele não\n // pede nada ao banco — por isso eles valem na hora, e não entram no rascunho\n // que o «Gerar» aplica. O rascunho guarda só o que custa uma consulta.\n const [verCreditos, setVerCreditos] = useState(true)\n const [verDebitos, setVerDebitos] = useState(true)\n const [verTransferencias, setVerTransferencias] = useState(true)\n\n const unidades = useUnitFilter()\n\n const [aplicado, setAplicado] = useState({ accountId: '', from: defaultFrom, to: hojeIso() })\n const filtrosPendentes = useMemo(\n () => JSON.stringify({ accountId, from: dateFrom, to: dateTo }) !== JSON.stringify(aplicado),\n [accountId, dateFrom, dateTo, aplicado],\n )\n const gerar = useCallback(() => {\n setAplicado({ accountId, from: dateFrom, to: dateTo })\n }, [accountId, dateFrom, dateTo])\n\n // A PRIMEIRA CONTA GERA SOZINHA. Sem conta a tela não tem extrato nenhum, e\n // cobrar um clique a mais para sair de uma tela vazia é pedágio.\n useEffect(() => {\n if (accountId && !aplicado.accountId) gerar()\n }, [accountId, aplicado.accountId, gerar])\n\n useEffect(() => { fetchPaymentMethods() }, [fetchPaymentMethods])\n\n // Resolve a human payment-method label for a movement (method → type → card brand).\n const methodName = useMemo(() => {\n const byId = new Map(paymentMethods.map((m) => [m.id, m.name]))\n const typeById = new Map(paymentMethodTypes.map((tp) => [tp.id, tp.name]))\n return (mov: StatementEntry['movement']): string => {\n if (mov.paymentMethodId && byId.has(mov.paymentMethodId)) return byId.get(mov.paymentMethodId)!\n if (mov.paymentMethodTypeId && typeById.has(mov.paymentMethodTypeId)) return typeById.get(mov.paymentMethodTypeId)!\n if (mov.cardBrand) return mov.cardBrand\n return '—'\n }\n }, [paymentMethods, paymentMethodTypes])\n\n // Open the linked invoice (receivable/payable detail) for a statement row.\n function openInvoice(e: StatementEntry) {\n if (!onNavigate || !e.movement.invoiceId) return\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n onNavigate(`${base}-detail:${e.movement.invoiceId}`)\n }\n\n useEffect(() => {\n if (aplicado.accountId) {\n fetchStatement({\n bankAccountId: aplicado.accountId,\n dateRange: { from: aplicado.from, to: aplicado.to },\n })\n }\n }, [aplicado])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const columns: ColumnDef<StatementEntry, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.statements.columnDate'),\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-xs\">{row.original.movement.paymentDate ?? row.original.movement.dueDate}</span>\n ),\n },\n {\n id: 'description', header: t('financial.statements.columnDescription'),\n cell: ({ row }) => {\n const e = row.original\n const isTransfer = e.entryKind !== 'movement'\n const memo = e.movement.notes\n const title = e.invoice?.contactName\n || (isTransfer ? t('financial.statements.transfer') : (memo || t('financial.statements.untitledEntry')))\n // Show the memo on its own line unless it's already serving as the title.\n const memoLine = memo && memo !== title ? memo : undefined\n const doc = e.invoice?.fiscalNumber\n const inst = e.movement.installmentNumber\n const canOpen = !!onNavigate && !!e.movement.invoiceId\n return (\n <div>\n <div className=\"flex items-center gap-1.5\">\n {/* Person name → hovercard with contact details (plain text when no contact) */}\n <PersonLink personId={e.invoice?.contactId} name={title} size=\"sm\" />\n {/* Document reference → opens the linked invoice */}\n {doc && (canOpen ? (\n <Button variant=\"bare\" size=\"bare\"\n onClick={() => openInvoice(e)}\n className=\"font-normal text-[10px] text-muted-foreground font-mono hover:text-primary hover:underline\"\n title={t('financial.statements.viewInvoice')}\n >\n {doc}\n </Button>\n ) : (\n <span className=\"text-[10px] text-muted-foreground font-mono\">{doc}</span>\n ))}\n {isTransfer && (\n <span className=\"text-[9px] uppercase tracking-wide px-1 py-px rounded bg-warning/15 text-warning font-semibold\">\n {t('financial.statements.transfer')}\n </span>\n )}\n {/* Soft reconciliation marker — optional, driven by what the plugin exposes:\n reconciledAt = matched/accepted (conciliado); externalSource = imported from a\n bank sync but not yet reconciled. Hover shows what it means. */}\n {e.movement.reconciledAt ? (\n <ReconcileMarker kind=\"reconciled\" label={t('financial.statements.reconciled')} />\n ) : e.movement.externalSource ? (\n <ReconcileMarker kind=\"imported\" label={t('financial.statements.imported')} />\n ) : null}\n {/* The transaction this bank line was conciliated with — link/id. */}\n {e.reconciledWith && (() => {\n const rw = e.reconciledWith\n const refLabel = rw.fiscalNumber || rw.contactName || rw.description || rw.movementId.slice(0, 8)\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n const onOpen = onNavigate && rw.invoiceId ? () => onNavigate(`${base}-detail:${rw.invoiceId}`) : undefined\n return (\n <ReconciledWithRef\n refLabel={refLabel}\n tooltip={t('financial.statements.reconciledWith', { ref: refLabel })}\n onOpen={onOpen}\n />\n )\n })()}\n </div>\n {memoLine && <p className=\"text-[11px] text-foreground/80\">{memoLine}</p>}\n <p className=\"text-[10px] text-muted-foreground\">\n <span className=\"capitalize\">\n {isTransfer && e.counterAccountName\n ? (e.entryKind === 'transfer-in' ? `← ${e.counterAccountName}` : `→ ${e.counterAccountName}`)\n : e.movement.movementKind}\n </span>\n {inst ? ` · ${t('financial.statements.installmentShort', { n: inst })}` : ''}\n </p>\n </div>\n )\n },\n },\n {\n id: 'method', header: t('financial.statements.columnMethod'),\n cell: ({ row }) => {\n const mov = row.original.movement\n const name = methodName(mov)\n return (\n <div>\n <p className=\"text-xs\">{name}</p>\n {mov.cardInstallments && mov.cardInstallments > 1 && (\n <p className=\"text-[10px] text-muted-foreground\">{mov.cardInstallments}x</p>\n )}\n </div>\n )\n },\n },\n {\n id: 'debit', header: t('financial.statements.columnDebit'),\n cell: ({ row }) => (\n <span className=\"text-right block text-destructive text-xs\">\n {row.original.movement.direction === 'debit' ? fmt(row.original.net) : ''}\n </span>\n ),\n },\n {\n id: 'credit', header: t('financial.statements.columnCredit'),\n cell: ({ row }) => {\n const e = row.original\n if (e.movement.direction !== 'credit') return <span className=\"block text-right\" />\n return (\n <div className=\"text-right\">\n <span className=\"block text-success text-xs\">{fmt(e.net)}</span>\n {e.fee > 0 && (\n <span className=\"block text-[10px] text-muted-foreground\">{fmt(e.gross)} − {fmt(e.fee)}</span>\n )}\n </div>\n )\n },\n },\n {\n id: 'fee', header: t('financial.statements.columnFee'),\n cell: ({ row }) => (\n <span className=\"text-right block text-warning text-xs\">\n {row.original.fee > 0 ? fmt(row.original.fee) : ''}\n </span>\n ),\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => (\n <span className=\"text-right block font-medium text-xs\">{fmt(row.original.runningBalance)}</span>\n ),\n },\n ], [currency, t, methodName, onNavigate])\n\n // A busca é local, sobre as linhas do período que já estão carregadas: o\n // extrato não é paginado no servidor, então filtrar aqui responde na tecla e\n // mantém o saldo corrente que veio do provider. Procura por quem (contato),\n // pelo que foi escrito (memo) e pelo documento.\n const entries = useMemo(() => {\n const all = aplicado.accountId ? (statement?.entries ?? []) : []\n const porTipo = all.filter((e) => {\n if (e.entryKind !== 'movement') return verTransferencias\n return e.movement.direction === 'credit' ? verCreditos : verDebitos\n })\n const term = search.trim().toLowerCase()\n const filtered = !term ? porTipo : porTipo.filter((e) => {\n const haystack = [e.invoice?.contactName, e.movement.notes, e.invoice?.fiscalNumber, methodName(e.movement)]\n return haystack.some((v) => v?.toLowerCase().includes(term))\n })\n return newestStatementEntriesFirst(filtered)\n }, [statement, search, methodName, aplicado.accountId, verCreditos, verDebitos, verTransferencias])\n\n // O extrato do período que está na tela, na mesma ordem e com os mesmos\n // valores — é o arquivo que se manda para a contabilidade.\n const exportEntries = () => {\n exportCSV(\n [\n { key: 'date', label: t('financial.statements.columnDate') },\n { key: 'description', label: t('financial.statements.columnDescription') },\n { key: 'method', label: t('financial.statements.columnMethod') },\n { key: 'debit', label: t('financial.statements.columnDebit') },\n { key: 'credit', label: t('financial.statements.columnCredit') },\n { key: 'balance', label: t('financial.statements.columnBalance') },\n ],\n entries.map((e) => ({\n date: e.movement.paymentDate ?? e.movement.dueDate,\n description: e.invoice?.contactName ?? e.movement.notes ?? '',\n method: methodName(e.movement),\n debit: e.movement.direction === 'debit' ? fmt(e.movement.amount) : '',\n credit: e.movement.direction === 'credit' ? fmt(e.movement.amount) : '',\n balance: fmt(e.runningBalance),\n })),\n 'extrato',\n )\n }\n\n // Declarada, não desenhada: PageActions é quem decide variante, tamanho e\n // ordem — e no celular leva a ação para o FAB, o mesmo lugar de toda lista.\n // À mão isto era um `size=\"sm\"` que não batia com o primário das outras telas.\n const headerActions: PageAction[] = React.useMemo(() => [{\n id: 'new-transfer',\n label: t('financial.statements.newTransfer'),\n icon: ArrowRightLeft,\n intent: 'primary',\n // Uma transferência é um lançamento novo — o FAB é um \"+\".\n creates: true,\n onSelect: () => setShowTransfer(true),\n }], [t])\n\n return (\n <div className=\"space-y-4\">\n {/* Mesma anatomia das outras listas (ListView / CrudListView): a ação vai\n para a direita da barra — a shell já nomeia a tela —, e os filtros\n DENTRO do card da tabela, na linha que fica colada nela. Rótulos\n empilhados em cima de cada campo faziam o extrato começar meia tela\n abaixo. */}\n <PageHeaderActions>\n <PageActions actions={headerActions} />\n </PageHeaderActions>\n\n {/* ── O painel de filtros, o MESMO das contas e da conciliação ──────── */}\n {/* O V1 monta esta tela como um formulário: conta, De, Até, unidade e os\n tipos de operação, e um «Gerar» no fim. Espremer isso na barra da\n tabela dava duas pastilhas e escondia os outros três recortes — e\n fazia o extrato recarregar a cada troca de data, que num extrato de\n mil linhas é a consulta mais cara da tela.\n\n Os TIPOS DE OPERAÇÃO ficam de fora do rascunho: eles recortam o que já\n está na mão e valem na hora. O rascunho guarda o que custa consulta. */}\n <FilterPanel\n title={t('financial.invoice.filtersTitle')}\n dirty={filtrosPendentes}\n onApply={gerar}\n applyLabel={t('financial.statements.generate')}\n pendingTitle={t('financial.invoice.filterPending')}\n pendingHint={t('financial.statements.filterPendingHint')}\n applyDisabledReason={accountId ? undefined : t('financial.statements.accountRequired')}\n busy={statementLoading}\n moreLabel={t('financial.invoice.filterMore')}\n lessLabel={t('financial.invoice.filterLess')}\n advancedCount={[verCreditos, verDebitos, verTransferencias].filter((v) => !v).length}\n advanced={\n <FilterPanelField label={t('financial.statements.operationTypes')} className=\"sm:col-span-2\">\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {([\n [t('financial.statements.opCredits'), verCreditos, setVerCreditos],\n [t('financial.statements.opDebits'), verDebitos, setVerDebitos],\n [t('financial.statements.opTransfers'), verTransferencias, setVerTransferencias],\n ] as const).map(([rotulo, ligado, alterna]) => (\n <Button variant=\"bare\" size=\"bare\"\n key={rotulo}\n type=\"button\"\n aria-pressed={ligado}\n onClick={() => alterna(!ligado)}\n className={`font-normal rounded-full border px-2.5 py-1 text-xs transition-colors ${\n ligado\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-input bg-muted/40 text-muted-foreground hover:bg-muted'\n }`}\n >\n {rotulo}\n </Button>\n ))}\n </div>\n </FilterPanelField>\n }\n >\n <FilterPanelField label={t('financial.statements.account')} required compact>\n <SearchSelect\n className=\"w-full\"\n value={accountId}\n displayValue={selectedAccount?.name ?? ''}\n icon={Landmark}\n placeholder=\"Digite...\"\n minChars={2}\n minCharsLabel=\"Digite pelo menos 2 caracteres para buscar.\"\n loadOnOpen={false}\n noResultsLabel=\"Nenhuma conta ou pessoa encontrada.\"\n searchingLabel=\"Buscando contas e pessoas...\"\n clearLabel=\"Limpar\"\n onChange={(id, option) => {\n setAccountId(id)\n setSelectedAccount((option?.data as BankAccount | undefined) ?? null)\n }}\n onSearch={async (query) => {\n const accounts = provider.searchFinancialAccounts\n ? await provider.searchFinancialAccounts(query, 20)\n : (await provider.getBankAccounts())\n .filter((account) => account.name.toLocaleLowerCase('pt-BR').includes(query.toLocaleLowerCase('pt-BR')))\n .slice(0, 20)\n // A unidade RECORTA A OFERTA, não a consulta: o extrato é de uma\n // conta, e a conta e que pertence a uma unidade. Filtrar depois\n // seria esconder linhas de uma conta que a pessoa escolheu.\n const naUnidade = unidades.value\n ? accounts.filter((a) => !a.unitId || a.unitId === unidades.value)\n : accounts\n return naUnidade.map((account) => ({\n id: account.id,\n label: account.name,\n subtitle: account.bankName || account.accountNumber,\n group: financialAccountGroup(account.accountType),\n data: account,\n }))\n }}\n />\n </FilterPanelField>\n\n {unidades.visible && (\n <FilterPanelField label={unidades.label}>\n <RequiredFilter\n label={unidades.label}\n value={unidades.options.find((u) => u.id === unidades.value)?.name ?? unidades.allLabel}\n icon={Building2}\n className=\"h-9 w-full justify-start\"\n align=\"start\"\n >\n {(close: () => void) => (\n <div className=\"max-h-72 space-y-0.5 overflow-y-auto\">\n <FilterMenuRow active={!unidades.value} onClick={() => { unidades.setValue(undefined); close() }}>\n <span className=\"truncate\">{unidades.allLabel}</span>\n </FilterMenuRow>\n {unidades.options.map((u) => (\n <FilterMenuRow key={u.id} active={unidades.value === u.id} onClick={() => { unidades.setValue(u.id); close() }}>\n <span className=\"truncate\">{u.name}</span>\n </FilterMenuRow>\n ))}\n </div>\n )}\n </RequiredFilter>\n </FilterPanelField>\n )}\n\n <FilterPanelField label={t('financial.invoice.filterFrom')}>\n <DatePicker variant=\"input\" format=\"numeric\" className=\"w-full\" value={dateFrom} onChange={setFromClamped} />\n </FilterPanelField>\n <FilterPanelField label={t('financial.invoice.filterTo')}>\n <DatePicker variant=\"input\" format=\"numeric\" className=\"w-full\" value={dateTo} onChange={setToClamped} />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">{t('financial.invoice.filterMaxRange')}</p>\n </FilterPanelField>\n </FilterPanel>\n\n {/* Summary header — standard bank-extract layout: opening → credits → debits → closing */}\n {aplicado.accountId && statement && (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-2\">\n <SummaryStat label={t('financial.statements.opening')} value={fmt(statement.openingBalance)} />\n <SummaryStat label={t('financial.statements.totalCredits')} value={fmt(statement.totalCredits)} positive />\n <SummaryStat label={t('financial.statements.totalDebits')} value={fmt(statement.totalDebits)} negative />\n <SummaryStat label={t('financial.statements.closing')} value={fmt(statement.closingBalance)} accent />\n </div>\n )}\n\n <Card className=\"overflow-hidden\">\n {/* Mesma barra das outras listas: busca à esquerda, e o que refina ou\n age sobre o resultado encostado à direita. */}\n <div className=\"flex flex-wrap items-center gap-2 border-b border-border px-3 py-2\">\n <div className=\"relative min-w-0 flex-1\">\n <Search className=\"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t('financial.statements.searchPlaceholder')}\n className=\"h-auto rounded-none border-0 bg-transparent py-1.5 pl-8 pr-3 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n </div>\n <div className=\"ml-auto flex flex-wrap items-center justify-end gap-2\">\n {entries.length > 0 && (\n // O mesmo utilitário da barra de toda lista (CrudListView): ghost\n // + `size=\"icon\"` + `fz-tap`. À mão era um quadrado de 32px, um\n // quarto desenho de botão de ícone e abaixo do piso do toque; e o\n // `title=` nativo não é anunciado por leitor de tela — Hint é.\n <Hint label={t('crud.export.action')}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"fz-tap shrink-0 text-muted-foreground\"\n aria-label={t('crud.export.action')}\n onClick={exportEntries}\n >\n <Download className=\"h-4 w-4\" />\n </Button>\n </Hint>\n )}\n </div>\n </div>\n <DataTable\n variant=\"bare\"\n compact\n columns={columns}\n data={statementLoading || !accountId ? [] : entries}\n loading={statementLoading}\n skeletonRows={statementLoading ? 8 : undefined}\n emptyMessage={\n <div className=\"flex flex-col items-center gap-1 py-6\">\n <Receipt className=\"mb-2 h-9 w-9 text-muted-foreground/40\" />\n <p className=\"text-base font-semibold text-foreground\">\n {accountId ? t('financial.statements.noTransactions') : t('financial.statements.selectToView')}\n </p>\n </div>\n }\n />\n </Card>\n\n {showTransfer && (\n <TransferModal\n defaultFromId={accountId || undefined}\n onClose={() => setShowTransfer(false)}\n onDone={() => setShowTransfer(false)}\n />\n )}\n </div>\n )\n}\n\nfunction SummaryStat({ label, value, accent, positive, negative }: {\n label: string\n value: string\n accent?: boolean\n positive?: boolean\n negative?: boolean\n}) {\n const valueClass = positive ? 'text-success' : negative ? 'text-destructive' : accent ? 'text-foreground' : 'text-foreground'\n return (\n <div className={`rounded-lg border px-3 py-2 ${accent ? 'bg-muted/40' : 'bg-card'}`}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase truncate\">{label}</p>\n <p className={`text-sm font-semibold mt-0.5 ${valueClass}`}>{value}</p>\n </div>\n )\n}\n","import React from 'react'\nimport { Users, Play, Loader2, Settings, Check, Receipt, ArrowRight } from 'lucide-react'\nimport { SubpageHeader, Button, DateRangeControl, Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, DataTable } from '@fayz-ai/ui'\nimport { PageActions, type PageAction } from '@fayz-ai/admin'\nimport { useTranslation, formatCurrency, navigateApp, appHref } from '@fayz-ai/core'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider } from '../context'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { CommissionEntry, CommissionGeneration } from '@fayz-ai/financial/domain/commission'\n\n// ---------------------------------------------------------------------------\n// Comissões apuradas.\n//\n// A tela anterior era um quadro tracejado dizendo que a apuração não existia —\n// e estava certa: `commission-rules` era um cadastro que nada lia. Agora existe\n// (009), e a tela mostra o que ela produziu.\n//\n// O QUE ELA MOSTRA, e por que nesta ordem: primeiro o TOTAL por pessoa, porque\n// é o que se paga; depois cada lançamento com a VENDA que o originou, porque é\n// o que se confere quando alguém pergunta \"por que veio isso\". A segunda\n// pergunta é a que uma tela de comissão precisa responder e quase nenhuma\n// responde.\n//\n// Reapurar é um botão, e não um susto: a apuração recalcula o que está\n// pendente e não duplica (a chave é linha + pessoa + função). Quem já foi pago\n// não se mexe.\n// ---------------------------------------------------------------------------\n\nfunction firstOfMonth() {\n const d = new Date(); d.setDate(1)\n return d.toISOString().slice(0, 10)\n}\nfunction today() {\n return new Date().toISOString().slice(0, 10)\n}\nfunction money(v: number) {\n return formatCurrency(v, 'BRL')\n}\n\n/** Um passo do caminho, com o estado dito em palavra e não só em cor. */\nconst head = (label: string) => <span className=\"text-xs font-semibold uppercase tracking-wide\">{label}</span>\nconst CELL = 'px-4 py-2'\nconst MUTED = `${CELL} text-muted-foreground`\nconst NUM = `${CELL} text-right tabular-nums`\n\nconst COMMISSION_COLUMNS: ColumnDef<CommissionEntry>[] = [\n { id: 'person', header: () => head('Profissional'), cell: ({ row }) => row.original.personName ?? '—', meta: { className: CELL } },\n { id: 'item', header: () => head('Item'), cell: ({ row }) => row.original.itemName ?? '—', meta: { className: MUTED } },\n { id: 'invoice', header: () => head('Fatura'), cell: ({ row }) => row.original.invoiceNumber ?? '—', meta: { className: MUTED } },\n { id: 'rule', header: () => head('Regra'), cell: ({ row }) => row.original.ruleName ?? '—', meta: { className: MUTED } },\n { id: 'base', header: () => head('Base'), cell: ({ row }) => money(row.original.baseAmount), meta: { className: `${NUM} text-muted-foreground` } },\n { id: 'rate', header: () => head('%'), cell: ({ row }) => row.original.rate, meta: { className: `${NUM} text-muted-foreground` } },\n { id: 'amount', header: () => head('Valor'), cell: ({ row }) => money(row.original.amount), meta: { className: `${NUM} font-semibold` } },\n]\n\nfunction Step({ n, label, done, state }: {\n n: number; label: string; done: boolean; state: 'done' | 'next' | 'todo'\n}) {\n return (\n <span className={`inline-flex items-center gap-1.5 text-xs ${\n state === 'done' ? 'text-foreground' : state === 'next' ? 'text-primary font-medium' : 'text-muted-foreground'\n }`}>\n <span className={`inline-flex h-5 w-5 items-center justify-center rounded-full text-[10px] font-semibold ${\n done ? 'bg-success/15 text-success' : state === 'next' ? 'bg-primary/15 text-primary' : 'bg-muted text-muted-foreground'\n }`}>\n {done ? <Check className=\"h-3 w-3\" aria-hidden /> : n}\n </span>\n {label}\n </span>\n )\n}\n\nexport function CommissionsView() {\n const t = useTranslation()\n const { labels } = useFinancialConfig()\n const commissions = useFinancialStore((s) => s.commissions)\n const loading = useFinancialStore((s) => s.commissionsLoading)\n const fetchCommissions = useFinancialStore((s) => s.fetchCommissions)\n const generateCommissions = useFinancialStore((s) => s.generateCommissions)\n const provider = useFinancialProvider()\n\n // O MESMO controle de período de todo o produto (DateRangeControl): presets,\n // a janela resolvida escrita ao lado e a trava de início depois do fim. Eram\n // dois `<input type=date>` crus — sem preset nenhum, então \"este mês\" era\n // duas digitações — e o terceiro desenho de filtro de data do app.\n const [from, setFrom] = React.useState(firstOfMonth())\n const [to, setTo] = React.useState(today())\n const [preset, setPreset] = React.useState<'this_month' | 'custom'>('this_month')\n const [running, setRunning] = React.useState(false)\n const [lastRun, setLastRun] = React.useState<string | null>(null)\n const [generation, setGeneration] = React.useState<CommissionGeneration | null>(null)\n const [busy, setBusy] = React.useState<'approve' | 'payrun' | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n\n // O LOTE do período, que é o que aprovar e o borderô exigem. Sem ele os dois\n // passos seguintes não têm em que pegar, e era por isso que a tela parava no\n // primeiro.\n const loadGeneration = React.useCallback(async () => {\n try {\n const gens = (await provider.getCommissionGenerations?.()) ?? []\n const doPeriodo = gens.filter((g) => g.periodStart === from && g.periodEnd === to)\n // O lote que DONO dos lançamentos, não o mais recente. Antes da 023 uma\n // reapuração criava um lote vazio com cabeçalho cheio, e pegar o mais\n // novo era pegar justamente o que não tinha lançamento nenhum — aprovar\n // não fazia nada e o borderô saía zerado, sem erro.\n setGeneration(doPeriodo.find((g) => g.entries > 0) ?? doPeriodo[0] ?? null)\n } catch { /* a tela funciona sem o lote; só não oferece os passos seguintes */ }\n }, [provider, from, to])\n\n React.useEffect(() => {\n void fetchCommissions({ periodStart: from, periodEnd: to })\n void loadGeneration()\n }, [fetchCommissions, loadGeneration, from, to])\n\n // Por pessoa, que é a unidade em que se paga.\n const byPerson = React.useMemo(() => {\n const map = new Map<string, { name: string; total: number; count: number }>()\n for (const c of commissions) {\n const key = c.personId\n const cur = map.get(key) ?? { name: c.personName ?? 'Sem nome', total: 0, count: 0 }\n cur.total += c.amount\n cur.count += 1\n map.set(key, cur)\n }\n return [...map.entries()].sort((a, b) => b[1].total - a[1].total)\n }, [commissions])\n\n const total = commissions.reduce((s, c) => s + c.amount, 0)\n\n async function run() {\n setRunning(true)\n setError(null)\n try {\n const r = await generateCommissions({ periodStart: from, periodEnd: to })\n setLastRun(r ? `${r.entries} lançamento(s) · ${money(r.total)}` : null)\n await loadGeneration()\n } catch (e: any) {\n setError(e?.message ?? String(e))\n } finally {\n setRunning(false)\n }\n }\n\n async function approve() {\n if (!generation) return\n setBusy('approve'); setError(null)\n try {\n const r = await provider.approveCommissions?.(generation.id)\n setLastRun(`${r?.approved ?? 0} lançamento(s) aprovado(s)`)\n await Promise.all([loadGeneration(), fetchCommissions({ periodStart: from, periodEnd: to })])\n } catch (e: any) {\n setError(e?.message ?? String(e))\n } finally { setBusy(null) }\n }\n\n async function payRun() {\n if (!generation) return\n setBusy('payrun'); setError(null)\n try {\n const r = await provider.payRunCommissions?.(generation.id)\n setLastRun(`${r?.payables ?? 0} conta(s) a pagar · ${money(r?.total ?? 0)}`)\n await Promise.all([loadGeneration(), fetchCommissions({ periodStart: from, periodEnd: to })])\n } catch (e: any) {\n setError(e?.message ?? String(e))\n } finally { setBusy(null) }\n }\n\n // `utility`, não primário: ir às regras não é a coisa pela qual se abre a\n // apuração — é cromo, ao lado dela. PageActions já dá o ícone-fantasma com a\n // dica ANUNCIADA (Hint), o que aqui era um TooltipProvider inteiro à mão.\n const headerActions: PageAction[] = React.useMemo(() => [{\n id: 'commission-rules',\n label: 'Configurar regras de comissão',\n icon: Settings,\n intent: 'utility',\n onSelect: () => { navigateApp('/settings/financial-commissions') },\n }], [])\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={labels.commissions}\n subtitle={t('financial.commissions.subtitle')}\n // Quem olha a apuração e estranha um valor quer ver a REGRA que o\n // produziu, e ela mora em Configurações — longe daqui, e sem nada nesta\n // tela dizendo por onde se vai. O caminho de volta é o que faltava\n // entre o resultado e a política que o gerou.\n actions={<PageActions actions={headerActions} />}\n />\n\n <div className=\"flex flex-wrap items-center gap-3 rounded-2xl border border-border bg-card px-4 py-3\">\n <DateRangeControl\n value={{ from, to }}\n onChange={(r) => { setFrom(r.from); setTo(r.to) }}\n preset={preset}\n onPresetChange={(p) => setPreset(p as 'this_month' | 'custom')}\n />\n <Button type=\"button\" onClick={() => void run()} disabled={running}>\n {running ? <Loader2 className=\"h-4 w-4 animate-spin\" aria-hidden /> : <Play className=\"h-4 w-4\" aria-hidden />}\n Apurar período\n </Button>\n {lastRun && <span className=\"text-xs text-muted-foreground\">{lastRun}</span>}\n <div className=\"ml-auto text-right\">\n <p className=\"text-xs text-muted-foreground\">Total do período</p>\n <p className=\"text-lg font-semibold tabular-nums\">{money(total)}</p>\n </div>\n </div>\n\n {/* ── Do apurado até o dinheiro sair ───────────────────────────────────\n São TRÊS decisões, não uma, e a tela mostra em qual delas o lote está.\n \"Apurar não é autorizar\": quem confere pode não ser quem manda pagar,\n e o borderô só recolhe o que foi aprovado.\n\n Antes disto a tela parava no primeiro passo — apurava, mostrava os\n valores, e não havia nada que os transformasse em conta a pagar.\n Aprovar e o borderô existiam no banco (012) sem porta nenhuma. */}\n {generation && (\n <div className=\"rounded-2xl border border-border bg-card px-4 py-3\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Step n={1} label=\"Apurado\" done state=\"done\" />\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/50\" aria-hidden />\n <Step n={2} label=\"Aprovado\" done={generation.status !== 'draft'}\n state={generation.status === 'draft' ? 'next' : 'done'} />\n <ArrowRight className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground/50\" aria-hidden />\n <Step n={3} label=\"Conta a pagar gerada\" done={generation.status === 'paid'}\n state={generation.status === 'approved' ? 'next' : generation.status === 'paid' ? 'done' : 'todo'} />\n\n <div className=\"ml-auto flex items-center gap-2\">\n {generation.status === 'draft' && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => void approve()} disabled={busy !== null}>\n {busy === 'approve' ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" aria-hidden /> : <Check className=\"h-3.5 w-3.5\" aria-hidden />}\n Aprovar lançamentos\n </Button>\n )}\n {generation.status === 'approved' && (\n <Button type=\"button\" size=\"sm\" onClick={() => void payRun()} disabled={busy !== null}>\n {busy === 'payrun' ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" aria-hidden /> : <Receipt className=\"h-3.5 w-3.5\" aria-hidden />}\n Gerar contas a pagar\n </Button>\n )}\n {generation.status === 'paid' && (\n <Button asChild variant=\"outline\" size=\"sm\">\n <a href={appHref('/financial/payables/list')}>\n <Receipt className=\"h-3.5 w-3.5\" aria-hidden /> Ver em Contas a Pagar\n </a>\n </Button>\n )}\n </div>\n </div>\n\n <p className=\"mt-2 text-[11px] text-muted-foreground\">\n {generation.status === 'draft'\n ? 'Apurar não é autorizar: o borderô só recolhe o que estiver aprovado.'\n : generation.status === 'approved'\n ? 'O borderô junta o aprovado por pessoa e levanta UMA conta a pagar para cada.'\n : 'As comissões viraram conta a pagar — vivem onde vive o aluguel: extrato e DRE.'}\n </p>\n </div>\n )}\n\n {error && (\n <div className=\"rounded-card border border-destructive/30 bg-destructive/5 px-4 py-3 text-xs text-destructive\">\n {error}\n </div>\n )}\n\n {loading && commissions.length === 0 ? (\n <p className=\"py-8 text-center text-sm text-muted-foreground\">Carregando…</p>\n ) : commissions.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center rounded-2xl border-2 border-dashed border-muted px-6 py-12 text-center\">\n <div className=\"mb-3 flex h-12 w-12 items-center justify-center rounded-xl bg-muted text-muted-foreground\">\n <Users className=\"h-6 w-6\" />\n </div>\n <p className=\"text-sm font-medium\">Nada apurado neste período</p>\n {/* O motivo mais comum, dito antes de a pessoa procurar: a apuração\n precisa saber QUEM executou cada linha. */}\n <p className=\"mt-1 max-w-md text-xs text-muted-foreground\">\n A apuração precisa de uma regra ativa e de saber quem executou cada item do atendimento.\n Sem participante na linha, não há a quem pagar.\n </p>\n {/* Nomear o pré-requisito sem dizer ONDE resolvê-lo é mandar procurar:\n a tela de regras vive nas Propriedades do Financeiro, três cliques\n longe de quem está olhando esta mensagem. */}\n <a\n href={appHref('/settings/financial/_properties/commission-rules')}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-button border border-input px-3 py-1.5 text-xs font-medium hover:bg-muted\"\n >\n Cadastrar regra de comissão\n </a>\n </div>\n ) : (\n <>\n {/* Quem recebe o quê — a resposta da folha. */}\n <div className=\"rounded-2xl border border-border bg-card\">\n <p className=\"border-b border-border px-4 py-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Por profissional\n </p>\n <ul>\n {byPerson.map(([id, p]) => (\n <li key={id} className=\"flex items-center justify-between border-b border-border px-4 py-2.5 last:border-0\">\n <span className=\"text-sm font-medium\">{p.name}</span>\n <span className=\"flex items-center gap-3\">\n <span className=\"text-xs text-muted-foreground\">{p.count} lançamento(s)</span>\n <span className=\"text-sm font-semibold tabular-nums\">{money(p.total)}</span>\n </span>\n </li>\n ))}\n </ul>\n </div>\n\n {/* Cada centavo até a venda que o originou. */}\n <div className=\"overflow-x-auto rounded-2xl border border-border bg-card\">\n <DataTable variant=\"bare\" columns={COMMISSION_COLUMNS} data={commissions} />\n </div>\n </>\n )}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { CreditCard, Plus, CalendarClock, Wallet, Receipt, Landmark } from 'lucide-react'\nimport type { CardReceivable } from '@fayz-ai/financial/domain/card'\nimport { useFinancialProvider, useFinancialConfig, useFinancialStore, formatCurrency } from '../context'\nimport { Button, SubpageHeader, Skeleton, StatTiles, PageTabs, DataTable, Card } from '@fayz-ai/ui'\nimport { TeachMeLink, GetStarted } from '@fayz-ai/admin'\nimport { PermissionGate } from '@fayz-ai/admin'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { BankAccount } from '@fayz-ai/financial/domain/account'\n\n// ---------------------------------------------------------------------------\n// Per-card money math. Credit-card balances are stored as debt (negative), so\n// the current bill (fatura) is the magnitude owed; the available limit is what\n// remains of the credit line.\n// ---------------------------------------------------------------------------\n\nfunction cardMath(acc: BankAccount) {\n const limit = Number(acc.creditLimit) || 0\n // `plg_financial_accounts` (a canônica) NÃO tem `current_balance` — o saldo\n // vive em `v_financial_account_balances`. Sem o coalesce, `-undefined` é NaN e\n // a tela imprime \"R$ NaN\" em cima de um cartão recém-cadastrado.\n const used = Math.max(0, -(Number(acc.currentBalance) || 0))\n const available = Math.max(0, limit - used)\n const pct = limit > 0 ? Math.min(100, (used / limit) * 100) : 0\n return { limit, used, available, pct }\n}\n\n// A espera tem a FORMA do que vai chegar: a faixa de resumo, as abas e três\n// mosaicos com a tarja colorida em cima. Um \"Carregando…\" centralizado não diz\n// nada e some dando um salto — o conteúdo nasce noutro lugar da tela, e quem já\n// tinha mirado o primeiro cartão perde a mira.\n//\n// Três é o que o grid mostra numa linha em telas largas; mais do que isso\n// prometeria uma segunda fileira que talvez não exista.\nfunction CardsSkeleton() {\n return (\n <div className=\"space-y-4\" aria-hidden=\"true\">\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"rounded-card border bg-card p-4 shadow-sm\">\n <Skeleton className=\"h-3 w-24\" />\n <Skeleton className=\"mt-2 h-7 w-28\" />\n </div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"overflow-hidden rounded-2xl border bg-card shadow-sm\">\n {/* A tarja é o que identifica o cartão de longe; sem ela o esqueleto\n vira uma lista e o salto para o mosaico colorido é grande. */}\n <div className=\"bg-muted px-4 py-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-2\">\n <Skeleton className=\"h-5 w-5 rounded bg-muted-foreground/15\" />\n <Skeleton className=\"h-4 w-28 bg-muted-foreground/15\" />\n </div>\n <Skeleton className=\"h-3 w-14 bg-muted-foreground/15\" />\n </div>\n <div className=\"mt-4\">\n <Skeleton className=\"h-3 w-20 bg-muted-foreground/15\" />\n <Skeleton className=\"mt-1.5 h-7 w-32 bg-muted-foreground/15\" />\n </div>\n </div>\n\n <div className=\"space-y-3 px-4 py-3\">\n <div>\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-3 w-24\" />\n <Skeleton className=\"h-3 w-16\" />\n </div>\n <Skeleton className=\"mt-1 h-2 w-full rounded-full\" />\n </div>\n <div className=\"flex items-center justify-between\">\n <div>\n <Skeleton className=\"h-3 w-24\" />\n <Skeleton className=\"mt-1 h-4 w-20\" />\n </div>\n <Skeleton className=\"h-3 w-24\" />\n </div>\n <Skeleton className=\"h-8 w-full rounded-input\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport function CardsView({ onNavigate }: { onNavigate?: (view: string) => void }) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const bankAccountsLoading = useFinancialStore((s) => s.bankAccountsLoading)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [tab, setTab] = useState<'open' | 'closed' | 'receivables'>('open')\n // A previsão de recebimento: o que a maquininha ainda deve, quando cai e\n // quanto ela retém. O V1 deixou esta tela como \"em desenvolvimento\" — o dado\n // existe desde o primeiro pagamento em cartão e ninguém o lia.\n const provider = useFinancialProvider()\n const [receivables, setReceivables] = useState<CardReceivable[]>([])\n useEffect(() => {\n if (tab !== 'receivables') return\n void provider.getCardReceivables().then(setReceivables).catch(() => setReceivables([]))\n }, [tab, provider])\n\n useEffect(() => { fetchBankAccounts() }, [])\n\n const cards = useMemo(\n () => bankAccounts.filter((a) => a.accountType === 'card_payable'),\n [bankAccounts],\n )\n const openCards = useMemo(() => cards.filter((c) => c.isActive), [cards])\n const closedCards = useMemo(() => cards.filter((c) => !c.isActive), [cards])\n const visibleCards = tab === 'open' ? openCards : closedCards\n\n // Summary strip is computed over the active (open) cards — the money that is\n // actually in play this cycle.\n const summary = useMemo(() => {\n let totalAvailable = 0\n let totalBills = 0\n for (const c of openCards) {\n const { available, used } = cardMath(c)\n totalAvailable += available\n totalBills += used\n }\n return { totalAvailable, totalBills }\n }, [openCards])\n\n // Vai para o cadastro de contas a pagar — o único caminho de cadastro que\n // existe. Era uma folha de lançamento rápido aqui mesmo, com o cartão já\n // escolhido; a folha saiu (fazia com menos campos o que o cadastro faz) e com\n // ela essa pré-seleção. A conta ainda se escolhe na parcela.\n // A despesa nasce JÁ apontando para o cartão de onde a pessoa saiu. Antes o\n // id era descartado e o formulário abria em branco: quem tem quatro cartões\n // escolhia de novo, de memória, e conciliava contra o errado de vez em quando.\n function openAddExpense(cardId: string) {\n onNavigate?.(`payables-new:${cardId}`)\n }\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.cards.title')} subtitle={t('financial.cards.subtitle')} />\n\n {bankAccountsLoading && cards.length === 0 ? (\n <CardsSkeleton />\n ) : cards.length === 0 ? (\n // O vazio dizia o que falta e não dizia onde se resolve. Cartão é um\n // tipo de conta: quem chegou aqui não tem por que saber disso.\n <div className=\"rounded-2xl border-2 border-dashed border-muted\">\n <GetStarted\n heading={t('financial.cards.noCards')}\n because={t('financial.cards.noCardsHint')}\n steps={[\n {\n label: t('financial.cards.empty.step'),\n where: t('financial.cards.empty.stepWhere'),\n },\n ]}\n />\n </div>\n ) : (\n <>\n {/* PageTabs, e não um grupo de pílulas solto no corpo.\n Duas direções na mesma tela: o cartão que a casa PAGA e o que a\n maquininha ainda deve. O V1 separava, e deixava a segunda como\n \"em desenvolvimento\". */}\n <PageTabs<typeof tab>\n aria-label={t('financial.cards.title')}\n value={tab}\n onChange={setTab}\n tabs={[\n { value: 'open', label: t('financial.cards.tabOpen'), icon: CreditCard, count: openCards.length },\n ...(closedCards.length > 0\n ? [{ value: 'closed' as const, label: t('financial.cards.tabClosed'), count: closedCards.length }]\n : []),\n { value: 'receivables', label: 'A receber', icon: Landmark },\n ]}\n />\n\n {/* A linha de resumo do kit, e não um grid próprio: toda lista do\n produto abre com a MESMA fileira, e a quinta cópia daquele markup\n é onde os espaçamentos começam a discordar. */}\n <StatTiles\n tiles={[\n {\n id: 'available',\n label: t('financial.cards.availableLimit'),\n icon: Wallet,\n value: formatCurrency(summary.totalAvailable, currency),\n },\n {\n id: 'bills',\n label: t('financial.cards.allBillsValue'),\n icon: Receipt,\n value: formatCurrency(summary.totalBills, currency),\n },\n ]}\n />\n\n {tab === 'receivables' ? (\n <CardReceivablesTable rows={receivables} currency={currency} />\n ) : (\n /* Card tiles — stacked on mobile, grid on desktop */\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {visibleCards.map((card) => {\n const { limit, used, available, pct } = cardMath(card)\n const over = pct >= 90\n // A cor CADASTRADA manda (028). O palpite pelo nome continua\n // atrás dela para os cartões antigos, que nunca escolheram uma —\n // mas duas fontes para o mesmo fato divergem: um cartão chamado\n // \"Cartão da Loja\" pintado de roxo saía roxo no formulário de\n // despesa e índigo aqui, e é o mesmo cartão.\n // A cor CADASTRADA e só ela.\n //\n // Havia uma tabela de degradês adivinhados pelo NOME do cartão —\n // «ita» saía laranja, «nubank» roxo. Errava (um cartão chamado\n // «Itaú da loja» num banco qualquer saía laranja), e era o único\n // degradê do produto inteiro: no meio de telas planas o mosaico\n // lia como outro aplicativo. Sem cor cadastrada o cartão usa a\n // superfície neutra, como qualquer outro cabeçalho da casa.\n const own = card.color || undefined\n return (\n <div key={card.id} className=\"overflow-hidden rounded-card border bg-card shadow-sm\">\n <div\n className={`px-4 py-4 ${own ? 'text-white' : 'bg-muted text-foreground'}`}\n style={own ? { backgroundColor: own } : undefined}\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-2\">\n <CreditCard className=\"h-5 w-5\" />\n <span className=\"text-sm font-semibold\">{card.name}</span>\n </div>\n {card.bankName && (\n <span className=\"text-[11px] font-medium uppercase tracking-wide opacity-80\">\n {card.bankName}\n </span>\n )}\n </div>\n <div className=\"mt-4\">\n <p className=\"text-[11px] uppercase tracking-wide opacity-80\">\n {t('financial.cards.currentBill')}\n </p>\n <p className=\"text-2xl font-bold tabular-nums leading-tight\">\n {formatCurrency(used, currency)}\n </p>\n </div>\n </div>\n\n {/* Body */}\n <div className=\"space-y-3 px-4 py-3\">\n {/* Usage progress bar */}\n <div>\n <div className=\"flex items-center justify-between text-[11px] text-muted-foreground\">\n <span>{t('financial.cards.usedOfLimit', { percent: String(Math.round(pct)) })}</span>\n <span className=\"tabular-nums\">{formatCurrency(limit, currency)}</span>\n </div>\n <div className=\"mt-1 h-2 overflow-hidden rounded-full bg-muted\">\n <div\n className={`h-full rounded-full ${over ? 'bg-destructive' : own ? '' : 'bg-primary'}`}\n style={{ width: `${pct}%`, ...(own && !over ? { backgroundColor: own } : {}) }}\n />\n </div>\n </div>\n\n {/* Available limit + due date */}\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.cards.availableLimit')}</p>\n <p className=\"text-sm font-semibold tabular-nums\">{formatCurrency(available, currency)}</p>\n </div>\n {card.dueDay != null && (\n <div className=\"flex items-center gap-1.5 text-right text-xs text-muted-foreground\">\n <CalendarClock className=\"h-3.5 w-3.5\" />\n <span>{t('financial.cards.dueOn', { day: String(card.dueDay) })}</span>\n </div>\n )}\n </div>\n\n {/* Add expense against this card — gated on the role's create action */}\n <PermissionGate feature=\"financial\" action=\"create\">\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={() => openAddExpense(card.id)}\n className=\"whitespace-normal flex w-full items-center justify-center gap-1.5 rounded-input border border-input bg-card px-3 py-2 text-xs font-medium text-foreground transition-colors hover:bg-muted/40\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n {t('financial.cards.addExpense')}\n </Button>\n </PermissionGate>\n </div>\n </div>\n )\n })}\n </div>\n )}\n </>\n )}\n\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// A previsão de recebimento de cartão.\n//\n// A pergunta que um salão faz toda semana: quanto entra, quando, e quanto a\n// maquininha retém. O bruto some numa taxa que ninguém soma, e o dono descobre\n// no extrato — por isso as três colunas andam juntas, e o total do rodapé mostra\n// o líquido ao lado do bruto.\n// ---------------------------------------------------------------------------\nfunction CardReceivablesTable({\n rows, currency,\n}: { rows: CardReceivable[]; currency: { code: string; locale: string; symbol: string } }) {\n const totals = rows.reduce((a, r) => ({\n gross: a.gross + r.gross, fee: a.fee + r.fee, net: a.net + r.net,\n }), { gross: 0, fee: 0, net: 0 })\n const anyMissing = rows.some((r) => r.missingFeeConfig)\n\n // `DataTable`, como toda lista do produto. Era um `<table>` cru com as suas\n // próprias bordas e o seu próprio cinza de cabeçalho — a mesma informação\n // desenhada por uma segunda mão, dentro do mesmo módulo.\n const columns = useMemo<ColumnDef<CardReceivable, any>[]>(() => [\n {\n id: 'settlement',\n header: 'Liquidação',\n cell: ({ row }) => <span className=\"tabular-nums\">{row.original.settlementDate}</span>,\n },\n { id: 'brand', header: 'Bandeira', cell: ({ row }) => row.original.cardBrand ?? '—' },\n {\n id: 'installment',\n header: 'Parcela',\n cell: ({ row }) => (\n <span className=\"tabular-nums\">{row.original.installmentK}/{row.original.cardInstallments}</span>\n ),\n },\n {\n id: 'account',\n header: 'Conta',\n cell: ({ row }) => <span className=\"text-muted-foreground\">{row.original.accountName ?? '—'}</span>,\n },\n {\n id: 'gross',\n header: () => <div className=\"text-right\">Bruto</div>,\n cell: ({ row }) => (\n <div className=\"text-right tabular-nums\">{formatCurrency(row.original.gross, currency)}</div>\n ),\n },\n {\n id: 'fee',\n header: () => <div className=\"text-right\">Taxa</div>,\n cell: ({ row }) => {\n const r = row.original\n return (\n <div className=\"text-right tabular-nums text-destructive\">\n {r.missingFeeConfig ? '—' : formatCurrency(r.fee, currency)}\n {r.feeRate != null && !r.missingFeeConfig && (\n <span className=\"ml-1 text-[10px] text-muted-foreground\">{r.feeRate}%</span>\n )}\n </div>\n )\n },\n },\n {\n id: 'net',\n header: () => <div className=\"text-right\">Líquido</div>,\n cell: ({ row }) => (\n <div className=\"text-right font-semibold tabular-nums\">{formatCurrency(row.original.net, currency)}</div>\n ),\n },\n ], [currency])\n\n return (\n <div className=\"space-y-3\">\n {anyMissing && (\n <p className=\"rounded-input border border-warning bg-warning-soft px-3 py-2 text-xs text-warning-soft-foreground\">\n Há parcelas sem taxa cadastrada: para elas a projeção é o valor BRUTO,\n e o líquido virá menor.\n </p>\n )}\n\n <DataTable\n columns={columns}\n data={rows}\n compact\n emptyMessage={\n <div className=\"flex flex-col items-center gap-1 py-6\">\n <Landmark className=\"mb-2 h-9 w-9 text-muted-foreground/40\" />\n <p className=\"text-base font-semibold text-foreground\">Nada a receber de cartão</p>\n <p className=\"text-xs text-muted-foreground\">\n Assim que um pagamento em cartão for registrado, as parcelas e a\n data de cada liquidação aparecem aqui.\n </p>\n </div>\n }\n />\n\n {/* O total fica FORA da tabela: o DataTable não tem rodapé, e somar o\n líquido ao lado do bruto é o ponto da tela — o dono descobre a taxa\n no extrato quando ninguém a soma antes. */}\n {rows.length > 0 && (\n <Card className=\"flex flex-wrap items-center justify-between gap-4 px-4 py-3 text-sm\">\n <span className=\"text-muted-foreground\">{rows.length} parcela(s)</span>\n <div className=\"flex flex-wrap items-center gap-6\">\n <span className=\"tabular-nums\">\n <span className=\"text-xs text-muted-foreground\">Bruto </span>\n {formatCurrency(totals.gross, currency)}\n </span>\n <span className=\"tabular-nums text-destructive\">\n <span className=\"text-xs text-muted-foreground\">Taxa </span>\n {formatCurrency(totals.fee, currency)}\n </span>\n <span className=\"font-semibold tabular-nums\">\n <span className=\"text-xs font-normal text-muted-foreground\">Líquido </span>\n {formatCurrency(totals.net, currency)}\n </span>\n </div>\n </Card>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Target, Pencil, Loader2 } from 'lucide-react'\nimport {\n SubpageHeader, Button, Input,\n Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalBody, ModalFooter, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, DataTable,\n} from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider } from '../context'\nimport type { GoalMonth } from '@fayz-ai/financial/domain/goal'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { formatCurrency } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Metas mensais de faturamento, por unidade, em TRÊS degraus.\n//\n// O V1 não tem uma meta: tem Meta, Super e Hiper no mesmo mês — premiação\n// escalonada. Portar isso com um campo só perderia a diferença entre bater o\n// alvo e superá-lo duas vezes, que é justamente o que a equipe persegue.\n//\n// E uma correção deliberada ao V1: lá esta tela **não está no menu** — só se\n// chega digitando `?view=metas`, e é o motivo mais provável de as metas nunca\n// terem sido preenchidas naquele tenant. Aqui ela tem entrada própria.\n// ---------------------------------------------------------------------------\n\nconst MESES = [\n 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho',\n 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro',\n]\n\nfunction money(v: number) {\n return formatCurrency(v, 'BRL')\n}\n\nconst head = (label: string) => <span className=\"text-[10px] uppercase\">{label}</span>\nconst CELL = 'px-4 py-2'\n\nexport function GoalsView() {\n const { labels } = useFinancialConfig()\n const provider = useFinancialProvider()\n\n const [units, setUnits] = React.useState<{ id: string; name: string }[]>([])\n const [unitId, setUnitId] = React.useState<string>('')\n const [year, setYear] = React.useState(new Date().getFullYear())\n const [rows, setRows] = React.useState<GoalMonth[] | null>(null)\n const [editing, setEditing] = React.useState<GoalMonth | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n\n const columns = React.useMemo<ColumnDef<GoalMonth>[]>(() => [\n { id: 'month', header: () => head('Mês'), cell: ({ row }) => MESES[row.original.month - 1], meta: { className: `${CELL} font-medium` } },\n { id: 'achieved', header: () => head('Realizado'), cell: ({ row }) => money(row.original.achievedAmount), meta: { className: `${CELL} text-right tabular-nums` } },\n { id: 'target', header: () => head('Meta'), cell: ({ row }) => <Degrau valor={row.original.targetAmount} percentual={row.original.targetPercent} />, meta: { className: `${CELL} text-right` } },\n { id: 'super', header: () => head('Super'), cell: ({ row }) => <Degrau valor={row.original.superAmount} percentual={row.original.superPercent} />, meta: { className: `${CELL} text-right` } },\n { id: 'hyper', header: () => head('Hiper'), cell: ({ row }) => <Degrau valor={row.original.hyperAmount} percentual={row.original.hyperPercent} />, meta: { className: `${CELL} text-right` } },\n {\n id: 'edit',\n header: () => null,\n cell: ({ row }) => (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n aria-label={`Editar meta de ${MESES[row.original.month - 1]}`}\n onClick={() => setEditing(row.original)}\n className=\"fz-tap inline-flex h-7 w-7 items-center justify-center rounded-button border bg-card text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n ),\n meta: { className: 'px-2 py-2 text-right' },\n },\n ], [])\n\n React.useEffect(() => {\n void (async () => {\n const cat = await provider.getCommissionCatalogs?.()\n const us = cat?.units ?? []\n setUnits(us)\n // A meta é sempre DE UMA unidade: sem uma escolhida a tela não tem o que\n // dizer, então ela escolhe a primeira em vez de pedir um clique.\n setUnitId((cur) => cur || us[0]?.id || '')\n })()\n }, [provider])\n\n const load = React.useCallback(async () => {\n if (!unitId) return\n setRows(null)\n try {\n setError(null)\n setRows((await provider.getGoalYear?.(unitId, year)) ?? [])\n } catch (e: any) {\n setError(e?.message ?? String(e))\n setRows([])\n }\n }, [provider, unitId, year])\n\n React.useEffect(() => { void load() }, [load])\n\n const totalRealizado = (rows ?? []).reduce((s, r) => s + r.achievedAmount, 0)\n const totalMeta = (rows ?? []).reduce((s, r) => s + r.targetAmount, 0)\n const semMeta = (rows ?? []).filter((r) => r.targetAmount === 0 && r.achievedAmount > 0).length\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={labels.goals ?? 'Metas'}\n actions={\n <>\n <Button size=\"sm\" onClick={() => setEditing(rows?.[new Date().getMonth()] ?? null)} disabled={!rows?.length}>\n <Target className=\"h-3.5 w-3.5\" /> Nova meta\n </Button>\n </>\n }\n />\n\n <p className=\"text-xs text-muted-foreground\">\n A meta é <strong className=\"font-medium text-foreground\">de uma unidade e de um mês</strong>, em três\n degraus: Meta, Super e Hiper. O realizado vem do faturamento reconhecido — aparece mesmo\n onde ninguém cadastrou alvo.\n </p>\n\n <div className=\"flex flex-wrap items-end gap-3 rounded-2xl border bg-card px-4 py-3\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n Unidade\n <Select value={unitId} onValueChange={setUnitId}>\n <SelectTrigger className=\"mt-1 h-auto w-auto gap-2 bg-card px-2 py-1.5 font-normal text-foreground shadow-none\"><SelectValue /></SelectTrigger>\n <SelectContent>\n {units.map((u) => <SelectItem key={u.id} value={u.id}>{u.name}</SelectItem>)}\n </SelectContent>\n </Select>\n </label>\n <label className=\"text-xs font-medium text-muted-foreground\">\n Ano\n <Input type=\"number\" value={String(year)} className=\"mt-1 w-28 text-sm\"\n onChange={(e) => setYear(Number(e.target.value) || year)} />\n </label>\n\n <div className=\"ml-auto text-right\">\n <p className=\"text-xs text-muted-foreground\">Realizado no ano</p>\n <p className=\"text-lg font-semibold tabular-nums\">{money(totalRealizado)}</p>\n </div>\n {totalMeta > 0 && (\n <div className=\"text-right\">\n <p className=\"text-xs text-muted-foreground\">Meta do ano</p>\n <p className=\"text-lg font-semibold tabular-nums\">{money(totalMeta)}</p>\n </div>\n )}\n </div>\n\n {/* Um mês faturado sem alvo é a informação que faz alguém cadastrar a\n meta que falta — é o estado em que o tenant do V1 estava. */}\n {semMeta > 0 && (\n <p className=\"rounded-card border border-warning/30 bg-warning/5 px-4 py-2 text-xs\">\n <strong>{semMeta} {semMeta > 1 ? 'meses faturaram' : 'mês faturou'} sem meta cadastrada.</strong>{' '}\n O percentual fica em 0% porque não há alvo — não porque não se vendeu.\n </p>\n )}\n\n {error && (\n <div className=\"rounded-card border border-destructive/30 bg-destructive/5 px-4 py-3 text-xs text-destructive\">{error}</div>\n )}\n\n <div className=\"overflow-x-auto rounded-card border bg-card\">\n <DataTable\n variant=\"bare\"\n columns={columns}\n data={rows ?? []}\n loading={rows === null}\n skeletonRows={12}\n getRowId={(r) => String(r.month)}\n emptyMessage=\"Nenhum mês para mostrar.\"\n />\n </div>\n\n {editing && (\n <GoalDialog\n key={`${editing.year}-${editing.month}`}\n goal={editing}\n onClose={() => setEditing(null)}\n onSaved={async () => { setEditing(null); await load() }}\n />\n )}\n </div>\n )\n}\n\n/** Um degrau: o alvo e, embaixo, quanto dele já foi. Sem alvo, um traço. */\nfunction Degrau({ valor, percentual }: { valor: number; percentual: number }) {\n if (valor <= 0) {\n // Traço, não \"R$ 0,00\": zero é um alvo de zero; traço é \"não cadastrado\".\n return <span className=\"text-muted-foreground\">—</span>\n }\n const bateu = percentual >= 100\n return (\n <>\n <div className=\"tabular-nums\">{money(valor)}</div>\n <div className={`text-[10px] tabular-nums ${bateu ? 'font-semibold text-success' : 'text-muted-foreground'}`}>\n {percentual.toFixed(2)}%\n </div>\n </>\n )\n}\n\nfunction GoalDialog({\n goal, onClose, onSaved,\n}: { goal: GoalMonth; onClose: () => void; onSaved: () => void | Promise<void> }) {\n const provider = useFinancialProvider()\n const [target, setTarget] = React.useState(String(goal.targetAmount || ''))\n const [sup, setSup] = React.useState(String(goal.superAmount || ''))\n const [hyper, setHyper] = React.useState(String(goal.hyperAmount || ''))\n const [saving, setSaving] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n\n const t = Number(target) || 0\n const s = Number(sup) || 0\n const h = Number(hyper) || 0\n // Os degraus sobem — o banco também recusa (025), mas dizer aqui evita a\n // viagem e explica o porquê em vez de devolver uma violação de constraint.\n const ladderErr = s > 0 && s < t\n ? 'O Super não pode ser menor que a Meta.'\n : h > 0 && h < s\n ? 'O Hiper não pode ser menor que o Super.'\n : null\n\n async function save() {\n if (ladderErr) return\n setSaving(true); setError(null)\n try {\n await provider.saveGoal?.({\n id: goal.goalId ?? undefined,\n unitId: goal.unitId, year: goal.year, month: goal.month,\n targetAmount: t, superAmount: s, hyperAmount: h,\n })\n await onSaved()\n } catch (e: any) {\n setError(e?.message ?? String(e))\n } finally { setSaving(false) }\n }\n\n return (\n <Modal open onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"md\" noPadding className=\"gap-0\">\n <ModalHeader className=\"border-b px-5 py-4\">\n <ModalTitle className=\"text-base\">\n Meta de {MESES[goal.month - 1]} de {goal.year}\n </ModalTitle>\n <ModalDescription className=\"text-xs\">\n Realizado até agora: <strong>{money(goal.achievedAmount)}</strong>\n </ModalDescription>\n </ModalHeader>\n\n <ModalBody className=\"fz-container px-5 py-4\">\n <div className=\"space-y-3\">\n <Campo label=\"Meta (R$)\" value={target} onChange={setTarget} hint=\"O alvo do mês.\" />\n <Campo label=\"Super (R$)\" value={sup} onChange={setSup} hint=\"O degrau acima da Meta. Deixe vazio se não usa.\" />\n <Campo label=\"Hiper (R$)\" value={hyper} onChange={setHyper} hint=\"O degrau acima do Super. Deixe vazio se não usa.\" />\n {ladderErr && <p className=\"text-xs text-destructive\">{ladderErr}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n </ModalBody>\n\n <ModalFooter variant=\"bar\">\n <Button variant=\"outline\" size=\"sm\" onClick={onClose}>Cancelar</Button>\n <Button size=\"sm\" onClick={() => void save()} disabled={saving || !!ladderErr}>\n {saving ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : null}\n {saving ? 'Salvando…' : 'Salvar meta'}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\nfunction Campo({\n label, value, onChange, hint,\n}: { label: string; value: string; onChange: (v: string) => void; hint: string }) {\n return (\n <div>\n <label className=\"text-[10px] font-medium uppercase text-muted-foreground\">{label}</label>\n <Input type=\"number\" value={value} className=\"mt-0.5\" onChange={(e) => onChange(e.target.value)} />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">{hint}</p>\n </div>\n )\n}\n","import React from 'react'\nimport { Gift, Loader2, BadgeCheck } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport {\n SubpageHeader, Button, Input, ListView, DatePicker,\n Tooltip, TooltipTrigger, TooltipContent, TooltipProvider,\n Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalBody, ModalFooter,\n} from '@fayz-ai/ui'\nimport { PermissionGate, usePermissionOptional } from '@fayz-ai/admin'\nimport { useFinancialProvider, useFinancialConfig, formatCurrency } from '../context'\nimport type { GiftCard, GiftCardState } from '@fayz-ai/financial/domain/gift-card'\n\n// ---------------------------------------------------------------------------\n// Vales-presente no menu do Financeiro.\n//\n// Um vale-presente não é uma venda: é um PASSIVO. A casa recebe hoje por um\n// atendimento que vai prestar depois, e enquanto o cartão não for gasto ela\n// DEVE aquele atendimento. É por isso que a tela mora aqui e não na loja — o\n// cartão é da loja, o compromisso é do Financeiro (027).\n//\n// DUAS COLUNAS QUE PARECEM UMA. **Valor** é o de face, gravado na emissão e\n// imutável. **Saldo** é o que resta — e um cartão que nunca foi ativado NÃO TEM\n// saldo: mostra traço. Zero é um cartão gasto, que é outra conversa com o\n// cliente. O provider já entrega `balance: null` para o primeiro caso; a tela\n// só precisa não transformar isso em \"R$ 0,00\".\n// ---------------------------------------------------------------------------\n\nconst STATE_META: Record<GiftCardState, { label: string; className: string }> = {\n issued: { label: 'Emitido', className: 'bg-muted text-muted-foreground' },\n active: { label: 'Ativo', className: 'bg-emerald-100 text-emerald-800 dark:bg-emerald-950/40 dark:text-emerald-300' },\n redeemed: { label: 'Usado', className: 'bg-blue-100 text-blue-800 dark:bg-blue-950/40 dark:text-blue-300' },\n expired: { label: 'Expirado', className: 'bg-orange-100 text-orange-800 dark:bg-orange-950/40 dark:text-orange-300' },\n revoked: { label: 'Cancelado', className: 'bg-red-100 text-red-700 dark:bg-red-950/40 dark:text-red-300' },\n}\n\n/** Quatro blocos de quatro, como cartão — é assim que se lê em voz alta. */\nfunction formatCode(code: string) {\n return code.replace(/(.{4})(?=.)/g, '$1 ')\n}\n\nfunction formatDate(iso: string | null | undefined) {\n if (!iso) return null\n const d = new Date(iso)\n return Number.isNaN(d.getTime()) ? null : d.toLocaleDateString('pt-BR')\n}\n\n/** Traço, não vazio: uma célula em branco parece um dado que não carregou. */\nfunction Dash() {\n return <span className=\"text-muted-foreground\">—</span>\n}\n\nexport function GiftCardsView() {\n const provider = useFinancialProvider()\n const { currency } = useFinancialConfig()\n const can = usePermissionOptional()\n\n const [enabled, setEnabled] = React.useState<boolean | null>(null)\n const [cards, setCards] = React.useState<GiftCard[] | null>(null)\n const [error, setError] = React.useState<string | null>(null)\n const [issuing, setIssuing] = React.useState(false)\n const [issued, setIssued] = React.useState<{ count: number; total: number } | null>(null)\n const [activating, setActivating] = React.useState<string | null>(null)\n\n // Filtros — os mesmos quatro do V1.\n const [search, setSearch] = React.useState('')\n const [state, setState] = React.useState<'' | GiftCardState>('')\n const [minValue, setMinValue] = React.useState('')\n const [maxValue, setMaxValue] = React.useState('')\n const [from, setFrom] = React.useState('')\n const [to, setTo] = React.useState('')\n\n const money = React.useCallback((v: number) => formatCurrency(v, currency), [currency])\n\n // Mexer num filtro dispara uma busca, e teclar rápido dispara várias. Sem um\n // número de ordem a resposta MAIS ANTIGA pode chegar por último e repintar a\n // lista com o resultado do filtro anterior — a tela mostra \"2098\" no campo e\n // quinze cartões na tabela. Só a última pedida escreve.\n const seq = React.useRef(0)\n\n const load = React.useCallback(async () => {\n const mine = ++seq.current\n setCards(null)\n setError(null)\n try {\n const rows = await provider.getGiftCards?.({\n search: search.trim() || undefined,\n state: state || undefined,\n minValue: minValue === '' ? undefined : Number(minValue),\n maxValue: maxValue === '' ? undefined : Number(maxValue),\n issuedFrom: from || undefined,\n issuedTo: to || undefined,\n })\n if (mine !== seq.current) return\n setCards(rows ?? [])\n } catch (e: any) {\n if (mine !== seq.current) return\n setError(e?.message ?? String(e))\n setCards([])\n }\n }, [provider, search, state, minValue, maxValue, from, to])\n\n // A pergunta \"a loja está instalada?\" vem antes de qualquer busca: sem ela a\n // tela tem de se explicar, não devolver um erro de SQL a quem nunca ouviu\n // falar da tabela.\n React.useEffect(() => {\n void (async () => {\n try {\n setEnabled((await provider.giftCardsEnabled?.()) === true)\n } catch {\n setEnabled(false)\n }\n })()\n }, [provider])\n\n React.useEffect(() => { if (enabled) void load() }, [enabled, load])\n\n const columns = React.useMemo<ColumnDef<GiftCard, any>[]>(() => [\n {\n accessorKey: 'code',\n header: 'Código',\n cell: ({ row }) => <span className=\"font-mono text-xs tabular-nums\">{formatCode(row.original.code)}</span>,\n },\n {\n accessorKey: 'faceValue',\n header: 'Valor',\n cell: ({ row }) => <span className=\"block text-right tabular-nums\">{money(row.original.faceValue)}</span>,\n },\n {\n accessorKey: 'balance',\n header: 'Saldo',\n cell: ({ row }) => <span className=\"block text-right tabular-nums\">{row.original.balance === null ? <Dash /> : money(row.original.balance)}</span>,\n },\n {\n accessorKey: 'state',\n header: 'Status',\n cell: ({ row }) => (\n <span className={`inline-flex rounded-full px-2 py-0.5 text-[10px] font-medium ${STATE_META[row.original.state].className}`}>\n {STATE_META[row.original.state].label}\n </span>\n ),\n },\n { accessorKey: 'issuedAt', header: 'Emitido', cell: ({ row }) => <span className=\"text-xs\">{formatDate(row.original.issuedAt) ?? <Dash />}</span> },\n { accessorKey: 'expiresAt', header: 'Validade', cell: ({ row }) => <span className=\"text-xs\">{formatDate(row.original.expiresAt) ?? <Dash />}</span> },\n { accessorKey: 'activatedAt', header: 'Ativado', cell: ({ row }) => <span className=\"text-xs\">{formatDate(row.original.activatedAt) ?? <Dash />}</span> },\n {\n id: 'actions',\n header: '',\n cell: ({ row }) => row.original.state === 'issued' ? (\n <PermissionGate feature=\"financial\" action=\"edit\">\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={`Ativar o vale ${formatCode(row.original.code)}`}\n disabled={activating === row.original.id}\n onClick={() => void (async () => {\n setActivating(row.original.id)\n setError(null)\n try { await provider.activateGiftCard?.(row.original.id); await load() }\n catch (e: any) { setError(e?.message ?? String(e)) }\n finally { setActivating(null) }\n })()}\n >\n {activating === row.original.id\n ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n : <BadgeCheck className=\"h-3.5 w-3.5\" />}\n </Button>\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">Ativar na venda — o saldo passa a valer o valor de face</TooltipContent>\n </Tooltip>\n </PermissionGate>\n ) : null,\n },\n ], [activating, load, money, provider])\n\n // O passivo é só o que já foi vendido. Um cartão impresso e não ativado não\n // deve nada a ninguém — ninguém pagou por ele ainda.\n const outstanding = (cards ?? [])\n .filter((c) => c.state === 'active')\n .reduce((s, c) => s + (c.balance ?? 0), 0)\n const faceIssued = (cards ?? []).reduce((s, c) => s + c.faceValue, 0)\n\n if (enabled === false) {\n return (\n <div className=\"p-1\">\n <SubpageHeader\n title=\"Gift Cards\"\n subtitle=\"Vales-presente emitidos em lote\"\n icon=\"Gift\"\n />\n <p className=\"mt-4 max-w-prose text-sm text-muted-foreground\">\n Os vales-presente ficam guardados na loja, e ela não está instalada neste banco.\n Instale o módulo de loja e esta tela passa a listar e emitir sem mais nenhuma\n configuração.\n </p>\n </div>\n )\n }\n\n return (\n <TooltipProvider>\n <div className=\"p-1\">\n <SubpageHeader\n title=\"Gift Cards\"\n subtitle=\"Vales-presente emitidos em lote\"\n icon=\"Gift\"\n />\n\n <p className=\"mt-3 max-w-prose text-xs text-muted-foreground\">\n Um vale-presente é um <strong className=\"font-medium text-foreground\">passivo</strong>:\n a casa recebe hoje por um atendimento que vai prestar depois. Ele entra no balanço\n quando é <strong className=\"font-medium text-foreground\">vendido</strong>, não quando é\n impresso — por isso um cartão emitido nasce sem saldo.\n </p>\n\n <div className=\"mt-3 flex flex-wrap gap-6 rounded-card border bg-card px-4 py-3\">\n <div>\n <p className=\"text-xs text-muted-foreground\">Valor de face emitido</p>\n <p className=\"text-lg font-semibold tabular-nums\">{money(faceIssued)}</p>\n </div>\n <div>\n <p className=\"text-xs text-muted-foreground\">Passivo em aberto</p>\n <p className=\"text-lg font-semibold tabular-nums\">{money(outstanding)}</p>\n <p className=\"text-[10px] text-muted-foreground\">só os cartões já vendidos</p>\n </div>\n </div>\n\n {issued && (\n <p className=\"mt-3 rounded-card border border-success/30 bg-success/5 px-4 py-2 text-xs\">\n <strong>{issued.count} {issued.count > 1 ? 'vales emitidos' : 'vale emitido'}</strong>{' '}\n — {money(issued.total)} em valor de face. Eles nascem sem saldo: ative cada um na venda.\n </p>\n )}\n\n {error && (\n <div className=\"mt-3 rounded-card border border-destructive/30 bg-destructive/5 px-4 py-3 text-xs text-destructive\">{error}</div>\n )}\n\n <ListView<GiftCard>\n className=\"mt-3\"\n columns={columns}\n data={cards ?? []}\n loading={cards === null}\n search={search}\n onSearchChange={setSearch}\n searchPlaceholder=\"Buscar código\"\n filterDefs={[{\n id: 'state',\n label: 'Status',\n allLabel: 'Todos os status',\n options: (Object.keys(STATE_META) as GiftCardState[]).map((entry) => ({ value: entry, label: STATE_META[entry].label })),\n value: state || undefined,\n onChange: (next) => setState((next ?? '') as '' | GiftCardState),\n }]}\n advancedFilters={(\n <div className=\"grid gap-3 p-2 sm:grid-cols-2\">\n <div className=\"space-y-1\">\n <p className=\"text-xs font-medium\">Valor</p>\n <div className=\"flex items-center gap-1.5\">\n <Input type=\"number\" value={minValue} placeholder=\"de\" className=\"h-8 w-24 text-xs\" onChange={(e) => setMinValue(e.target.value)} />\n <span className=\"text-xs text-muted-foreground\">–</span>\n <Input type=\"number\" value={maxValue} placeholder=\"até\" className=\"h-8 w-24 text-xs\" onChange={(e) => setMaxValue(e.target.value)} />\n </div>\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-xs font-medium\">Emissão</p>\n <div className=\"flex flex-col gap-1.5\">\n <DatePicker variant=\"chip\" format=\"numeric\" value={from} onChange={setFrom} />\n <DatePicker variant=\"chip\" format=\"numeric\" value={to} onChange={setTo} />\n </div>\n </div>\n </div>\n )}\n activeFilterCount={(state ? 1 : 0) + (minValue || maxValue ? 1 : 0) + (from || to ? 1 : 0)}\n onClearFilters={() => { setState(''); setMinValue(''); setMaxValue(''); setFrom(''); setTo('') }}\n clearFiltersLabel=\"Limpar\"\n newLabel=\"Emitir gift cards\"\n onNew={can?.('financial', 'create') && enabled !== null ? () => setIssuing(true) : undefined}\n emptyIcon={Gift}\n emptyMessage=\"Nenhum vale-presente\"\n emptyActionLabel={can?.('financial', 'create') ? 'Emitir primeiro lote' : undefined}\n onEmptyAction={can?.('financial', 'create') ? () => setIssuing(true) : undefined}\n />\n\n {issuing && (\n <IssueDialog\n money={money}\n onClose={() => setIssuing(false)}\n onIssued={async (count, total) => {\n setIssuing(false)\n setIssued({ count, total })\n await load()\n }}\n />\n )}\n </div>\n </TooltipProvider>\n )\n}\n\n/**\n * A emissão é EM LOTE e uniforme: uma quantidade e UM valor unitário para\n * todos. O total do lote é calculado ao vivo porque é o número que se confere\n * antes de gravar — vinte cartões de R$ 100 são dois mil reais de compromisso,\n * e ninguém deveria descobrir isso depois de clicar.\n */\nfunction IssueDialog({\n money, onClose, onIssued,\n}: {\n money: (v: number) => string\n onClose: () => void\n onIssued: (count: number, total: number) => void | Promise<void>\n}) {\n const provider = useFinancialProvider()\n const [quantity, setQuantity] = React.useState('10')\n const [amount, setAmount] = React.useState('100')\n const [expiresAt, setExpiresAt] = React.useState('')\n const [note, setNote] = React.useState('')\n const [saving, setSaving] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n\n const q = Math.trunc(Number(quantity)) || 0\n const a = Number(amount) || 0\n const total = q * a\n const invalid = q < 1 || q > 500 ? 'A quantidade vai de 1 a 500.'\n : a <= 0 ? 'O valor unitário tem de ser maior que zero.'\n : null\n\n async function issue() {\n if (invalid) return\n setSaving(true); setError(null)\n try {\n const codes = await provider.issueGiftCards?.({\n quantity: q,\n unitAmount: a,\n // Data pura vira o fim do dia: um vale que vale \"até 31/12\" vale o dia 31 inteiro.\n expiresAt: expiresAt ? new Date(`${expiresAt}T23:59:59`).toISOString() : null,\n note: note.trim() || null,\n })\n await onIssued(codes?.length ?? q, total)\n } catch (e: any) {\n setError(e?.message ?? String(e))\n } finally { setSaving(false) }\n }\n\n return (\n <Modal open onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"md\">\n <ModalHeader>\n <ModalTitle className=\"text-base\">Emitir gift cards</ModalTitle>\n <ModalDescription className=\"text-xs\">\n Um lote é uniforme: o mesmo valor para todos os cartões.\n </ModalDescription>\n </ModalHeader>\n\n <ModalBody>\n <div className=\"space-y-3\">\n <div className=\"flex gap-3\">\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium uppercase text-muted-foreground\" htmlFor=\"gc-qty\">Quantidade</label>\n <Input id=\"gc-qty\" type=\"number\" min={1} max={500} value={quantity} className=\"mt-0.5\"\n onChange={(e) => setQuantity(e.target.value)} />\n </div>\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium uppercase text-muted-foreground\" htmlFor=\"gc-amount\">Valor unitário</label>\n <Input id=\"gc-amount\" type=\"number\" min={0} step=\"0.01\" value={amount} className=\"mt-0.5\"\n onChange={(e) => setAmount(e.target.value)} />\n </div>\n </div>\n\n <div>\n <label className=\"text-[10px] font-medium uppercase text-muted-foreground\" htmlFor=\"gc-exp\">Data de expiração (opcional)</label>\n <DatePicker value={expiresAt} onChange={setExpiresAt} className=\"mt-0.5 w-full\" />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">Deixe em branco se não expira.</p>\n </div>\n\n <div>\n <label className=\"text-[10px] font-medium uppercase text-muted-foreground\" htmlFor=\"gc-note\">Observações (opcional)</label>\n <Input id=\"gc-note\" value={note} className=\"mt-0.5\"\n onChange={(e) => setNote(e.target.value)} />\n </div>\n\n {/* O total só existe depois de quantidade e valor, e recalcula a cada tecla. */}\n <div className=\"rounded-card border bg-muted/40 px-4 py-2 text-sm\">\n Total do lote: <strong className=\"tabular-nums\">{money(total)}</strong>\n </div>\n\n {invalid && <p className=\"text-xs text-destructive\">{invalid}</p>}\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </div>\n </ModalBody>\n\n <ModalFooter>\n <Button variant=\"outline\" size=\"sm\" onClick={onClose}>Cancelar</Button>\n <Button size=\"sm\" onClick={() => void issue()} disabled={saving || !!invalid}>\n {saving ? <Loader2 className=\"mr-1.5 h-3.5 w-3.5 animate-spin\" /> : null}\n {saving ? 'Emitindo…' : 'Emitir lote'}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import React from 'react'\nimport { Eye } from 'lucide-react'\nimport {\n Button, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, ModalTitle,\n} from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useFinancialConfig, formatCurrency } from '../context'\nimport type { ImportedStatementLine } from '@fayz-ai/financial/domain/reconciliation'\n\n// ---------------------------------------------------------------------------\n// O que a linha do extrato mostra de si mesma.\n//\n// As DUAS SAÍDAS que moravam aqui — «Lançar como conta» e «Marcar como\n// transferência», cada uma um diálogo de três campos — saíram: no V1 elas são\n// ramos da MESMA tela de classificar, e separá-las obrigava a pessoa a decidir\n// antes de ver. Agora são passos de `ReconcileFlow`.\n//\n// O que fica vai pelo `ModalContent` do design system, e não por um overlay\n// desenhado à mão: o portal é o que garante Esc, foco preso e clique fora — e é\n// o que evita a herança de cor que deixa título quase-branco sobre cartão\n// branco quando o diálogo nasce dentro do escopo de quem o abriu.\n// ---------------------------------------------------------------------------\n\nconst shortDate = (value: string) => {\n const [year, month, day] = value.split('-')\n return year && month && day ? `${day}/${month}/${year}` : value\n}\n\n/** O cabeçalho comum: qual linha do extrato está sendo resolvida. */\nfunction LinhaDoExtrato({ line, fmt }: { line: ImportedStatementLine; fmt: (n: number) => string }) {\n const isCredit = line.direction === 'credit'\n return (\n <div className=\"rounded-card border bg-muted/30 px-3 py-2\">\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"truncate text-sm font-medium\">{line.description || line.externalId}</span>\n <span className={`shrink-0 text-sm font-semibold ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {isCredit ? '+ ' : '− '}{fmt(line.amount)}\n </span>\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n {shortDate(line.date)}\n {line.counterpartyName ? ` · ${line.counterpartyName}` : ''}\n </p>\n </div>\n )\n}\n\n/**\n * «Detalhes» — a linha como o provedor a entregou.\n *\n * No V1 este diálogo NAO ABRE: `OBTransactionDetailsModal.tsx:62` lança no\n * `select *` e o spinner gira para sempre. O porte não reproduz o defeito, e a\n * diferença de desenho é de propósito: em vez de despejar as 25 colunas cruas\n * numa lista, os campos que o operador de fato lê vêm nomeados e formatados, e\n * o payload do provedor fica recolhido atrás de um `<details>` — quem precisa\n * dele está depurando, não conferindo.\n */\nexport function StatementLineDetailsModal({ line, onClose }: {\n line: ImportedStatementLine\n onClose: () => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const fmt = (n: number) => formatCurrency(n, currency)\n\n // Campo vazio na tela é sintoma, não estética: o que o provedor não mandou\n // simplesmente NÃO aparece, em vez de ocupar a linha com um travessão.\n const campos: Array<[string, string | undefined]> = [\n [t('financial.reconciliation.detailDate'), shortDate(line.date)],\n [t('financial.reconciliation.detailEffective'), line.effectiveAt?.slice(0, 10) && shortDate(line.effectiveAt.slice(0, 10))],\n [t('financial.reconciliation.detailCounterparty'), line.counterpartyName],\n [t('financial.reconciliation.detailDocument'), line.counterpartyDocument ?? line.document],\n [t('financial.reconciliation.detailCode'), line.code],\n [t('financial.reconciliation.detailCategory'), line.category],\n [t('financial.reconciliation.detailKind'), line.transactionType],\n [t('financial.reconciliation.detailBalance'), line.balanceAfter == null ? undefined : fmt(line.balanceAfter)],\n [t('financial.reconciliation.detailProvider'), line.externalSource],\n [t('financial.reconciliation.detailExternalId'), line.externalId],\n ]\n const preenchidos = campos.filter(([, v]) => v != null && v !== '')\n\n return (\n <Modal open onOpenChange={(o) => { if (!o) onClose() }}>\n <ModalContent size=\"md\">\n <ModalHeader>\n <ModalTitle className=\"flex items-center gap-2\">\n <Eye className=\"h-4 w-4\" aria-hidden />\n {t('financial.reconciliation.details')}\n </ModalTitle>\n </ModalHeader>\n <ModalBody className=\"space-y-3\">\n <LinhaDoExtrato line={line} fmt={fmt} />\n <dl className=\"grid grid-cols-2 gap-x-4 gap-y-2\">\n {preenchidos.map(([rotulo, valor]) => (\n <div key={rotulo} className=\"min-w-0\">\n <dt className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">{rotulo}</dt>\n <dd className=\"truncate text-sm\">{valor}</dd>\n </div>\n ))}\n </dl>\n {line.rawPayload && (\n <details className=\"rounded-card border bg-muted/20 px-3 py-2\">\n <summary className=\"cursor-pointer text-xs text-muted-foreground\">\n {t('financial.reconciliation.rawPayload')}\n </summary>\n {/* Conteúdo largo rola dentro do próprio contêiner — a página\n nunca rola na horizontal. */}\n <pre className=\"mt-2 max-h-64 overflow-auto text-[10px] leading-relaxed\">\n {JSON.stringify(line.rawPayload, null, 2)}\n </pre>\n </details>\n )}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={onClose}>{t('common.close')}</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import type { ReceiptReading, ReconcileBillItemInput } from '@fayz-ai/financial/domain/reconciliation'\n\n// ---------------------------------------------------------------------------\n// O COMPROVANTE LIDO, para dentro do passo dos itens.\n//\n// O V1 manda a foto para uma edge function (`bank-reconciliation-reprocess-\n// attachment`) que reprocessa a sugestão inteira. O V2 já tem um leitor de\n// recibos, mas ele abre o FORMULÁRIO de fatura — o que é certo quando a foto é\n// o pedido, e errado aqui: na conciliação a pessoa já está numa linha do\n// extrato e sair dela perde tudo que ela escolheu.\n//\n// Então aqui a leitura DEVOLVE dado. E devolve só o que o extrato não sabe: de\n// quem é, o que foi comprado, e em que prateleira isso mora. O valor, a data e\n// a conta bancária ficam TRAVADOS na linha do banco — o papel pode estar\n// torto, de outro dia, ou ser o cupom de outra compra.\n// ---------------------------------------------------------------------------\n\nconst PROMPT = [\n 'Você está lendo um comprovante (cupom fiscal, boleto, recibo ou nota) para classificar',\n 'uma linha de extrato bancário que JÁ ACONTECEU.',\n '',\n 'Responda APENAS com um objeto JSON, sem texto antes ou depois, sem cercas de código,',\n 'no formato:',\n '{\"contactName\": string|null, \"document\": string|null, \"accountHint\": string|null,',\n ' \"items\": [{\"description\": string, \"quantity\": number, \"unitPrice\": number}],',\n ' \"warnings\": [string]}',\n '',\n 'Regras:',\n '- `contactName` é o FORNECEDOR/EMISSOR do documento, nunca o banco, a maquininha',\n ' ou o intermediário (PagSeguro, Cielo, Stone, Rede, Getnet, Mercado Pago, PicPay…).',\n ' Se só houver um nome de banco ou adquirente, devolva null.',\n '- `unitPrice` é o preço UNITÁRIO em reais, como número (12.5, não \"R$ 12,50\").',\n '- `accountHint` é uma sugestão curta de plano de contas em português',\n ' (\"Combustível\", \"Material de limpeza\"), ou null.',\n '- NÃO invente itens: só o que está escrito no papel.',\n '- `warnings` diz o que ficou ilegível ou foi chute. Vazio quando leu tudo.',\n].join('\\n')\n\n/** Um leitor de comprovante: recebe o arquivo, devolve o que deu para ler. */\nexport type ReceiptReader = (file: File) => Promise<ReceiptReading>\n\n/** Tira o que sobra quando o modelo devolve JSON embrulhado em cerca. */\nfunction stripFence(text: string): string {\n const trimmed = text.trim()\n const fenced = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/)\n if (fenced) return fenced[1].trim()\n // Última linha de defesa: o primeiro `{` até o último `}`.\n const start = trimmed.indexOf('{')\n const end = trimmed.lastIndexOf('}')\n return start >= 0 && end > start ? trimmed.slice(start, end + 1) : trimmed\n}\n\nconst num = (v: unknown, fallback = 0): number => {\n const n = typeof v === 'string' ? Number(v.replace(',', '.')) : Number(v)\n return Number.isFinite(n) ? n : fallback\n}\n\nconst str = (v: unknown): string | undefined => {\n const s = typeof v === 'string' ? v.trim() : ''\n return s ? s : undefined\n}\n\n/**\n * O que o modelo respondeu, virado em dado com que a tela sabe lidar.\n *\n * Exportado porque é onde os defeitos aparecem — um modelo que devolve\n * `\"12,50\"` ou envolve tudo numa cerca não pode quebrar a leitura, e isso se\n * prova sem rede.\n */\nexport function parseReceiptReply(content: string): ReceiptReading {\n let raw: Record<string, unknown>\n try {\n raw = JSON.parse(stripFence(content)) as Record<string, unknown>\n } catch {\n // Ler errado é pior que não ler: devolve vazio com o aviso, e a pessoa\n // digita os itens como digitaria sem anexo nenhum.\n return { warnings: ['Não consegui entender o que voltou da leitura.'] }\n }\n\n const items: ReconcileBillItemInput[] = Array.isArray(raw.items)\n ? (raw.items as unknown[])\n .map((row) => {\n const item = (row ?? {}) as Record<string, unknown>\n const description = str(item.description)\n if (!description) return null\n const quantity = num(item.quantity, 1) || 1\n // `total` sem `unitPrice` acontece bastante em cupom: um de cada.\n const unitPrice = item.unitPrice != null\n ? num(item.unitPrice)\n : num(item.total) / quantity\n return { description, quantity, unitPrice: Math.round(unitPrice * 100) / 100 }\n })\n .filter((i): i is ReconcileBillItemInput => i !== null)\n : []\n\n const warnings = Array.isArray(raw.warnings)\n ? (raw.warnings as unknown[]).map((w) => str(w)).filter((w): w is string => !!w)\n : []\n\n return {\n contactName: str(raw.contactName),\n document: str(raw.document),\n accountHint: str(raw.accountHint),\n items: items.length ? items : undefined,\n warnings: warnings.length ? warnings : undefined,\n }\n}\n\n/**\n * O leitor de verdade, montado sobre o agente do projeto.\n *\n * Devolve `null` quando o app não tem agente configurado — a tela usa isso para\n * não oferecer um botão que não funciona (`VITE_FAYZ_AGENT_KEY` ausente é a\n * causa de todo FAB morto da frota).\n */\nexport function createAgentReceiptReader(deps: {\n chat: (input: { message: string; inlineFiles: Array<{ name: string; mime: string; data: string }> }) => Promise<{ content: string }>\n toInlineFile: (file: File) => Promise<{ name: string; mime: string; data: string }>\n shrinkForVision?: (file: File) => Promise<File>\n}): ReceiptReader {\n return async (file: File) => {\n // Uma foto de celular tem 3–5MB e vira ~7MB em base64: o turno morre antes\n // de chegar ao modelo. Encolher é a correção que serve os dois lados.\n const enxuto = deps.shrinkForVision ? await deps.shrinkForVision(file) : file\n const inline = await deps.toInlineFile(enxuto)\n const reply = await deps.chat({ message: PROMPT, inlineFiles: [inline] })\n return parseReceiptReply(reply.content)\n }\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowRightLeft, Check, Link2, Loader2, Paperclip, Plus, Receipt, Sparkles, Trash2, TriangleAlert,\n} from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport {\n Button, CurrencyInput, DataTable, DatePicker, FilterPanel, FilterPanelField, Hint, Input, ModalFlow, SearchSelect, SegmentedControl, Select, SelectContent, SelectItem,\n SelectTrigger, SelectValue, Skeleton, toast, type ModalFlowPage,\n} from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n createOneShotAsk, shrinkForVision, toInlineFile,\n type EntityLookup,\n} from '@fayz-ai/admin'\nimport { useFinancialConfig, useFinancialProvider, formatCurrency } from '../context'\nimport {\n FinancialCounterpartySearchSelect, createFinancialCounterpartyLookup,\n} from './FinancialCounterpartySearchSelect'\nimport {\n adjustmentDirection, adjustmentGap, adjustmentsMismatch, itemsMismatch, reconciliationPaymentNote,\n resolveCandidates, sumItems, type ResolvedCandidate,\n} from '@fayz-ai/financial/domain/reconciliation'\nimport { createAgentReceiptReader } from '../lib/receipt-reading'\nimport { accountLabel, postableAccounts } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport type { BankAccount } from '@fayz-ai/financial/domain/account'\nimport type { ChartOfAccountsNode, CostCenter } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport type {\n ImportedStatementLine, ReconcileAdjustment, ReconcileBillItemInput, ReceiptReading, ReconciliationTargetQuery,\n} from '@fayz-ai/financial/domain/reconciliation'\n\n// ---------------------------------------------------------------------------\n// CONCILIAR UMA MOVIMENTAÇÃO — três perguntas, nesta ordem.\n//\n// O V1 faz tudo num diálogo só (`AISuggestionModal`, 1170 linhas): a sugestão\n// da IA, o anexo, o seletor de classificação, os itens do comprovante, o\n// vínculo, o ajuste e a transferência empilhados numa rolagem de 92vh. Quem\n// abre não sabe onde começa nem quanto falta, e a metade que não serve para a\n// escolha feita continua ocupando a tela.\n//\n// Aqui são três passos com começo e fim, na `ModalFlow` do design system:\n//\n// 1. COMO CLASSIFICAR — o que é esta linha? (e o comprovante, que muda a\n// resposta das outras duas)\n// 2. OS DETALHES — os itens, a contraparte, a classificação; ou a outra\n// ponta da transferência; ou o ajuste do vínculo.\n// 3. CONFIRMAR — o que vai acontecer, em prosa, e COMO o dinheiro andou.\n//\n// O passo 3 usa o MESMO formulário de pagamento da fatura (`PaymentFields`):\n// uma segunda escolha de forma de pagamento seria um segundo vocabulário de\n// dinheiro nascendo, com as suas próprias regras de qual conta aceita o quê.\n// ---------------------------------------------------------------------------\n\n/** O que a pessoa decidiu que esta linha é. */\ntype Intent = 'link' | 'transfer' | 'bill'\n\nconst shortDate = (value: string) => {\n const [year, month, day] = value.split('-')\n return year && month && day ? `${day}/${month}/${year}` : value\n}\n\n/** YYYY-MM-DD ± days, in local time (a bare date parsed as UTC lands a day early in BRT). */\nconst shiftDate = (value: string, days: number) => {\n const d = new Date(`${value}T00:00:00`)\n if (Number.isNaN(d.getTime())) return value\n d.setDate(d.getDate() + days)\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nconst toAmountInput = (n: number) => round2(Math.max(0, n)).toFixed(2).replace('.', ',')\n\n/** Default window of the link search; results come ranked by name + amount + date. */\nconst LINK_DAYS = 3\nconst LINK_AMOUNT_TOLERANCE = 0.1\nconst WIDEN_DAYS = 15\n\nconst parseAmount = (value: string) => {\n const n = Number.parseFloat(value.replace(',', '.'))\n return Number.isFinite(n) ? n : undefined\n}\n\nconst round2 = (n: number) => Math.round((Number(n) || 0) * 100) / 100\n\nconst emptyItem = (): ReconcileBillItemInput => ({ description: '', quantity: 1, unitPrice: 0 })\n\n/** A linha do extrato, do jeito que ela aparece em todo passo. */\nfunction LinhaDoExtrato({ line, fmt }: { line: ImportedStatementLine; fmt: (n: number) => string }) {\n const isCredit = line.direction === 'credit'\n return (\n <div className=\"rounded-card border bg-muted/30 px-3 py-2.5\">\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"truncate text-sm font-medium\">{line.description || line.externalId}</span>\n <span className={`shrink-0 text-sm font-semibold ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {isCredit ? '+ ' : '− '}{fmt(line.amount)}\n </span>\n </div>\n <dl className=\"mt-1.5 grid grid-cols-2 gap-x-4 gap-y-0.5 text-[11px]\">\n <div className=\"flex gap-1\">\n <dt className=\"text-muted-foreground\">Data:</dt>\n <dd>{shortDate(line.date)}</dd>\n </div>\n {line.counterpartyName && (\n <div className=\"flex min-w-0 gap-1\">\n <dt className=\"shrink-0 text-muted-foreground\">Nome no extrato:</dt>\n <dd className=\"truncate\">{line.counterpartyName}</dd>\n </div>\n )}\n </dl>\n </div>\n )\n}\n\n/** Uma conta que a linha pode quitar ou amarrar. */\nfunction CandidatoBotao({ item, selected, onToggle, fmt, t }: {\n item: ResolvedCandidate\n selected: boolean\n onToggle: () => void\n fmt: (n: number) => string\n t: ReturnType<typeof useTranslation>\n}) {\n const { candidate: c, mode, openAmount } = item\n const parcela = c.movement.installmentNumber\n return (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={onToggle}\n aria-pressed={selected}\n className={`font-normal whitespace-normal justify-start ${`flex w-full items-center gap-3 rounded-md border p-2.5 text-left transition-colors ${\n selected ? 'border-primary bg-primary/5 ring-2 ring-primary/20' : 'hover:bg-muted/40'\n }`}`}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm\">\n {c.invoice?.contactName || c.movement.notes || c.invoice?.fiscalNumber || t('financial.reconciliation.match')}\n </p>\n <p className=\"flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[10px] text-muted-foreground\">\n <span>{shortDate(c.movement.dueDate)}</span>\n {c.invoice?.fiscalNumber && <span className=\"truncate\">#{c.invoice.fiscalNumber}{parcela ? ` · ${parcela}` : ''}</span>}\n {/* Machine-computed compatibility uses `magic`, like the suggestion card. */}\n {c.score > 0 && (\n <span className=\"inline-flex items-center rounded bg-magic/10 px-1 py-px font-medium text-magic-soft-foreground\">\n {t('financial.reconciliation.matchScore', { score: Math.round(c.score * 100) })}\n </span>\n )}\n {/* Open vs paid is money: treating a paid bill as open pays it twice. */}\n <span className={`inline-flex items-center rounded px-1 py-px font-medium ${\n mode === 'settle' ? 'bg-warning/10 text-warning' : 'bg-success/10 text-success'\n }`}>\n {mode === 'settle'\n ? t('financial.reconciliation.candidateOpen', { amount: fmt(openAmount) })\n : t('financial.reconciliation.candidatePaid')}\n </span>\n </p>\n </div>\n <span className=\"shrink-0 text-sm font-semibold\">{fmt(c.movement.amount)}</span>\n </Button>\n )\n}\n\n/** Um botão de escolha do passo 1 — grande, com o que ele significa embaixo. */\nfunction EscolhaCard({ icon: Icon, title, hint, active, onClick }: {\n icon: React.ElementType\n title: string\n hint: string\n active: boolean\n onClick: () => void\n}) {\n return (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={onClick}\n aria-pressed={active}\n className={`font-normal justify-start whitespace-normal flex w-full items-start gap-2.5 rounded-card border px-3 py-2.5 text-left transition-colors ${\n active ? 'border-primary bg-primary/5 ring-2 ring-primary/20' : 'hover:bg-muted/40'\n }`}\n >\n <Icon className={`mt-0.5 h-4 w-4 shrink-0 ${active ? 'text-primary' : 'text-muted-foreground'}`} aria-hidden />\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{title}</span>\n <span className=\"block text-[11px] leading-snug text-muted-foreground\">{hint}</span>\n </span>\n </Button>\n )\n}\n\nexport interface ReconcileFlowProps {\n line: ImportedStatementLine\n /**\n * Abre já decidido — é o caminho do botão da lista. `undefined` faz o passo 1\n * ser uma pergunta em aberto.\n */\n initialIntent?: Intent\n /** Opens with this entry already chosen — the list's «Conciliar» on a suggestion. */\n initialTarget?: ResolvedCandidate\n /** Step to open on: 1 lands on «Selecione a conta» when the intent is `link`. */\n initialStep?: number\n onClose: () => void\n onDone: () => void\n}\n\nexport function ReconcileFlow({ line, initialIntent, initialTarget, initialStep = 0, onClose, onDone }: ReconcileFlowProps) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const fmt = useCallback((n: number) => formatCurrency(n, currency), [currency])\n\n const [step, setStep] = useState(initialStep)\n const [intent, setIntent] = useState<Intent | null>(initialIntent ?? null)\n const [saving, setSaving] = useState(false)\n\n // --- o que a linha pode casar ---\n const [candidates, setCandidates] = useState<ResolvedCandidate[]>([])\n const [candidatesLoading, setCandidatesLoading] = useState(false)\n // The chosen item itself, so changing a filter afterwards does not unselect it.\n const [target, setTarget] = useState<ResolvedCandidate | null>(initialTarget ?? null)\n const targetId = target?.candidate.movement.id ?? null\n const [adjustments, setAdjustments] = useState<ReconcileAdjustment[]>([])\n // Paid in parts: this line pays its own amount and the bill keeps the rest open.\n const [partial, setPartial] = useState(false)\n useEffect(() => { setPartial(false) }, [target?.candidate.movement.id])\n\n // --- lançar como conta ---\n const [contactId, setContactId] = useState('')\n const [contactName, setContactName] = useState(line.counterpartyName ?? '')\n const [description, setDescription] = useState(line.description ?? '')\n const [items, setItems] = useState<ReconcileBillItemInput[]>([])\n const [accountId, setAccountId] = useState('')\n const [costCenterId, setCostCenterId] = useState('')\n const [dueDate, setDueDate] = useState(line.date)\n\n // --- transferência ---\n const [counterAccountId, setCounterAccountId] = useState('')\n const [transferNotes, setTransferNotes] = useState('')\n\n // --- comprovante ---\n const [receiptName, setReceiptName] = useState<string | null>(null)\n const [reading, setReading] = useState<ReceiptReading | null>(null)\n const [readingBusy, setReadingBusy] = useState(false)\n\n const [chart, setChart] = useState<ChartOfAccountsNode[]>([])\n const [costCenters, setCostCenters] = useState<CostCenter[]>([])\n const [contas, setContas] = useState<BankAccount[]>([])\n\n useEffect(() => {\n void provider.getChartOfAccounts()\n .then((nodes) => setChart(nodes.filter((n) => n.isActive && n.nodeType !== 'group')))\n .catch(() => setChart([]))\n void provider.getCostCenters().then(setCostCenters).catch(() => setCostCenters([]))\n // TODAS as contas: a do extrato é quem o passo 3 nomeia como destino do\n // dinheiro, e o seletor de transferência é que exclui ela (a conta do\n // extrato já é uma das pontas).\n void provider.getBankAccounts().then(setContas).catch(() => setContas([]))\n }, [provider, line.bankAccountId])\n\n // Os candidatos só interessam a quem escolheu «Vincular» — buscar antes é\n // gastar uma volta na rede por uma lista que a maioria nunca abre.\n useEffect(() => {\n if (intent !== 'link' || !provider.suggestReconciliation || provider.searchReconciliationTargets) return\n let cancelled = false\n setCandidatesLoading(true)\n provider.suggestReconciliation(line.id)\n .then((raw) => { if (!cancelled) setCandidates(resolveCandidates(raw)) })\n .catch(() => { if (!cancelled) setCandidates([]) })\n .finally(() => { if (!cancelled) setCandidatesLoading(false) })\n return () => { cancelled = true }\n }, [intent, provider, line.id])\n\n // --- busca livre (o «Vincular manualmente» do V1) ---\n const podeBuscar = !!provider.searchReconciliationTargets\n // Draft fields; «Filtrar» turns them into the applied query — the same\n // contract as the FilterPanel on the reconciliation page behind this modal.\n const filtrosIniciais = () => ({\n dueFrom: shiftDate(line.date, -LINK_DAYS),\n dueTo: shiftDate(line.date, LINK_DAYS),\n status: 'all' as NonNullable<ReconciliationTargetQuery['status']>,\n texto: '',\n min: toAmountInput(line.amount * (1 - LINK_AMOUNT_TOLERANCE)),\n max: toAmountInput(line.amount * (1 + LINK_AMOUNT_TOLERANCE)),\n })\n const [rascunho, setRascunho] = useState(filtrosIniciais)\n const [aplicado, setAplicado] = useState(filtrosIniciais)\n const mudarFiltro = (patch: Partial<ReturnType<typeof filtrosIniciais>>) =>\n setRascunho((prev) => ({ ...prev, ...patch }))\n const filtrosPendentes = JSON.stringify(rascunho) !== JSON.stringify(aplicado)\n const [resultados, setResultados] = useState<ResolvedCandidate[]>([])\n const [paginaBusca, setPaginaBusca] = useState(1)\n const [temMais, setTemMais] = useState(false)\n const [buscando, setBuscando] = useState(false)\n const buscaSeq = useRef(0)\n\n const buscar = useCallback(async (pagina: number) => {\n if (!provider.searchReconciliationTargets) return\n const seq = ++buscaSeq.current\n setBuscando(true)\n try {\n const res = await provider.searchReconciliationTargets(line.id, {\n dueFrom: aplicado.dueFrom || undefined,\n dueTo: aplicado.dueTo || undefined,\n status: aplicado.status,\n search: aplicado.texto.trim() || undefined,\n amountMin: parseAmount(aplicado.min),\n amountMax: parseAmount(aplicado.max),\n page: pagina,\n })\n if (seq !== buscaSeq.current) return\n const novos = resolveCandidates(res.data)\n setResultados((prev) => {\n if (pagina === 1) return novos\n const vistos = new Set(prev.map((r) => r.candidate.movement.id))\n return [...prev, ...novos.filter((r) => !vistos.has(r.candidate.movement.id))]\n })\n setPaginaBusca(pagina)\n setTemMais(res.hasMore)\n } catch (e) {\n if (seq !== buscaSeq.current) return\n toast.error(e instanceof Error ? e.message : t('common.error'))\n } finally {\n if (seq === buscaSeq.current) setBuscando(false)\n }\n }, [provider, line.id, aplicado, t])\n\n // Only while «Selecione a conta» is on screen, and once per applied filter:\n // picking «Vincular» in step 1 or stepping back and forth costs no request.\n const ultimaBusca = useRef<string | null>(null)\n const naSelecao = intent === 'link' && step === 1\n useEffect(() => {\n if (!naSelecao || !podeBuscar) return\n const chave = JSON.stringify(aplicado)\n if (ultimaBusca.current === chave) return\n ultimaBusca.current = chave\n void buscar(1)\n }, [naSelecao, podeBuscar, aplicado, buscar])\n\n // The list obeys the filter summary shown above it; the matcher's guesses\n // (any date) only stand in when the provider cannot search.\n const contasEncontradas = useMemo(() => {\n const lista = podeBuscar ? resultados : candidates\n // The suggestion that opened the flow stays visible even outside the filters.\n return initialTarget && !lista.some((c) => c.candidate.movement.id === initialTarget.candidate.movement.id)\n ? [initialTarget, ...lista]\n : lista\n }, [podeBuscar, resultados, candidates, initialTarget])\n\n const ampliarBusca = () => {\n const amplo = { ...rascunho, dueFrom: shiftDate(line.date, -WIDEN_DAYS), dueTo: shiftDate(line.date, WIDEN_DAYS), min: '', max: '' }\n setRascunho(amplo)\n setAplicado(amplo)\n }\n\n\n\n const contaDoExtrato = useMemo(\n () => contas.find((a) => a.id === line.bankAccountId) ?? null,\n [contas, line.bankAccountId],\n )\n /** A outra ponta da transferência: a conta do extrato já é a primeira. */\n const outrasContas = useMemo(\n () => contas.filter((a) => a.id !== line.bankAccountId),\n [contas, line.bankAccountId],\n )\n\n // Uma saída vira conta a pagar, uma entrada vira conta a receber — e isso NÃO\n // é uma escolha. O V1 oferece um seletor D/C aqui, e ele só serve para criar\n // um lançamento que contradiz o extrato que o gerou.\n const isOut = line.direction === 'debit'\n const contactLookup = useMemo<EntityLookup>(\n () => createFinancialCounterpartyLookup(line.direction),\n [line.direction],\n )\n\n // Uma saída classifica em despesa, uma entrada em receita. Oferecer o plano\n // inteiro faz a pessoa procurar num lugar onde a resposta não está.\n const planoDoTipo = useMemo(() => {\n // Só as FOLHAS: um plano de contas é quase todo estrutura, e oferecer os\n // pais é uma parede de títulos que a pessoa não pode escolher.\n const folhas = postableAccounts(chart)\n const natureza = isOut ? 'expense' : 'revenue'\n const doTipo = folhas.filter((a) => a.accountType === natureza)\n return doTipo.length > 0 ? doTipo : folhas\n }, [chart, isOut])\n\n /** Casa com o código OU com o nome — quem já sabe o código digita o código. */\n const buscaNoPlano = useCallback((query: string) => {\n const q = query.trim().toLocaleLowerCase('pt-BR')\n const rows = q\n ? planoDoTipo.filter((a) => `${a.code ?? ''} ${a.name}`.toLocaleLowerCase('pt-BR').includes(q))\n : planoDoTipo\n // SEM subtítulo: `accountType` é `expense`/`revenue`, vocabulário do\n // schema e não do balcão — e ele seria a mesma palavra em toda linha,\n // porque a lista já está recortada pela natureza da transação.\n return rows.slice(0, 50).map((a) => ({ id: a.id, label: accountLabel(a) }))\n }, [planoDoTipo])\n\n const descricaoPadrao = (type: ReconcileAdjustment['type']) =>\n type === 'interest' ? t('financial.reconciliation.adjustmentDefaultInterest')\n : type === 'fine' ? t('financial.reconciliation.adjustmentDefaultFine')\n : isOut ? t('financial.reconciliation.adjustmentDefaultDiscountOut')\n : t('financial.reconciliation.adjustmentDefaultDiscountIn')\n\n /** Chart leaves of the adjustment's own nature (its entry runs in its own direction). */\n const buscaPlanoDoAjuste = useCallback((adj: ReconcileAdjustment, query: string) => {\n const natureza = adjustmentDirection(line.direction, adj.type) === 'debit' ? 'expense' : 'revenue'\n const folhas = postableAccounts(chart)\n const doTipo = folhas.filter((a) => a.accountType === natureza)\n const base = doTipo.length > 0 ? doTipo : folhas\n const q = query.trim().toLocaleLowerCase('pt-BR')\n return (q ? base.filter((a) => `${a.code ?? ''} ${a.name}`.toLocaleLowerCase('pt-BR').includes(q)) : base)\n .slice(0, 50).map((a) => ({ id: a.id, label: accountLabel(a) }))\n }, [chart, line.direction])\n\n // Quanto a conciliação quita: uma conta em aberto quita pelo SALDO DELA (a\n // diferença vira ajuste); uma conta nova quita pelo valor da linha inteiro.\n const valorAQuitar = intent === 'link' && target && !partial ? target.openAmount : round2(line.amount)\n const quita = intent === 'bill' || (intent === 'link' && target?.mode === 'settle')\n\n // --- comprovante lido pela IA ---\n const leitor = useMemo(() => {\n // Ler um comprovante é uma pergunta, não um diálogo: pela porta de one-shot,\n // que não sabe mandar identidade nem entrar em thread.\n const ask = createOneShotAsk()\n return ask ? createAgentReceiptReader({ chat: ask, toInlineFile, shrinkForVision }) : null\n }, [])\n\n async function lerComprovante(file: File) {\n if (!leitor) return\n if (file.size > 10 * 1024 * 1024) {\n toast.error(t('financial.reconciliation.receiptTooBig'))\n return\n }\n setReceiptName(file.name)\n setReadingBusy(true)\n try {\n const lido = await leitor(file)\n setReading(lido)\n // O que o comprovante acrescenta entra; o que o EXTRATO já sabe fica\n // travado — valor, data e conta são do banco, e o papel não os corrige.\n if (lido.contactName && !contactId) setContactName(lido.contactName)\n if (lido.items?.length) {\n setItems(lido.items)\n setIntent((prev) => prev ?? 'bill')\n }\n if (lido.accountHint && !accountId) {\n const casa = chart.find((a) =>\n a.name.toLocaleLowerCase('pt-BR').includes(lido.accountHint!.toLocaleLowerCase('pt-BR')))\n if (casa) setAccountId(casa.id)\n }\n toast.success(t('financial.reconciliation.receiptRead'))\n } catch (e) {\n toast.error(e instanceof Error ? e.message : t('common.error'))\n } finally {\n setReadingBusy(false)\n }\n }\n\n // --- o que bloqueia cada passo ---\n const somaItens = sumItems(items.filter((i) => i.description.trim()))\n const erroItens = itemsMismatch(items, line.amount, fmt)\n const gap = target ? adjustmentGap(line.amount, target.openAmount) : 0\n // A line smaller than the bill may be a partial payment instead of a gap to explain.\n const podeParcial = intent === 'link' && target?.mode === 'settle' && gap <= -0.01\n const parcial = podeParcial && partial\n const erroAjuste = intent === 'link' && target?.mode === 'settle' && Math.abs(gap) >= 0.01 && !parcial\n ? adjustmentsMismatch(adjustments, gap, fmt)\n ?? (adjustments.some((a) => round2(a.amount) > 0 && !a.accountId)\n ? t('financial.reconciliation.adjustmentNeedsAccount')\n : null)\n : null\n\n const bloqueioPasso1 = !intent ? t('financial.reconciliation.pickIntent') : null\n const bloqueioSelecao = intent === 'link' && !target ? t('financial.reconciliation.pickCandidate') : null\n\n const bloqueioPasso2 =\n intent === 'transfer' ? (counterAccountId ? null : t('financial.reconciliation.pickAccount'))\n : intent === 'bill' ? (description.trim() || items.some((i) => i.description.trim())\n ? erroItens\n : t('financial.reconciliation.needDescription'))\n : erroAjuste\n\n // O passo 3 não tem o que bloquear: tudo que o pagamento precisa saber já\n // veio do extrato. Só a gravação em curso segura o botão.\n const bloqueioPasso3 = saving ? t('common.saving') : null\n\n async function confirmar() {\n if (saving || bloqueioPasso3) return\n setSaving(true)\n try {\n if (intent === 'transfer') {\n await provider.reconcileAsTransfer!({\n bankMovementId: line.id,\n counterAccountId,\n notes: transferNotes.trim() || undefined,\n })\n toast.success(t('financial.reconciliation.transferDone'))\n } else if (intent === 'bill') {\n await provider.reconcileAsBill!({\n bankMovementId: line.id,\n contactId: contactId || undefined,\n contactName: contactName.trim() || undefined,\n description: description.trim() || undefined,\n accountId: accountId || undefined,\n costCenterId: costCenterId || undefined,\n dueDate,\n items: items.filter((i) => i.description.trim()),\n })\n toast.success(t('financial.reconciliation.billCreated'))\n } else if (intent === 'link' && target) {\n await provider.reconcileMovement!({\n bankMovementId: line.id,\n matchedMovementId: target.candidate.movement.id,\n mode: target.mode,\n adjustments: target.mode === 'settle' && adjustments.length && !parcial ? adjustments : undefined,\n partial: parcial || undefined,\n })\n toast.success(\n parcial\n ? t('financial.reconciliation.partialDone', { rest: fmt(round2(target.openAmount - line.amount)) })\n : target.mode === 'settle'\n ? t('financial.reconciliation.settled')\n : t('financial.reconciliation.linked'),\n )\n }\n onDone()\n } catch (e) {\n // UM ERRO CUJO UNICO RASTRO E UM TOAST QUE SOME NAO EXISTE.\n //\n // Conciliar escreve em quatro lugares (fatura, parcela, pagamento,\n // linha). Quando um deles recusa, \"não consegui\" na tela não diz qual —\n // e a linha fica pendente sem ninguém saber por quê. O toast é para quem\n // opera; isto é para quem conserta.\n console.error('[conciliação] falhou ao confirmar', { intent, lineId: line.id, erro: e })\n toast.error(e instanceof Error ? e.message : t('common.error'))\n } finally {\n setSaving(false)\n }\n }\n\n // -------------------------------------------------------------------------\n // Passo 1 — Como você quer classificar esta transação?\n // -------------------------------------------------------------------------\n const passoClassificar = (\n <div className=\"fz-container space-y-3\">\n <LinhaDoExtrato line={line} fmt={fmt} />\n\n {/* O comprovante vem ANTES da escolha porque ele muda a resposta: um\n cupom com itens quase sempre quer dizer «lançar como conta». */}\n <div className=\"rounded-card border border-dashed px-3 py-2.5\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Paperclip className=\"h-3.5 w-3.5 text-muted-foreground\" aria-hidden />\n <span className=\"font-medium\">{t('financial.reconciliation.attachReceipt')}</span>\n </div>\n <p className=\"mt-1 text-[11px] leading-snug text-muted-foreground\">\n {t('financial.reconciliation.attachReceiptHint')}\n </p>\n {receiptName && (\n <div className=\"mt-2 flex items-center gap-2 rounded bg-muted/50 px-2 py-1 text-[11px]\">\n <Paperclip className=\"h-3 w-3 shrink-0\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate\">{receiptName}</span>\n {readingBusy && <Loader2 className=\"h-3 w-3 shrink-0 animate-spin\" aria-hidden />}\n </div>\n )}\n {reading?.warnings?.map((w) => (\n <p key={w} className=\"mt-1.5 flex items-start gap-1 text-[11px] text-warning\">\n <TriangleAlert className=\"mt-px h-3 w-3 shrink-0\" aria-hidden />{w}\n </p>\n ))}\n <div className=\"mt-2\">\n {/* Sem agente no app o botão não aparece: um botão que não funciona\n custa mais que a ausência dele. */}\n {leitor ? (\n <>\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={readingBusy || saving}\n onClick={() => document.getElementById(`recon-receipt-${line.id}`)?.click()}\n >\n {readingBusy\n ? <><Loader2 className=\"h-3 w-3 animate-spin\" aria-hidden />{t('financial.reconciliation.receiptReading')}</>\n : <><Sparkles className=\"h-3 w-3\" aria-hidden />{receiptName ? t('financial.reconciliation.receiptReplace') : t('financial.reconciliation.receiptRead_action')}</>}\n </Button>\n <input\n id={`recon-receipt-${line.id}`}\n type=\"file\"\n accept=\"image/*,application/pdf\"\n className=\"hidden\"\n onChange={(e) => {\n const f = e.target.files?.[0]\n if (f) void lerComprovante(f)\n e.target.value = ''\n }}\n />\n </>\n ) : (\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.reconciliation.receiptNoAgent')}</p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <p className=\"text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n {t('financial.reconciliation.howToClassify')}\n </p>\n <EscolhaCard\n icon={Link2}\n title={t('financial.reconciliation.intentLink')}\n hint={t('financial.reconciliation.intentLinkHint')}\n active={intent === 'link'}\n onClick={() => setIntent('link')}\n />\n <EscolhaCard\n icon={Receipt}\n title={isOut ? t('financial.reconciliation.intentBillOut') : t('financial.reconciliation.intentBillIn')}\n hint={t('financial.reconciliation.intentBillHint')}\n active={intent === 'bill'}\n onClick={() => setIntent('bill')}\n />\n <EscolhaCard\n icon={ArrowRightLeft}\n title={t('financial.reconciliation.intentTransfer')}\n hint={t('financial.reconciliation.intentTransferHint')}\n active={intent === 'transfer'}\n onClick={() => setIntent('transfer')}\n />\n </div>\n\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Passo 2 (vincular) — Selecione a conta: o «Vincular manualmente» do V1\n // -------------------------------------------------------------------------\n const statusDaConta = (item: ResolvedCandidate) =>\n item.mode === 'link_only' ? t('financial.reconciliation.searchStatusPaid')\n : item.candidate.movement.status === 'overdue' ? t('financial.reconciliation.statusOverdue')\n : t('financial.reconciliation.searchStatusOpen')\n const valorAConciliar = (item: ResolvedCandidate) =>\n item.mode === 'link_only' ? item.candidate.movement.amount : item.openAmount\n const parcelaDe = (item: ResolvedCandidate) => {\n const n = item.candidate.movement.installmentNumber ?? 1\n return item.candidate.installmentCount ? `${n}/${item.candidate.installmentCount}` : String(n)\n }\n const filtrar = () => {\n if (filtrosPendentes) setAplicado(rascunho)\n else void buscar(1) // same filters on purpose: refresh\n }\n\n const colunasDaBusca: ColumnDef<ResolvedCandidate>[] = [\n {\n id: 'pick',\n header: '',\n meta: { className: 'w-8' },\n cell: ({ row: { original: item } }) => (\n <span\n aria-hidden\n className={`block h-3.5 w-3.5 rounded-full border ${\n targetId === item.candidate.movement.id ? 'border-[4px] border-primary' : 'border-input'\n }`}\n />\n ),\n },\n {\n id: 'due',\n header: t('financial.reconciliation.colDue'),\n meta: { className: 'whitespace-nowrap' },\n cell: ({ row: { original: item } }) => shortDate(item.candidate.movement.dueDate),\n },\n {\n id: 'counterparty',\n header: t('financial.reconciliation.colCounterparty'),\n meta: { className: 'max-w-[12rem] truncate font-medium' },\n cell: ({ row: { original: item } }) => (\n <span title={item.candidate.invoice?.contactName}>{item.candidate.invoice?.contactName || '—'}</span>\n ),\n },\n {\n id: 'description',\n header: t('financial.reconciliation.colDescription'),\n meta: { className: 'max-w-[14rem] truncate' },\n cell: ({ row: { original: { candidate: c } } }) => (\n <span title={c.movement.notes}>\n {c.invoice?.fiscalNumber && <span className=\"mr-1 text-muted-foreground\">#{c.invoice.fiscalNumber}</span>}\n {c.movement.notes}\n </span>\n ),\n },\n {\n id: 'installment',\n header: t('financial.reconciliation.colInstallment'),\n meta: { className: 'whitespace-nowrap' },\n cell: ({ row: { original: item } }) => parcelaDe(item),\n },\n {\n id: 'status',\n header: t('financial.reconciliation.searchStatus'),\n meta: { className: 'whitespace-nowrap' },\n cell: ({ row: { original: item } }) => (\n <span className={`rounded px-1.5 py-0.5 text-[10px] font-medium ${\n item.mode === 'link_only' ? 'bg-success/10 text-success'\n : item.candidate.movement.status === 'overdue' ? 'bg-destructive/10 text-destructive'\n : 'bg-muted text-foreground'\n }`}>\n {statusDaConta(item)}\n </span>\n ),\n },\n {\n id: 'amount',\n header: t('financial.reconciliation.colToReconcile'),\n meta: { className: 'whitespace-nowrap text-right font-semibold' },\n cell: ({ row: { original: item } }) => fmt(valorAConciliar(item)),\n },\n {\n id: 'delta',\n header: t('financial.reconciliation.colDelta'),\n meta: { className: 'whitespace-nowrap text-right text-[11px]' },\n cell: ({ row: { original: item } }) => {\n const delta = round2(line.amount - valorAConciliar(item))\n return Math.abs(delta) < 0.01\n ? <span className=\"text-success\">OK</span>\n : <span className=\"text-destructive\">{`${delta > 0 ? '+' : '−'}${fmt(Math.abs(delta))}`}</span>\n },\n },\n ]\n\n const passoSelecionar = (\n <div className=\"fz-container space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.reconciliation.selectBillFor', {\n date: shortDate(line.date),\n description: line.description || line.externalId,\n })}{' '}\n <span className=\"font-semibold text-foreground\">{fmt(line.amount)}</span>\n </p>\n\n {podeBuscar && (\n <FilterPanel\n title={t('financial.reconciliation.filtersTitle')}\n dirty={filtrosPendentes}\n onApply={filtrar}\n applyLabel={t('financial.reconciliation.filter')}\n pendingTitle={t('financial.reconciliation.filterPending')}\n pendingHint={t('financial.reconciliation.searchPendingHint')}\n busy={buscando}\n moreLabel={t('financial.reconciliation.filterMore')}\n lessLabel={t('financial.reconciliation.filterLess')}\n advancedCount={rascunho.status !== 'all' ? 1 : 0}\n advanced={\n <FilterPanelField label={t('financial.reconciliation.searchStatus')}>\n <SegmentedControl\n aria-label={t('financial.reconciliation.searchStatus')}\n value={rascunho.status}\n onChange={(v) => mudarFiltro({ status: v as typeof rascunho.status })}\n options={[\n { value: 'all', label: t('financial.reconciliation.searchStatusAllShort') },\n { value: 'open', label: t('financial.reconciliation.searchStatusOpen') },\n { value: 'paid', label: t('financial.reconciliation.searchStatusPaid') },\n ]}\n />\n </FilterPanelField>\n }\n footer={\n <Input\n value={rascunho.texto}\n placeholder={t('financial.reconciliation.searchText')}\n aria-label={t('financial.reconciliation.searchText')}\n onChange={(e) => mudarFiltro({ texto: e.target.value })}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n e.preventDefault()\n filtrar()\n }}\n />\n }\n >\n <FilterPanelField label={t('financial.reconciliation.searchDueFrom')}>\n <DatePicker variant=\"input\" format=\"numeric\" className=\"w-full\" value={rascunho.dueFrom} onChange={(v) => mudarFiltro({ dueFrom: v })} />\n </FilterPanelField>\n <FilterPanelField label={t('financial.reconciliation.searchDueTo')}>\n <DatePicker variant=\"input\" format=\"numeric\" className=\"w-full\" value={rascunho.dueTo} onChange={(v) => mudarFiltro({ dueTo: v })} />\n </FilterPanelField>\n <FilterPanelField label={t('financial.reconciliation.searchAmountMin')}>\n <Input inputMode=\"decimal\" placeholder=\"0,00\" value={rascunho.min} onChange={(e) => mudarFiltro({ min: e.target.value })} className=\"h-[30px] px-2\" />\n </FilterPanelField>\n <FilterPanelField label={t('financial.reconciliation.searchAmountMax')}>\n <Input inputMode=\"decimal\" placeholder=\"0,00\" value={rascunho.max} onChange={(e) => mudarFiltro({ max: e.target.value })} className=\"h-[30px] px-2\" />\n </FilterPanelField>\n </FilterPanel>\n )}\n\n {(buscando || candidatesLoading) && contasEncontradas.length === 0 ? (\n <><Skeleton className=\"h-10 w-full rounded-md\" /><Skeleton className=\"h-10 w-full rounded-md\" /></>\n ) : contasEncontradas.length === 0 ? (\n <div className=\"space-y-2 rounded-card border py-6 text-center\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.reconciliation.searchEmpty')}</p>\n {podeBuscar && (\n <Button size=\"sm\" variant=\"outline\" onClick={ampliarBusca}>\n {t('financial.reconciliation.searchWiden')}\n </Button>\n )}\n </div>\n ) : (\n <>\n {/* Phone: the card list — a seven-column table does not fit 390px. */}\n <div className=\"space-y-2 sm:hidden\">\n {contasEncontradas.map((item) => (\n <CandidatoBotao\n key={item.candidate.movement.id}\n item={item}\n selected={targetId === item.candidate.movement.id}\n onToggle={() => setTarget(targetId === item.candidate.movement.id ? null : item)}\n fmt={fmt}\n t={t}\n />\n ))}\n </div>\n <div className=\"hidden sm:block\">\n <DataTable\n compact\n columns={colunasDaBusca}\n data={contasEncontradas}\n getRowId={(item) => item.candidate.movement.id}\n onRowClick={(item) => setTarget(targetId === item.candidate.movement.id ? null : item)}\n rowClassName={(item) => (targetId === item.candidate.movement.id ? 'bg-primary/10' : undefined)}\n />\n </div>\n </>\n )}\n {temMais && (\n <div className=\"flex justify-center\">\n <Button size=\"sm\" variant=\"ghost\" disabled={buscando} onClick={() => void buscar(paginaBusca + 1)}>\n {buscando && <Loader2 className=\"h-3 w-3 animate-spin\" aria-hidden />}\n {t('financial.reconciliation.searchMore')}\n </Button>\n </div>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Passo 2 — Os detalhes, conforme a escolha\n // -------------------------------------------------------------------------\n const passoDetalhes = (\n <div className=\"fz-container space-y-3\">\n {intent === 'bill' && (\n <>\n <div className=\"fz-fields-2\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {isOut ? t('financial.reconciliation.supplier') : t('financial.reconciliation.payer')}\n </label>\n <FinancialCounterpartySearchSelect\n lookup={contactLookup}\n value={contactId}\n displayValue={contactName}\n onChange={(id, option) => {\n setContactId(id)\n setContactName(option?.label ?? '')\n }}\n disabled={saving}\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('financial.reconciliation.dueDate')}\n </label>\n <Input type=\"date\" value={dueDate} onChange={(e) => setDueDate(e.target.value)} />\n </div>\n </div>\n\n <div>\n <label className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('financial.reconciliation.billDescription')} *\n </label>\n <Input value={description} onChange={(e) => setDescription(e.target.value)} />\n </div>\n\n <div>\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n {t('financial.reconciliation.items')}\n </label>\n <Button size=\"sm\" variant=\"outline\" onClick={() => setItems((prev) => [...prev, emptyItem()])}>\n <Plus className=\"h-3 w-3\" aria-hidden />{t('financial.reconciliation.addItem')}\n </Button>\n </div>\n {items.length === 0 ? (\n <p className=\"mt-1.5 text-[11px] italic text-muted-foreground\">\n {t('financial.reconciliation.noItemsHint')}\n </p>\n ) : (\n <div className=\"mt-1.5 space-y-1.5\">\n {items.map((item, idx) => (\n <div key={idx} className=\"flex items-end gap-1.5\">\n <div className=\"min-w-0 flex-1\">\n <Input\n aria-label={t('financial.reconciliation.itemDescription')}\n placeholder={t('financial.reconciliation.itemDescription')}\n value={item.description}\n onChange={(e) => setItems((prev) => prev.map((x, i) => i === idx ? { ...x, description: e.target.value } : x))}\n />\n </div>\n <div className=\"w-16 shrink-0\">\n <Input\n aria-label={t('financial.reconciliation.itemQuantity')}\n type=\"number\"\n min=\"0\"\n step=\"0.001\"\n value={item.quantity}\n onChange={(e) => setItems((prev) => prev.map((x, i) => i === idx ? { ...x, quantity: Number(e.target.value) } : x))}\n />\n </div>\n <div className=\"w-24 shrink-0\">\n <Input\n aria-label={t('financial.reconciliation.itemUnitPrice')}\n type=\"number\"\n min=\"0\"\n step=\"0.01\"\n value={item.unitPrice}\n onChange={(e) => setItems((prev) => prev.map((x, i) => i === idx ? { ...x, unitPrice: Number(e.target.value) } : x))}\n />\n </div>\n <Hint label={t('common.delete')}>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={t('common.delete')}\n onClick={() => setItems((prev) => prev.filter((_, i) => i !== idx))}\n >\n <Trash2 className=\"h-3.5 w-3.5\" aria-hidden />\n </Button>\n </Hint>\n </div>\n ))}\n {/* O extrato é a fonte da verdade do valor. Quando os itens não\n fecham, a tela DIZ de quanto é a diferença — em vez de\n escolher um dos dois em silêncio. */}\n <div className={`flex justify-between rounded-md px-2 py-1.5 text-[11px] ${\n erroItens ? 'bg-destructive/10 text-destructive' : 'bg-muted/40'\n }`}>\n <span>{t('financial.reconciliation.itemsSum')}: <strong>{fmt(somaItens)}</strong></span>\n <span>{t('financial.reconciliation.statementTotal')}: <strong>{fmt(line.amount)}</strong></span>\n </div>\n {erroItens && <p className=\"text-[11px] text-destructive\">{erroItens}</p>}\n </div>\n )}\n </div>\n\n <div className=\"fz-fields-2\">\n <div>\n {/* Busca, nao <select>: o plano do Artorius tem 88 entradas e a\n lista nativa obriga a rolar atras de um codigo que a pessoa ja\n sabe de cor. O MESMO SearchSelect da fatura. */}\n <SearchSelect\n label={t('financial.reconciliation.chartAccount')}\n value={accountId}\n displayValue={planoDoTipo.find((a) => a.id === accountId)?.name}\n placeholder={t('financial.reconciliation.chartAccountPlaceholder')}\n minChars={0}\n loadOnOpen\n noResultsLabel={t('financial.reconciliation.chartAccountNone')}\n clearLabel=\"Limpar\"\n onSearch={buscaNoPlano}\n onChange={(id) => setAccountId(id)}\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">{t('financial.reconciliation.chartAccountHint')}</p>\n </div>\n {costCenters.length > 0 && (\n <div>\n <SearchSelect\n label={t('financial.reconciliation.costCenter')}\n value={costCenterId}\n displayValue={costCenters.find((c) => c.id === costCenterId)?.name}\n placeholder={t('financial.reconciliation.costCenterPlaceholder')}\n minChars={0}\n loadOnOpen\n noResultsLabel={t('financial.reconciliation.costCenterPlaceholder')}\n clearLabel=\"Limpar\"\n onSearch={(q) => costCenters\n .filter((c) => c.name.toLocaleLowerCase('pt-BR').includes(q.trim().toLocaleLowerCase('pt-BR')))\n .map((c) => ({ id: c.id, label: c.name }))}\n onChange={(id) => setCostCenterId(id)}\n />\n </div>\n )}\n </div>\n </>\n )}\n\n {intent === 'transfer' && (\n <>\n <div>\n {/* O rótulo muda com a direção porque a pergunta muda: numa saída a\n pessoa escolhe PARA ONDE o dinheiro foi, numa entrada DE ONDE\n ele veio. Um rótulo só faz metade nascer invertida. */}\n <label className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {isOut ? t('financial.reconciliation.transferTo') : t('financial.reconciliation.transferFrom')} *\n </label>\n <Select value={counterAccountId} onValueChange={setCounterAccountId}>\n <SelectTrigger><SelectValue placeholder={t('financial.reconciliation.pickAccount')} /></SelectTrigger>\n <SelectContent>\n {outrasContas.map((a) => <SelectItem key={a.id} value={a.id}>{a.name}</SelectItem>)}\n </SelectContent>\n </Select>\n <p className=\"mt-1 text-[10px] text-muted-foreground\">{t('financial.reconciliation.transferHint')}</p>\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('financial.reconciliation.transferNotes')}\n </label>\n <Input value={transferNotes} onChange={(e) => setTransferNotes(e.target.value)} />\n </div>\n </>\n )}\n\n {intent === 'link' && target && (\n <>\n <div className=\"rounded-card border p-3 text-sm\">\n <p className=\"font-medium\">\n {target.candidate.invoice?.contactName || target.candidate.movement.notes || t('financial.reconciliation.match')}\n </p>\n <dl className=\"mt-1.5 grid grid-cols-2 gap-x-4 gap-y-0.5 text-[11px]\">\n <div className=\"flex gap-1\">\n <dt className=\"text-muted-foreground\">{t('financial.reconciliation.dueDate')}:</dt>\n <dd>{shortDate(target.candidate.movement.dueDate)}</dd>\n </div>\n <div className=\"flex gap-1\">\n <dt className=\"text-muted-foreground\">{t('financial.reconciliation.billAmount')}:</dt>\n <dd>{fmt(target.candidate.movement.amount)}</dd>\n </div>\n </dl>\n </div>\n\n {target.mode === 'link_only' ? (\n <p className=\"rounded-card border border-success/40 bg-success/5 px-3 py-2.5 text-[11px] leading-snug\">\n {t('financial.reconciliation.linkOnlyExplain')}\n </p>\n ) : Math.abs(gap) < 0.01 ? (\n <p className=\"text-[11px] text-muted-foreground\">{t('financial.reconciliation.noAdjustmentNeeded')}</p>\n ) : (\n <div className=\"space-y-2\">\n {/* A diferença existe e ela tem nome. `financial_receive_payment`\n recusa pagar mais que o saldo em aberto (23514) — e recusa com\n razão: uma parcela de 100 nunca foi de 112. Cada ajuste nasce\n como um lançamento próprio, classificado. */}\n {podeParcial && (\n <div className=\"grid gap-2 sm:grid-cols-2\" role=\"radiogroup\" aria-label={t('financial.reconciliation.partialQuestion')}>\n {[\n { on: true, title: t('financial.reconciliation.partialTitle'), line: t('financial.reconciliation.partialLine', { rest: fmt(round2((target?.openAmount ?? 0) - line.amount)) }) },\n { on: false, title: t('financial.reconciliation.gapTitle'), line: t('financial.reconciliation.gapLine') },\n ].map((opt) => (\n <Button variant=\"bare\" size=\"bare\"\n key={String(opt.on)}\n type=\"button\"\n role=\"radio\"\n aria-checked={partial === opt.on}\n onClick={() => setPartial(opt.on)}\n className={`font-normal whitespace-normal justify-start rounded-card border px-3 py-2.5 text-left transition-colors ${partial === opt.on ? 'border-primary bg-primary/5' : 'hover:bg-muted/40'}`}\n >\n <span className=\"block text-sm font-medium\">{opt.title}</span>\n <span className=\"mt-0.5 block text-[11px] leading-snug text-muted-foreground\">{opt.line}</span>\n </Button>\n ))}\n </div>\n )}\n {parcial ? (\n <p className=\"rounded-card border border-primary/30 bg-primary/5 px-3 py-2 text-[11px] leading-snug\">\n {t('financial.reconciliation.partialExplain', { paid: fmt(round2(line.amount)), rest: fmt(round2((target?.openAmount ?? 0) - line.amount)) })}\n </p>\n ) : (<>\n <p className=\"rounded-card border border-warning/40 bg-warning/5 px-3 py-2 text-[11px] leading-snug\">\n {t(isOut ? 'financial.reconciliation.adjustmentNeeded' : 'financial.reconciliation.adjustmentNeededIn', {\n gap: fmt(Math.abs(gap)),\n side: gap > 0\n ? t('financial.reconciliation.adjustmentMore')\n : t('financial.reconciliation.adjustmentLess'),\n })}\n </p>\n {adjustments.map((adj, idx) => {\n const mudar = (patch: Partial<ReconcileAdjustment>) =>\n setAdjustments((prev) => prev.map((x, i) => i === idx ? { ...x, ...patch } : x))\n return (\n <div key={idx} className=\"flex items-start gap-2 rounded-card border p-2.5\">\n {/* One 2×2 grid so both rows share the same columns; the bin sits beside it. */}\n <div className=\"grid min-w-0 flex-1 items-end gap-2 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('financial.reconciliation.adjustmentType')}\n </label>\n <Select\n value={adj.type}\n onValueChange={(v) => {\n const type = v as ReconcileAdjustment['type']\n // The default follows the type; a description someone wrote stays.\n const escrita = adj.description?.trim() && adj.description !== descricaoPadrao(adj.type)\n mudar(escrita ? { type } : { type, description: descricaoPadrao(type) })\n }}\n >\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"interest\">{t('financial.reconciliation.interest')}</SelectItem>\n <SelectItem value=\"fine\">{t('financial.reconciliation.fine')}</SelectItem>\n <SelectItem value=\"discount\">{t('financial.reconciliation.discount')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <CurrencyInput\n label={t('financial.reconciliation.adjustmentAmount')}\n value={adj.amount}\n onChange={(v) => mudar({ amount: v })}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n {/* Like V1: the adjustment is its own entry, so it needs its\n own classification — interest paid is an expense, a\n discount obtained is revenue. */}\n <SearchSelect\n label={`${t('financial.reconciliation.chartAccount')} *`}\n value={adj.accountId ?? ''}\n displayValue={chart.find((a) => a.id === adj.accountId)?.name}\n placeholder={t('financial.reconciliation.chartAccountPlaceholder')}\n minChars={0}\n loadOnOpen\n noResultsLabel={t('financial.reconciliation.chartAccountNone')}\n clearLabel=\"Limpar\"\n onSearch={(q) => buscaPlanoDoAjuste(adj, q)}\n onChange={(id) => mudar({ accountId: id || undefined })}\n />\n <div>\n <label className=\"mb-1 block text-xs font-medium text-muted-foreground\">\n {t('financial.reconciliation.adjustmentDescription')}\n </label>\n <Input\n placeholder={t('financial.reconciliation.adjustmentDescriptionPlaceholder')}\n value={adj.description ?? ''}\n onChange={(e) => mudar({ description: e.target.value })}\n />\n </div>\n </div>\n <div className=\"pt-6\">\n <Hint label={t('common.delete')}>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n aria-label={t('common.delete')}\n onClick={() => setAdjustments((prev) => prev.filter((_, i) => i !== idx))}\n >\n <Trash2 className=\"h-3.5 w-3.5\" aria-hidden />\n </Button>\n </Hint>\n </div>\n </div>\n )\n })}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setAdjustments((prev) => [...prev, {\n type: gap > 0 ? 'interest' : 'discount',\n description: descricaoPadrao(gap > 0 ? 'interest' : 'discount'),\n // A diferença que ainda não foi explicada já vem no campo:\n // digitar de novo um número que a tela acabou de calcular é\n // trabalho que o produto podia poupar.\n amount: Math.abs(round2(gap - prev.reduce((s, a) => s + (a.type === 'discount' ? -a.amount : a.amount), 0))),\n }])}\n >\n <Plus className=\"h-3 w-3\" aria-hidden />{t('financial.reconciliation.addAdjustment')}\n </Button>\n {erroAjuste && <p className=\"text-[11px] text-destructive\">{erroAjuste}</p>}\n </>)}\n </div>\n )}\n </>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Passo 3 — O que vai acontecer, e como o dinheiro andou\n // -------------------------------------------------------------------------\n const resumo = (() => {\n if (intent === 'transfer') {\n const outra = outrasContas.find((a) => a.id === counterAccountId)\n return t('financial.reconciliation.summaryTransfer', {\n amount: fmt(line.amount),\n account: outra?.name ?? '—',\n })\n }\n if (intent === 'bill') {\n return t(isOut ? 'financial.reconciliation.summaryBillOut' : 'financial.reconciliation.summaryBillIn', {\n amount: fmt(line.amount),\n contact: contactName.trim() || t('financial.reconciliation.noContact'),\n })\n }\n if (intent === 'link' && target) {\n return target.mode === 'settle'\n ? t('financial.reconciliation.summarySettle', { amount: fmt(target.openAmount) })\n : t('financial.reconciliation.summaryLinkOnly')\n }\n return ''\n })()\n\n const passoConfirmar = (\n <div className=\"fz-container space-y-3\">\n <LinhaDoExtrato line={line} fmt={fmt} />\n <div className=\"rounded-card border border-primary/30 bg-primary/5 px-3 py-2.5\">\n <p className=\"flex items-start gap-1.5 text-sm leading-snug\">\n <Check className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-primary\" aria-hidden />\n {resumo}\n </p>\n {parcial && target && (\n <p className=\"mt-1.5 pl-5 text-[11px] leading-snug text-muted-foreground\">\n {t('financial.reconciliation.summaryPartial', { rest: fmt(round2(target.openAmount - line.amount)) })}\n </p>\n )}\n {intent === 'link' && target?.mode === 'settle' && adjustments.length > 0 && !parcial && (\n <p className=\"mt-1.5 pl-5 text-[11px] leading-snug text-muted-foreground\">\n {t('financial.reconciliation.summaryAdjustments', { count: adjustments.length })}\n </p>\n )}\n </div>\n\n {quita ? (\n // NÃO HÁ O QUE PERGUNTAR SOBRE O PAGAMENTO.\n //\n // O extrato responde as três perguntas antes de alguém abrir a boca —\n // quando, onde e quanto —, e a FORMA é o próprio extrato: o V1 grava\n // esta quitação com «Forma Pgto. N/A» justamente por isso. Um passo\n // pedindo forma e conta seria pedir o que a fonte já respondeu, e toda\n // resposta divergente seria uma invenção sobre dinheiro que já andou.\n //\n // Então isto é um EXTRATO do que vai ser gravado, não um formulário.\n <div className=\"rounded-card border px-3 py-2.5\">\n <p className=\"text-[11px] font-medium uppercase tracking-wide text-muted-foreground\">\n {t('financial.reconciliation.howItSettles')}\n </p>\n <dl className=\"mt-1.5 space-y-1 text-[11px]\">\n <div className=\"flex gap-1.5\">\n <dt className=\"text-muted-foreground\">{t('financial.reconciliation.settleAmount')}:</dt>\n <dd className=\"font-medium\">{fmt(valorAQuitar)}</dd>\n </div>\n <div className=\"flex gap-1.5\">\n <dt className=\"text-muted-foreground\">{t('financial.reconciliation.settleDate')}:</dt>\n <dd>{shortDate(line.date)}</dd>\n </div>\n <div className=\"flex gap-1.5\">\n <dt className=\"text-muted-foreground\">{t('financial.reconciliation.settleAccount')}:</dt>\n <dd>{contaDoExtrato?.name ?? t('financial.reconciliation.settleAccountUnknown')}</dd>\n </div>\n <div className=\"flex min-w-0 gap-1.5\">\n <dt className=\"shrink-0 text-muted-foreground\">{t('financial.reconciliation.settleNote')}:</dt>\n <dd className=\"min-w-0 break-words\">{reconciliationPaymentNote({\n id: line.id,\n amount: line.amount,\n date: line.date,\n direction: line.direction,\n description: line.description,\n bankAccountId: line.bankAccountId,\n externalSource: line.externalSource,\n })}</dd>\n </div>\n </dl>\n <p className=\"mt-2 text-[11px] leading-snug text-muted-foreground\">\n {t('financial.reconciliation.settleNoMethodHint')}\n </p>\n </div>\n ) : (\n <p className=\"text-[11px] leading-snug text-muted-foreground\">\n {t('financial.reconciliation.noPaymentNeeded')}\n </p>\n )}\n </div>\n )\n\n // Ação bloqueada DIZ o que falta. O botão «Avançar» desabilitado em silêncio\n // é a pessoa clicando três vezes e indo embora — e o `blockedReason` sozinho\n // vira `title` do navegador, que demora um segundo e ignora o tema.\n const motivo = (texto: string | null) => texto\n ? <span className=\"text-[11px] leading-snug text-muted-foreground\">{texto}</span>\n : undefined\n\n const paginaDetalhes: ModalFlowPage = {\n id: 'details',\n title: intent === 'bill'\n ? t('financial.reconciliation.stepItems')\n : intent === 'link'\n ? t('financial.reconciliation.stepAdjust')\n : t('financial.reconciliation.stepDetails'),\n render: () => passoDetalhes,\n footer: motivo(bloqueioPasso2),\n blockedReason: bloqueioPasso2 ?? undefined,\n }\n const pages: ModalFlowPage[] = [\n {\n id: 'classify',\n title: t('financial.reconciliation.stepClassify'),\n render: () => passoClassificar,\n footer: motivo(bloqueioPasso1),\n blockedReason: bloqueioPasso1 ?? undefined,\n },\n ...(intent === 'link' ? [{\n id: 'select',\n title: t('financial.reconciliation.stepSelectBill'),\n render: () => passoSelecionar,\n footer: motivo(bloqueioSelecao),\n blockedReason: bloqueioSelecao ?? undefined,\n } satisfies ModalFlowPage] : []),\n // Like V1: linking asks for an adjustment only when there is a gap to explain.\n ...(intent !== 'link' || !target || (target.mode === 'settle' && Math.abs(gap) >= 0.01) ? [paginaDetalhes] : []),\n {\n id: 'confirm',\n title: t('financial.reconciliation.stepConfirm'),\n render: () => passoConfirmar,\n footer: motivo(bloqueioPasso3),\n blockedReason: bloqueioPasso3 ?? undefined,\n },\n ]\n\n return (\n <ModalFlow\n open\n onOpenChange={(o) => { if (!o && !saving) onClose() }}\n mode=\"steps\"\n // Picking the bill is a table, like V1's manual link; the rest is a form.\n size={intent === 'link' && pages[step]?.id === 'select' ? '4xl' : 'lg'}\n title={t('financial.reconciliation.flowTitle')}\n pages={pages}\n current={step}\n // A trilha do topo é navegável — mas só PARA TRÁS ou para o passo\n // seguinte quando o atual está resolvido. Deixar pular para o fim é\n // oferecer um «Confirmar» que vai falhar no servidor.\n onCurrentChange={(next) => {\n const alvo = typeof next === 'number' ? next : step\n if (alvo <= step) { setStep(Math.max(0, alvo)); return }\n if (pages.slice(step, alvo).some((p) => p.blockedReason)) return\n setStep(Math.min(pages.length - 1, alvo))\n }}\n doneLabel={saving ? t('common.saving') : t('financial.reconciliation.confirmAction')}\n onDone={() => void confirmar()}\n />\n )\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport {\n Badge, Button, Input, Modal, ModalContent, ModalDescription, ModalFooter, ModalHeader, ModalTitle,\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Skeleton, toast,\n} from '@fayz-ai/ui'\nimport { adminNavigateTo } from '@fayz-ai/admin'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport { accountLabel, postableAccounts, type ChartOfAccountsNode } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport type { BankAccount } from '@fayz-ai/financial/domain/account'\nimport type { ImportedStatementLine } from '@fayz-ai/financial/domain/reconciliation'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport { formatCurrency } from '../context'\n\n/**\n * Classifying a statement in groups (2026-10-24). V1 classifies line by line;\n * a statement mostly repeats a few kinds of entry (a customer paying by boleto,\n * a partner's Pix, an investment coming back, a transfer between the company's\n * own accounts), so the pending lines are grouped by who is on the other side\n * or, without a document, by the shape of the description, and one decision\n * per group runs the same action the line-by-line flow runs (\"Lançar como\n * conta\", \"Transferência\") on every line of it. The decision is the store's\n * (or its accountant's): nothing is applied without it.\n */\n\ntype Action = 'skip' | 'bill' | 'transfer'\n\ninterface Group {\n key: string\n direction: 'credit' | 'debit'\n label: string\n document: string | null\n lines: ImportedStatementLine[]\n total: number\n}\n\ninterface Decision {\n action: Action\n accountId: string\n contactName: string\n counterAccountId: string\n excluded: Set<string>\n}\n\n/** \"PIX TRANSF JUERG H23/10\" and \"PIX TRANSF JUERG H05/09\" are one shape. */\nexport function descriptionShape(description: string): string {\n return description\n .toUpperCase()\n .normalize('NFKD').replace(/[̀-ͯ]/g, '')\n .replace(/\\d+([./-]\\d+)*/g, ' ')\n .replace(/[^A-Z ]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n}\n\nexport function groupLines(lines: ImportedStatementLine[]): Group[] {\n const groups = new Map<string, Group>()\n for (const line of lines) {\n const doc = (line.counterpartyDocument ?? '').replace(/\\D/g, '') || null\n const shape = descriptionShape(line.description || line.counterpartyName || '')\n const key = `${line.direction}:${doc ? `doc:${doc}` : `shape:${shape}`}`\n const g = groups.get(key) ?? {\n key, direction: line.direction, document: doc, lines: [], total: 0,\n label: (doc && line.counterpartyName) || shape || 'Sem descrição',\n }\n g.lines.push(line)\n g.total += line.amount\n groups.set(key, g)\n }\n return [...groups.values()].sort((a, b) => b.total - a.total)\n}\n\nconst PAGE = 500\n\nasync function pendingLines(provider: FinancialDataProvider, bankAccountId: string, dateRange: { from?: string; to?: string }): Promise<ImportedStatementLine[]> {\n const range = dateRange.from && dateRange.to ? { from: dateRange.from, to: dateRange.to } : undefined\n const all: ImportedStatementLine[] = []\n for (let page = 1; page <= 40; page++) {\n const r = await provider.getStatementLines!({ bankAccountId, dateRange: range, status: 'pending', page, pageSize: PAGE })\n all.push(...r.rows.filter((l) => !l.providerDeleted && !l.reconciledAt))\n if (page * PAGE >= r.total || r.rows.length === 0) break\n }\n return all\n}\n\nexport function BatchClassifyModal({ provider, bankAccountId, dateRange, onClose, onDone }: {\n provider: FinancialDataProvider\n bankAccountId: string\n dateRange: { from?: string; to?: string }\n onClose: () => void\n onDone: () => void\n}) {\n const [groups, setGroups] = useState<Group[] | null>(null)\n const [chart, setChart] = useState<ChartOfAccountsNode[]>([])\n const [accounts, setAccounts] = useState<BankAccount[]>([])\n const [decisions, setDecisions] = useState<Record<string, Decision>>({})\n const [open, setOpen] = useState<Set<string>>(new Set())\n const [running, setRunning] = useState<{ done: number; total: number; failed: Array<{ line: ImportedStatementLine; error: string }> } | null>(null)\n\n useEffect(() => {\n let alive = true\n void pendingLines(provider, bankAccountId, dateRange).then((lines) => {\n if (!alive) return\n const g = groupLines(lines)\n setGroups(g)\n setDecisions(Object.fromEntries(g.map((x) => [x.key, {\n action: 'skip' as Action, accountId: '', contactName: x.document ? x.label : '', counterAccountId: '', excluded: new Set<string>(),\n }])))\n }).catch((e: unknown) => { toast.error('Não foi possível ler o extrato', { description: e instanceof Error ? e.message : String(e) }); setGroups([]) })\n void provider.getChartOfAccounts().then((n) => alive && setChart(n.filter((a) => a.isActive && a.nodeType !== 'group'))).catch(() => {})\n void provider.getBankAccounts().then((a) => alive && setAccounts(a.filter((x) => x.id !== bankAccountId))).catch(() => {})\n return () => { alive = false }\n }, [provider, bankAccountId, dateRange.from, dateRange.to])\n\n const leaves = useMemo(() => postableAccounts(chart), [chart])\n // Revenue first for money in, expense first for money out; the rest after,\n // because a partner's contribution or an investment coming back is neither.\n const accountsFor = (direction: 'credit' | 'debit') => {\n const first = direction === 'credit' ? 'revenue' : 'expense'\n return [...leaves.filter((a) => a.accountType === first), ...leaves.filter((a) => a.accountType !== first)]\n }\n\n const set = (key: string, patch: Partial<Decision>) => setDecisions((d) => ({ ...d, [key]: { ...d[key]!, ...patch } }))\n const ready = (g: Group, d: Decision) => d.action === 'bill' ? Boolean(d.accountId) : d.action === 'transfer' ? Boolean(d.counterAccountId) : false\n const chosen = (groups ?? []).filter((g) => decisions[g.key] && ready(g, decisions[g.key]!))\n const linesToApply = chosen.reduce((n, g) => n + g.lines.filter((l) => !decisions[g.key]!.excluded.has(l.id)).length, 0)\n\n async function apply() {\n const jobs = chosen.flatMap((g) => {\n const d = decisions[g.key]!\n return g.lines.filter((l) => !d.excluded.has(l.id)).map((line) => ({ line, g, d }))\n })\n const state = { done: 0, total: jobs.length, failed: [] as Array<{ line: ImportedStatementLine; error: string }> }\n setRunning({ ...state })\n let next = 0\n // Three at a time: each line is the line-by-line action (create, settle,\n // reconcile), and the database answers the next while one waits.\n const worker = async () => {\n while (next < jobs.length) {\n const { line, d } = jobs[next++]!\n try {\n if (d.action === 'transfer') {\n await provider.reconcileAsTransfer!({ bankMovementId: line.id, counterAccountId: d.counterAccountId })\n } else {\n await provider.reconcileAsBill!({\n bankMovementId: line.id,\n accountId: d.accountId,\n contactName: d.contactName.trim() || undefined,\n description: line.description || undefined,\n })\n }\n } catch (e) {\n state.failed.push({ line, error: e instanceof Error ? e.message : String(e) })\n }\n state.done++\n setRunning({ ...state, failed: [...state.failed] })\n }\n }\n await Promise.all([worker(), worker(), worker()])\n if (state.failed.length) toast.warning(`${state.done - state.failed.length} de ${state.total} linhas classificadas`, { description: `${state.failed.length} não foram; veja a lista.` })\n else toast.success(`${state.total} linhas classificadas e conciliadas`)\n onDone()\n }\n\n const money = (v: number) => formatCurrency(v)\n\n return (\n <Modal open onOpenChange={(o) => { if (!o && !running) onClose() }}>\n <ModalContent size=\"xl\" className=\"max-h-[92vh] overflow-y-auto\">\n <ModalHeader>\n <ModalTitle>Classificar em lote</ModalTitle>\n <ModalDescription>\n As linhas pendentes, agrupadas por quem pagou ou recebeu (ou pelo texto do extrato). Uma escolha por grupo vale para todas as linhas dele: cada uma vira a conta escolhida, já quitada e conciliada, como no «Lançar como conta» de linha em linha.\n </ModalDescription>\n </ModalHeader>\n\n {groups === null && <div className=\"space-y-2\"><Skeleton className=\"h-14 w-full\" /><Skeleton className=\"h-14 w-full\" /><Skeleton className=\"h-14 w-full\" /></div>}\n {groups?.length === 0 && <p className=\"py-6 text-center text-sm text-muted-foreground\">Nenhuma linha pendente neste recorte.</p>}\n\n {groups && groups.length > 0 && !running && (\n <div className=\"space-y-2\">\n <p className=\"text-xs text-muted-foreground\">\n Falta uma conta no plano (por exemplo «Vendas B2B», «Aporte de sócio», «Resgate de aplicação»)?{' '}\n <button type=\"button\" className=\"underline\" onClick={() => adminNavigateTo('/settings/financial/chart-of-accounts')}>Abrir o plano de contas</button>\n </p>\n {groups.map((g) => {\n const d = decisions[g.key]\n if (!d) return null\n const expanded = open.has(g.key)\n const count = g.lines.length - d.excluded.size\n return (\n <div key={g.key} className=\"rounded-md border p-3\" data-testid=\"batch-group\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <button type=\"button\" className=\"text-muted-foreground\" aria-label={expanded ? 'Recolher' : 'Ver linhas'}\n onClick={() => setOpen((s) => { const n = new Set(s); if (n.has(g.key)) n.delete(g.key); else n.add(g.key); return n })}>\n {expanded ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronRight className=\"h-4 w-4\" />}\n </button>\n <span className=\"min-w-0 flex-1 truncate font-medium\">{g.label}</span>\n <Badge variant=\"outline\" className={g.direction === 'credit' ? 'text-emerald-700' : 'text-destructive'}>{g.direction === 'credit' ? 'Entrada' : 'Saída'}</Badge>\n <span className=\"text-sm text-muted-foreground\">{count} {count === 1 ? 'linha' : 'linhas'}</span>\n <span className=\"w-28 text-right text-sm font-semibold\">{money(g.total)}</span>\n </div>\n {g.document && <p className=\"ml-6 text-xs text-muted-foreground\">Documento {g.document}</p>}\n\n <div className=\"ml-6 mt-2 grid gap-2 sm:grid-cols-[180px_1fr_1fr]\">\n <Select value={d.action} onValueChange={(v) => set(g.key, { action: v as Action })}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"skip\">Deixar para depois</SelectItem>\n <SelectItem value=\"bill\">{g.direction === 'credit' ? 'Lançar como conta a receber' : 'Lançar como conta a pagar'}</SelectItem>\n <SelectItem value=\"transfer\">Transferência entre contas</SelectItem>\n </SelectContent>\n </Select>\n {d.action === 'bill' && (\n <>\n <Select value={d.accountId || undefined} onValueChange={(v) => set(g.key, { accountId: v })}>\n <SelectTrigger><SelectValue placeholder=\"Conta do plano\" /></SelectTrigger>\n <SelectContent>\n {accountsFor(g.direction).map((a) => <SelectItem key={a.id} value={a.id}>{accountLabel(a)}</SelectItem>)}\n </SelectContent>\n </Select>\n <Input placeholder={g.direction === 'credit' ? 'Cliente ou de quem veio (opcional)' : 'Fornecedor (opcional)'}\n value={d.contactName} onChange={(e) => set(g.key, { contactName: e.target.value })} />\n </>\n )}\n {d.action === 'transfer' && (\n <Select value={d.counterAccountId || undefined} onValueChange={(v) => set(g.key, { counterAccountId: v })}>\n <SelectTrigger><SelectValue placeholder={accounts.length ? 'A outra conta' : 'Nenhuma outra conta cadastrada'} /></SelectTrigger>\n <SelectContent>\n {accounts.map((a) => <SelectItem key={a.id} value={a.id}>{a.name}</SelectItem>)}\n </SelectContent>\n </Select>\n )}\n </div>\n\n {expanded && (\n <ul className=\"ml-6 mt-2 max-h-56 space-y-1 overflow-y-auto text-xs\">\n {g.lines.map((l) => (\n <li key={l.id} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" checked={!d.excluded.has(l.id)} aria-label=\"Incluir esta linha\"\n onChange={(e) => { const n = new Set(d.excluded); if (e.target.checked) n.delete(l.id); else n.add(l.id); set(g.key, { excluded: n }) }} />\n <span className=\"w-20 text-muted-foreground\">{new Date(l.date + 'T12:00:00').toLocaleDateString('pt-BR')}</span>\n <span className=\"min-w-0 flex-1 truncate\">{l.description}</span>\n <span className=\"w-24 text-right\">{money(l.amount)}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n })}\n </div>\n )}\n\n {running && (\n <div className=\"space-y-3 py-2\">\n <p className=\"text-sm\">{running.done} de {running.total} linhas…</p>\n <div className=\"h-2 w-full overflow-hidden rounded bg-muted\">\n <div className=\"h-full bg-primary transition-all\" style={{ width: `${running.total ? (running.done / running.total) * 100 : 0}%` }} />\n </div>\n {running.failed.length > 0 && (\n <ul className=\"max-h-48 space-y-1 overflow-y-auto text-xs text-destructive\">\n {running.failed.map((f) => <li key={f.line.id}>{f.line.date} · {f.line.description} · {money(f.line.amount)}: {f.error}</li>)}\n </ul>\n )}\n </div>\n )}\n\n <ModalFooter>\n {running && running.done === running.total ? (\n <Button onClick={onClose}>Fechar</Button>\n ) : (\n <>\n <Button variant=\"outline\" onClick={onClose} disabled={Boolean(running)}>Cancelar</Button>\n <Button onClick={() => void apply()} disabled={Boolean(running) || linesToApply === 0} data-testid=\"batch-apply\">\n {running ? 'Aplicando…' : `Aplicar a ${linesToApply} ${linesToApply === 1 ? 'linha' : 'linhas'}`}\n </Button>\n </>\n )}\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport {\n ArrowRightLeft, Check, ChevronDown, CloudDownload, Eye, FileSearch, Landmark, Link2, Receipt, RefreshCw, Search,\n Sparkles, Undo2, ListChecks } from 'lucide-react'\nimport {\n AiActionButton, Button, Card, FilterPanel, FilterPanelField, Hint, PageHeaderActions, SearchSelect, SegmentedControl, Select,\n SelectContent, SelectItem, SelectTrigger, SelectValue, Skeleton, toast, Input,\n Pagination,\n} from '@fayz-ai/ui'\nimport { PageActions, adminNavigateTo, useUnitFilter, type PageAction } from '@fayz-ai/admin'\nimport { StatementLineDetailsModal } from '../components/ReconcileModals'\nimport { ReconcileFlow } from '../components/ReconcileFlow'\nimport { BatchClassifyModal } from '../components/BatchClassify'\nimport { AccountIcon } from '../components/PaymentIcons'\nimport { resolveCandidates, type ResolvedCandidate } from '@fayz-ai/financial/domain/reconciliation'\nimport { useFinancialConfig, useFinancialProvider, formatCurrency } from '../context'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { BankAccount } from '@fayz-ai/financial/domain/account'\nimport { round2 } from '@fayz-ai/financial/domain/money'\nimport type { ImportedStatementLine, ReconciliationCandidate, StatementLinesResult, StatementLineStatus } from '@fayz-ai/financial/domain/reconciliation'\nimport type { TransactionDirection } from '@fayz-ai/financial/domain/movement'\n\n// ---------------------------------------------------------------------------\n// Conciliação Bancária — o extrato do banco contra os lançamentos do sistema.\n//\n// Porte da tela do V1 (BeautySoft, Financeiro → Conciliação → Bancária). O que\n// ela é, e que a versão anterior desta tela não era: uma LISTA DE EXTRATO com\n// recorte — conta, período, tipo, status e busca —, não uma fila de pendências.\n// Conferir o que se conciliou ontem é parte do trabalho, e uma tela que só\n// mostra pendência esconde o próprio resultado.\n//\n// A anatomia é a da tela VIZINHA (Extratos, a mesma aba): busca à esquerda da\n// barra do cartão, o que refina encostado à direita. Duas telas irmãs com dois\n// vocabulários fazem a pessoa reaprender a mesma coisa ao trocar de segmento.\n//\n// Os totais são **da página** e o rótulo diz isso com todas as letras. É a\n// única coisa da tela do V1 que evita uma leitura errada, e o documento do V1\n// manda explicitamente manter.\n// ---------------------------------------------------------------------------\n\nconst PAGE_SIZE = 50\n\nconst shortDate = (value: string) => {\n const [year, month, day] = value.split('-')\n return year && month && day ? `${day}/${month}/${year}` : value\n}\n\nconst isoDay = (d: Date) =>\n `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n\ntype DateBucket = 'today' | 'yesterday' | 'thisWeek' | 'lastWeek' | 'thisMonth' | 'lastMonth' | 'older'\n\n/** Where a statement day falls relative to today; weeks start on Monday. */\nfunction bucketOf(day: string | null | undefined, now = new Date()): DateBucket {\n if (!day) return 'older'\n const today = isoDay(now)\n if (day === today) return 'today'\n const y = new Date(now); y.setDate(y.getDate() - 1)\n if (day === isoDay(y)) return 'yesterday'\n const weekStart = new Date(now); weekStart.setDate(now.getDate() - ((now.getDay() + 6) % 7))\n if (day >= isoDay(weekStart)) return 'thisWeek'\n const lastWeekStart = new Date(weekStart); lastWeekStart.setDate(weekStart.getDate() - 7)\n if (day >= isoDay(lastWeekStart)) return 'lastWeek'\n const monthStart = isoDay(new Date(now.getFullYear(), now.getMonth(), 1))\n if (day >= monthStart) return 'thisMonth'\n if (day >= isoDay(new Date(now.getFullYear(), now.getMonth() - 1, 1))) return 'lastMonth'\n return 'older'\n}\n\nconst ACCOUNT_GROUPS: Record<BankAccount['accountType'], string> = {\n person: 'Pessoas',\n unit: 'Unidades',\n bank: 'Contas bancárias',\n cash_physical: 'Caixas',\n cash_session: 'Caixas',\n card_receivable_credit: 'Cartões e recebíveis',\n card_receivable_debit: 'Cartões e recebíveis',\n card_payable: 'Cartões e recebíveis',\n unidentified: 'Outras contas',\n system: 'Contas do sistema',\n}\n\n/**\n * As contas que TÊM extrato. É a lista que abre ao clicar, sem digitar nada.\n *\n * Conta de pessoa, de unidade e do sistema ficam de fora de propósito: elas são\n * contrapartida de lançamento, não origem de extrato bancário — oferecê-las\n * aqui é convidar a escolher uma conta que nunca vai trazer uma linha, e a\n * pessoa passa a achar que a tela está quebrada.\n */\nconst CONTAS_COM_EXTRATO: ReadonlyArray<BankAccount['accountType']> = [\n 'bank', 'cash_physical',\n 'card_receivable_credit', 'card_receivable_debit', 'card_payable',\n]\n\n/** Banco antes de cartão, cartão antes de caixa — a ordem em que se procura. */\nconst ORDEM_DO_GRUPO: Record<string, number> = {\n 'Contas bancárias': 0,\n 'Cartões e recebíveis': 1,\n 'Caixas': 2,\n}\n\nfunction ordenaContas(contas: BankAccount[]): BankAccount[] {\n return [...contas].sort((a, b) => {\n const ga = ORDEM_DO_GRUPO[ACCOUNT_GROUPS[a.accountType]] ?? 9\n const gb = ORDEM_DO_GRUPO[ACCOUNT_GROUPS[b.accountType]] ?? 9\n return ga !== gb ? ga - gb : a.name.localeCompare(b.name, 'pt-BR')\n })\n}\n\n/** Um número da régua do rodapé. */\nfunction TotalStat({ label, value, tone }: { label: string; value: string; tone?: 'in' | 'out' }) {\n return (\n <div className=\"rounded-card border bg-card px-3 py-2 shadow-sm\">\n <p className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">{label}</p>\n <p className={`text-base font-semibold ${tone === 'in' ? 'text-success' : tone === 'out' ? 'text-destructive' : ''}`}>\n {value}\n </p>\n </div>\n )\n}\n\n/** Esqueleto com a FORMA da linha — nunca \"Carregando…\". */\nfunction RowSkeleton() {\n return (\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <Skeleton className=\"h-4 w-4 shrink-0 rounded-full\" />\n <div className=\"min-w-0 flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-2/5\" />\n <Skeleton className=\"h-2.5 w-1/4\" />\n </div>\n <Skeleton className=\"h-4 w-20 shrink-0\" />\n </div>\n )\n}\n\nexport function ReconciliationView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const unidades = useUnitFilter({ scope: 'list' })\n const fmt = (n: number) => formatCurrency(n, currency)\n\n // ── Rascunho e aplicado ───────────────────────────────────────────────────\n // O V1 separa os dois: mexer num filtro NÃO recarrega; «Filtrar» é que\n // aplica. Parece atrito até se ver o caso real — trocar conta e período de um\n // extrato de 164 linhas dispararia três consultas no caminho, e a pessoa vê a\n // lista piscar duas vezes com recortes que ela não pediu.\n const [unitId, setUnitId] = useState<string>('')\n const [accountId, setAccountId] = useState('')\n const [selectedAccount, setSelectedAccount] = useState<BankAccount | null>(null)\n const defaultFrom = useMemo(() => { const d = new Date(); d.setDate(d.getDate() - 29); return isoDay(d) }, [])\n const [dateFrom, setDateFrom] = useState(defaultFrom)\n const [dateTo, setDateTo] = useState(() => isoDay(new Date()))\n const [direction, setDirection] = useState<TransactionDirection | 'all'>('all')\n const [status, setStatus] = useState<StatementLineStatus | 'all'>('all')\n const [search, setSearch] = useState('')\n const [hideInvestments, setHideInvestments] = useState(true)\n\n const [applied, setApplied] = useState({\n accountId: '', dateFrom: defaultFrom, dateTo: isoDay(new Date()),\n direction: 'all' as TransactionDirection | 'all',\n status: 'all' as StatementLineStatus | 'all',\n hideInvestments: true,\n })\n // A BUSCA NÃO É UM FILTRO DO PAINEL, e por isso não entra no rascunho: quem\n // digita aqui não está redefinindo qual extrato olhar, e ver «Filtros\n // alterados» por causa de três letras é o painel cobrando um clique por algo\n // que ele não vai mudar. Ela se aplica sozinha, 300 ms depois da última\n // tecla.\n //\n // Continua indo ao servidor porque o extrato é paginado de 50 em 50: um\n // recorte só no que já está na tela acharia «diego» na página 1 e juraria que\n // ele não existe nas outras três.\n const [appliedSearch, setAppliedSearch] = useState('')\n const [page, setPage] = useState(1)\n\n const [result, setResult] = useState<StatementLinesResult | null>(null)\n const [loading, setLoading] = useState(false)\n const [candidatos, setCandidatos] = useState<Record<string, ReconciliationCandidate[]>>({})\n const [sugerindo, setSugerindo] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n // Uma superficie, um estado. Conciliar uma linha e um fluxo de tres passos\n // numa moldura so (ver ReconcileFlow) — nao tres dialogos disputando a tela.\n // `intent` e o atalho do botao do card: quem clicou em «Transferencia» ja\n // respondeu a pergunta do passo 1.\n const [flow, setFlow] = useState<{ line: ImportedStatementLine; intent?: 'link' | 'transfer' | 'bill'; target?: ResolvedCandidate; step?: number } | null>(null)\n const [detailsLine, setDetailsLine] = useState<ImportedStatementLine | null>(null)\n const [syncing, setSyncing] = useState(false)\n const [batching, setBatching] = useState(false)\n const [collapsed, setCollapsed] = useState<Set<DateBucket>>(() => new Set())\n\n const supported = typeof provider.getStatementLines === 'function'\n\n useEffect(() => { setPage(1) }, [applied, appliedSearch])\n\n // Candidato é de uma linha de uma página: trocar o recorte e manter o mapa\n // deixaria a fita laranja numa linha que já não está na tela.\n useEffect(() => { setCandidatos({}) }, [applied, appliedSearch, page])\n\n useEffect(() => {\n const termo = search.trim()\n if (termo === appliedSearch) return\n const id = setTimeout(() => setAppliedSearch(termo), 300)\n return () => clearTimeout(id)\n }, [search, appliedSearch])\n\n const load = useCallback(async () => {\n if (!provider.getStatementLines || !applied.accountId) { setResult(null); return }\n setLoading(true)\n try {\n const data = await provider.getStatementLines({\n bankAccountId: applied.accountId,\n dateRange: { from: applied.dateFrom, to: applied.dateTo },\n direction: applied.direction === 'all' ? undefined : applied.direction,\n status: applied.status === 'all' ? undefined : applied.status,\n search: appliedSearch || undefined,\n hideInvestments: applied.hideInvestments,\n page,\n pageSize: PAGE_SIZE,\n })\n setResult(data)\n } finally {\n setLoading(false)\n }\n }, [provider, applied, appliedSearch, page])\n\n useEffect(() => { void load() }, [load])\n\n // ── A SUGESTÃO CHEGA SOZINHA, como no V1 ─────────────────────────────────\n //\n // A fita laranja já existia; o que não existia era ela aparecer sem alguém\n // clicar «Sugerir» em cada linha. Uma pergunta por linha é cinquenta idas ao\n // banco para pintar uma página — então a página inteira vai numa pergunta só\n // (`suggestReconciliationBatch`), e o cruzamento com valor, NOME e data\n // acontece de um golpe.\n //\n // Tolerante de propósito: falhar em sugerir não pode custar o extrato.\n const linhasAbertas = useMemo(\n () => (result?.rows ?? []).filter((linha) => !linha.reconciledAt),\n [result],\n )\n useEffect(() => {\n if (!provider.suggestReconciliationBatch || linhasAbertas.length === 0) return\n let vivo = true\n provider.suggestReconciliationBatch(linhasAbertas)\n .then((achados) => { if (vivo) setCandidatos((prev) => ({ ...achados, ...prev })) })\n .catch((error) => console.warn('[financial] não deu para sugerir a conciliação', error))\n return () => { vivo = false }\n }, [provider, linhasAbertas])\n\n function filtrar() {\n setApplied({ accountId, dateFrom, dateTo, direction, status, hideInvestments })\n }\n\n // O rascunho difere do que esta valendo — e o que acende o aviso e o anel do\n // botao redondo. Por JSON porque o recorte e raso e serializavel: um recorte\n // que nao cabe num JSON nao e recorte, e estado de tela.\n const filtrosPendentes = useMemo(\n () => JSON.stringify({ accountId, dateFrom, dateTo, direction, status, hideInvestments }) !== JSON.stringify(applied),\n [accountId, dateFrom, dateTo, direction, status, hideInvestments, applied],\n )\n\n async function sugerir(line: ImportedStatementLine) {\n if (!provider.suggestReconciliation) return\n setSugerindo(line.id)\n try {\n const achados = await provider.suggestReconciliation(line.id)\n setCandidatos((prev) => ({ ...prev, [line.id]: achados }))\n } finally {\n setSugerindo(null)\n }\n }\n\n async function vincular(lineId: string, matchedMovementId?: string) {\n if (!provider.reconcileMovement) return\n setBusy(true)\n try {\n await provider.reconcileMovement({ bankMovementId: lineId, matchedMovementId })\n toast.success(t('financial.reconciliation.match'))\n await load()\n } catch (e) {\n toast.error(e instanceof Error ? e.message : t('common.error'))\n } finally {\n setBusy(false)\n }\n }\n\n async function desfazer(lineId: string) {\n if (!provider.unreconcileMovement) return\n setBusy(true)\n try {\n await provider.unreconcileMovement(lineId)\n toast.success(t('financial.reconciliation.undo'))\n await load()\n } catch (e) {\n toast.error(e instanceof Error ? e.message : t('common.error'))\n } finally {\n setBusy(false)\n }\n }\n\n const RefreshIcon = React.useMemo(\n () => ({ className }: { className?: string }) => (\n <RefreshCw className={`${className ?? ''} ${loading ? 'animate-spin' : ''}`} />\n ),\n [loading],\n )\n\n async function sincronizar() {\n if (!provider.syncStatements) return\n setSyncing(true)\n try {\n const r = await provider.syncStatements({ bankAccountId: applied.accountId || undefined })\n if (r.failed > 0) toast.error(t('financial.reconciliation.syncFailed'), { description: r.errors[0] })\n else toast.success(r.imported > 0\n ? t('financial.reconciliation.syncImported', { count: r.imported })\n : t('financial.reconciliation.syncNothingNew'))\n if (r.imported > 0) await load()\n } catch (e) {\n toast.error(t('financial.reconciliation.syncFailed'), { description: e instanceof Error ? e.message : String(e) })\n } finally {\n setSyncing(false)\n }\n }\n\n const headerActions: PageAction[] = React.useMemo(() => [\n ...(provider.syncStatements ? [{\n id: 'sync',\n label: syncing ? t('financial.reconciliation.syncing') : t('financial.reconciliation.syncNow'),\n icon: CloudDownload,\n intent: 'primary' as const,\n testId: 'reconciliation-sync',\n disabled: syncing || busy,\n onSelect: () => void sincronizar(),\n }] : []),\n ...(provider.reconcileAsBill && provider.getStatementLines ? [{\n id: 'batch',\n label: 'Classificar em lote',\n icon: ListChecks,\n intent: 'secondary' as const,\n testId: 'reconciliation-batch',\n disabled: busy || !applied.accountId,\n onSelect: () => setBatching(true),\n }] : []),\n {\n id: 'refresh',\n label: t('financial.reconciliation.refresh'),\n icon: RefreshIcon,\n intent: 'utility',\n disabled: loading || busy || !applied.accountId,\n onSelect: () => void load(),\n }], // eslint-disable-next-line react-hooks/exhaustive-deps\n [t, RefreshIcon, loading, busy, applied.accountId, load, syncing, provider, setBatching])\n\n if (!supported) {\n return (\n <div className=\"py-16 text-center\">\n <Landmark className=\"mx-auto mb-2 h-8 w-8 text-muted-foreground/30\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.empty')}</p>\n </div>\n )\n }\n\n const rows = result?.rows ?? []\n const total = result?.total ?? 0\n\n return (\n <div className=\"space-y-4\">\n <PageHeaderActions>\n <PageActions actions={headerActions} />\n {batching && applied.accountId && (\n <BatchClassifyModal\n provider={provider}\n bankAccountId={applied.accountId}\n dateRange={{ from: applied.dateFrom, to: applied.dateTo }}\n onClose={() => setBatching(false)}\n onDone={() => { void load() }}\n />\n )}\n </PageHeaderActions>\n\n {/* ── O painel de filtros ──────────────────────────────────────────── */}\n {/* O MESMO FilterPanel da lista de contas: um motor de recorte so no\n sistema. O que esta tela ja fazia por conta propria — «Filtrar»\n aplica, mexer num campo nao recarrega — passa a ser o contrato do\n componente, e junto vem o que faltava: o aviso de pendencia (a mesma\n peca do formulario que so grava no Salvar) e o botao redondo sempre\n no mesmo canto.\n\n Tipo e Status descem para «Mais filtros»: eles refinam o que ja se\n esta olhando, e nao definem O QUE se busca — que e conta, unidade e\n periodo. A busca fica na largura toda porque e o unico campo cujo\n conteudo nao tem tamanho previsivel. */}\n <FilterPanel\n title={t('financial.reconciliation.filtersTitle')}\n dirty={filtrosPendentes}\n onApply={filtrar}\n applyLabel={t('financial.reconciliation.filter')}\n pendingTitle={t('financial.reconciliation.filterPending')}\n pendingHint={t('financial.reconciliation.filterPendingHint')}\n applyDisabledReason={accountId ? undefined : t('financial.reconciliation.pickAccountFirst')}\n busy={loading}\n moreLabel={t('financial.reconciliation.filterMore')}\n lessLabel={t('financial.reconciliation.filterLess')}\n advancedCount={(direction !== 'all' ? 1 : 0) + (status !== 'all' ? 1 : 0)}\n advanced={\n <>\n <FilterPanelField label={t('financial.reconciliation.type')}>\n {/* `overflow-x-auto` e a valvula do segmentado, que tem largura\n propria e nao encolhe: ele rola dentro do campo em vez de\n vazar por cima do vizinho. */}\n <div className=\"flex min-w-0 max-w-full items-center overflow-x-auto\">\n <SegmentedControl\n aria-label={t('financial.reconciliation.type')}\n value={direction}\n onChange={(v) => setDirection(v as TransactionDirection | 'all')}\n options={[\n { value: 'all', label: t('financial.reconciliation.typeAll') },\n { value: 'credit', label: t('financial.reconciliation.typeIn') },\n { value: 'debit', label: t('financial.reconciliation.typeOut') },\n ]}\n />\n </div>\n </FilterPanelField>\n <FilterPanelField label={t('financial.reconciliation.status')}>\n <div className=\"flex min-w-0 max-w-full items-center overflow-x-auto\">\n <SegmentedControl\n aria-label={t('financial.reconciliation.status')}\n value={status}\n onChange={(v) => setStatus(v as StatementLineStatus | 'all')}\n options={[\n { value: 'all', label: t('financial.reconciliation.statusAll') },\n { value: 'reconciled', label: t('financial.reconciliation.statusReconciled') },\n { value: 'pending', label: t('financial.reconciliation.statusPending') },\n ]}\n />\n </div>\n </FilterPanelField>\n <FilterPanelField label={t('financial.reconciliation.investments')}>\n <div className=\"flex min-w-0 max-w-full items-center overflow-x-auto\">\n <SegmentedControl\n aria-label={t('financial.reconciliation.investments')}\n value={hideInvestments ? 'hide' : 'show'}\n onChange={(v) => setHideInvestments(v === 'hide')}\n options={[\n { value: 'hide', label: t('financial.reconciliation.investmentsHide') },\n { value: 'show', label: t('financial.reconciliation.investmentsShow') },\n ]}\n />\n </div>\n </FilterPanelField>\n </>\n }\n >\n {unidades.visible && (\n <FilterPanelField label={unidades.label}>\n <Select value={unitId || '__all__'} onValueChange={(v) => setUnitId(v === '__all__' ? '' : v)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__all__\">{unidades.allLabel}</SelectItem>\n {unidades.options.map((u) => <SelectItem key={u.id} value={u.id}>{u.name}</SelectItem>)}\n </SelectContent>\n </Select>\n </FilterPanelField>\n )}\n\n <FilterPanelField label={t('financial.reconciliation.account')} required compact>\n <SearchSelect\n className=\"w-full\"\n value={accountId}\n displayValue={selectedAccount?.name ?? ''}\n icon={Landmark}\n leading={selectedAccount ? <AccountIcon account={selectedAccount} /> : undefined}\n placeholder=\"Digite...\"\n noResultsLabel={t('financial.reconciliation.noIntegratedAccount')}\n searchingLabel=\"Buscando contas...\"\n clearLabel=\"Limpar\"\n onChange={(id, option) => {\n setAccountId(id)\n setSelectedAccount((option?.data as BankAccount | undefined) ?? null)\n }}\n // Sem `minChars` e com o `loadOnOpen` de fábrica: clicar já mostra\n // as contas. `getStatementAccounts` recorta POR TIPO na consulta —\n // com `getBankAccounts` o teto da resposta se enchia de contas de\n // pessoa e «Itaú» nunca chegava.\n onSearch={async (query) => {\n const termo = query.trim().toLocaleLowerCase('pt-BR')\n const comExtrato = provider.getStatementAccounts\n ? await provider.getStatementAccounts()\n : (await provider.getBankAccounts()).filter((a) => CONTAS_COM_EXTRATO.includes(a.accountType))\n const naUnidade = unitId ? comExtrato.filter((a) => !a.unitId || a.unitId === unitId) : comExtrato\n const filtradas = termo\n ? naUnidade.filter((a) =>\n a.name.toLocaleLowerCase('pt-BR').includes(termo)\n || (a.bankName ?? '').toLocaleLowerCase('pt-BR').includes(termo)\n || (a.accountNumber ?? '').toLocaleLowerCase('pt-BR').includes(termo))\n : naUnidade\n return ordenaContas(filtradas).slice(0, 50).map((account) => ({\n id: account.id,\n label: account.name,\n subtitle: account.bankName || account.accountNumber,\n icon: <AccountIcon account={account} />,\n group: ACCOUNT_GROUPS[account.accountType] ?? 'Outras contas',\n data: account,\n }))\n }}\n />\n </FilterPanelField>\n\n <FilterPanelField label={t('financial.reconciliation.from')}>\n <Input type=\"date\" value={dateFrom} onChange={(e) => setDateFrom(e.target.value)} className={CAMPO} />\n </FilterPanelField>\n <FilterPanelField label={t('financial.reconciliation.to')}>\n <Input type=\"date\" value={dateTo} onChange={(e) => setDateTo(e.target.value)} className={CAMPO} />\n </FilterPanelField>\n </FilterPanel>\n\n {/* A BUSCA NÃO É UM FILTRO DESTA TELA, é a barra da lista.\n Ela mora onde mora em toda lista do produto — colada no resultado,\n acima das linhas — e não dentro do recorte: quem digita aqui está\n procurando UMA linha entre as que já estão na tela, não redefinindo\n qual extrato olhar. Por isso ela só existe depois que há extrato.\n Ela se aplica sozinha ao parar de digitar — Enter só antecipa. */}\n {applied.accountId && (\n <Card className=\"relative px-3 py-1.5\">\n <Search className=\"pointer-events-none absolute left-5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground\" />\n <Input\n type=\"text\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') setAppliedSearch(search.trim()) }}\n placeholder={t('financial.reconciliation.searchPlaceholder')}\n aria-label={t('financial.reconciliation.searchPlaceholder')}\n // Sem borda: o cartão já desenha o limite, e uma caixa dentro da\n // outra é moldura dentro de moldura (o mesmo do ListView).\n className=\"h-auto rounded-none border-0 bg-transparent py-1.5 pl-8 pr-3 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0\"\n />\n </Card>\n )}\n\n {/* ── Um CARD por transação, como no V1 ─────────────────────────────── */}\n {!applied.accountId ? (\n <Card className=\"py-16 text-center\">\n <Landmark className=\"mx-auto mb-2 h-8 w-8 text-muted-foreground/30\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.accountRequired')}</p>\n </Card>\n ) : loading ? (\n // Esqueleto em TODA carga, não só na primeira. Trocar de página ou de\n // filtro deixava os cards antigos no lugar enquanto o novo recorte\n // vinha: a pessoa lia uma linha que já não pertencia ao que ela pediu,\n // e a lista trocava por baixo do dedo. A forma do card é a mesma, então\n // nada salta quando o dado chega.\n <div className=\"space-y-3\">{Array.from({ length: 5 }, (_, i) => <CardSkeleton key={i} />)}</div>\n ) : rows.length === 0 ? (\n <Card className=\"py-16 text-center\">\n <Check className=\"mx-auto mb-2 h-8 w-8 text-success/40\" />\n <p className=\"text-sm font-medium\">{t('financial.reconciliation.emptyFiltered')}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">{t('financial.reconciliation.emptyFilteredHint')}</p>\n </Card>\n ) : (\n <div className=\"space-y-3\">\n {groupByBucket(rows).map(({ bucket, lines }) => {\n const fechado = collapsed.has(bucket)\n const entradas = lines.filter((l) => l.direction === 'credit').reduce((n, l) => n + l.amount, 0)\n const saidas = lines.filter((l) => l.direction === 'debit').reduce((n, l) => n + l.amount, 0)\n return (\n <section key={bucket} className=\"space-y-3\" data-testid={`reconciliation-group-${bucket}`}>\n {/* Sticky: scrolling a long week keeps the reader knowing which week it is. */}\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n aria-expanded={!fechado}\n onClick={() => setCollapsed((prev) => {\n const next = new Set(prev)\n if (next.has(bucket)) next.delete(bucket); else next.add(bucket)\n return next\n })}\n className=\"font-normal whitespace-normal justify-start sticky top-0 z-10 flex w-full items-center gap-2 rounded-card border border-border bg-background/95 px-3 py-2 text-left shadow-sm backdrop-blur-sm\"\n >\n <ChevronDown className={`h-4 w-4 shrink-0 text-muted-foreground transition-transform ${fechado ? '-rotate-90' : ''}`} />\n <span className=\"text-sm font-semibold\">{t(`financial.reconciliation.group.${bucket}`)}</span>\n <span className=\"text-xs text-muted-foreground\">· {lines.length}</span>\n <span className=\"ml-auto flex gap-3 text-xs tabular-nums\">\n <span className=\"text-success\">+{fmt(entradas)}</span>\n <span className=\"text-destructive\">−{fmt(saidas)}</span>\n <span className=\"font-semibold text-foreground\">= {fmt(entradas - saidas)}</span>\n </span>\n </Button>\n {!fechado && lines.map((line) => (\n <StatementCard\n key={line.id}\n line={line}\n candidatos={candidatos[line.id]}\n sugerindo={sugerindo === line.id}\n busy={busy}\n fmt={fmt}\n t={t}\n onSugerir={() => void sugerir(line)}\n onTransferir={() => setFlow({ line, intent: 'transfer' })}\n onVincular={() => setFlow({ line, intent: 'link', step: 1 })}\n onLancarConta={() => setFlow({ line, intent: 'bill' })}\n onAceitarCandidato={(cand) => {\n // One click only when nothing is left to decide: an already-paid\n // entry for the exact amount. An open bill must be paid, and a\n // difference must be explained — that is the flow's step 2.\n const [alvo] = resolveCandidates([cand])\n if (alvo.mode === 'link_only' && Math.abs(cand.movement.amount - line.amount) < 0.01) {\n void vincular(line.id, cand.movement.id)\n } else {\n setFlow({ line, intent: 'link', target: alvo, step: 1 })\n }\n }}\n onDesfazer={() => void desfazer(line.id)}\n onVerConta={() => {\n // Uma SAÍDA vira conta a pagar e uma entrada, a receber — a\n // rota é a do documento, não a da tela de onde se veio.\n const modulo = line.direction === 'debit' ? 'payables' : 'receivables'\n adminNavigateTo(`/financial/${modulo}/${line.matchedInvoiceId}`)\n }}\n onDetalhes={() => setDetailsLine(line)}\n />\n ))}\n </section>\n )\n })}\n </div>\n )}\n\n {applied.accountId && total > 0 && (\n <Card className=\"overflow-hidden\">\n <Pagination\n className=\"border-t-0\"\n page={page}\n pageSize={PAGE_SIZE}\n total={total}\n onPageChange={setPage}\n disabled={loading}\n />\n </Card>\n )}\n\n {applied.accountId && result && total > 0 && (\n <Hint label={t('financial.reconciliation.pageTotalsHint')}>\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-3\">\n <TotalStat label={t('financial.reconciliation.pageCredits')} value={fmt(result.pageCredits)} tone=\"in\" />\n <TotalStat label={t('financial.reconciliation.pageDebits')} value={fmt(result.pageDebits)} tone=\"out\" />\n <TotalStat label={t('financial.reconciliation.pageBalance')} value={fmt(result.pageBalance)} />\n </div>\n </Hint>\n )}\n\n {/* Conciliar é um FLUXO, não um diálogo: classificar, detalhar, confirmar.\n Ver ReconcileFlow — e o último passo usa o mesmo formulário de\n pagamento da fatura. */}\n {flow && (\n <ReconcileFlow\n line={flow.line}\n initialIntent={flow.intent}\n initialTarget={flow.target}\n initialStep={flow.step}\n onClose={() => setFlow(null)}\n onDone={() => { setFlow(null); void load() }}\n />\n )}\n {detailsLine && (\n <StatementLineDetailsModal line={detailsLine} onClose={() => setDetailsLine(null)} />\n )}\n </div>\n )\n}\n\nconst BUCKET_ORDER: DateBucket[] = ['today', 'yesterday', 'thisWeek', 'lastWeek', 'thisMonth', 'lastMonth', 'older']\n\nfunction groupByBucket(rows: ImportedStatementLine[]) {\n const now = new Date()\n const map = new Map<DateBucket, ImportedStatementLine[]>()\n for (const row of rows) {\n const b = bucketOf(row.date, now)\n map.set(b, [...(map.get(b) ?? []), row])\n }\n return BUCKET_ORDER.filter((b) => map.has(b)).map((bucket) => ({ bucket, lines: map.get(bucket)! }))\n}\n\nconst CAMPO = 'h-[30px] px-2'\n\nfunction CardSkeleton() {\n return (\n <Card className=\"space-y-3 p-4\">\n <div className=\"flex items-center justify-between gap-4\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <Skeleton className=\"h-3.5 w-20\" />\n <Skeleton className=\"h-4 w-14 rounded\" />\n <Skeleton className=\"h-4 w-2/5\" />\n </div>\n <Skeleton className=\"h-5 w-24\" />\n </div>\n <div className=\"flex gap-2 border-t pt-2\">\n {[0, 1, 2, 3].map((i) => <Skeleton key={i} className=\"h-7 w-32\" />)}\n </div>\n </Card>\n )\n}\n\n/**\n * Um card de transação — a mesma anatomia do `ReconciliationCard` do V1:\n * cabeçalho com data, natureza, descrição e valor; e uma barra de ações\n * embaixo, separada por um traço, com «Detalhes» empurrado para a direita.\n *\n * Estado que impede não oferece a ação: a linha conciliada troca as quatro\n * ações por «Ver conta» e «Desfazer». Um selo verde ao lado de «Vincular» é a\n * segunda conciliação esperando acontecer.\n */\nfunction StatementCard({\n line, candidatos, sugerindo, busy, fmt, t,\n onSugerir, onTransferir, onVincular, onLancarConta, onAceitarCandidato, onDesfazer, onVerConta,\n onDetalhes,\n}: {\n line: ImportedStatementLine\n candidatos?: ReconciliationCandidate[]\n sugerindo: boolean\n busy: boolean\n fmt: (n: number) => string\n t: (key: string, params?: Record<string, string | number>) => string\n onSugerir: () => void\n onTransferir: () => void\n onVincular: () => void\n onLancarConta: () => void\n onAceitarCandidato: (candidate: ReconciliationCandidate) => void\n onDesfazer: () => void\n onVerConta: () => void\n onDetalhes: () => void\n}) {\n const isCredit = line.direction === 'credit'\n const conciliada = !!line.reconciledAt\n const sugestao = candidatos?.[0]\n const delta = sugestao ? round2(sugestao.movement.amount - line.amount) : 0\n\n return (\n // O cartão inteiro ganha um fundo de leve: a fita diz o estado a dois\n // metros, mas é o fundo que separa as linhas que pedem decisão das que já\n // não pedem, quando se rola cinquenta de uma vez.\n <Card className={`relative space-y-3 overflow-hidden p-4 ${\n conciliada\n ? 'border-2 border-success/50 bg-success-soft/25'\n : sugestao ? 'border-2 border-magic/60 bg-magic-soft/40' : ''\n }`}>\n {/* A fita diagonal do V1: diz o estado a dois metros, que é como se\n varre uma página de cinquenta. */}\n {(conciliada || sugestao) && (\n <div className=\"pointer-events-none absolute right-0 top-0 z-10 h-24 w-24 overflow-hidden\" aria-hidden>\n <div\n className={`absolute py-1 text-center text-[10px] font-bold uppercase tracking-wide text-white shadow-md ${\n conciliada ? 'bg-success' : 'bg-magic'\n }`}\n style={{ transform: 'rotate(45deg)', width: '140px', top: '22px', right: '-38px' }}\n >\n {conciliada ? t('financial.reconciliation.reconciled') : t('financial.reconciliation.suggestion')}\n </div>\n </div>\n )}\n\n {/* A fita come o canto superior direito, e é lá que mora o VALOR. Sem\n esta folga ela cortava o número: «– R$ 1.182,» é pior que não mostrar. */}\n <div className={`flex flex-wrap items-start justify-between gap-4 ${\n conciliada || sugestao ? 'pr-24' : ''\n }`}>\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <span className=\"text-sm font-semibold tabular-nums\">\n {line.date ? shortDate(line.date) : '—'}\n </span>\n <span className={`rounded border px-1.5 py-px text-[11px] font-medium ${\n isCredit ? 'border-success/60 text-success' : 'border-destructive/60 text-destructive'\n }`}>\n {isCredit ? t('financial.reconciliation.credit') : t('financial.reconciliation.debit')}\n </span>\n <span className=\"truncate text-base font-semibold\">\n {line.description || line.counterpartyName || line.externalId}\n </span>\n {conciliada && (\n <span className=\"inline-flex items-center gap-1 rounded bg-success/10 px-1.5 py-0.5 text-[11px] font-medium text-success\">\n <Check className=\"h-3 w-3\" />\n {t('financial.reconciliation.reconciled')}\n </span>\n )}\n {conciliada && line.matchedCounterpartyName && (\n <span className=\"text-sm text-muted-foreground\">\n {isCredit ? t('financial.reconciliation.payerLabel') : t('financial.reconciliation.supplierLabel')}{' '}\n <span className=\"font-medium text-foreground\">{line.matchedCounterpartyName}</span>\n </span>\n )}\n </div>\n <div className=\"shrink-0 text-right\">\n <div className={`whitespace-nowrap text-lg font-bold tabular-nums ${\n isCredit ? 'text-success' : 'text-destructive'\n }`}>\n {isCredit ? '+ ' : '− '}{fmt(line.amount)}\n </div>\n {/* O saldo do banco NESTA linha — é com ele que se confere se o\n extrato bate, sem somar à mão. */}\n {line.balanceAfter != null && (\n <div className=\"text-xs text-muted-foreground tabular-nums\">\n {t('financial.reconciliation.balanceAt')} {fmt(line.balanceAfter)}\n </div>\n )}\n </div>\n </div>\n\n {/* Campo vazio é sintoma, não estética: a segunda linha só existe quando\n o provedor mandou alguma coisa para ela. */}\n {(line.document || line.code || line.category || line.transactionType) && (\n <div className=\"flex flex-wrap gap-x-3 text-xs text-muted-foreground\">\n {line.document && <span>{t('financial.reconciliation.docPrefix')} {line.document}</span>}\n {line.code && <span>{line.code}</span>}\n {line.category && <span>{line.category}</span>}\n {line.transactionType && <span>{line.transactionType}</span>}\n </div>\n )}\n\n {/* O bloco de sugestão do V1: quem é, quanto, e a DIFERENÇA — porque\n vincular um boleto de 1.242,90 a uma linha de 1.242,00 sem ver o Δ é\n como se enterra uma quebra de caixa.\n\n ROXO, não laranja: quem apontou esta conta foi o cruzamento de valor,\n nome e data, e no produto inteiro o roxo (`magic`) é a cor do que a\n máquina sugeriu. Laranja é aviso — e a sugestão não é um problema a\n resolver, é um palpite a confirmar. Verde segue sendo o conciliado. */}\n {!conciliada && sugestao && (\n // O QUE SE LÊ À ESQUERDA, O QUE SE CLICA À DIREITA.\n //\n // «Conciliar» embaixo do texto empurrava a decisão para a terceira\n // linha do bloco e deixava o cartão com botão em três alturas\n // diferentes. Ele é a única ação deste bloco, então mora na borda\n // direita, na altura da frase que ele aceita.\n <div className=\"flex flex-wrap items-start gap-3 rounded-md border border-magic/40 bg-card/70 p-3\">\n <div className=\"min-w-0 flex-1 text-sm\">\n <span className=\"inline-flex items-center gap-1 font-medium text-magic-soft-foreground\">\n <Sparkles className=\"h-3.5 w-3.5 shrink-0\" aria-hidden />\n {t('financial.reconciliation.suggestionLabel')}\n </span>{' '}\n {sugestao.invoice?.contactName ?? sugestao.movement.notes ?? '—'}\n {sugestao.movement.installmentNumber ? ` · ${t('financial.reconciliation.installment')} ${sugestao.movement.installmentNumber}` : ''}\n {sugestao.movement.dueDate ? ` · ${t('financial.reconciliation.dueShort')} ${shortDate(sugestao.movement.dueDate)}` : ''}\n {' · '}<span className=\"font-semibold\">{fmt(sugestao.movement.amount)}</span>\n {Math.abs(delta) >= 0.01 && (\n <span className=\"ml-2 text-xs text-muted-foreground\">\n (Δ {delta >= 0 ? '+' : ''}{fmt(delta)})\n </span>\n )}\n <span className=\"ml-2 inline-flex items-center rounded bg-magic/10 px-1 py-px text-[11px] font-medium text-magic-soft-foreground\">\n {t('financial.reconciliation.matchScore', { score: Math.round(sugestao.score * 100) })}\n </span>\n {candidatos && candidatos.length > 1 && (\n <Button variant=\"bare\" size=\"bare\"\n type=\"button\"\n onClick={onVincular}\n className=\"font-normal ml-2 text-xs text-muted-foreground underline-offset-2 hover:underline\"\n >\n {t('financial.reconciliation.moreCandidates', { count: candidatos.length - 1 })}\n </Button>\n )}\n </div>\n <Button size=\"sm\" className=\"shrink-0\" disabled={busy} onClick={() => onAceitarCandidato(sugestao)}>\n <Link2 className=\"h-3 w-3\" />\n {t('financial.reconciliation.match')}\n </Button>\n </div>\n )}\n {!conciliada && candidatos && candidatos.length === 0 && (\n <p className=\"rounded-md border border-dashed px-3 py-2 text-xs text-muted-foreground\">\n {t('financial.reconciliation.noCandidates')}\n </p>\n )}\n\n {/* A barra de ações, sempre visível, com «Detalhes» na direita. */}\n <div className=\"flex flex-wrap items-center gap-2 border-t pt-2\">\n {!conciliada && (\n <>\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onTransferir}>\n <ArrowRightLeft className=\"h-3 w-3\" />\n {t('financial.reconciliation.markTransfer')}\n </Button>\n <Button variant=\"outline\" size=\"sm\" disabled={busy} onClick={onVincular}>\n <Link2 className=\"h-3 w-3\" />\n {t('financial.reconciliation.linkManually')}\n </Button>\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onLancarConta}>\n <Receipt className=\"h-3 w-3\" />\n {t('financial.reconciliation.createBill')}\n </Button>\n </>\n )}\n {conciliada && (\n <>\n {/* Ação bloqueada DIZ o que falta. Este botão nascia `disabled`\n sempre — e sem a conta para onde ir ele continua desabilitado,\n mas agora com o motivo em vez do silêncio. */}\n <Hint label={line.matchedInvoiceId\n ? t('financial.reconciliation.viewBill')\n : t('financial.reconciliation.viewBillUnavailable')}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={!line.matchedInvoiceId}\n onClick={onVerConta}\n >\n <FileSearch className=\"h-3 w-3\" />\n {t('financial.reconciliation.viewBill')}\n </Button>\n </Hint>\n <Button variant=\"ghost\" size=\"sm\" disabled={busy} onClick={onDesfazer}>\n <Undo2 className=\"h-3 w-3\" />\n {t('financial.reconciliation.undo')}\n </Button>\n </>\n )}\n {/* «Sugerir» É A SEGUNDA TENTATIVA, não a primeira.\n A varredura da página já roda sozinha, então o botão só faz sentido\n onde ela não achou nada — ao lado dele estaria dizendo «procure de\n novo» embaixo de uma resposta que já está na tela. Roxo de contorno\n porque é a mesma máquina da sugestão, e encostado em «Detalhes»\n porque é ação de exceção, não a do caminho normal. */}\n {!conciliada && !sugestao && (\n <AiActionButton size=\"sm\" className=\"ml-auto\" busy={sugerindo} disabled={busy} onClick={onSugerir}>\n {t('financial.reconciliation.suggest')}\n </AiActionButton>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={conciliada || sugestao ? 'ml-auto' : ''}\n onClick={onDetalhes}\n >\n <Eye className=\"h-3 w-3\" />\n {t('financial.reconciliation.details')}\n </Button>\n </div>\n </Card>\n )\n}\n","import React from 'react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { CalendarClock, Loader2, Pause, Pencil, Play } from 'lucide-react'\nimport {\n Badge, Button, DatePicker, Input, ListView, SearchSelect, SubpageHeader, Switch,\n toast, useSaveBar, Textarea, Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@fayz-ai/ui'\nimport {\n OrderFormAddItemStep, OrderFormBlock, OrderFormItemRow,\n OrderFormItemsCard, OrderFormSkeleton, OrderFormView,\n createArchetypeLookup, useLookupCreate, usePermissionOptional,\n} from '@fayz-ai/admin'\nimport { useFinancialConfig, useFinancialProvider, formatCurrency } from '../context'\nimport type { ChartOfAccountsNode, CostCenter } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport type { RecurringBill, RecurringBillDirection, RecurringBillFrequency, SaveRecurringBillInput } from '@fayz-ai/financial/domain/recurring-bill'\nimport type { CreateInvoiceItemInput } from '@fayz-ai/financial/domain/invoice'\nimport type { ViewIntent } from './FinancialPage'\nimport { postableAccounts, accountLabel } from '@fayz-ai/financial/domain/chart-of-accounts'\nimport { availableInvoiceItemTypes } from '@fayz-ai/financial/domain/invoice'\nimport { counterpartyAccountingPolicy, resolveCounterpartyAccountingPolicy, type CounterpartyAccountingPolicy } from '@fayz-ai/financial/domain/counterparty'\nimport { useStockedItemTypes } from '../lib/useStockedItemTypes'\nimport {\n FinancialCounterpartySearchSelect,\n createFinancialCounterpartyLookup,\n} from '../components/FinancialCounterpartySearchSelect'\nimport { UnitField, useWritableUnits } from '../components/UnitField'\nimport { useTranslation } from '@fayz-ai/core'\n\n// Radix Select reserves the empty string for \"nothing chosen\".\nconst ALL_UNITS = '__all__'\n\nconst FREQUENCIES: Array<{ value: RecurringBillFrequency; label: string }> = [\n { value: 'weekly', label: 'Semanal' },\n { value: 'monthly', label: 'Mensal' },\n { value: 'quarterly', label: 'Trimestral' },\n { value: 'yearly', label: 'Anual' },\n]\n\nfunction today() {\n return new Date().toISOString().slice(0, 10)\n}\n\nfunction dateLabel(value?: string | null) {\n if (!value) return 'Sem término'\n const [year, month, day] = value.split('-')\n return year && month && day ? `${day}/${month}/${year}` : value\n}\n\ninterface RecurringFormItem extends CreateInvoiceItemInput { _id: string }\ninterface SelectedCounterparty { id?: string; name: string }\n\nfunction newRecurringItem(): RecurringFormItem {\n return { _id: crypto.randomUUID(), itemKind: 'other', description: '', quantity: 1, unitPrice: 0 }\n}\n\nexport function RecurringBillsView({\n direction, intent, onNavigate,\n}: {\n direction: RecurringBillDirection\n intent: ViewIntent\n onNavigate: (view: string) => void\n}) {\n const prefix = direction === 'payable' ? 'payables' : 'receivables'\n if (intent.mode === 'new' || intent.mode === 'edit') {\n return (\n <RecurringBillFormView\n direction={direction}\n valueId={intent.mode === 'edit' ? intent.editId : undefined}\n onBack={() => onNavigate(`${prefix}-recurring`)}\n />\n )\n }\n return <RecurringBillsList direction={direction} onNavigate={onNavigate} />\n}\n\nfunction RecurringBillsList({ direction, onNavigate }: { direction: RecurringBillDirection; onNavigate: (view: string) => void }) {\n const provider = useFinancialProvider()\n const { currency } = useFinancialConfig()\n const can = usePermissionOptional()\n const [rows, setRows] = React.useState<RecurringBill[] | null>(null)\n const [search, setSearch] = React.useState('')\n const [status, setStatus] = React.useState<'all' | 'active' | 'paused'>('all')\n const [changing, setChanging] = React.useState<string | null>(null)\n const isPayable = direction === 'payable'\n const prefix = isPayable ? 'payables' : 'receivables'\n\n const load = React.useCallback(async () => {\n setRows(null)\n try {\n setRows((await provider.getRecurringBills?.(direction)) ?? [])\n } catch (error: any) {\n setRows([])\n toast.error(error?.message ?? 'Não foi possível carregar as recorrências.')\n }\n }, [provider, direction])\n\n React.useEffect(() => { void load() }, [load])\n\n const filtered = React.useMemo(() => {\n const term = search.trim().toLowerCase()\n const visiveis = (rows ?? []).filter((row) => {\n if (status === 'active' && !row.isActive) return false\n if (status === 'paused' && row.isActive) return false\n if (!term) return true\n return [row.description, row.counterpartyName, row.notes]\n .some((field) => field?.toLowerCase().includes(term))\n })\n // PELO DIA DO VENCIMENTO, do primeiro ao último do mês.\n //\n // A lista chegava na ordem do banco (ativa primeiro, depois descrição), e\n // quem abre esta tela está montando o mês: quer ver o dia 5, o 10, o 20.\n // Pausada no fim, porque ela não entra no mês de ninguém.\n return [...visiveis].sort((a, b) =>\n Number(b.isActive) - Number(a.isActive)\n || (a.dueDay ?? 0) - (b.dueDay ?? 0)\n || a.description.localeCompare(b.description))\n }, [rows, search, status])\n\n // ---------------------------------------------------------------------------\n // QUANTO SAI (ou entra) POR MÊS, de fixo.\n //\n // É a pergunta que faz alguém abrir esta tela — e ela não se responde somando\n // a coluna: uma régua anual e uma mensal têm o mesmo campo `amount` e pesos\n // diferentes no mês. Então o total é MENSAL EQUIVALENTE, com a conversão\n // dita na tela: semanal × 52/12, trimestral ÷ 3, anual ÷ 12.\n //\n // Só as ATIVAS. Uma recorrência pausada não sai de caixa nenhum, e somá-la\n // faria o número prometer uma despesa que não existe.\n // ---------------------------------------------------------------------------\n const porMes = React.useMemo(() => {\n const fator: Record<string, number> = { weekly: 52 / 12, monthly: 1, quarterly: 1 / 3, yearly: 1 / 12 }\n const ativas = filtered.filter((row) => row.isActive)\n return {\n quantas: ativas.length,\n total: ativas.reduce((soma, row) => soma + row.amount * (fator[row.frequency] ?? 1), 0),\n temOutraPeriodicidade: ativas.some((row) => row.frequency !== 'monthly'),\n }\n }, [filtered])\n\n async function toggle(row: RecurringBill) {\n setChanging(row.id)\n try {\n await provider.updateRecurringBill?.(row.id, { isActive: !row.isActive })\n await load()\n toast.success(row.isActive ? 'Recorrência pausada.' : 'Recorrência reativada.')\n } catch (error: any) {\n toast.error(error?.message ?? 'Não foi possível alterar a recorrência.')\n } finally { setChanging(null) }\n }\n\n const columns = React.useMemo<ColumnDef<RecurringBill>[]>(() => [\n {\n accessorKey: 'description', header: 'Descrição',\n cell: ({ row }) => (\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium\">{row.original.description}</p>\n <p className=\"truncate text-xs text-muted-foreground\">{row.original.counterpartyName || 'Sem contato vinculado'}</p>\n </div>\n ),\n },\n { accessorKey: 'amount', header: 'Valor', cell: ({ row }) => <span className=\"tabular-nums\">{formatCurrency(row.original.amount, currency)}</span> },\n { accessorKey: 'frequency', header: 'Periodicidade', cell: ({ row }) => FREQUENCIES.find((item) => item.value === row.original.frequency)?.label ?? row.original.frequency },\n { accessorKey: 'dueDay', header: 'Vencimento', cell: ({ row }) => `Dia ${row.original.dueDay}` },\n {\n id: 'validity', header: 'Vigência',\n cell: ({ row }) => <span className=\"text-xs\">{dateLabel(row.original.startsOn)} – {dateLabel(row.original.endsOn)}</span>,\n },\n {\n accessorKey: 'isActive', header: 'Status',\n cell: ({ row }) => <Badge variant={row.original.isActive ? 'success' : 'secondary'}>{row.original.isActive ? 'Ativa' : 'Pausada'}</Badge>,\n },\n {\n id: 'actions', header: '',\n cell: ({ row }) => (\n <div className=\"flex justify-end gap-1\" onClick={(event) => event.stopPropagation()}>\n <Button variant=\"ghost\" size=\"icon\" title=\"Editar\" onClick={() => onNavigate(`${prefix}-recurring-edit:${row.original.id}`)}>\n <Pencil className=\"h-3.5 w-3.5\" />\n </Button>\n <Button variant=\"ghost\" size=\"icon\" title={row.original.isActive ? 'Pausar' : 'Reativar'}\n disabled={changing === row.original.id} onClick={() => void toggle(row.original)}>\n {changing === row.original.id ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n : row.original.isActive ? <Pause className=\"h-3.5 w-3.5\" /> : <Play className=\"h-3.5 w-3.5\" />}\n </Button>\n </div>\n ),\n },\n ], [currency, changing, onNavigate, prefix])\n\n const newRoute = `${prefix}-recurring-new`\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={isPayable ? 'Despesas recorrentes' : 'Receitas recorrentes'} />\n <ListView<RecurringBill>\n columns={columns}\n data={filtered}\n loading={rows === null}\n search={search}\n onSearchChange={setSearch}\n searchPlaceholder=\"Buscar descrição ou contato\"\n filterDefs={[{\n id: 'status', label: 'Status', allLabel: 'Todos os status',\n options: [{ value: 'active', label: 'Ativas' }, { value: 'paused', label: 'Pausadas' }],\n value: status === 'all' ? undefined : status,\n onChange: (next) => setStatus((next ?? 'all') as typeof status),\n }]}\n activeFilterCount={status === 'all' ? 0 : 1}\n onClearFilters={() => setStatus('all')}\n newLabel={isPayable ? 'Nova despesa recorrente' : 'Nova receita recorrente'}\n onNew={can('financial', 'create') ? () => onNavigate(newRoute) : undefined}\n onRowClick={(row) => onNavigate(`${prefix}-recurring-edit:${row.id}`)}\n emptyIcon={CalendarClock}\n emptyMessage={isPayable ? 'Nenhuma despesa recorrente' : 'Nenhuma receita recorrente'}\n emptyActionLabel={can('financial', 'create') ? 'Criar primeira recorrência' : undefined}\n onEmptyAction={can('financial', 'create') ? () => onNavigate(newRoute) : undefined}\n />\n {/* O rodapé da lista de contas, com a mesma forma — é o mesmo gesto de\n conferência, e duas somas desenhadas diferentes no mesmo módulo fazem\n reaprender a ler. */}\n {porMes.quantas > 0 && rows !== null && (\n <div className=\"flex items-center justify-end gap-6 rounded-lg border bg-muted/30 px-5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{porMes.quantas === 1 ? '1 ativa' : `${porMes.quantas} ativas`}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">\n {isPayable ? 'Despesa fixa por mês' : 'Receita fixa por mês'}\n </span>\n <span\n className={`font-semibold tabular-nums ${isPayable ? 'text-destructive' : 'text-success'}`}\n title={porMes.temOutraPeriodicidade\n ? 'Equivalente mensal: semanal × 52/12, trimestral ÷ 3, anual ÷ 12'\n : undefined}\n >\n {formatCurrency(porMes.total, currency)}\n </span>\n {porMes.temOutraPeriodicidade && (\n <span className=\"text-[10px] text-muted-foreground\">(equivalente)</span>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nfunction RecurringBillFormView({ direction, valueId, onBack }: {\n direction: RecurringBillDirection\n valueId?: string\n onBack: () => void\n}) {\n const provider = useFinancialProvider()\n const { locations, currency, itemTypes: configuredItemTypes, entityLookups } = useFinancialConfig()\n const t = useTranslation()\n const isPayable = direction === 'payable'\n const [value, setValue] = React.useState<RecurringBill | null>(null)\n const [loaded, setLoaded] = React.useState(!valueId)\n const [contact, setContact] = React.useState<SelectedCounterparty | null>(null)\n const [counterpartyAccounting, setCounterpartyAccounting] = React.useState<CounterpartyAccountingPolicy>({\n allowedAccountIds: [], limitAccounts: false, addItemsAutomatically: false,\n })\n const accountingPolicyRequest = React.useRef(0)\n const counterpartyLookup = React.useMemo(\n () => createFinancialCounterpartyLookup(isPayable ? 'debit' : 'credit'),\n [isPayable],\n )\n const contactCreate = useLookupCreate(counterpartyLookup, (created) => {\n setContact({ id: created.id, name: created.label })\n })\n const initialItem = React.useRef<RecurringFormItem>(newRecurringItem())\n const [items, setItems] = React.useState<RecurringFormItem[]>([initialItem.current])\n const [expandedItemId, setExpandedItemId] = React.useState<string | null>(initialItem.current._id)\n const [addingItem, setAddingItem] = React.useState(false)\n const [frequency, setFrequency] = React.useState<RecurringBillFrequency>('monthly')\n const [dueDay, setDueDay] = React.useState('1')\n const [startsOn, setStartsOn] = React.useState(today())\n const [endsOn, setEndsOn] = React.useState('')\n const [unitId, setUnitId] = React.useState(locations[0]?.id ?? '')\n const [availableLocations, setAvailableLocations] = React.useState(locations)\n const [notes, setNotes] = React.useState('')\n // ATIVA OU PAUSADA, AQUI DENTRO.\n //\n // O interruptor só existia na lista, e é na ficha que se decide: quem abre a\n // régua para mexer no valor é quem acabou de descobrir que o contrato mudou —\n // e às vezes a decisão é pausar, não corrigir. Ir até a lista para isso é\n // sair da tela em que se está trabalhando.\n const [isActive, setIsActive] = React.useState(true)\n const [accounts, setAccounts] = React.useState<ChartOfAccountsNode[]>([])\n const [costCenters, setCostCenters] = React.useState<CostCenter[]>([])\n const { choices: unitChoices } = useWritableUnits(availableLocations)\n const [saving, setSaving] = React.useState(false)\n const [ending, setEnding] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n\n React.useEffect(() => {\n if (locations.length > 0) { setAvailableLocations(locations); return }\n let cancelled = false\n const lookup = createArchetypeLookup({ archetype: 'location', entityDef: null })\n void lookup.list?.().then((rows) => {\n if (!cancelled) setAvailableLocations(rows.map((row) => ({ id: row.id, name: row.label })))\n }).catch(() => { /* the optional selector remains usable without choices */ })\n return () => { cancelled = true }\n }, [locations])\n\n React.useEffect(() => {\n let cancelled = false\n void Promise.all([\n provider.getChartOfAccounts(),\n provider.getCostCenters(),\n valueId ? provider.getRecurringBills?.(direction) ?? Promise.resolve([]) : Promise.resolve([]),\n ]).then(([nextAccounts, nextCenters, recurring]) => {\n if (cancelled) return\n setAccounts(postableAccounts(nextAccounts))\n setCostCenters(nextCenters)\n if (valueId) {\n const nextValue = recurring.find((item) => item.id === valueId) ?? null\n if (!nextValue) {\n toast.error('Recorrência não encontrada.')\n onBack()\n return\n }\n setValue(nextValue)\n setContact(nextValue.counterpartyPersonId ? { id: nextValue.counterpartyPersonId, name: nextValue.counterpartyName ?? '' } : null)\n const loadedItems = nextValue.items.length > 0\n ? nextValue.items.map((item) => ({ ...item, _id: crypto.randomUUID() }))\n : [{\n ...newRecurringItem(),\n description: nextValue.description,\n unitPrice: nextValue.amount,\n accountId: nextValue.chartAccountId ?? undefined,\n costCenterId: nextValue.costCenterId ?? undefined,\n }]\n setItems(loadedItems)\n // FECHADA. Expandir a primeira linha fazia sentido no cadastro novo —\n // ali ela está vazia e é o próximo passo. Numa régua que já existe a\n // pessoa vem conferir ou mexer no vencimento, e abrir um campo de\n // edição por conta própria empurra o resto do formulário para baixo.\n setExpandedItemId(null)\n setFrequency(nextValue.frequency)\n setDueDay(String(nextValue.dueDay))\n setStartsOn(nextValue.startsOn)\n setEndsOn(nextValue.endsOn ?? '')\n setUnitId(nextValue.unitId ?? '')\n setNotes(nextValue.notes ?? '')\n setIsActive(nextValue.isActive)\n }\n setLoaded(true)\n }).catch((caught: any) => {\n if (cancelled) return\n toast.error(caught?.message ?? 'Não foi possível abrir a recorrência.')\n if (valueId) onBack()\n else setLoaded(true)\n })\n return () => { cancelled = true }\n }, [provider, direction, valueId])\n\n // Same translation as the bill form: the config resolver labels defaults in English.\n const translatedItemTypes = React.useMemo(() => configuredItemTypes.map((tp) => {\n const label = t(`financial.itemType.${tp.value}`)\n return label === `financial.itemType.${tp.value}` ? tp : { ...tp, label }\n }), [configuredItemTypes, t])\n const offeredItemTypes = React.useMemo(() => availableInvoiceItemTypes(\n translatedItemTypes,\n Object.keys(entityLookups),\n t('financial.itemType.other'),\n direction,\n ), [translatedItemTypes, entityLookups, direction, t])\n // Mesma regra do documento avulso: catálogo sem linha não vira escolha.\n const itemTypes = useStockedItemTypes(offeredItemTypes, entityLookups)\n const selectableAccounts = React.useMemo(() => {\n const postable = postableAccounts(accounts)\n if (!counterpartyAccounting.limitAccounts) return postable\n const allowed = new Set(counterpartyAccounting.allowedAccountIds)\n return postable.filter((account) => allowed.has(account.id))\n }, [accounts, counterpartyAccounting])\n const hasItemLookups = itemTypes.some((item) => entityLookups[item.value])\n const amount = React.useMemo(() => items.reduce(\n (sum, item) => sum + item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0), 0,\n ), [items])\n const description = items.map((item) => item.description.trim()).filter(Boolean).join(', ')\n const numericDueDay = Math.trunc(Number(dueDay))\n const invalid = items.length === 0 ? 'Adicione pelo menos um item.'\n : items.some((item) => !item.description.trim()) ? 'Informe a descrição de todos os itens.'\n : !contact?.id ? `Selecione ${isPayable ? 'quem recebe' : 'quem paga'}.`\n : !(amount > 0) ? 'Informe um valor maior que zero.'\n : numericDueDay < 1 || numericDueDay > 31 ? 'O dia do vencimento vai de 1 a 31.'\n : !startsOn ? 'Informe o início da recorrência.'\n : endsOn && endsOn < startsOn ? 'O término não pode vir antes do início.'\n : null\n\n const fields = { items, contactId: contact?.id ?? '', frequency, dueDay, startsOn, endsOn, unitId, notes, isActive }\n const snapshot = React.useRef<string | null>(null)\n React.useEffect(() => {\n if (loaded && snapshot.current === null) snapshot.current = JSON.stringify(fields)\n }, [loaded])\n const dirty = snapshot.current !== null && JSON.stringify(fields) !== snapshot.current\n\n async function save() {\n // O motivo, e nao o silencio: o botao de salvar fica aceso mesmo com o\n // formulario incompleto, e `return` sem dizer nada deixa quem clicou sem\n // saber que valor zero (ou item sem descricao) e o que barra o salvamento.\n if (invalid) { setError(invalid); return }\n if (!contact?.id || !provider.saveRecurringBill) return\n setSaving(true); setError(null)\n try {\n const input: SaveRecurringBillInput = {\n id: value?.id,\n direction,\n description: description.trim(),\n counterpartyPersonId: contact.id,\n amount,\n items: items.map(({ _id: _ignored, ...item }) => item),\n frequency,\n dueDay: numericDueDay,\n startsOn,\n endsOn: endsOn || null,\n unitId: unitId || null,\n chartAccountId: null,\n costCenterId: null,\n notes: notes.trim() || null,\n isActive,\n }\n const regua = await provider.saveRecurringBill(input)\n // O PRIMEIRO TEMPO DA RECORRÊNCIA.\n //\n // Salvar a régua não criava nada: a recorrência existia e não aparecia em\n // lugar nenhum até alguém rodar a rotina — e aí nascia como dívida, sem\n // ninguém ter conferido. Aqui ela passa a escrever os vencimentos do ano\n // como PREVISÃO, que é o que a lista de contas mostra tracejado com o\n // botão «Consolidar». Falhar aqui não desfaz o que foi salvo.\n if (provider.provisionRecurringBill && regua?.id) {\n try { await provider.provisionRecurringBill(regua.id) }\n catch (err) { console.warn('[financial] não deu para provisionar a recorrência', err) }\n }\n toast.success(value ? 'Recorrência atualizada.' : 'Recorrência criada.')\n onBack()\n } catch (caught: any) {\n const message = caught?.message ?? 'Não foi possível salvar a recorrência.'\n setError(message)\n toast.error(message)\n } finally { setSaving(false) }\n }\n\n async function endToday() {\n if (!value || !provider.updateRecurringBill) return\n setSaving(true); setError(null)\n try {\n await provider.updateRecurringBill(value.id, { isActive: false, endsOn: today() })\n toast.success('Recorrência encerrada hoje.')\n onBack()\n } catch (caught: any) {\n const message = caught?.message ?? 'Não foi possível encerrar a recorrência.'\n setError(message)\n toast.error(message)\n setEnding(false)\n } finally { setSaving(false) }\n }\n\n function addItem(kind = 'other') {\n const item = {\n ...newRecurringItem(),\n itemKind: kind,\n accountId: counterpartyAccounting.defaultAccountId,\n costCenterId: counterpartyAccounting.defaultCostCenterId,\n }\n setItems((current) => [...current, item])\n setExpandedItemId(item._id)\n setAddingItem(false)\n }\n\n function updateItem(id: string, patch: Partial<RecurringFormItem>) {\n setItems((current) => current.map((item) => item._id === id ? { ...item, ...patch } : item))\n }\n\n useSaveBar({\n dirty,\n alwaysVisible: loaded,\n saving,\n onSave: () => { void save() },\n onDiscard: onBack,\n saveLabel: 'Salvar recorrência',\n })\n\n if (!loaded) return <OrderFormSkeleton parentLabel={isPayable ? 'Contas a Pagar' : 'Contas a Receber'} onBack={onBack} />\n\n const title = `${value ? 'Editar' : 'Nova'} ${isPayable ? 'despesa recorrente' : 'receita recorrente'}`\n const actions = value?.isActive && !ending ? (\n <Button variant=\"outline\" size=\"sm\" className=\"text-destructive\" onClick={() => setEnding(true)}>Encerrar recorrência</Button>\n ) : undefined\n\n return (\n <OrderFormView\n title={title}\n parentLabel={isPayable ? 'Contas a Pagar' : 'Contas a Receber'}\n onBack={onBack}\n actions={actions}\n banner={ending ? (\n <div className=\"rounded-card border border-warning/40 bg-warning/5 p-3 text-sm\">\n <p>Encerrar hoje pausa a regra e preserva todos os títulos já gerados.</p>\n <div className=\"mt-2 flex gap-2\">\n <Button size=\"sm\" variant=\"destructive\" onClick={() => void endToday()} disabled={saving}>Confirmar encerramento</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEnding(false)} disabled={saving}>Cancelar</Button>\n </div>\n </div>\n ) : undefined}\n sideSections={(\n <>\n <OrderFormBlock title=\"Recorrência\">\n <div className=\"space-y-3\">\n <UnitField label=\"Unidade\" choices={unitChoices} value={unitId} onChange={setUnitId} />\n <Field label=\"Periodicidade *\">\n <Select value={frequency} onValueChange={(v) => setFrequency(v as RecurringBillFrequency)}>\n <SelectTrigger className=\"bg-card\"><SelectValue /></SelectTrigger>\n <SelectContent>\n {FREQUENCIES.map((item) => <SelectItem key={item.value} value={item.value}>{item.label}</SelectItem>)}\n </SelectContent>\n </Select>\n </Field>\n <Field label=\"Dia do vencimento *\"><Input type=\"number\" min={1} max={31} value={dueDay} onChange={(event) => setDueDay(event.target.value)} /></Field>\n <div className=\"space-y-3\">\n <Field label=\"Início *\"><DatePicker value={startsOn} onChange={setStartsOn} className=\"w-full\" /></Field>\n <Field label=\"Término\"><DatePicker value={endsOn} onChange={setEndsOn} className=\"w-full\" /></Field>\n </div>\n {/* PAUSAR É UMA DECISÃO DA FICHA, não só da lista.\n Pausada, a régua para de provisionar e sai da soma do mês —\n e continua inteira aqui, que é a diferença entre pausar e\n encerrar (o \"Encerrar hoje\" abaixo carimba o término). */}\n <label className=\"mt-1 flex cursor-pointer items-start justify-between gap-3 rounded-input border border-input bg-card px-3 py-2\">\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{isActive ? 'Ativa' : 'Pausada'}</span>\n <span className=\"block text-[11px] leading-snug text-muted-foreground\">\n {isActive\n ? 'Gera os vencimentos e entra no total do mês.'\n : 'Não gera vencimento nem entra no total. Os já criados ficam.'}\n </span>\n </span>\n <Switch checked={isActive} onCheckedChange={setIsActive} />\n </label>\n </div>\n </OrderFormBlock>\n <OrderFormBlock title=\"Observações\">\n <Textarea\n value={notes}\n onChange={(event) => setNotes(event.target.value)}\n placeholder=\"Informações adicionais\"\n rows={2}\n className=\"resize-none\"\n />\n </OrderFormBlock>\n </>\n )}\n >\n <OrderFormBlock>\n <div className=\"space-y-4\">\n <FinancialCounterpartySearchSelect\n lookup={counterpartyLookup}\n value={contact?.id}\n displayValue={contact?.name}\n onChange={(id, option) => {\n setContact(id && option ? { id, name: option.label } : null)\n const request = ++accountingPolicyRequest.current\n if (!id) {\n setCounterpartyAccounting({ allowedAccountIds: [], limitAccounts: false, addItemsAutomatically: false })\n return\n }\n const policy = counterpartyAccountingPolicy(option?.data)\n setCounterpartyAccounting({\n allowedAccountIds: [],\n limitAccounts: policy.limitAccounts,\n addItemsAutomatically: policy.addItemsAutomatically,\n })\n void (async () => {\n let resolvedRefs: Record<string, string> = {}\n try {\n const refs = [policy.defaultAccountId, ...policy.allowedAccountIds].filter(Boolean) as string[]\n resolvedRefs = await provider.resolveChartAccountRefs?.(refs) ?? {}\n } catch { /* UUID references remain valid. */ }\n if (request !== accountingPolicyRequest.current) return\n const resolved = resolveCounterpartyAccountingPolicy(policy, resolvedRefs)\n setCounterpartyAccounting(resolved)\n setItems((current) => current.map((item) => ({\n ...item,\n accountId: item.accountId ?? resolved.defaultAccountId,\n costCenterId: item.costCenterId ?? resolved.defaultCostCenterId,\n })))\n })()\n }}\n label={isPayable ? 'Pagar a' : 'Receber de'}\n required\n onCreate={contactCreate.onCreate}\n />\n {contactCreate.modal}\n {error ? <p className=\"text-xs text-destructive\">{error}</p> : null}\n </div>\n </OrderFormBlock>\n <OrderFormItemsCard\n label=\"Itens\"\n addLabel=\"Adicionar item\"\n onAdd={() => hasItemLookups ? setAddingItem(true) : addItem()}\n count={items.length}\n total={formatCurrency(amount, currency)}\n header={addingItem ? (\n <OrderFormAddItemStep itemTypes={itemTypes} onSelect={addItem} onCancel={() => setAddingItem(false)} />\n ) : undefined}\n >\n {items.map((item, index) => (\n <OrderFormItemRow\n key={item._id}\n {...item}\n index={index}\n itemTypes={itemTypes}\n currency={currency}\n formatMoney={(next) => formatCurrency(next, currency)}\n expanded={expandedItemId === item._id}\n onToggle={() => setExpandedItemId(expandedItemId === item._id ? null : item._id)}\n onChange={(patch) => updateItem(item._id, patch)}\n onRemove={() => setItems((current) => current.filter((entry) => entry._id !== item._id))}\n entityLookups={entityLookups}\n showTypeSelector={hasItemLookups}\n allowSurcharge\n extraFieldGroups={[\n ...(selectableAccounts.length > 0 ? [{\n id: 'account',\n label: 'Plano de contas',\n filled: !!item.accountId,\n // Mesma linha fechada da fatura avulsa: a recorrência é a que\n // mais precisa, porque ela repete a classificação todo mês.\n summary: selectableAccounts.find((account) => account.id === item.accountId)?.name,\n onClear: () => updateItem(item._id, { accountId: undefined }),\n field: (\n <SearchSelect\n label=\"Plano de contas\"\n value={item.accountId}\n displayValue={selectableAccounts.find((account) => account.id === item.accountId)?.name}\n placeholder=\"Sem classificação\"\n minChars={0}\n onSearch={(query) => selectableAccounts\n .filter((account) => accountLabel(account).toLowerCase().includes(query.toLowerCase()))\n .map((account) => ({ id: account.id, label: accountLabel(account) }))}\n onChange={(id) => updateItem(item._id, { accountId: id || undefined })}\n />\n ),\n }] : []),\n ...(costCenters.length > 0 ? [{\n id: 'costCenter',\n label: 'Centro de custo',\n filled: !!item.costCenterId,\n onClear: () => updateItem(item._id, { costCenterId: undefined }),\n field: (\n <SearchSelect\n label=\"Centro de custo\"\n value={item.costCenterId}\n displayValue={costCenters.find((center) => center.id === item.costCenterId)?.name}\n placeholder=\"Sem centro de custo\"\n minChars={0}\n onSearch={(query) => costCenters\n .filter((center) => center.name.toLowerCase().includes(query.toLowerCase()))\n .map((center) => ({ id: center.id, label: center.name }))}\n onChange={(id) => updateItem(item._id, { costCenterId: id || undefined })}\n />\n ),\n }] : []),\n ]}\n />\n ))}\n </OrderFormItemsCard>\n </OrderFormView>\n )\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return <label className=\"block space-y-1 text-xs font-medium text-muted-foreground\"><span>{label}</span>{children}</label>\n}\n","import React, { useState } from 'react'\nimport { DollarSign, Landmark, CreditCard, BookOpen, ChevronRight, Check } from 'lucide-react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\n\nconst STEPS = [\n { id: 'welcome', icon: DollarSign, titleKey: 'financial.onboarding.welcome', descKey: 'financial.onboarding.description' },\n { id: 'accounts', icon: Landmark, titleKey: 'financial.onboarding.accounts.title', descKey: 'financial.onboarding.accounts.description' },\n { id: 'payments', icon: CreditCard, titleKey: 'financial.onboarding.payments.title', descKey: 'financial.onboarding.payments.description' },\n { id: 'chart', icon: BookOpen, titleKey: 'financial.onboarding.chart.title', descKey: 'financial.onboarding.chart.description' },\n]\n\nexport function FinancialOnboarding({ onComplete }: { onComplete: () => void }) {\n const t = useTranslation()\n const [step, setStep] = useState(0)\n const current = STEPS[step]\n const isLast = step === STEPS.length - 1\n const Icon = current.icon\n\n return (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"w-full max-w-lg\">\n {/* Progress */}\n <div className=\"flex items-center gap-1 mb-8\">\n {STEPS.map((s, i) => (\n <div\n key={s.id}\n className={`h-1 flex-1 rounded-full transition-colors ${\n i <= step ? 'bg-primary' : 'bg-muted'\n }`}\n />\n ))}\n </div>\n\n {/* Card */}\n <div className=\"rounded-card border bg-card p-8 text-center space-y-6 shadow-sm\">\n <div className=\"flex justify-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-primary/10\">\n <Icon className=\"h-8 w-8 text-primary\" />\n </div>\n </div>\n\n <div>\n <h2 className=\"text-xl font-bold\">{t(current.titleKey)}</h2>\n <p className=\"text-sm text-muted-foreground mt-2 max-w-sm mx-auto\">{t(current.descKey)}</p>\n </div>\n\n {/* Step-specific hint */}\n {step > 0 && step < STEPS.length - 1 && (\n <div className=\"rounded-lg bg-muted/30 px-4 py-3 text-xs text-muted-foreground\">\n {t('financial.onboarding.configureHint')}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center justify-center gap-3 pt-2\">\n {step > 0 && (\n <Button variant=\"outline\" size=\"lg\" onClick={() => setStep(step - 1)}>\n {t('financial.onboarding.back')}\n </Button>\n )}\n {isLast ? (\n <Button variant=\"default\" size=\"lg\" onClick={onComplete}>\n <Check className=\"h-4 w-4\" /> {t('financial.onboarding.startUsing')}\n </Button>\n ) : (\n <Button variant=\"default\" size=\"lg\" onClick={() => setStep(step + 1)}>\n {step === 0 ? t('financial.onboarding.getStarted') : t('financial.onboarding.next')}\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Skip */}\n {!isLast && step === 0 && (\n <Button variant=\"bare\" size=\"bare\"\n onClick={onComplete}\n className=\"font-normal text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.onboarding.skip')}\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useCallback, useMemo } from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n PettyCashView, ImportPayrollView,\n CashReviewersView, PeriodClosingView, DateClosingView,\n CommissionPreviewView, CommissionPayoutsView,\n ReceivingCardsView,\n IssuedNotesView, TaxGroupsView,\n} from './GapScreens'\nimport { ModulePage, PageTransition, type ModuleNavItem } from '@fayz-ai/ui'\nimport { FinancialContextProvider, type ResolvedFinancialConfig } from '../context'\nimport type { FinancialDataProvider } from '@fayz-ai/financial/data/provider'\nimport type { FinancialUIState } from '@fayz-ai/financial/store'\nimport type { PluginRegistryDef, PluginQuickAction } from '@fayz-ai/core'\nimport { useModuleNavigation, ModuleActionBar, parseViewId, PluginSettingsPanel, EntitlementGate, UpgradePrompt, useModuleNavAccess, PermissionGate, usePermissionOptional, useTenantPluginSettings, usePluginOnboardingGate, PluginOnboardingGateSkeleton } from '@fayz-ai/admin'\nimport { SummaryView } from './SummaryView'\nimport { Plus } from 'lucide-react'\nimport { Button } from '@fayz-ai/ui'\nimport { PayablesView } from './PayablesView'\nimport { ReceivablesView } from './ReceivablesView'\nimport { CashRegistersView } from './CashRegistersView'\nimport { StatementsView } from './StatementsView'\nimport { CommissionsView } from './CommissionsView'\nimport { CardsView } from './CardsView'\nimport { GoalsView } from './GoalsView'\nimport { GiftCardsView } from './GiftCardsView'\nimport { ReconciliationView } from './ReconciliationView'\nimport { RecurringBillsView } from './RecurringBillsView'\nimport { FinancialGeneralSettings, FINANCIAL_MODULE_DEFAULTS } from '../components/FinancialGeneralSettings'\nimport { FinancialOnboarding } from '../components/FinancialOnboarding'\n\n// ---------------------------------------------------------------------------\n// View intent — what subpage + mode to show\n// ---------------------------------------------------------------------------\n\nexport interface ViewIntent {\n view: string\n mode?: 'list' | 'new' | 'edit' | 'detail'\n editId?: string\n /** Entrou por \"Enviar recibo\": o formulário abre o seletor de imagem. */\n receipt?: boolean\n /** Entrou por \"Adicionar despesa\" num cartão: a conta de pagamento já vem escolhida. */\n cardId?: string\n}\n\nfunction parseIntent(activeView: string): ViewIntent {\n // `base` collapses 'payables-detail' / 'payables-edit' etc; `id` is the canonical :id param.\n const { base, id } = parseViewId(activeView)\n const recurring = base.match(/^(payables|receivables)-recurring-(new|edit)$/)\n if (recurring) {\n return {\n view: `${recurring[1]}-recurring`,\n mode: recurring[2] as 'new' | 'edit',\n editId: recurring[2] === 'edit' ? id : undefined,\n }\n }\n const m = base.match(/^(payables|receivables)-(new-receipt|new|list|detail|edit)$/)\n if (m) {\n // `new-receipt` é o MESMO cadastro, entrando pela foto: uma variante do\n // modo, não um modo — senão vira um segundo formulário, que foi exatamente\n // o que a folha de lançamento rápido era.\n const raw = m[2]\n const mode = (raw === 'new-receipt' ? 'new' : raw) as ViewIntent['mode']\n // Num `new`, o id que veio na rota é o CARTÃO de onde a pessoa saiu — não\n // uma fatura para editar. Chamar os dois de `editId` faria o formulário\n // tentar carregar uma fatura que não existe.\n return mode === 'new'\n ? { view: m[1], mode, cardId: id, receipt: raw === 'new-receipt' }\n : { view: m[1], mode, editId: id, receipt: raw === 'new-receipt' }\n }\n return { view: activeView }\n}\n\n// ---------------------------------------------------------------------------\n// Nav builder\n// ---------------------------------------------------------------------------\n\nfunction buildNav(\n config: ResolvedFinancialConfig,\n activeView: string,\n navigate: (view: string, hash?: string) => void,\n t: (key: string, params?: Record<string, string | number>) => string,\n closingOn = true,\n): ModuleNavItem[] {\n const items: ModuleNavItem[] = [\n {\n id: 'summary',\n label: t('financial.nav.summary'),\n icon: 'BarChart3',\n active: activeView === 'summary',\n onClick: () => navigate('summary'),\n },\n ]\n\n if (config.modules.payables) {\n items.push({\n id: 'payables',\n label: t('financial.nav.payables'),\n icon: 'ArrowUpCircle',\n active: activeView.startsWith('payables'),\n children: [\n { id: 'payables-new', kind: 'action' as const, label: t('financial.nav.new'), active: activeView.startsWith('payables-new'), onClick: () => navigate('payables-new') },\n { id: 'payables-list', label: t('financial.nav.list'), active: activeView === 'payables-list', onClick: () => navigate('payables-list') },\n { id: 'payables-recurring', label: t('financial.nav.recurring'), active: activeView.startsWith('payables-recurring'), onClick: () => navigate('payables-recurring') },\n // Digitize expense and import payroll live in the list's create menu, not here.\n ],\n })\n }\n\n if (config.modules.receivables) {\n items.push({\n id: 'receivables',\n label: t('financial.nav.receivables'),\n icon: 'ArrowDownCircle',\n active: activeView.startsWith('receivables'),\n children: [\n { id: 'receivables-new', kind: 'action' as const, label: t('financial.nav.new'), active: activeView.startsWith('receivables-new'), onClick: () => navigate('receivables-new') },\n { id: 'receivables-list', label: t('financial.nav.list'), active: activeView === 'receivables-list', onClick: () => navigate('receivables-list') },\n { id: 'receivables-recurring', label: t('financial.nav.recurring'), active: activeView.startsWith('receivables-recurring'), onClick: () => navigate('receivables-recurring') },\n ],\n })\n }\n\n if (config.modules.cashRegisters) {\n // «Conferentes de Caixa» DENTRO de Caixas, e não ao lado.\n //\n // No V1 as duas são linhas soltas e irmãs, e isso lê como se fossem dois\n // assuntos. Não são: a lista de conferentes só existe porque um caixa\n // fechado precisa da assinatura de quem não o fechou. Quem não abre caixa\n // nunca vai à segunda — e quem abre chega nela pelo mesmo lugar.\n items.push({\n id: 'cash',\n label: t('financial.nav.cashRegisters'),\n icon: 'Landmark',\n active: activeView === 'cash-registers' || activeView === 'cash-reviewers',\n children: [\n { id: 'cash-registers', label: t('financial.nav.cashRegisters'), defaultChild: true, active: activeView === 'cash-registers', onClick: () => navigate('cash-registers') },\n { id: 'cash-reviewers', label: 'Conferentes de Caixa', active: activeView === 'cash-reviewers', onClick: () => navigate('cash-reviewers') },\n ],\n })\n }\n\n // Os dois fechamentos do V1 sob UMA rubrica. No menu de lá eles são duas\n // linhas soltas, e o resultado é que «Fechamento de Período» e «Fechamento de\n // Data» aparecem um sob o outro parecendo variações da mesma tela — quando\n // fazem coisas opostas: Período MOSTRA o que se vendeu no intervalo, Data\n // TRAVA o passado para ninguém mexer.\n //\n // Juntos num grupo, a escolha entre os dois acontece DEPOIS de escolher o\n // assunto, que é onde a diferença importa. Período abre primeiro: é o que se\n // faz todo mês; travar é o que se faz uma vez.\n if (closingOn) items.push({\n id: 'closing',\n label: 'Fechamento',\n icon: 'CalendarCheck',\n active: activeView === 'period-closing' || activeView === 'date-closing',\n children: [\n { id: 'period-closing', label: 'Período', defaultChild: true, active: activeView === 'period-closing', onClick: () => navigate('period-closing') },\n { id: 'date-closing', label: 'Data', active: activeView === 'date-closing', onClick: () => navigate('date-closing') },\n ],\n })\n\n // Extratos e Conciliação são DUAS TELAS, e por isso duas abas.\n //\n // Eram uma só, com a conciliação virando pílula sob o extrato — «as mesmas\n // linhas do banco vistas do outro lado». A leitura era defensável e a prática\n // derrubou: a PRIMEIRA coisa que um usuário perguntou ao abrir o produto foi\n // onde estava a conciliação, e ela estava a dois cliques, atrás de uma aba com\n // outro nome. A regra da casa já dizia o que fazer — a faixa é o lugar de uma\n // TELA; a pílula é o lugar de um recorte da mesma tela. Conciliar não é um\n // recorte de ler o extrato: é outro trabalho, com outra pergunta e outro fim.\n //\n // As rotas não mudam (`statements` / `reconciliation`): link antigo continua caindo.\n items.push({\n id: 'statements',\n label: t('financial.nav.statements'),\n icon: 'Receipt',\n active: activeView === 'statements',\n onClick: () => navigate('statements'),\n })\n\n if (config.modules.reconciliation) {\n items.push({\n id: 'reconciliation',\n label: t('financial.nav.reconciliation'),\n icon: 'ArrowLeftRight',\n active: activeView === 'reconciliation',\n onClick: () => navigate('reconciliation'),\n })\n }\n\n if (config.modules.notasFiscais) {\n // «Fiscal» com duas filhas, que é como o V1 desenha desde 30/09/2026:\n // Notas emitidas e Grupos fiscais saíram do Estoque e viraram um assunto\n // só. A Entrada de Notas NÃO veio junto — ela dá entrada de mercadoria e\n // continua no Estoque, lá e aqui.\n //\n // `fiscal-documents` e `fiscal-groups` e não `notas-fiscais`: a ROTA é em\n // inglês em todo o produto (#/people e nunca #/pessoas), mesmo quando a\n // tela é pt-BR. O traço vira barra no caminho, então são\n // `/financial/fiscal/documents` e `/financial/fiscal/groups`.\n items.push({\n id: 'fiscal',\n label: t('financial.nav.fiscal'),\n icon: 'FileText',\n active: activeView.startsWith('fiscal-'),\n children: [\n { id: 'fiscal-documents', label: t('financial.nav.fiscalIssued'), defaultChild: true, active: activeView === 'fiscal-documents', onClick: () => navigate('fiscal-documents') },\n { id: 'fiscal-groups', label: t('financial.nav.fiscalGroups'), active: activeView === 'fiscal-groups', onClick: () => navigate('fiscal-groups') },\n ],\n })\n }\n\n // Both of these listed two children that navigated to the SAME view, so\n // \"Rules\" and \"Reconciliation\" were labels for screens that do not exist.\n // One leaf each, naming what actually opens.\n if (config.modules.commissions) {\n items.push({\n id: 'commissions',\n label: t('financial.nav.commissions'),\n icon: 'HandCoins',\n active: activeView.startsWith('commissions'),\n children: [\n { id: 'commissions', label: t('financial.nav.commissions'), defaultChild: true, active: activeView === 'commissions', onClick: () => navigate('commissions') },\n { id: 'commissions-preview', label: 'Pré-geração', active: activeView === 'commissions-preview', onClick: () => navigate('commissions-preview') },\n { id: 'commissions-payouts', label: 'Repasses Gerados', active: activeView === 'commissions-payouts', onClick: () => navigate('commissions-payouts') },\n ],\n })\n }\n\n // No V1 esta tela NÃO está no menu — só se chega por `?view=metas`, e é o\n // motivo mais provável de as metas nunca terem sido preenchidas lá. Aqui ela\n // tem entrada, que é a correção mais barata do porte.\n if (config.modules.goals) {\n items.push({\n id: 'goals',\n label: t('financial.nav.goals'),\n icon: 'Target',\n active: activeView === 'goals',\n onClick: () => navigate('goals'),\n })\n }\n\n // O vale-presente é dinheiro recebido por serviço ainda não prestado — um\n // passivo. Ele mora no Financeiro por isso, e não na loja, que é só onde o\n // cartão está guardado.\n if (config.modules.giftCards) {\n items.push({\n id: 'gift-cards',\n label: t('financial.nav.giftCards'),\n icon: 'Gift',\n active: activeView === 'gift-cards',\n onClick: () => navigate('gift-cards'),\n })\n }\n\n if (config.modules.cards) {\n // Duas filhas e NENHUMA linha própria, que é como o V1 desenha: «Cartões»\n // lá é só o cabeçalho do grupo.\n //\n // Havia uma terceira, «Cartões», apontando para a mesma tela que a filha\n // «Faturas de Cartão» agora abre — o CardsView já mostra o limite, a fatura\n // atual e o vencimento de cada cartão, que é exatamente o que o V1 chama de\n // Faturas de Cartão. Duas linhas para uma tela só ensinam que existem duas\n // telas. O «em breve» que estava na filha saiu junto: a tela existe.\n items.push({\n id: 'cards',\n label: t('financial.nav.cards'),\n icon: 'CreditCard',\n active: activeView.startsWith('cards'),\n children: [\n { id: 'cards-invoices', label: 'Faturas de Cartão', defaultChild: true, active: activeView === 'cards' || activeView === 'cards-invoices', onClick: () => navigate('cards-invoices') },\n { id: 'cards-receiving', label: 'Cartões de Recebimento', active: activeView === 'cards-receiving', onClick: () => navigate('cards-receiving') },\n ],\n })\n }\n\n // Tag each nav item with its access feature id (item id → feature via the\n // resolved navFeatureMap). `useModuleNavAccess` then hides role-denied links\n // and Crown-badges plan-denied ones; ids absent from the map stay ungated.\n // Recursive: Conciliação is a child of Extratos and the paid facet must still\n // gate it.\n const tag = (list: ModuleNavItem[]) => {\n for (const item of list) {\n const feature = config.navFeatureMap[item.id]\n if (feature) item.feature = feature\n if (item.children) tag(item.children)\n }\n }\n tag(items)\n\n return items\n}\n\n// ---------------------------------------------------------------------------\n// Main page component\n// ---------------------------------------------------------------------------\n\nexport function FinancialPage({ config: appConfig, provider, store, registries }: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n registries?: PluginRegistryDef[]\n}) {\n // Comissões é DECISÃO DA CASA, não do pacote.\n //\n // O aplicativo diz se o módulo é OFERECIDO (`modules.commissions`); a conta\n // diz se o usa. Um salão que não paga comissão não deve carregar a aba, e\n // desligá-la exigia um build — que é o que a chave de ofício fez com os\n // plugins inteiros e faltava fazer dentro de um.\n //\n // Um `&&` e não um `??`: o que o aplicativo não oferece o toggle não\n // ressuscita, e por isso a chave nem aparece nas configurações (ver\n // FinancialGeneralSettings).\n const houseModules = useTenantPluginSettings('financial', FINANCIAL_MODULE_DEFAULTS)\n const commissionsOn = houseModules.get('commissions')\n const cashOn = houseModules.get('cashRegisters')\n const config = useMemo<ResolvedFinancialConfig>(\n () => ({\n ...appConfig,\n modules: {\n ...appConfig.modules,\n commissions: appConfig.modules.commissions && commissionsOn,\n cashRegisters: appConfig.modules.cashRegisters && cashOn,\n },\n }),\n [appConfig, commissionsOn, cashOn],\n )\n const { view, direction, navigate, previousView, back } = useModuleNavigation('/financial', {\n summary: 0,\n 'payables-list': 0, 'payables-new': 1, 'receivables-list': 0, 'receivables-new': 1,\n 'payables-recurring': 0, 'receivables-recurring': 0,\n 'payables-recurring-new': 1, 'payables-recurring-edit': 1,\n 'receivables-recurring-new': 1, 'receivables-recurring-edit': 1,\n 'cash-registers': 0, 'cash-reviewers': 0, statements: 0, reconciliation: 0, commissions: 0,\n cards: 0, 'cards-invoices': 0, 'cards-receiving': 0,\n 'gift-cards': 0,\n 'fiscal-documents': 0, 'fiscal-groups': 0,\n settings: 1,\n })\n\n const checkExistingData = useCallback(\n async () => (await provider.getMovements({ pageSize: 1 })).total > 0,\n [provider],\n )\n const onboarding = usePluginOnboardingGate('saas-core:financial-onboarded', checkExistingData)\n\n const t = useTranslation()\n // Role-side create gate (QA: create affordances in custom plugin UIs must honor\n // the role's `create` action, not just the route-level `read` guard). The\n // financial module owns a single `/financial` route gated on read, so every\n // in-page \"new\" affordance below is otherwise ungated.\n const can = usePermissionOptional()\n const canCreate = can('financial', 'create')\n const intent = parseIntent(view)\n const isSettings = view === 'settings'\n const isSummary = intent.view === 'summary'\n // Access-aware sub-nav: role denial hides the link, plan denial badges it with\n // a Crown (freemium discovery). The click still navigates — the gated CONTENT\n // renders the UpgradePrompt (see renderView's EntitlementGates below).\n const nav = useModuleNavAccess(buildNav(config, view, navigate, t, houseModules.get('closing')))\n\n // One-primary-action rule (FAY-1247): each module surfaces exactly ONE primary\n // add affordance. Era daqui que saía a exceção B2C: com `quickAdd` ligado este\n // menu se calava e a folha de lançamento rápido tomava o lugar. A folha saiu —\n // fazia, com menos campos, o mesmo que o cadastro de fatura —, e com ela a\n // exceção: existe UM caminho de cadastro, e ele serve os dois públicos.\n const quickActions = useMemo<PluginQuickAction[]>(() => {\n // No `create` action → surface no \"new\" quick actions (payable/receivable/cash\n // are all create affordances under the one-primary-action rule).\n if (!canCreate) return []\n const actions: PluginQuickAction[] = []\n if (config.modules.payables) {\n actions.push({\n id: 'new-payable',\n label: t('financial.quickActions.newPayable'),\n icon: 'ArrowUpCircle',\n description: t('financial.quickActions.newPayableDesc'),\n action: () => navigate('payables-new'),\n })\n }\n if (config.modules.receivables) {\n actions.push({\n id: 'new-receivable',\n label: t('financial.quickActions.newReceivable'),\n icon: 'ArrowDownCircle',\n description: t('financial.quickActions.newReceivableDesc'),\n action: () => navigate('receivables-new'),\n })\n }\n if (config.modules.cashRegisters) {\n actions.push({\n id: 'open-cash',\n label: t('financial.quickActions.openCashRegister'),\n icon: 'Landmark',\n description: t('financial.quickActions.openCashRegisterDesc'),\n action: () => navigate('cash-registers'),\n })\n }\n return actions\n }, [config.modules, canCreate, navigate, t])\n\n if (isSummary && onboarding.status === 'checking') {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <PluginOnboardingGateSkeleton />\n </FinancialContextProvider>\n )\n }\n\n // Welcome is a confirmed empty-state for the module home, never a transient\n // replacement for a deep link while its setup read is still in flight.\n if (isSummary && onboarding.status === 'needed') {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <FinancialOnboarding onComplete={onboarding.complete} />\n </FinancialContextProvider>\n )\n }\n\n // Settings view\n if (isSettings && registries && registries.length > 0) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <PageTransition transitionKey=\"settings\" direction={direction}>\n <div style={{ padding: '24px' }}>\n <PluginSettingsPanel\n title={t('financial.settingsPage.title')}\n generalSettings={<FinancialGeneralSettings config={appConfig} />}\n registries={registries}\n hostPluginId=\"financial\"\n routeBase=\"/settings/financial\"\n />\n </div>\n </PageTransition>\n </FinancialContextProvider>\n )\n }\n\n function renderView() {\n // Módulo desligado é desligado também pela URL. Tirar o link da navegação\n // sem fechar a rota deixa /financial/cards inteiro de pé para quem digitar\n // o endereço — e o app que o desligou não tem tela de cartão nenhuma.\n const off =\n (intent.view === 'commissions' && !config.modules.commissions) ||\n (intent.view === 'goals' && !config.modules.goals) ||\n (intent.view === 'gift-cards' && !config.modules.giftCards) ||\n (intent.view === 'cards' && !config.modules.cards) ||\n (intent.view === 'cash-registers' && !config.modules.cashRegisters) ||\n (intent.view === 'payables-petty-cash' && !config.modules.cashRegisters) ||\n (intent.view === 'cash-reviewers' && !config.modules.cashRegisters) ||\n (intent.view === 'reconciliation' && !config.modules.reconciliation) ||\n (intent.view.startsWith('fiscal-') && !config.modules.notasFiscais)\n if (off) return <SummaryView />\n\n switch (intent.view) {\n case 'payables':\n return <PayablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'receivables':\n return <ReceivablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'payables-recurring':\n return <RecurringBillsView direction=\"payable\" intent={intent} onNavigate={navigate} />\n case 'receivables-recurring':\n return <RecurringBillsView direction=\"receivable\" intent={intent} onNavigate={navigate} />\n case 'cash-registers':\n return <CashRegistersView />\n case 'statements':\n return <StatementsView onNavigate={navigate} />\n case 'reconciliation':\n return <ReconciliationView />\n case 'commissions':\n return <CommissionsView />\n case 'goals':\n return <GoalsView />\n case 'gift-cards':\n return <GiftCardsView />\n // `/financial/cards` continua caindo: é o link antigo da mesma tela.\n case 'cards':\n case 'cards-invoices':\n return <CardsView onNavigate={navigate} />\n case 'fiscal-documents':\n return <IssuedNotesView />\n case 'fiscal-groups':\n return <TaxGroupsView />\n // O que o V1 tem e este ainda não — ver ./GapScreens. Cada uma diz o\n // tamanho do buraco, medido no banco do V1.\n case 'payables-petty-cash':\n return <PettyCashView />\n // Digitizing is the list's receipt capture now — the old link lands on the list.\n case 'payables-digitize':\n return <PayablesView intent={{ view: 'payables', mode: 'list' }} onNavigate={navigate} previousView={previousView} back={back} />\n case 'payables-payroll':\n return <ImportPayrollView />\n case 'cash-reviewers':\n return <CashReviewersView />\n case 'period-closing':\n return <PeriodClosingView />\n case 'date-closing':\n return <DateClosingView />\n case 'commissions-preview':\n return <CommissionPreviewView />\n case 'commissions-payouts':\n return <CommissionPayoutsView />\n case 'cards-receiving':\n return <ReceivingCardsView />\n default:\n return <SummaryView />\n }\n }\n\n // Content side of the sub-module paywall. A sub-module is premium ONLY when\n // the app mapped its nav id to a feature (`navFeatureMap`) — the plugin ships\n // no default, so an unmapped view renders ungated. Symmetric with the nav\n // above: same map drives the Crown on the link and the gate on the content,\n // so an app can never end up with a free-looking link over locked content.\n // The gate must live here because an internal tab is not a shell route — the\n // route guard never sees it (QA finding B35). Full UpgradePrompt (not the\n // inline banner) fills the whole module panel.\n function renderGatedView() {\n const feature = config.navFeatureMap[intent.view]\n if (!feature) return renderView()\n return (\n <EntitlementGate feature={feature} fallback={<UpgradePrompt feature={feature} />}>\n {renderView()}\n </EntitlementGate>\n )\n }\n\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <ModulePage\n title={config.labels.pageTitle}\n subtitle={config.labels.pageSubtitle}\n nav={nav}\n navVariant={config.moduleNav}\n showHeader={intent.view === 'summary' || view === 'summary'}\n viewKey={view}\n direction={direction}\n headerAction={\n <ModuleActionBar\n quickActions={quickActions}\n settingsPath={registries && registries.length > 0 ? '/settings/financial' : undefined}\n />\n }\n >\n {renderGatedView()}\n\n </ModulePage>\n </FinancialContextProvider>\n )\n}\n"]}
|