@fayz-ai/financial 0.1.6 → 0.1.8

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/data/mock.ts"],"names":["bill"],"mappings":"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","file":"chunk-UERJA7QH.js","sourcesContent":["import type { BankAccount, CreateBankAccountInput } from '../domain/account'\nimport type { CardTransaction } from '../domain/card'\nimport {\n closingDifference, sessionCashFlow,\n type CashSession, type CashSessionSummary, type CloseCashSessionInput, type OpenCashSessionInput,\n} from '../domain/cash-session'\nimport type { ChartOfAccountsNode, CostCenter } from '../domain/chart-of-accounts'\nimport {\n assertReschedule, cancellationReason, invoiceStatusOf, invoiceTotal, itemsDescription, lineTotal,\n type CreateInvoiceInput, type CreateInvoiceItemInput, type Invoice, type InvoiceItem, type InvoiceQuery, type InvoiceStatus,\n} from '../domain/invoice'\nimport { round2 } from '../domain/money'\nimport { openAmount, paymentFee, type FinancialMovement, type MovementQuery, type MovementStatus, type PayMovementInput } from '../domain/movement'\nimport type { CreateNotaFiscalInput, NotaFiscal, NotaFiscalQuery } from '../domain/nota-fiscal'\nimport type { PaymentMethod, PaymentMethodType } from '../domain/payment-method'\nimport type { DateRange, PaginatedResult } from '../domain/query'\nimport {\n candidateScore, candidateTolerance, pageTotals, statementLegOf, statementLinesPage, toReconcileLine, transferForStatementLine,\n type ImportedStatementLine,\n} from '../domain/reconciliation'\nimport type { RecurringBill, SaveRecurringBillInput } from '../domain/recurring-bill'\nimport { summarizeLedger, trailingWindow, type DreQuery, type DreRow, type FinancialSummary } from '../domain/report'\nimport { buildStatement, emptyStatement, isRealized, ledgerBalance, type StatementQuery, type StatementResult } from '../domain/statement'\nimport { matchStatementLines, type MovementContext } from '../domain/statement-match'\nimport { transferLegs, type CreateTransferInput, type TransferResult } from '../domain/transfer'\nimport type { FinancialDataProvider } from './provider'\nimport { runReconcileAsBill, runReconcileLink, type ReconcileCapableProvider } from './reconcile'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet nextId = 1\nfunction uid(): string {\n return String(nextId++)\n}\n\nfunction now(): string {\n return new Date().toISOString()\n}\n\nfunction today(): string {\n return new Date().toISOString().slice(0, 10)\n}\n\nfunction matchesDateRange(dateStr: string | undefined, range?: DateRange): boolean {\n if (!range || !dateStr) return true\n return dateStr >= range.from && dateStr <= range.to\n}\n\nfunction matchesStatus<T extends string>(status: T, filter?: T | T[]): boolean {\n if (!filter) return true\n if (Array.isArray(filter)) return filter.includes(status)\n return status === filter\n}\n\nfunction paginate<T>(items: T[], page?: number, pageSize?: number): PaginatedResult<T> {\n const p = page ?? 1\n const ps = pageSize ?? 50\n const start = (p - 1) * ps\n return { data: items.slice(start, start + ps), total: items.length }\n}\n\n// ---------------------------------------------------------------------------\n// In-memory store\n// ---------------------------------------------------------------------------\n\ninterface MockStore {\n invoices: Invoice[]\n invoiceItems: InvoiceItem[]\n movements: FinancialMovement[]\n /** A evidencia do extrato — nao e movimento; ver migration 112. */\n statementLines: ImportedStatementLine[]\n /** Que conta tem extrato, e por qual provedor; ver migration 113. */\n statementSources: Array<{ accountId: string; provider: string; isActive: boolean }>\n bankAccounts: BankAccount[]\n cashSessions: CashSession[]\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n chartOfAccounts: ChartOfAccountsNode[]\n costCenters: CostCenter[]\n cardTransactions: CardTransaction[]\n notas: NotaFiscal[]\n recurringBills: RecurringBill[]\n}\n\nfunction createStore(options?: MockFinancialProviderOptions): MockStore {\n const tenantId = 'mock-tenant'\n const seed = options?.seed\n\n const defaultPMTypes: PaymentMethodType[] = (options?.paymentMethodTypes ?? [\n { name: 'Cash', transactionType: 'cash' },\n { name: 'Credit Card', transactionType: 'credit_card' },\n { name: 'Debit Card', transactionType: 'debit_card' },\n { name: 'PIX', transactionType: 'pix' },\n { name: 'Bank Transfer', transactionType: 'transfer' },\n ]).map((t) => ({\n id: uid(),\n name: t.name,\n transactionType: t.transactionType,\n isActive: true,\n tenantId,\n createdAt: now(),\n }))\n\n const cashAccount: BankAccount = {\n id: uid(),\n name: 'Main Cash Register',\n accountType: 'cash_physical',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n const bankAccount: BankAccount = {\n id: uid(),\n name: 'Business Checking',\n accountType: 'bank',\n bankName: 'Main Bank',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n return {\n // Seeded data (when provided) makes the module render as if the user already\n // has accounts + transactions — a populated Summary/Statements instead of the\n // empty onboarding state. Seed arrays are copied so the caller's data is not mutated.\n invoices: seed?.invoices ? [...seed.invoices] : [],\n invoiceItems: seed?.invoiceItems ? [...seed.invoiceItems] : [],\n movements: seed?.movements ? [...seed.movements] : [],\n statementLines: [],\n statementSources: [],\n bankAccounts: seed?.bankAccounts ? [...seed.bankAccounts] : [cashAccount, bankAccount],\n cashSessions: [],\n paymentMethods: seed?.paymentMethods ? [...seed.paymentMethods] : [],\n paymentMethodTypes: defaultPMTypes,\n chartOfAccounts: [],\n costCenters: [],\n cardTransactions: [],\n notas: [],\n recurringBills: seed?.recurringBills ? [...seed.recurringBills] : [],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mock provider factory\n// ---------------------------------------------------------------------------\n\n/**\n * Pre-populated store data. Any omitted collection stays empty (except\n * bankAccounts, which fall back to the two default mock accounts when absent).\n * Pass full domain objects — the mock treats them as the existing ledger.\n */\nexport interface MockFinancialSeed {\n bankAccounts?: BankAccount[]\n invoices?: Invoice[]\n invoiceItems?: InvoiceItem[]\n movements?: FinancialMovement[]\n paymentMethods?: PaymentMethod[]\n recurringBills?: RecurringBill[]\n}\n\nexport interface MockFinancialProviderOptions {\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n /** Pre-seed the in-memory store so the module renders populated (not the empty state). */\n seed?: MockFinancialSeed\n}\n\nexport function createMockFinancialProvider(options?: MockFinancialProviderOptions): FinancialDataProvider {\n const store = createStore(options)\n const tenantId = 'mock-tenant'\n\n function recalcInvoiceStatus(invoice: Invoice): void {\n const bills = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n invoice.status = invoiceStatusOf(invoice, bills, today())\n invoice.updatedAt = now()\n }\n\n /** O carimbo cru: a linha foi conciliada, e contra quem. Sem orquestração. */\n function markReconciled(statementLineId: string, matchedMovementId?: string): void {\n const line = store.statementLines.find((l) => l.id === statementLineId)\n const internal = matchedMovementId\n ? store.movements.find((m) => m.id === matchedMovementId)\n : undefined\n if (line) {\n line.reconciledAt = now()\n line.matchedMovementId = matchedMovementId\n // A conta que a linha prova — é para onde «Ver conta» leva.\n line.matchedInvoiceId = internal?.invoiceId\n line.matchedCounterpartyName = internal?.invoiceId\n ? store.invoices.find((i) => i.id === internal.invoiceId)?.contactName\n : undefined\n line.updatedAt = now()\n }\n if (internal) { internal.reconciledAt = now(); internal.updatedAt = now() }\n }\n\n // `reconcileMovement` do facade é o carimbo, nunca o método público: o\n // público reentraria em si mesmo e a conta seria quitada duas vezes.\n function reconcileFacade(): ReconcileCapableProvider {\n return {\n createInvoice: (input) => provider.createInvoice(input),\n getMovements: (query) => provider.getMovements(query as never),\n payMovement: (input) => provider.payMovement(input as never),\n reconcileMovement: async ({ bankMovementId, matchedMovementId }) => {\n markReconciled(bankMovementId, matchedMovementId)\n },\n }\n }\n\n const provider: FinancialDataProvider = {\n // --- Invoices ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n let results = [...store.invoices]\n if (query.direction) results = results.filter((i) => i.direction === query.direction)\n if (query.status) results = results.filter((i) => matchesStatus(i.status, query.status as InvoiceStatus | InvoiceStatus[]))\n if (query.contactId) results = results.filter((i) => i.contactId === query.contactId)\n if (query.unitId) results = results.filter((i) => i.unitId === query.unitId)\n if (query.accountId) {\n const invoiceIds = new Set(store.invoiceItems.filter((item) => item.accountId === query.accountId).map((item) => item.invoiceId))\n results = results.filter((invoice) => invoiceIds.has(invoice.id))\n }\n if (query.costCenterId) {\n const invoiceIds = new Set(store.invoiceItems.filter((item) => item.costCenterId === query.costCenterId).map((item) => item.invoiceId))\n results = results.filter((invoice) => invoiceIds.has(invoice.id))\n }\n if (query.fiscalNumber) {\n const nf = query.fiscalNumber.toLowerCase()\n results = results.filter((i) => i.fiscalNumber?.toLowerCase().includes(nf))\n }\n if (query.bankAccountId) {\n const pagas = new Set(\n store.movements\n .filter((m) => m.bankAccountId === query.bankAccountId)\n .map((m) => m.invoiceId)\n .filter(Boolean) as string[],\n )\n results = results.filter((i) => pagas.has(i.id))\n }\n if (query.dateRange) results = results.filter((i) => matchesDateRange(i.invoiceDate, query.dateRange))\n if (query.search) {\n const s = query.search.toLowerCase()\n results = results.filter((i) =>\n i.contactName?.toLowerCase().includes(s) ||\n i.observations?.toLowerCase().includes(s) ||\n i.fiscalNumber?.toLowerCase().includes(s)\n )\n }\n results.sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n return paginate(results, query.page, query.pageSize)\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n return store.invoices.find((i) => i.id === id) ?? null\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n return store.invoiceItems.filter((i) => i.invoiceId === invoiceId)\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const invoiceId = uid()\n const totalAmount = invoiceTotal(input.items)\n const itemsSummary = itemsDescription(input.items)\n\n const invoice: Invoice = {\n id: invoiceId,\n direction: input.direction,\n invoiceDate: input.invoiceDate,\n fiscalNumber: input.fiscalNumber,\n totalAmount,\n paidAmount: 0,\n status: 'open',\n totalInstallments: input.installments.length || 1,\n contactId: input.contactId,\n contactName: input.contactName,\n cashSessionId: input.cashSessionId,\n unitId: input.unitId,\n observations: input.observations,\n itemsSummary: itemsSummary || undefined,\n metadata: input.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.invoices.push(invoice)\n\n // Create items\n for (const itemInput of input.items) {\n const itemTotal = lineTotal(itemInput)\n const item: InvoiceItem = {\n id: uid(),\n invoiceId,\n itemKind: itemInput.itemKind,\n referenceId: itemInput.referenceId,\n description: itemInput.description,\n quantity: itemInput.quantity,\n unitPrice: itemInput.unitPrice,\n totalAmount: itemTotal,\n discount: itemInput.discount ?? 0,\n surcharge: itemInput.surcharge ?? 0,\n accountId: itemInput.accountId,\n costCenterId: itemInput.costCenterId,\n metadata: itemInput.metadata,\n createdAt: now(),\n }\n store.invoiceItems.push(item)\n }\n\n // Create installment movements\n for (const movInput of input.installments) {\n const movement: FinancialMovement = {\n id: uid(),\n invoiceId,\n direction: input.direction,\n movementKind: movInput.movementKind,\n amount: movInput.amount,\n paidAmount: 0,\n status: 'pending',\n dueDate: movInput.dueDate,\n installmentNumber: movInput.installmentNumber,\n paymentMethodId: movInput.paymentMethodId,\n bankAccountId: movInput.bankAccountId,\n notes: movInput.notes,\n metadata: movInput.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(movement)\n }\n\n return invoice\n },\n\n async updateInvoice(id: string, data: Partial<Invoice>): Promise<Invoice> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n Object.assign(invoice, data, { updatedAt: now() })\n return invoice\n },\n\n async updateInstallment(id: string, data: { dueDate?: string; amount?: number; metadata?: Record<string, unknown> }): Promise<void> {\n const mov = store.movements.find((mv) => mv.id === id)\n if (!mov) return\n if (data.dueDate !== undefined) mov.dueDate = data.dueDate\n if (data.amount !== undefined) mov.amount = data.amount\n if (data.metadata !== undefined) mov.metadata = data.metadata\n },\n\n async replaceInvoiceItems(invoiceId: string, items: CreateInvoiceItemInput[]): Promise<void> {\n const invoice = store.invoices.find((i) => i.id === invoiceId)\n if (!invoice) throw new Error(`Invoice ${invoiceId} not found`)\n store.invoiceItems = store.invoiceItems.filter((it) => it.invoiceId !== invoiceId)\n for (const item of items) {\n store.invoiceItems.push({\n id: uid(),\n invoiceId,\n itemKind: item.itemKind,\n referenceId: item.referenceId,\n description: item.description,\n quantity: item.quantity,\n unitPrice: item.unitPrice,\n totalAmount: lineTotal(item),\n discount: item.discount ?? 0,\n surcharge: item.surcharge ?? 0,\n accountId: item.accountId,\n costCenterId: item.costCenterId,\n metadata: item.metadata,\n createdAt: now(),\n } as (typeof store.invoiceItems)[number])\n }\n // O total é a soma das linhas: gravar um sem o outro deixa a conta\n // somando um valor e cobrando outro.\n invoice.totalAmount = invoiceTotal(items)\n invoice.updatedAt = now()\n },\n\n async rescheduleInvoice(invoiceId: string, installments: Array<{ dueDate: string; amount: number; metadata?: Record<string, unknown> }>): Promise<void> {\n const invoice = store.invoices.find((i) => i.id === invoiceId)\n if (!invoice) throw new Error(`Invoice ${invoiceId} not found`)\n const old = store.movements.filter((mv) => mv.invoiceId === invoiceId && mv.movementKind === 'bill')\n assertReschedule(invoice, old, installments)\n // O que estava pendurado na parcela de número N volta para a parcela N.\n const carried = new Map(old.map((mv) => [mv.installmentNumber ?? 1, mv.metadata]))\n store.movements = store.movements.filter((mv) => !old.includes(mv))\n installments.forEach((inst, i) => {\n store.movements.push({\n id: uid(),\n invoiceId,\n direction: invoice.direction,\n movementKind: 'bill',\n amount: inst.amount,\n paidAmount: 0,\n status: 'pending',\n dueDate: inst.dueDate,\n installmentNumber: i + 1,\n metadata: inst.metadata ?? carried.get(i + 1),\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n } as FinancialMovement)\n })\n },\n\n async cancelInvoice(input): Promise<void> {\n cancellationReason(input)\n const invoice = store.invoices.find((i) => i.id === input.invoiceId)\n if (!invoice) throw new Error(`Invoice ${input.invoiceId} not found`)\n invoice.status = 'cancelled'\n invoice.updatedAt = now()\n // Cancel all pending movements\n store.movements\n .filter((m) => m.invoiceId === input.invoiceId && m.status === 'pending')\n .forEach((m) => { m.status = 'cancelled'; m.updatedAt = now() })\n },\n\n // --- Movements ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n let results = [...store.movements]\n // `invoiceId` existe no contrato desde sempre e o mock o ignorava: quem\n // pedia as parcelas de UMA conta recebia as do store inteiro, e a\n // primeira da lista passava por \"a parcela desta fatura\". Foi assim que\n // o ajuste da conciliação quitou a conta errada.\n if (query.invoiceId) results = results.filter((m) => m.invoiceId === query.invoiceId)\n if (query.direction) results = results.filter((m) => m.direction === query.direction)\n if (query.status) results = results.filter((m) => matchesStatus(m.status, query.status as MovementStatus | MovementStatus[]))\n if (query.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query.cashSessionId) results = results.filter((m) => m.cashSessionId === query.cashSessionId)\n if (query.dateRange) results = results.filter((m) => matchesDateRange(m.dueDate, query.dateRange))\n results.sort((a, b) => a.dueDate.localeCompare(b.dueDate))\n return paginate(results, query.page, query.pageSize)\n },\n\n // O mock não guarda faturas no formato do read model; devolve a conta vazia\n // em vez de inventar números que a tela apresentaria como saldo do cliente.\n async getClientAccount(personId: string) {\n return { personId, contracted: 0, paid: 0, open: 0, invoices: [] }\n },\n\n async getCardReceivables() { return [] },\n\n async reverseMovement(movementId: string, reason: string): Promise<void> {\n const m = store.movements.find((x) => x.id === movementId)\n if (m) { m.status = 'cancelled'; m.notes = [m.notes, `Estorno: ${reason}`].filter(Boolean).join(' · ') }\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const bill = store.movements.find((m) => m.id === input.movementId)\n if (!bill) throw new Error(`Movement ${input.movementId} not found`)\n\n // Net card settlement: derive the processing/MDR fee from the payment method (credits only).\n const method = input.paymentMethodId ? store.paymentMethods.find((pm) => pm.id === input.paymentMethodId) : undefined\n const thisFee = paymentFee(input.amount, method?.discountValue ?? 0, bill.direction)\n\n // 1. Record the cash event as its OWN payment movement (one row per payment).\n const payment: FinancialMovement = {\n id: uid(),\n invoiceId: bill.invoiceId,\n direction: bill.direction,\n movementKind: 'payment',\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: thisFee,\n status: 'paid',\n settlesMovementId: bill.id,\n dueDate: bill.dueDate,\n paymentDate: input.paymentDate,\n installmentNumber: bill.installmentNumber,\n paymentMethodId: input.paymentMethodId,\n paymentMethodTypeId: input.paymentMethodTypeId,\n bankAccountId: input.bankAccountId,\n cashSessionId: input.cashSessionId,\n cardBrand: input.cardBrand,\n cardInstallments: input.cardInstallments,\n notes: input.notes,\n metadata: input.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(payment)\n\n // 2. Update the bill (obligation) cache: cumulative paid + status. Clear its cash\n // fields so it stops being a cash event (the payment row is now the cash event).\n bill.paidAmount = round2(bill.paidAmount + input.amount)\n bill.status = bill.paidAmount >= bill.amount ? 'paid' : 'partial'\n bill.paymentDate = undefined\n bill.bankAccountId = undefined\n bill.updatedAt = now()\n\n // Update bank account balance by the NET cash impact (credit nets the fee).\n if (input.bankAccountId) {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n if (account) {\n if (bill.direction === 'credit') {\n account.currentBalance = round2(account.currentBalance + (input.amount - thisFee))\n } else {\n account.currentBalance = round2(account.currentBalance - input.amount)\n }\n account.updatedAt = now()\n }\n }\n\n // 3. Recalculate invoice status from its bills\n if (bill.invoiceId) {\n const invoice = store.invoices.find((i) => i.id === bill.invoiceId)\n if (invoice) {\n const bills = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n invoice.paidAmount = bills.reduce((sum, m) => sum + m.paidAmount, 0)\n recalcInvoiceStatus(invoice)\n }\n }\n\n return payment\n },\n\n async cancelMovement(id: string): Promise<void> {\n const movement = store.movements.find((m) => m.id === id)\n if (!movement) throw new Error(`Movement ${id} not found`)\n movement.status = 'cancelled'\n movement.updatedAt = now()\n },\n\n // --- Transfers (between accounts) ---\n async createTransfer(input: CreateTransferInput): Promise<TransferResult> {\n const transferId = uid()\n const [out, into] = transferLegs(input, transferId)\n const debitMovementId = uid()\n const creditMovementId = uid()\n const base = {\n movementKind: 'transfer' as const,\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: 0,\n status: 'paid' as const,\n dueDate: input.date,\n paymentDate: input.date,\n notes: input.notes,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push({ ...base, id: debitMovementId, ...out })\n store.movements.push({ ...base, id: creditMovementId, ...into })\n // Reflect in stored balances.\n const from = store.bankAccounts.find((a) => a.id === input.fromAccountId)\n const to = store.bankAccounts.find((a) => a.id === input.toAccountId)\n if (from) { from.currentBalance = round2(from.currentBalance - input.amount); from.updatedAt = now() }\n if (to) { to.currentBalance = round2(to.currentBalance + input.amount); to.updatedAt = now() }\n return { transferId, debitMovementId, creditMovementId }\n },\n\n // --- Bank Accounts ---\n // Espelha a view da 113: só conta com ORIGEM ativa. Sem isso o mock diria\n // que o filtro funciona quando ele não filtra nada.\n async getStatementAccounts() {\n const comOrigem = new Set(store.statementSources.filter((o) => o.isActive).map((o) => o.accountId))\n return store.bankAccounts.filter((a) => comOrigem.has(a.id))\n },\n\n async getBankAccounts(): Promise<BankAccount[]> {\n return store.bankAccounts.filter((a) => a.isActive)\n },\n\n async getAccountsByIds(ids: string[]): Promise<BankAccount[]> {\n return store.bankAccounts.filter((a) => ids.includes(a.id))\n },\n\n async searchFinancialAccounts(query: string, limit = 20): Promise<BankAccount[]> {\n const term = query.trim().toLocaleLowerCase('pt-BR')\n if (term.length < 2) return []\n return store.bankAccounts\n .filter((account) => account.isActive && account.name.toLocaleLowerCase('pt-BR').includes(term))\n .sort((a, b) => a.name.localeCompare(b.name, 'pt-BR'))\n .slice(0, limit)\n },\n\n async createBankAccount(data: CreateBankAccountInput): Promise<BankAccount> {\n const account: BankAccount = {\n id: uid(),\n name: data.name,\n accountType: data.accountType,\n bankName: data.bankName,\n accountNumber: data.accountNumber,\n agencyNumber: data.agencyNumber,\n currentBalance: data.initialBalance ?? 0,\n initialBalance: data.initialBalance ?? 0,\n creditLimit: data.creditLimit,\n dueDay: data.dueDay,\n closingDay: data.closingDay,\n isActive: true,\n unitId: data.unitId,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.bankAccounts.push(account)\n return account\n },\n\n async updateBankAccount(id: string, data: Partial<BankAccount>): Promise<BankAccount> {\n const account = store.bankAccounts.find((a) => a.id === id)\n if (!account) throw new Error(`Bank account ${id} not found`)\n Object.assign(account, data, { updatedAt: now() })\n return account\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n let results = [...store.cashSessions]\n if (bankAccountId) results = results.filter((s) => s.bankAccountId === bankAccountId)\n return results.sort((a, b) => b.openedAt.localeCompare(a.openedAt))\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n return store.cashSessions.find((s) => s.bankAccountId === bankAccountId && s.status === 'open') ?? null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n const session: CashSession = {\n id: uid(),\n bankAccountId: input.bankAccountId,\n bankAccountName: account?.name,\n status: 'open',\n openedAt: now(),\n openedByUserId: input.openedByUserId,\n openedByName: input.openedByName,\n openingBalance: input.openingBalance,\n unitId: input.unitId,\n tenantId,\n createdAt: now(),\n }\n store.cashSessions.push(session)\n return session\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const session = store.cashSessions.find((s) => s.id === input.sessionId)\n if (!session) throw new Error(`Cash session ${input.sessionId} not found`)\n\n const flow = sessionCashFlow(store.movements.filter((m) => m.cashSessionId === session.id && m.status === 'paid'))\n const { expectedBalance, difference } = closingDifference(session.openingBalance, flow, input.closingBalance)\n\n session.status = 'closed'\n session.closedAt = now()\n session.closedByUserId = input.closedByUserId\n session.closedByName = input.closedByName\n session.closingBalance = input.closingBalance\n session.expectedBalance = expectedBalance\n session.difference = difference\n session.notes = input.notes\n\n return session\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const session = store.cashSessions.find((s) => s.id === sessionId)\n if (!session) throw new Error(`Cash session ${sessionId} not found`)\n return { session, ...sessionCashFlow(store.movements.filter((m) => m.cashSessionId === sessionId && m.status === 'paid')) }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n return store.paymentMethods.filter((pm) => pm.isActive)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n return store.paymentMethodTypes.filter((t) => t.isActive)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n return store.chartOfAccounts.filter((n) => n.isActive)\n },\n\n async resolveChartAccountRefs(refs: string[]): Promise<Record<string, string>> {\n const ids = new Set(store.chartOfAccounts.map((account) => account.id))\n return Object.fromEntries(refs.filter((ref) => ids.has(ref)).map((ref) => [ref, ref]))\n },\n\n async getCostCenters(): Promise<CostCenter[]> {\n return store.costCenters.filter((c) => c.isActive)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n let results = [...store.cardTransactions]\n if (dateRange) results = results.filter((t) => matchesDateRange(t.expectedDate, dateRange))\n return results.sort((a, b) => a.expectedDate.localeCompare(b.expectedDate))\n },\n\n // --- Statements (ERP extract: opening balance + realized cash + per-row net/fee) ---\n async getStatement(query: StatementQuery): Promise<StatementResult> {\n const consolidated = !query.bankAccountId\n const scopeAccounts = consolidated\n ? store.bankAccounts.filter((a) => a.isActive)\n : store.bankAccounts.filter((a) => a.id === query.bankAccountId)\n if (!consolidated && scopeAccounts.length === 0) return emptyStatement(query.bankAccountId)\n const accountIds = new Set(scopeAccounts.map((a) => a.id))\n const accountNameById = new Map(store.bankAccounts.map((a) => [a.id, a.name]))\n const initialSum = scopeAccounts.reduce((s, a) => s + a.initialBalance, 0)\n const invoiceById = (id?: string) => (id ? store.invoices.find((i) => i.id === id) : undefined)\n\n // Consolidated => all realized movements, including those with no bank account.\n const inScope = store.movements.filter((m) =>\n isRealized(m) && (consolidated || (m.bankAccountId && accountIds.has(m.bankAccountId))))\n\n const statement = buildStatement({\n openingBalance: ledgerBalance(initialSum, inScope.filter((m) => (m.paymentDate ?? '') < query.dateRange.from)),\n movements: inScope\n .filter((m) => matchesDateRange(m.paymentDate, query.dateRange))\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? '') || a.createdAt.localeCompare(b.createdAt)),\n consolidated,\n accountNameOf: (id) => accountNameById.get(id),\n invoiceOf: (movement) => invoiceById(movement.invoiceId),\n })\n\n for (const e of statement.entries) {\n const mid = e.movement.matchedMovementId\n const mm = mid ? store.movements.find((m) => m.id === mid) : undefined\n if (!mm) continue\n const inv = invoiceById(mm.invoiceId)\n e.reconciledWith = {\n movementId: mm.id,\n description: mm.notes ?? undefined,\n invoiceId: mm.invoiceId,\n fiscalNumber: inv?.fiscalNumber,\n contactName: inv?.contactName,\n }\n }\n\n return {\n ...statement,\n accountId: query.bankAccountId,\n accountCurrentBalance: ledgerBalance(initialSum, inScope.filter((m) => (m.paymentDate ?? '') <= today())),\n }\n },\n\n async getDre(query: DreQuery): Promise<DreRow[]> {\n const rows: DreRow[] = []\n for (const account of store.chartOfAccounts.filter((candidate) => candidate.accountType === 'revenue' || candidate.accountType === 'expense')) {\n rows.push({\n accountId: account.id,\n accountCode: account.code,\n accountName: account.name,\n accountType: account.accountType as 'revenue' | 'expense',\n parentAccountId: account.parentId,\n statementCode: account.code,\n statementName: account.name,\n unclassified: false,\n amount: 0,\n discount: 0,\n lineCount: 0,\n })\n }\n for (const invoice of store.invoices.filter((candidate) =>\n candidate.invoiceDate.startsWith(String(query.year)) && (!query.unitId || candidate.unitId === query.unitId))) {\n for (const item of store.invoiceItems.filter((candidate) => candidate.invoiceId === invoice.id)) {\n const account = store.chartOfAccounts.find((candidate) => candidate.id === item.accountId)\n const accountType = invoice.direction === 'credit' ? 'revenue' : 'expense'\n rows.push({\n unitId: invoice.unitId,\n competenceMonth: `${invoice.invoiceDate.slice(0, 7)}-01`,\n accountId: account?.id,\n accountCode: account?.code,\n accountName: account?.name,\n accountType,\n parentAccountId: account?.parentId,\n statementCode: account?.accountType === accountType ? account.code : undefined,\n statementName: account?.accountType === accountType ? account.name : undefined,\n unclassified: !account || account.accountType !== accountType,\n amount: item.totalAmount,\n discount: item.discount,\n lineCount: 1,\n })\n }\n }\n return rows\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n const todayStr = today()\n return summarizeLedger({\n accounts: store.bankAccounts,\n movements: store.movements,\n today: todayStr,\n window: dateRange ?? trailingWindow(todayStr),\n })\n },\n\n // --- Recurring payables and receivables ---\n async getRecurringBills(direction) {\n return store.recurringBills\n .filter((bill) => bill.direction === direction)\n .sort((a, b) => Number(b.isActive) - Number(a.isActive) || a.description.localeCompare(b.description))\n },\n\n async saveRecurringBill(input: SaveRecurringBillInput) {\n const timestamp = now()\n const existing = input.id ? store.recurringBills.find((bill) => bill.id === input.id) : undefined\n const bill: RecurringBill = {\n id: existing?.id ?? uid(),\n direction: input.direction,\n description: input.description.trim(),\n counterpartyPersonId: input.counterpartyPersonId,\n counterpartyName: existing?.counterpartyName,\n amount: round2(input.amount),\n items: input.items.map((item) => ({ ...item })),\n unitId: input.unitId || null,\n chartAccountId: input.chartAccountId || null,\n costCenterId: input.costCenterId || null,\n frequency: input.frequency,\n dueDay: input.dueDay,\n startsOn: input.startsOn,\n endsOn: input.endsOn || null,\n isActive: input.isActive ?? existing?.isActive ?? true,\n notes: input.notes?.trim() || null,\n createdAt: existing?.createdAt ?? timestamp,\n updatedAt: timestamp,\n }\n if (existing) Object.assign(existing, bill)\n else store.recurringBills.push(bill)\n return bill\n },\n\n async updateRecurringBill(id, patch) {\n const bill = store.recurringBills.find((candidate) => candidate.id === id)\n if (!bill) throw new Error('Recurring bill not found')\n if (patch.isActive !== undefined) bill.isActive = patch.isActive\n if (patch.endsOn !== undefined) bill.endsOn = patch.endsOn\n bill.updatedAt = now()\n },\n\n async runRecurring() {\n return { created: 0, total: 0 }\n },\n\n // --- Conciliação Bancária ---\n // Espelha o provider real: a linha do extrato mora em `store.statementLines`,\n // não em `store.movements`. O mock tinha a linha como movimento e por isso\n // passava verde sobre o defeito que o banco recusava (migration 112).\n async importBankTransactions(input) {\n let imported = 0, duplicates = 0\n for (const line of input.lines) {\n const key = `${line.externalSource}:${line.externalId}`\n if (store.statementLines.some((l) => `${l.externalSource}:${l.externalId}` === key)) { duplicates++; continue }\n store.statementLines.push({\n ...line,\n id: uid(),\n amount: Math.abs(line.amount),\n bankAccountId: line.bankAccountId ?? input.bankAccountId,\n providerDeleted: false,\n createdAt: now(),\n updatedAt: now(),\n })\n imported++\n }\n return { imported, duplicates }\n },\n\n async getStatementLines(query) {\n let results = store.statementLines.filter((l) => !l.providerDeleted)\n if (query?.bankAccountId) results = results.filter((l) => l.bankAccountId === query.bankAccountId)\n if (query?.dateRange) results = results.filter((l) => matchesDateRange(l.date, query.dateRange))\n if (query?.direction) results = results.filter((l) => l.direction === query.direction)\n if (query?.status === 'reconciled') results = results.filter((l) => !!l.reconciledAt)\n else if (query?.status === 'pending') results = results.filter((l) => !l.reconciledAt)\n const term = (query?.search ?? '').trim().toLocaleLowerCase('pt-BR')\n if (term) {\n const casa = (v?: string) => (v ?? '').toLocaleLowerCase('pt-BR').includes(term)\n results = results.filter((l) =>\n casa(l.description) || casa(l.counterpartyName) || casa(l.counterpartyDocument)\n || casa(l.document) || casa(l.code) || casa(l.category)\n || casa(l.transactionType) || casa(l.externalId))\n }\n results = [...results].sort((a, b) => b.date.localeCompare(a.date))\n const { page, pageSize } = statementLinesPage(query)\n const rows = results.slice((page - 1) * pageSize, page * pageSize)\n return { rows, total: results.length, page, pageSize, ...pageTotals(rows) }\n },\n\n async getUnreconciled(query) {\n let results = store.statementLines.filter((l) => !l.reconciledAt && !l.providerDeleted)\n if (query?.bankAccountId) results = results.filter((l) => l.bankAccountId === query.bankAccountId)\n if (query?.dateRange) results = results.filter((l) => matchesDateRange(l.date, query.dateRange))\n return [...results].sort((a, b) => b.date.localeCompare(a.date))\n },\n\n async suggestReconciliation(statementLineId) {\n const line = store.statementLines.find((l) => l.id === statementLineId)\n if (!line) return []\n const tol = candidateTolerance(line.amount)\n return store.movements\n .filter((m) => !m.externalSource && !m.reconciledAt && m.direction === line.direction\n && Math.abs(m.amount - line.amount) <= tol)\n .map((m) => ({\n movement: m,\n invoice: m.invoiceId ? store.invoices.find((i) => i.id === m.invoiceId) : undefined,\n score: candidateScore(line, m),\n }))\n .sort((a, b) => b.score - a.score)\n .slice(0, 25)\n },\n\n async searchReconciliationTargets(statementLineId, query) {\n const line = store.statementLines.find((l) => l.id === statementLineId)\n if (!line) return { data: [], hasMore: false }\n const status = query.status ?? 'all'\n const termo = query.search?.trim().toLocaleLowerCase('pt-BR')\n const rows = store.movements\n .filter((m) => !m.externalSource && !m.reconciledAt && m.direction === line.direction)\n .filter((m) => m.status !== 'cancelled')\n .filter((m) => {\n const paga = m.movementKind === 'payment' || m.status === 'paid'\n return status === 'all' || (status === 'paid' ? paga : !paga)\n })\n .filter((m) => !query.dueFrom || (m.dueDate ?? '') >= query.dueFrom)\n .filter((m) => !query.dueTo || (m.dueDate ?? '') <= query.dueTo)\n .filter((m) => query.amountMin == null || m.amount >= query.amountMin)\n .filter((m) => query.amountMax == null || m.amount <= query.amountMax)\n .map((m) => ({ movement: m, invoice: m.invoiceId ? store.invoices.find((i) => i.id === m.invoiceId) : undefined }))\n .filter(({ movement, invoice }) => !termo\n || `${invoice?.contactName ?? ''} ${invoice?.fiscalNumber ?? ''} ${movement.notes ?? ''}`.toLocaleLowerCase('pt-BR').includes(termo))\n .sort((a, b) => (a.movement.dueDate ?? '').localeCompare(b.movement.dueDate ?? ''))\n const pageSize = query.pageSize ?? 50\n const start = ((query.page ?? 1) - 1) * pageSize\n return {\n data: rows.slice(start, start + pageSize).map((c) => ({ ...c, score: 0 })),\n hasMore: rows.length > start + pageSize,\n }\n },\n\n // A mesma cabeça da conciliação de verdade (match-statement), sobre a\n // memória: valor, nome e data, e um lançamento por linha.\n async suggestReconciliationBatch(lines) {\n const contexto = new Map<string, MovementContext>()\n for (const movement of store.movements) {\n const invoice = movement.invoiceId ? store.invoices.find((i) => i.id === movement.invoiceId) : undefined\n if (invoice) contexto.set(movement.id, { contactName: invoice.contactName, invoice })\n }\n const candidatos = store.movements.filter((m) => !m.externalSource && !m.reconciledAt)\n return matchStatementLines(lines, candidatos, contexto)\n },\n\n async reconcileMovement(input) {\n // `settle` quita a conta alvo antes de amarrar — o caminho `link` do V1.\n // Sem `mode`, a linha só é marcada: é o `link_paid`, e é o padrão porque\n // é o comportamento que esta tela sempre teve.\n if (input.mode === 'settle' && input.matchedMovementId) {\n const line = store.statementLines.find((l) => l.id === input.bankMovementId)\n if (!line) throw new Error('Linha do extrato não encontrada')\n const alvo = store.movements.find((m) => m.id === input.matchedMovementId)\n if (!alvo) throw new Error('Lançamento não encontrado')\n await runReconcileLink(\n reconcileFacade(),\n toReconcileLine(line),\n {\n movementId: alvo.id,\n mode: 'settle',\n openAmount: openAmount(alvo),\n },\n { payment: input.payment, adjustments: input.adjustments, partial: input.partial },\n )\n return\n }\n markReconciled(input.bankMovementId, input.matchedMovementId)\n },\n\n async reconcileAsTransfer(input) {\n const line = store.statementLines.find((l) => l.id === input.bankMovementId)\n if (!line) throw new Error('Linha do extrato não encontrada')\n const transfer = await provider.createTransfer(transferForStatementLine(toReconcileLine(line), input))\n await provider.reconcileMovement!({ bankMovementId: input.bankMovementId, matchedMovementId: statementLegOf(line, transfer) })\n return transfer\n },\n\n // «Lançar como conta». A conta nasce classificada, é quitada contra a conta\n // do extrato, e a linha passa a ser a prova dela. É o caminho que faz o\n // extrato BATER: sem ele, uma linha sem contrapartida fica marcada como\n // conciliada e o dinheiro continua fora do livro.\n async reconcileAsBill(input) {\n const line = store.statementLines.find((l) => l.id === input.bankMovementId)\n if (!line) throw new Error('Linha do extrato não encontrada')\n const { invoiceId } = await runReconcileAsBill(reconcileFacade(), toReconcileLine(line), input)\n const invoice = store.invoices.find((i) => i.id === invoiceId)\n if (!invoice) throw new Error('A conta não foi criada')\n return invoice\n },\n\n async unreconcileMovement(statementLineId) {\n const line = store.statementLines.find((l) => l.id === statementLineId)\n if (!line) return\n const matchedId = line.matchedMovementId\n line.reconciledAt = undefined; line.matchedMovementId = undefined; line.updatedAt = now()\n if (matchedId) {\n const internal = store.movements.find((m) => m.id === matchedId)\n if (internal) { internal.reconciledAt = undefined; internal.updatedAt = now() }\n }\n },\n\n // --- Notas fiscais (NF-e / NFC-e / NFS-e) ---\n // Os vales-presente moram na tabela da loja, que não existe em memória.\n // Responder \"não instalado\" faz a tela se explicar; deixar o método fora\n // faria ela explodir com um TypeError que não diz nada a ninguém.\n async giftCardsEnabled(): Promise<boolean> {\n return false\n },\n\n async getNotas(query: NotaFiscalQuery): Promise<PaginatedResult<NotaFiscal>> {\n let list = [...store.notas].sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n if (query.status) list = list.filter((n) => matchesStatus(n.status, query.status))\n if (query.model) list = list.filter((n) => n.model === query.model)\n if (query.orderId) list = list.filter((n) => n.orderId === query.orderId)\n if (query.search) {\n const q = query.search.toLowerCase()\n list = list.filter((n) => (n.number ?? '').toLowerCase().includes(q) || (n.contactName ?? '').toLowerCase().includes(q))\n }\n return paginate(list, query.page, query.pageSize)\n },\n\n async getNotaById(id: string): Promise<NotaFiscal | null> {\n return store.notas.find((n) => n.id === id) ?? null\n },\n\n async createNota(input: CreateNotaFiscalInput): Promise<NotaFiscal> {\n const nota: NotaFiscal = {\n id: uid(),\n tenantId: 'mock-tenant',\n model: input.model ?? 'nfe',\n status: 'draft',\n number: null,\n series: input.series ?? null,\n orderId: input.orderId,\n contactId: input.contactId,\n contactName: input.contactName,\n totalAmount: input.totalAmount,\n observations: input.observations,\n createdAt: now(),\n updatedAt: now(),\n }\n store.notas.unshift(nota)\n return nota\n },\n\n async updateNota(id: string, patch: Partial<NotaFiscal>): Promise<NotaFiscal> {\n const nota = store.notas.find((n) => n.id === id)\n if (!nota) throw new Error('Nota fiscal not found')\n Object.assign(nota, patch, { updatedAt: now() })\n return nota\n },\n\n async issueNota(id: string): Promise<NotaFiscal> {\n const nota = store.notas.find((n) => n.id === id)\n if (!nota) throw new Error('Nota fiscal not found')\n const issuedCount = store.notas.filter((n) => n.status === 'issued').length\n nota.status = 'issued'\n nota.number = String(issuedCount + 1).padStart(6, '0')\n nota.series = nota.series ?? '1'\n nota.issuedAt = now()\n nota.emissor = 'manual'\n nota.updatedAt = now()\n return nota\n },\n\n async cancelNota(id: string, reason?: string): Promise<NotaFiscal> {\n const nota = store.notas.find((n) => n.id === id)\n if (!nota) throw new Error('Nota fiscal not found')\n nota.status = 'cancelled'\n nota.errorMessage = reason\n nota.updatedAt = now()\n return nota\n },\n }\n\n return provider\n}\n"]}