@fayz-ai/plugin-financial 0.23.1 → 0.23.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import type { BankAccount } from '../types';
3
+ /** Account picker with type-to-search — tenants can have many accounts. */
4
+ export declare function AccountPicker({ accounts, value, onChange, disabled, title, placeholder, ariaLabel, clearLabel, className, onManage, manageLabel, variant }: {
5
+ accounts: BankAccount[];
6
+ value?: string;
7
+ onChange: (id: string | undefined) => void;
8
+ disabled?: boolean;
9
+ title?: string;
10
+ placeholder: string;
11
+ ariaLabel: string;
12
+ clearLabel: string;
13
+ className?: string;
14
+ onManage?: () => void;
15
+ manageLabel?: string;
16
+ /** `field` draws a full-width form box, for dialogs; `inline` is the dashed word of an installment row. */
17
+ variant?: 'inline' | 'field';
18
+ }): React.JSX.Element;
19
+ //# sourceMappingURL=AccountPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountPicker.d.ts","sourceRoot":"","sources":["../../src/components/AccountPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAS3C,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAkB,EAAE,EAAE;IACtK,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAC7B,qBAoEA"}
@@ -4,13 +4,6 @@ export interface InstallmentSourceValue {
4
4
  payMethodTypeId?: string;
5
5
  payAccountId?: string;
6
6
  }
7
- /**
8
- * O que falta para esta parcela poder ser paga — `null` quando está pronta.
9
- *
10
- * Texto, nunca booleano: é o que o botão **Pagar** vai dizer no `title` em vez
11
- * de ficar morto em silêncio. Mesma regra do `blockedReason` do diálogo.
12
- */
13
- export declare function useSourceBlockedReason(value: InstallmentSourceValue): string | null;
14
7
  export declare function InstallmentSourceFields({ direction, value, onChange, disabled, }: {
15
8
  direction: TransactionDirection;
16
9
  value: InstallmentSourceValue;
@@ -1 +1 @@
1
- {"version":3,"file":"InstallmentSource.d.ts","sourceRoot":"","sources":["../../src/components/InstallmentSource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,KAAK,EAAe,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAmCjE,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI,CAOnF;AAED,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAgB,GACjB,EAAE;IACD,SAAS,EAAE,oBAAoB,CAAA;IAC/B,KAAK,EAAE,sBAAsB,CAAA;IAC7B,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,qBAkFA"}
1
+ {"version":3,"file":"InstallmentSource.d.ts","sourceRoot":"","sources":["../../src/components/InstallmentSource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAoCpD,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,SAAS,EACT,KAAK,EACL,QAAQ,EACR,QAAgB,GACjB,EAAE;IACD,SAAS,EAAE,oBAAoB,CAAA;IAC/B,KAAK,EAAE,sBAAsB,CAAA;IAC7B,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAA;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,qBAwEA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentFields.d.ts","sourceRoot":"","sources":["../../src/components/PaymentFields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAK3D,OAAO,KAAK,EAAE,WAAW,EAAmB,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AA2DrG;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,WAAW,EAAE,EAC3B,SAAS,EAAE,oBAAoB,EAC/B,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAClC,WAAW,EAAE,CAkBf;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,qFAAqF;IACrF,SAAS,EAAE,oBAAoB,CAAA;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,KAAK,EAAE,kBAAkB,CAAA;IACzB,6EAA6E;IAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa,CAsZhF"}
1
+ {"version":3,"file":"PaymentFields.d.ts","sourceRoot":"","sources":["../../src/components/PaymentFields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAA;AAK3D,OAAO,KAAK,EAAE,WAAW,EAAmB,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AA4DrG;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,WAAW,EAAE,EAC3B,SAAS,EAAE,oBAAoB,EAC/B,IAAI,EAAE,iBAAiB,GAAG,SAAS,GAClC,WAAW,EAAE,CAkBf;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,qFAAqF;IACrF,SAAS,EAAE,oBAAoB,CAAA;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,KAAK,EAAE,kBAAkB,CAAA;IACzB,6EAA6E;IAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa,CA2ZhF"}
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentModal.d.ts","sourceRoot":"","sources":["../../src/components/PaymentModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAOvC,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAA;AAcnE,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACtE,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,qBAkKA"}
1
+ {"version":3,"file":"PaymentModal.d.ts","sourceRoot":"","sources":["../../src/components/PaymentModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAOvC,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,UAAU,CAAA;AAcnE,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACtE,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,qBAoKA"}
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as React29 from 'react';
2
2
  import React29__default, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
3
3
  import { recordRailFields, RECORD_GROUP, activeFacet, createConnectionStore, connectionSettings, connectionStatus, settingsStatus, connectionRuns, registerTranslations, getSupabaseClientOptional, createSafeDataProvider, registerMessageDefaults, reportDataError, useTranslation, createPendingCommand, useUnitMode, useDataChanged, countByTenant, tl, resolveDataProvider, useActiveUnitId, resolveCurrency, getActiveTenantId, emitDataChanged, describeError, exportCSV } from '@fayz-ai/core';
4
- import { INLINE_LINK_TONE, SearchSelect, ModalTask, toast, Button, useInModalTaskHost, useSaveBar, tourAnchor, DatePicker, SegmentedControl, SubpageHeader, defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, DataTable, Card, CardContent, Skeleton, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MultiSelect, PageTransition, ModulePage, Badge, TooltipProvider, ConfirmDialog, CurrencyInput, Input, PageHeaderActions, ChoiceSelect, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Checkbox, Hint, ModalDescription, Tooltip, TooltipTrigger, TooltipContent, Popover, PopoverTrigger, PopoverContent, PageTabs, DashboardCanvas, ComingSoon, StatTiles, ListView, DateRangeControl, FilterPanel, FilterPanelField, RequiredFilter, FilterMenuRow, openPrintWindow, printDocument, ChoiceList, ModalFlow, Switch, WizardSteps, KpiCard, ChartWidget, CardHeader, CardTitle, TableWidget, useDashboardNavigate, GoldCard } from '@fayz-ai/ui';
4
+ import { INLINE_LINK_TONE, SearchSelect, ModalTask, toast, Button, useInModalTaskHost, useSaveBar, tourAnchor, DatePicker, SegmentedControl, SubpageHeader, defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, DataTable, Card, CardContent, Skeleton, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MultiSelect, PageTransition, ModulePage, Badge, TooltipProvider, ConfirmDialog, CurrencyInput, Input, PageHeaderActions, ChoiceSelect, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter, Checkbox, Hint, ModalDescription, Tooltip, TooltipTrigger, TooltipContent, Popover, PopoverTrigger, PopoverContent, PageTabs, DashboardCanvas, ComingSoon, StatTiles, ListView, DateRangeControl, FilterPanel, FilterPanelField, RequiredFilter, FilterMenuRow, openPrintWindow, printDocument, ChoiceList, AiActionButton, ModalFlow, Switch, WizardSteps, KpiCard, ChartWidget, CardHeader, CardTitle, TableWidget, useDashboardNavigate, GoldCard } from '@fayz-ai/ui';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { createPluginContext, fayzConnectorOAuth, formatCurrency, RightRailPage, createCrudPage, PluginSettingsPanel, dedup, useCurrency, useUnitFilter, useLimitGuard, usePermissionOptional, useLookupCreate, OrderFormSkeleton, WidgetSlot, OrderFormBlock, TagsField, OrderFormView, OrderFormItemsCard, OrderFormItemRow, adminNavigateTo, OrderFormAddItemStep, CurrencyScope, useUnitStore, OrderDetailSkeleton, PageActions, OrderDetailBlock, TagChip, OrderDetailView, PersonLink, useTenantPluginSettings, useModuleNavigation, usePluginOnboardingGate, useModuleNavAccess, PluginOnboardingGateSkeleton, ModuleActionBar, SettingsGroup, ToggleRow, createArchetypeLookup, invalidateLimit, useAgentSurface, useHouseCurrency, parseViewId, EntitlementGate, UpgradePrompt, useChatStore, revealPage, resolveEntityRoute, useAuth, GetStarted, PermissionGate, createOneShotAsk, askAI, requestChatUpload, toInlineFile, shrinkForVision } from '@fayz-ai/admin';
7
- import { Landmark, CircleDollarSign, FileText, TriangleAlert, Loader2, Check, X, MoreVertical, Ban, Receipt, Gift, Briefcase, Package, CircleDashed, CircleAlert, CircleCheckBig, CircleEllipsis, Pencil, PackagePlus, CalendarDays, ExternalLink, DollarSign, LayoutList, Layers, Ticket, FileCheck, ArrowRightLeft, CreditCard, QrCode, Banknote, Undo2, Paperclip, Wallet, Plus, AlertTriangle, Filter, TrendingUp, Copy, Trash2, Search, ChevronsUpDown, ChevronsDownUp, ChevronRight, Building2, Image, UploadCloud, Calendar, User, Unlink, BookOpen, Info, FolderOpen, Folder, RotateCcw, ChevronDown, Settings, ArrowLeft, ChevronLeft, Eye, Inbox, Clock, ClipboardCheck, Calculator, Square, Play, ChevronUp, Printer, CalendarClock, BadgeCheck, Target, ArrowRight, Users, RefreshCw, Download, Camera, Sparkles, Link2, FileSearch, CheckCheck, Pause, ShoppingCart, Car, Home, Utensils, Zap, Film, HeartPulse, Dumbbell, Music, ShoppingBag, FileDown, ArrowUpRight, ArrowDownRight, EyeOff } from 'lucide-react';
7
+ import { Landmark, CircleDollarSign, FileText, TriangleAlert, Loader2, Check, X, MoreVertical, Ban, Receipt, Gift, Briefcase, Package, CircleDashed, CircleAlert, CircleCheckBig, CircleEllipsis, Pencil, PackagePlus, CalendarDays, ExternalLink, DollarSign, LayoutList, Layers, Ticket, FileCheck, ArrowRightLeft, CreditCard, QrCode, Banknote, Undo2, Paperclip, Wallet, Plus, AlertTriangle, Filter, TrendingUp, Copy, Trash2, Search, ChevronsUpDown, ChevronsDownUp, ChevronRight, Building2, Image, UploadCloud, Calendar, User, Unlink, BookOpen, Info, ChevronDown, Settings, FolderOpen, Folder, RotateCcw, ArrowLeft, ChevronLeft, Eye, Inbox, Clock, ClipboardCheck, Calculator, Square, Play, ChevronUp, Printer, CalendarClock, BadgeCheck, Target, ArrowRight, Users, RefreshCw, Download, Camera, Sparkles, Link2, FileSearch, CheckCheck, Pause, ShoppingCart, Car, Home, Utensils, Zap, Film, HeartPulse, Dumbbell, Music, ShoppingBag, FileDown, ArrowUpRight, ArrowDownRight, EyeOff } from 'lucide-react';
8
8
  import { createPortal } from 'react-dom';
9
9
  import { createStore as createStore$1 } from 'zustand/vanilla';
10
10
  import { useStore } from 'zustand';
@@ -4520,6 +4520,118 @@ function renderAccountAvatar(item) {
4520
4520
  if (!r || r.kind !== "card_payable") return null;
4521
4521
  return /* @__PURE__ */ jsx(CardVisual, { size: "lg", lastFour: r.lastFour, color: r.color, brandId: r.cardBrandId });
4522
4522
  }
4523
+ var METHOD_ICONS = {
4524
+ cash: Banknote,
4525
+ pix: QrCode,
4526
+ credit_card: CreditCard,
4527
+ debit_card: CreditCard,
4528
+ bank_transfer: ArrowRightLeft,
4529
+ check: FileCheck,
4530
+ boleto: Receipt,
4531
+ voucher: Ticket
4532
+ };
4533
+ function MethodIcon({ type }) {
4534
+ const Icon = METHOD_ICONS[type?.transactionType ?? ""] ?? Wallet;
4535
+ return /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
4536
+ }
4537
+ function AccountIcon({ account }) {
4538
+ if (!account) return null;
4539
+ if (account.accountType === "card_payable" && (account.lastFour || account.color || account.cardBrandId)) {
4540
+ return /* @__PURE__ */ jsx(CardVisual, { size: "xs", lastFour: account.lastFour ?? void 0, color: account.color ?? void 0, brandId: account.cardBrandId ?? void 0 });
4541
+ }
4542
+ if (account.accountType.startsWith("card_")) return /* @__PURE__ */ jsx(CreditCard, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
4543
+ if (account.accountType === "cash_physical" || account.accountType === "cash_session") {
4544
+ return /* @__PURE__ */ jsx(Banknote, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
4545
+ }
4546
+ const bank = findBrBank(account.bankCode, account.bankName ?? account.name);
4547
+ return bank?.logo ? /* @__PURE__ */ jsx(BankLogo, { bank, size: 16 }) : /* @__PURE__ */ jsx(Landmark, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
4548
+ }
4549
+ var FIELD_CLASS = "mt-1 flex w-full items-center gap-2 rounded-input border border-input bg-card px-3 py-2 text-left text-sm shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus:outline-none focus:ring-2 focus:ring-ring";
4550
+ var norm2 = (v) => v.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
4551
+ function AccountPicker({ accounts, value, onChange, disabled, title, placeholder, ariaLabel, clearLabel, className, onManage, manageLabel, variant = "inline" }) {
4552
+ const [open, setOpen] = React29__default.useState(false);
4553
+ const [q, setQ] = React29__default.useState("");
4554
+ const selected = accounts.find((a) => a.id === value);
4555
+ const list = q ? accounts.filter((a) => norm2(a.name).includes(norm2(q))) : accounts;
4556
+ const pick = (id) => {
4557
+ onChange(id);
4558
+ setOpen(false);
4559
+ setQ("");
4560
+ };
4561
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: (o) => {
4562
+ setOpen(o);
4563
+ if (!o) setQ("");
4564
+ }, children: [
4565
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
4566
+ "button",
4567
+ {
4568
+ type: "button",
4569
+ disabled,
4570
+ title,
4571
+ "aria-label": ariaLabel,
4572
+ className: `${variant === "field" ? FIELD_CLASS : "inline-flex max-w-full items-center gap-1 text-xs"} disabled:cursor-not-allowed disabled:opacity-50 ${className ?? ""}`,
4573
+ children: [
4574
+ selected ? /* @__PURE__ */ jsxs(Fragment, { children: [
4575
+ /* @__PURE__ */ jsx(AccountIcon, { account: selected }),
4576
+ /* @__PURE__ */ jsx("span", { className: "truncate", children: selected.name })
4577
+ ] }) : /* @__PURE__ */ jsx("span", { className: variant === "field" ? "text-muted-foreground" : void 0, children: placeholder }),
4578
+ /* @__PURE__ */ jsx(ChevronDown, { className: `${variant === "field" ? "ml-auto h-4 w-4" : "h-3 w-3"} shrink-0 opacity-50`, "aria-hidden": true })
4579
+ ]
4580
+ }
4581
+ ) }),
4582
+ /* @__PURE__ */ jsxs(PopoverContent, { align: "start", className: variant === "field" ? "w-[var(--radix-popover-trigger-width)] p-1" : "w-64 p-1", children: [
4583
+ /* @__PURE__ */ jsxs("div", { className: "relative mb-1", children: [
4584
+ /* @__PURE__ */ jsx(Search, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground", "aria-hidden": true }),
4585
+ /* @__PURE__ */ jsx(
4586
+ "input",
4587
+ {
4588
+ autoFocus: true,
4589
+ value: q,
4590
+ onChange: (e) => setQ(e.target.value),
4591
+ onKeyDown: (e) => {
4592
+ if (e.key === "Enter" && list[0]) {
4593
+ e.preventDefault();
4594
+ pick(list[0].id);
4595
+ }
4596
+ },
4597
+ placeholder: "Buscar conta\u2026",
4598
+ className: "h-8 w-full rounded-md border-0 bg-muted/50 pl-7 pr-2 text-xs outline-none focus:ring-0"
4599
+ }
4600
+ )
4601
+ ] }),
4602
+ /* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-y-auto", children: list.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-xs text-muted-foreground", children: "Nenhuma conta encontrada" }) : list.map((a) => /* @__PURE__ */ jsxs(
4603
+ "button",
4604
+ {
4605
+ type: "button",
4606
+ onClick: () => pick(a.id),
4607
+ className: `flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted ${a.id === value ? "font-medium" : ""}`,
4608
+ children: [
4609
+ /* @__PURE__ */ jsx(AccountIcon, { account: a }),
4610
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: a.name }),
4611
+ a.id === value && /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true })
4612
+ ]
4613
+ },
4614
+ a.id
4615
+ )) }),
4616
+ value && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => pick(void 0), className: "mt-1 w-full rounded-md px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted", children: clearLabel }),
4617
+ onManage && /* @__PURE__ */ jsxs(
4618
+ "button",
4619
+ {
4620
+ type: "button",
4621
+ onClick: () => {
4622
+ setOpen(false);
4623
+ onManage();
4624
+ },
4625
+ className: "mt-1 flex w-full items-center gap-2 rounded-md border-t px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted hover:text-foreground",
4626
+ children: [
4627
+ /* @__PURE__ */ jsx(Settings, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true }),
4628
+ manageLabel
4629
+ ]
4630
+ }
4631
+ )
4632
+ ] })
4633
+ ] });
4634
+ }
4523
4635
  var ACCOUNT_TYPES_FOR_TX2 = {
4524
4636
  cash: ["cash_physical", "cash_session"],
4525
4637
  credit_card: ["card_receivable_credit"],
@@ -4734,7 +4846,7 @@ function usePaymentFields(options) {
4734
4846
  )
4735
4847
  ] }),
4736
4848
  selectedTypeId && /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
4737
- /* @__PURE__ */ jsxs("div", { className: "fz-fields-2 stagger-field", style: { animationDelay: "0ms" }, children: [
4849
+ /* @__PURE__ */ jsxs("div", { className: "stagger-field grid grid-cols-2 items-start gap-3", style: { animationDelay: "0ms" }, children: [
4738
4850
  lockAmount ? (
4739
4851
  // O extrato mandou o valor. Ele aparece como FATO, e a linha
4740
4852
  // abaixo diz por quê — um campo cinza sem explicação faz a
@@ -4837,10 +4949,18 @@ function usePaymentFields(options) {
4837
4949
  t2("financial.payment.configureAccounts"),
4838
4950
  " \u2192"
4839
4951
  ] })
4840
- ] }) : /* @__PURE__ */ jsxs("select", { value: bankAccountId, onChange: (e) => setBankAccountId(e.target.value), className: "w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm", children: [
4841
- /* @__PURE__ */ jsx("option", { value: "", children: t2("financial.payment.selectAccount") }),
4842
- eligibleAccounts2.map((a) => /* @__PURE__ */ jsx("option", { value: a.id, children: a.name }, a.id))
4843
- ] })
4952
+ ] }) : /* @__PURE__ */ jsx(
4953
+ AccountPicker,
4954
+ {
4955
+ variant: "field",
4956
+ accounts: eligibleAccounts2,
4957
+ value: bankAccountId || void 0,
4958
+ onChange: (id) => setBankAccountId(id ?? ""),
4959
+ placeholder: t2("financial.payment.selectAccount"),
4960
+ ariaLabel: t2("financial.payment.bankAccount"),
4961
+ clearLabel: t2("financial.invoiceForm.clear")
4962
+ }
4963
+ )
4844
4964
  ] }),
4845
4965
  /* @__PURE__ */ jsxs("div", { className: "stagger-field", style: { animationDelay: "150ms" }, children: [
4846
4966
  /* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: t2("financial.payment.notes") }),
@@ -4927,6 +5047,8 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
4927
5047
  setPending(command.current.pending);
4928
5048
  }
4929
5049
  }
5050
+ const receiving = movement.direction === "credit";
5051
+ const title = t2(receiving ? "financial.payment.titleReceive" : "financial.payment.title");
4930
5052
  const body = /* @__PURE__ */ jsx("div", { className: "px-5 py-4", children: fields.node });
4931
5053
  const footer = /* @__PURE__ */ jsxs("div", { className: "shrink-0 border-t sticky bottom-0 bg-card px-5 py-4 space-y-2", children: [
4932
5054
  pending2 && !saving && /* @__PURE__ */ jsxs("p", { role: "status", className: "flex items-start gap-1.5 text-[11px] leading-snug text-muted-foreground", children: [
@@ -4945,7 +5067,7 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
4945
5067
  title: fields.blockedReason ?? void 0,
4946
5068
  children: [
4947
5069
  saving ? /* @__PURE__ */ jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", "aria-hidden": true }) : /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5", "aria-hidden": true }),
4948
- saving ? t2("financial.payment.processing") : fields.blockedReason && !pending2 ? fields.blockedReason : t2("financial.payment.payAmount", { amount: formatCurrency(fields.value.amount, currency) })
5070
+ saving ? t2("financial.payment.processing") : fields.blockedReason && !pending2 ? fields.blockedReason : t2(receiving ? "financial.payment.receiveAmount" : "financial.payment.payAmount", { amount: formatCurrency(fields.value.amount, currency) })
4949
5071
  ]
4950
5072
  }
4951
5073
  )
@@ -4957,7 +5079,7 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
4957
5079
  ModalTask,
4958
5080
  {
4959
5081
  open: true,
4960
- title: t2("financial.payment.title"),
5082
+ title,
4961
5083
  hint: `${t2("financial.payment.installment", { number: String(movement.installmentNumber ?? 1) })} \xB7 ${t2("financial.payment.remaining", { amount: formatCurrency(remaining, currency) })}`,
4962
5084
  onClose: handleClose,
4963
5085
  children: [
@@ -4986,7 +5108,7 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
4986
5108
  children: [
4987
5109
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-5 py-4 border-b sticky top-0 bg-card z-10", children: [
4988
5110
  /* @__PURE__ */ jsxs("div", { children: [
4989
- /* @__PURE__ */ jsx("h3", { className: "text-base font-semibold", children: t2("financial.payment.title") }),
5111
+ /* @__PURE__ */ jsx("h3", { className: "text-base font-semibold", children: title }),
4990
5112
  /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
4991
5113
  t2("financial.payment.installment", { number: String(movement.installmentNumber ?? 1) }),
4992
5114
  " \xB7 ",
@@ -5005,32 +5127,6 @@ function PaymentModal({ movement, receiptUrl, onClose, onPaid }) {
5005
5127
  document.body
5006
5128
  );
5007
5129
  }
5008
- var METHOD_ICONS = {
5009
- cash: Banknote,
5010
- pix: QrCode,
5011
- credit_card: CreditCard,
5012
- debit_card: CreditCard,
5013
- bank_transfer: ArrowRightLeft,
5014
- check: FileCheck,
5015
- boleto: Receipt,
5016
- voucher: Ticket
5017
- };
5018
- function MethodIcon({ type }) {
5019
- const Icon = METHOD_ICONS[type?.transactionType ?? ""] ?? Wallet;
5020
- return /* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
5021
- }
5022
- function AccountIcon({ account }) {
5023
- if (!account) return null;
5024
- if (account.accountType === "card_payable" && (account.lastFour || account.color || account.cardBrandId)) {
5025
- return /* @__PURE__ */ jsx(CardVisual, { size: "xs", lastFour: account.lastFour ?? void 0, color: account.color ?? void 0, brandId: account.cardBrandId ?? void 0 });
5026
- }
5027
- if (account.accountType.startsWith("card_")) return /* @__PURE__ */ jsx(CreditCard, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
5028
- if (account.accountType === "cash_physical" || account.accountType === "cash_session") {
5029
- return /* @__PURE__ */ jsx(Banknote, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
5030
- }
5031
- const bank = findBrBank(account.bankCode, account.bankName ?? account.name);
5032
- return bank?.logo ? /* @__PURE__ */ jsx(BankLogo, { bank, size: 16 }) : /* @__PURE__ */ jsx(Landmark, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true });
5033
- }
5034
5130
  var NONE = "__none__";
5035
5131
  var TRIGGER_CLASS = `h-auto w-auto justify-start gap-1 rounded-none border-0 bg-transparent p-0 text-xs font-normal shadow-none ring-offset-0 focus:ring-0 focus:ring-offset-0 [&>svg]:h-3 [&>svg]:w-3 ${INLINE_LINK_TONE.dashed}`;
5036
5132
  function InstallmentSourceFields({
@@ -5053,7 +5149,7 @@ function InstallmentSourceFields({
5053
5149
  const conta = elegiveis.length === 1 ? elegiveis[0].id : elegiveis.some((a) => a.id === value.payAccountId) ? value.payAccountId : void 0;
5054
5150
  onChange({ payMethodTypeId: typeId || void 0, payAccountId: typeId ? conta : void 0 });
5055
5151
  }
5056
- const tone = (filled) => filled ? "text-foreground" : "text-destructive border-b border-dashed border-destructive";
5152
+ const tone = (filled) => filled ? "text-foreground" : "text-foreground border-b border-dashed border-foreground/60";
5057
5153
  return /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-col items-start gap-0.5", children: [
5058
5154
  /* @__PURE__ */ jsxs(
5059
5155
  Select,
@@ -5098,91 +5194,6 @@ function InstallmentSourceFields({
5098
5194
  )
5099
5195
  ] });
5100
5196
  }
5101
- var norm2 = (v) => v.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
5102
- function AccountPicker({ accounts, value, onChange, disabled, title, placeholder, ariaLabel, clearLabel, className, onManage, manageLabel }) {
5103
- const [open, setOpen] = React29__default.useState(false);
5104
- const [q, setQ] = React29__default.useState("");
5105
- const selected = accounts.find((a) => a.id === value);
5106
- const list = q ? accounts.filter((a) => norm2(a.name).includes(norm2(q))) : accounts;
5107
- const pick = (id) => {
5108
- onChange(id);
5109
- setOpen(false);
5110
- setQ("");
5111
- };
5112
- return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: (o) => {
5113
- setOpen(o);
5114
- if (!o) setQ("");
5115
- }, children: [
5116
- /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
5117
- "button",
5118
- {
5119
- type: "button",
5120
- disabled,
5121
- title,
5122
- "aria-label": ariaLabel,
5123
- className: `inline-flex max-w-full items-center gap-1 text-xs disabled:cursor-not-allowed disabled:opacity-50 ${className ?? ""}`,
5124
- children: [
5125
- selected ? /* @__PURE__ */ jsxs(Fragment, { children: [
5126
- /* @__PURE__ */ jsx(AccountIcon, { account: selected }),
5127
- /* @__PURE__ */ jsx("span", { className: "truncate", children: selected.name })
5128
- ] }) : placeholder,
5129
- /* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3 shrink-0 opacity-50", "aria-hidden": true })
5130
- ]
5131
- }
5132
- ) }),
5133
- /* @__PURE__ */ jsxs(PopoverContent, { align: "start", className: "w-64 p-1", children: [
5134
- /* @__PURE__ */ jsxs("div", { className: "relative mb-1", children: [
5135
- /* @__PURE__ */ jsx(Search, { className: "pointer-events-none absolute left-2 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground", "aria-hidden": true }),
5136
- /* @__PURE__ */ jsx(
5137
- "input",
5138
- {
5139
- autoFocus: true,
5140
- value: q,
5141
- onChange: (e) => setQ(e.target.value),
5142
- onKeyDown: (e) => {
5143
- if (e.key === "Enter" && list[0]) {
5144
- e.preventDefault();
5145
- pick(list[0].id);
5146
- }
5147
- },
5148
- placeholder: "Buscar conta\u2026",
5149
- className: "h-8 w-full rounded-md border-0 bg-muted/50 pl-7 pr-2 text-xs outline-none focus:ring-0"
5150
- }
5151
- )
5152
- ] }),
5153
- /* @__PURE__ */ jsx("div", { className: "max-h-64 overflow-y-auto", children: list.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-xs text-muted-foreground", children: "Nenhuma conta encontrada" }) : list.map((a) => /* @__PURE__ */ jsxs(
5154
- "button",
5155
- {
5156
- type: "button",
5157
- onClick: () => pick(a.id),
5158
- className: `flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted ${a.id === value ? "font-medium" : ""}`,
5159
- children: [
5160
- /* @__PURE__ */ jsx(AccountIcon, { account: a }),
5161
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: a.name }),
5162
- a.id === value && /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true })
5163
- ]
5164
- },
5165
- a.id
5166
- )) }),
5167
- value && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => pick(void 0), className: "mt-1 w-full rounded-md px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted", children: clearLabel }),
5168
- onManage && /* @__PURE__ */ jsxs(
5169
- "button",
5170
- {
5171
- type: "button",
5172
- onClick: () => {
5173
- setOpen(false);
5174
- onManage();
5175
- },
5176
- className: "mt-1 flex w-full items-center gap-2 rounded-md border-t px-2 py-1.5 text-left text-xs text-muted-foreground hover:bg-muted hover:text-foreground",
5177
- children: [
5178
- /* @__PURE__ */ jsx(Settings, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true }),
5179
- manageLabel
5180
- ]
5181
- }
5182
- )
5183
- ] })
5184
- ] });
5185
- }
5186
5197
  var STATUS = {
5187
5198
  open: { bg: "bg-info-soft text-info-soft-foreground", icon: CircleDashed, labelKey: "financial.invoice.statusOpen" },
5188
5199
  pending: { bg: "bg-warning-soft text-warning-soft-foreground", icon: CircleDashed, labelKey: "financial.invoice.statusPending" },
@@ -6412,7 +6423,6 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
6412
6423
  const fonteTravada = isPaid2 || isPartial;
6413
6424
  const formaEscolhida = paymentMethodTypes.find((tp) => tp.id === inst.payMethodTypeId);
6414
6425
  const contaEscolhida = bankAccounts.find((a) => a.id === inst.payAccountId);
6415
- const faltaParaPagar = !inst.payMethodTypeId ? t2("financial.payment.methodRequired") : !inst.payAccountId ? t2("financial.payment.accountRequired") : null;
6416
6426
  return /* @__PURE__ */ jsxs("div", { children: [
6417
6427
  /* @__PURE__ */ jsx(
6418
6428
  InstallmentRow,
@@ -6461,12 +6471,11 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
6461
6471
  !isPaid2 && (saved || !isEdit && !!contactId && items.length > 0 && inst.amount > 0) && /* @__PURE__ */ jsx(
6462
6472
  InstallmentPayButton,
6463
6473
  {
6464
- disabled: saving || !!faltaParaPagar,
6465
- title: faltaParaPagar ?? void 0,
6474
+ disabled: saving,
6466
6475
  onClick: () => {
6467
6476
  void pagarParcela(i);
6468
6477
  },
6469
- children: t2("financial.invoice.pay")
6478
+ children: t2(direction === "credit" ? "financial.invoice.receive" : "financial.invoice.pay")
6470
6479
  }
6471
6480
  )
6472
6481
  ] })
@@ -7711,7 +7720,6 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
7711
7720
  const srcAccountId = srcStr(srcMeta.payAccountId);
7712
7721
  const editavel = !hasPaidDetails && invoice.status !== "cancelled";
7713
7722
  const canChooseSource = editavel && Math.abs(mov.amount) >= 5e-3;
7714
- const faltaParaPagar = !srcTypeId ? t2("financial.payment.methodRequired") : !srcAccountId ? t2("financial.payment.accountRequired") : null;
7715
7723
  const ativa = invoice.status !== "cancelled";
7716
7724
  return /* @__PURE__ */ jsx(
7717
7725
  InstallmentRow,
@@ -7772,10 +7780,8 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
7772
7780
  InstallmentPayButton,
7773
7781
  {
7774
7782
  onClick: () => setPayingMovement(mov),
7775
- disabled: !!faltaParaPagar,
7776
- title: faltaParaPagar ?? void 0,
7777
7783
  children: [
7778
- t2("financial.invoice.pay"),
7784
+ t2(direction === "credit" ? "financial.invoice.receive" : "financial.invoice.pay"),
7779
7785
  " ",
7780
7786
  remaining < mov.amount ? formatCurrency(remaining, currency) : ""
7781
7787
  ]
@@ -7783,7 +7789,7 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
7783
7789
  ),
7784
7790
  isPaid2 && reversiblePayments(instPayments).length > 0 && ativa && /* @__PURE__ */ jsx(InstallmentActionButton, { icon: Undo2, onClick: () => setReversing(reversiblePayments(instPayments).at(-1)), children: t2("financial.invoice.reverse") }),
7785
7791
  isPartial && ativa && /* @__PURE__ */ jsxs(InstallmentPayButton, { variant: "outline", onClick: () => setPayingMovement(mov), children: [
7786
- t2("financial.invoice.pay"),
7792
+ t2(direction === "credit" ? "financial.invoice.receive" : "financial.invoice.pay"),
7787
7793
  " ",
7788
7794
  formatCurrency(remaining, currency)
7789
7795
  ] })
@@ -12364,20 +12370,7 @@ function StatementCard({
12364
12370
  t2("financial.reconciliation.undo")
12365
12371
  ] })
12366
12372
  ] }),
12367
- !conciliada && !sugestao && /* @__PURE__ */ jsxs(
12368
- Button,
12369
- {
12370
- variant: "outline",
12371
- size: "sm",
12372
- className: "ml-auto border-magic/50 text-magic-soft-foreground hover:bg-magic-soft/50",
12373
- disabled: sugerindo || busy,
12374
- onClick: onSugerir,
12375
- children: [
12376
- /* @__PURE__ */ jsx(Sparkles, { className: `h-3 w-3 ${sugerindo ? "animate-pulse" : ""}` }),
12377
- t2("financial.reconciliation.suggest")
12378
- ]
12379
- }
12380
- ),
12373
+ !conciliada && !sugestao && /* @__PURE__ */ jsx(AiActionButton, { size: "sm", className: "ml-auto", busy: sugerindo, disabled: busy, onClick: onSugerir, children: t2("financial.reconciliation.suggest") }),
12381
12374
  /* @__PURE__ */ jsxs(
12382
12375
  Button,
12383
12376
  {
@@ -19897,6 +19890,7 @@ var en = {
19897
19890
  "financial.invoice.paidLabel": "Paid:",
19898
19891
  "financial.invoice.paidOn": "Paid on:",
19899
19892
  "financial.invoice.pay": "Pay",
19893
+ "financial.invoice.receive": "Receive",
19900
19894
  "financial.invoice.reverse": "Reverse",
19901
19895
  "financial.invoice.reverseTitle": "Reverse payment",
19902
19896
  "financial.invoice.reverseReason": "Reason for reversal",
@@ -20300,12 +20294,14 @@ var en = {
20300
20294
  "financial.payment.notes": "Notes",
20301
20295
  "financial.payment.optionalNotes": "Optional notes...",
20302
20296
  "financial.payment.payAmount": "Pay {{amount}}",
20297
+ "financial.payment.receiveAmount": "Receive {{amount}}",
20303
20298
  "financial.payment.processing": "Processing...",
20304
20299
  "financial.payment.remaining": "{{amount}} remaining",
20305
20300
  "financial.payment.select": "Select...",
20306
20301
  "financial.payment.selectAccount": "Select account...",
20307
20302
  "financial.payment.selectBrand": "Select brand...",
20308
20303
  "financial.payment.title": "Record Payment",
20304
+ "financial.payment.titleReceive": "Record Receipt",
20309
20305
  "financial.payment.changeSource": "Change method and account",
20310
20306
  "financial.settings.allowPartial": "Allow partial payments",
20311
20307
  "financial.settings.allowPartialDesc": "Accept payments less than the full installment amount",
@@ -20853,6 +20849,7 @@ var ptBR = {
20853
20849
  "financial.invoice.paidLabel": "Pago:",
20854
20850
  "financial.invoice.paidOn": "Pago em:",
20855
20851
  "financial.invoice.pay": "Pagar",
20852
+ "financial.invoice.receive": "Receber",
20856
20853
  "financial.invoice.reverse": "Estornar",
20857
20854
  "financial.invoice.reverseTitle": "Estornar pagamento",
20858
20855
  "financial.invoice.reverseReason": "Motivo do estorno",
@@ -21259,12 +21256,14 @@ var ptBR = {
21259
21256
  "financial.payment.notes": "Observa\xE7\xF5es",
21260
21257
  "financial.payment.optionalNotes": "Observa\xE7\xF5es opcionais...",
21261
21258
  "financial.payment.payAmount": "Pagar {{amount}}",
21259
+ "financial.payment.receiveAmount": "Receber {{amount}}",
21262
21260
  "financial.payment.processing": "Processando...",
21263
21261
  "financial.payment.remaining": "{{amount}} restante",
21264
21262
  "financial.payment.select": "Selecionar...",
21265
21263
  "financial.payment.selectAccount": "Selecionar conta...",
21266
21264
  "financial.payment.selectBrand": "Selecionar bandeira...",
21267
21265
  "financial.payment.title": "Registrar Pagamento",
21266
+ "financial.payment.titleReceive": "Registrar Recebimento",
21268
21267
  "financial.payment.changeSource": "Alterar forma e conta",
21269
21268
  "financial.settings.allowPartial": "Permitir pagamentos parciais",
21270
21269
  "financial.settings.allowPartialDesc": "Aceitar pagamentos menores que o valor total da parcela",