@fayz-ai/plugin-financial 0.20.0 → 0.21.0

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 +1 @@
1
- {"version":3,"file":"CashSessionReviewModal.d.ts","sourceRoot":"","sources":["../../src/components/CashSessionReviewModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAqBlD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,4HAA4H;IAC5H,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,qBAwKtH"}
1
+ {"version":3,"file":"CashSessionReviewModal.d.ts","sourceRoot":"","sources":["../../src/components/CashSessionReviewModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAqBlD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,4HAA4H;IAC5H,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,2BAA2B,qBA0KtH"}
@@ -1 +1 @@
1
- {"version":3,"file":"InstallmentRow.d.ts","sourceRoot":"","sources":["../../src/components/InstallmentRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GACrF,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,qBAgCA;AAID,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAmB,EAAE,EAAE;IAChG,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAChC,qBAeA;AAED,kDAAkD;AAClD,wBAAgB,uBAAuB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACzE,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,IAAI,EAAE,KAAK,CAAC,WAAW,CAAA;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,qBAOA;AAED,oHAAoH;AACpH,wBAAgB,wBAAwB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IACrF,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,qBAeA"}
1
+ {"version":3,"file":"InstallmentRow.d.ts","sourceRoot":"","sources":["../../src/components/InstallmentRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GACrF,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,qBAiCA;AAID,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAmB,EAAE,EAAE;IAChG,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;CAChC,qBAeA;AAED,kDAAkD;AAClD,wBAAgB,uBAAuB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IACzE,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,IAAI,EAAE,KAAK,CAAC,WAAW,CAAA;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,qBAOA;AAED,oHAAoH;AACpH,wBAAgB,wBAAwB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IACrF,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,qBAeA"}
package/dist/index.d.ts CHANGED
@@ -154,6 +154,7 @@ export type { FinancialDataProvider } from './data/types';
154
154
  export type { ResolvedFinancialConfig } from './context';
155
155
  export type { GiftCard, GiftCardState, GiftCardQuery, IssueGiftCardsInput, NotaFiscal, NotaFiscalModel, NotaFiscalStatus, NotaFiscalQuery, CreateNotaFiscalInput, } from './types';
156
156
  export { createMockFinancialProvider } from './data/mock';
157
+ export { FINANCIAL_INVOICE_ZONES } from './lib/routes';
157
158
  export type { MockFinancialSeed, MockFinancialProviderOptions } from './data/mock';
158
159
  export { buildFinancialDomainEvents, buildFinancialMessageDefaults } from './lib/message-events';
159
160
  export { ReceivePaymentModal } from './components/ReceivePaymentModal';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as React25 from 'react';
2
2
  import React25__default, { useState, useEffect, useMemo, useRef, 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, getActiveTenantId, emitDataChanged, exportCSV } from '@fayz-ai/core';
4
- import { INLINE_LINK_TONE, SearchSelect, ModalTask, toast, Button, useInModalTaskHost, useSaveBar, tourAnchor, DatePicker, SubpageHeader, defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalBody, DataTable, Card, CardContent, Skeleton, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MultiSelect, PageTransition, ModulePage, Badge, TooltipProvider, ConfirmDialog, CurrencyInput, Input, PageHeaderActions, ChoiceSelect, Hint, ModalFooter, PageTabs, Tooltip, TooltipTrigger, TooltipContent, Checkbox, Popover, PopoverTrigger, PopoverContent, DashboardCanvas, ComingSoon, StatTiles, ListView, DateRangeControl, FilterPanel, FilterPanelField, SegmentedControl, RequiredFilter, FilterMenuRow, 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, SubpageHeader, defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget, Modal, ModalContent, ModalHeader, ModalTitle, ModalDescription, ModalBody, DataTable, Card, CardContent, Skeleton, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, MultiSelect, PageTransition, ModulePage, Badge, TooltipProvider, ConfirmDialog, CurrencyInput, Input, PageHeaderActions, ChoiceSelect, Hint, ModalFooter, PageTabs, Tooltip, TooltipTrigger, TooltipContent, Checkbox, Popover, PopoverTrigger, PopoverContent, openPrintWindow, printDocument, DashboardCanvas, ComingSoon, StatTiles, ListView, DateRangeControl, FilterPanel, FilterPanelField, SegmentedControl, RequiredFilter, FilterMenuRow, ChoiceList, 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
- import { createPluginContext, fayzConnectorOAuth, formatCurrency, RightRailPage, createCrudPage, PluginSettingsPanel, dedup, useUnitFilter, useLimitGuard, usePermissionOptional, useLookupCreate, OrderFormSkeleton, OrderFormBlock, OrderFormView, OrderFormItemsCard, OrderFormItemRow, adminNavigateTo, OrderFormAddItemStep, useUnitStore, OrderDetailSkeleton, PageActions, OrderDetailBlock, OrderDetailView, PersonLink, useTenantPluginSettings, useModuleNavigation, usePluginOnboardingGate, useModuleNavAccess, PluginOnboardingGateSkeleton, ModuleActionBar, SettingsGroup, ToggleRow, createArchetypeLookup, invalidateLimit, useAgentSurface, parseViewId, EntitlementGate, UpgradePrompt, useChatStore, revealPage, useAuth, GetStarted, resolveEntityRoute, PermissionGate, createOneShotAsk, askAI, requestChatUpload, toInlineFile, shrinkForVision } from '@fayz-ai/admin';
6
+ import { createPluginContext, fayzConnectorOAuth, formatCurrency, RightRailPage, createCrudPage, PluginSettingsPanel, dedup, useUnitFilter, useLimitGuard, usePermissionOptional, useLookupCreate, OrderFormSkeleton, WidgetSlot, OrderFormBlock, OrderFormView, OrderFormItemsCard, OrderFormItemRow, adminNavigateTo, OrderFormAddItemStep, useUnitStore, OrderDetailSkeleton, PageActions, OrderDetailBlock, OrderDetailView, PersonLink, useTenantPluginSettings, useModuleNavigation, usePluginOnboardingGate, useModuleNavAccess, PluginOnboardingGateSkeleton, ModuleActionBar, SettingsGroup, ToggleRow, createArchetypeLookup, invalidateLimit, useAgentSurface, parseViewId, EntitlementGate, UpgradePrompt, useChatStore, revealPage, useAuth, GetStarted, resolveEntityRoute, PermissionGate, createOneShotAsk, askAI, requestChatUpload, toInlineFile, shrinkForVision } from '@fayz-ai/admin';
7
7
  import { Landmark, CircleDollarSign, FileText, TriangleAlert, Loader2, Check, X, MoreVertical, Ban, CircleDashed, CircleAlert, CircleCheckBig, CircleEllipsis, Pencil, Receipt, Gift, Briefcase, Package, CalendarDays, ExternalLink, DollarSign, LayoutList, Layers, Paperclip, Ticket, FileCheck, ArrowRightLeft, CreditCard, QrCode, Banknote, Undo2, Wallet, Plus, AlertTriangle, Filter, TrendingUp, Copy, Trash2, Search, ChevronsUpDown, ChevronsDownUp, ChevronRight, Building2, Image, UploadCloud, Calendar, User, Unlink, ChevronDown, Eye, Inbox, Clock, ClipboardCheck, BookOpen, Info, FolderOpen, Folder, RotateCcw, Settings, ArrowLeft, ChevronLeft, 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';
@@ -2489,14 +2489,17 @@ function InvoiceListView({ direction, onNew, onNewReceipt, onEdit }) {
2489
2489
  const printSelected = useCallback((rows) => {
2490
2490
  const safe = (value) => String(value ?? "").replace(/[&<>"']/g, (character) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[character] ?? character);
2491
2491
  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, currency))}</td><td>${row.installmentNumber ?? 1}/${row.totalInstallments ?? 1}</td></tr>`).join("");
2492
- const popup = window.open("", "_blank");
2492
+ const title = direction === "debit" ? "Contas a pagar" : "Contas a receber";
2493
+ const popup = printDocument({
2494
+ title,
2495
+ 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}",
2496
+ body: `<h1>${title}</h1><table><thead><tr><th>Vencimento</th><th>Descri\xE7\xE3o / itens</th><th>Valor</th><th>Parcela</th></tr></thead><tbody>${body}</tbody></table>`
2497
+ });
2493
2498
  if (!popup) {
2494
2499
  toast.error(t2("financial.invoice.printBlocked"));
2495
2500
  return;
2496
2501
  }
2497
2502
  popup.opener = null;
2498
- popup.document.write(`<html><head><title>${direction === "debit" ? "Contas a pagar" : "Contas a receber"}</title><style>body{font:12px sans-serif;padding:24px}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}</style></head><body><h1>${direction === "debit" ? "Contas a pagar" : "Contas a receber"}</h1><table><thead><tr><th>Vencimento</th><th>Descri\xE7\xE3o / itens</th><th>Valor</th><th>Parcela</th></tr></thead><tbody>${body}</tbody></table><script>window.print();window.close()</script></body></html>`);
2499
- popup.document.close();
2500
2503
  }, [currency, direction, t2]);
2501
2504
  const bulkActions = useMemo(() => {
2502
2505
  const actions = [
@@ -2885,6 +2888,9 @@ function InvoiceListView({ direction, onNew, onNewReceipt, onEdit }) {
2885
2888
  var ACCOUNTS_ROUTE = "/registry/accounts";
2886
2889
  var CHART_OF_ACCOUNTS_ROUTE = "/settings/financial/chart-of-accounts";
2887
2890
  var COST_CENTERS_ROUTE = "/settings/financial/cost-centers";
2891
+ var FINANCIAL_INVOICE_ZONES = {
2892
+ headerActions: "financial.invoice.header.actions"
2893
+ };
2888
2894
  function useWritableUnits(fallback = []) {
2889
2895
  const unitMode = useUnitMode();
2890
2896
  const activeUnitId = useActiveUnitId() ?? void 0;
@@ -4899,7 +4905,8 @@ function InstallmentRow({
4899
4905
  ] })
4900
4906
  ] }),
4901
4907
  /* @__PURE__ */ jsx("div", { className: "w-44 shrink-0", onClick: stop, children: source }),
4902
- (actions || onClick) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5", onClick: stop, children: [
4908
+ (actions || onClick) && // Min width fits attach + "Pagar": rows where Pay is absent (unsaved, paid) keep the source column aligned.
4909
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-32 shrink-0 items-center justify-end gap-1.5", onClick: stop, children: [
4903
4910
  actions,
4904
4911
  onClick && /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": true })
4905
4912
  ] })
@@ -5110,18 +5117,18 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
5110
5117
  const showUnitField = unitMode ? reachableUnits.length > 1 : unitChoices.length > 1;
5111
5118
  const [giftCardsEnabled, setGiftCardsEnabled] = useState(false);
5112
5119
  useEffect(() => {
5113
- let cancelled = false;
5120
+ let cancelled2 = false;
5114
5121
  if (direction !== "credit" || !provider.giftCardsEnabled) {
5115
5122
  setGiftCardsEnabled(false);
5116
5123
  return;
5117
5124
  }
5118
5125
  void provider.giftCardsEnabled().then((enabled) => {
5119
- if (!cancelled) setGiftCardsEnabled(enabled);
5126
+ if (!cancelled2) setGiftCardsEnabled(enabled);
5120
5127
  }).catch(() => {
5121
- if (!cancelled) setGiftCardsEnabled(false);
5128
+ if (!cancelled2) setGiftCardsEnabled(false);
5122
5129
  });
5123
5130
  return () => {
5124
- cancelled = true;
5131
+ cancelled2 = true;
5125
5132
  };
5126
5133
  }, [direction, provider]);
5127
5134
  const giftCardLookup = useMemo(() => {
@@ -5198,15 +5205,15 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
5198
5205
  void fetchPaymentMethods();
5199
5206
  }, []);
5200
5207
  useEffect(() => {
5201
- let cancelled = false;
5208
+ let cancelled2 = false;
5202
5209
  void Promise.all([provider.getChartOfAccounts(), provider.getCostCenters()]).then(([accountRows, costCenterRows]) => {
5203
- if (cancelled) return;
5210
+ if (cancelled2) return;
5204
5211
  setAccounts(accountRows);
5205
5212
  setCostCenters(costCenterRows);
5206
5213
  }).catch(() => {
5207
5214
  });
5208
5215
  return () => {
5209
- cancelled = true;
5216
+ cancelled2 = true;
5210
5217
  };
5211
5218
  }, [provider]);
5212
5219
  const contactLookup = useMemo(
@@ -5252,6 +5259,8 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
5252
5259
  const [expandedItemId, setExpandedItemId] = useState(null);
5253
5260
  const [addingItem, setAddingItem] = useState(false);
5254
5261
  const [installments, setInstallments] = useState([]);
5262
+ const [cancelled, setCancelled] = useState(false);
5263
+ const [savedTotal, setSavedTotal] = useState(null);
5255
5264
  const [savedMovements, setSavedMovements] = useState([]);
5256
5265
  const [payingMovement, setPayingMovement] = useState(null);
5257
5266
  const [pendingReceipt, setPendingReceipt] = useState();
@@ -5333,6 +5342,8 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
5333
5342
  setInvoiceDate(invoice.invoiceDate);
5334
5343
  setSavedInvoiceDate(invoice.invoiceDate);
5335
5344
  setSavedContactId(invoice.contactId);
5345
+ setCancelled(invoice.status === "cancelled");
5346
+ setSavedTotal(invoice.totalAmount);
5336
5347
  setFiscalNumber(String(invoice.metadata?.fiscalNumber ?? ""));
5337
5348
  setObservations(invoice.observations ?? "");
5338
5349
  const invoiceItems = await provider.getInvoiceItems(editId);
@@ -5380,7 +5391,7 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
5380
5391
  return sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0);
5381
5392
  }, 0);
5382
5393
  const itemsDirty = isEdit && loaded && itemsKey(items) !== savedItemsKey;
5383
- const scheduleTotal = isEdit && savedMovements.length > 0 && !itemsDirty ? Math.round(savedMovements.reduce((sum, m) => sum + m.amount, 0) * 100) / 100 : totalAmount;
5394
+ const scheduleTotal = isEdit && savedMovements.length > 0 && !itemsDirty ? savedTotal ?? Math.round(savedMovements.reduce((sum, m) => sum + m.amount, 0) * 100) / 100 : totalAmount;
5384
5395
  const prevItemCount = useRef(items.length);
5385
5396
  useEffect(() => {
5386
5397
  if (items.length > 0 && prevItemCount.current === 0 && installments.length === 0 && !isEdit) {
@@ -5608,6 +5619,7 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
5608
5619
  if (isEdit && editId) {
5609
5620
  if (canEditItems && provider.replaceInvoiceItems && itemsDirty) {
5610
5621
  await provider.replaceInvoiceItems(editId, items.map(({ _id, ...rest }) => rest));
5622
+ setSavedTotal(Math.round(totalAmount * 100) / 100);
5611
5623
  }
5612
5624
  await provider.updateInvoice(editId, {
5613
5625
  unitId: unitId || void 0,
@@ -5747,23 +5759,26 @@ function InvoiceFormView({ direction, editId, onSaved, focusReceipt = false, fro
5747
5759
  const subtitle = isEdit ? t2("financial.invoiceForm.editing") : t2("financial.invoiceForm.creating");
5748
5760
  if (loading) return /* @__PURE__ */ jsx(OrderFormSkeleton, { parentLabel: embedded ? void 0 : direction === "debit" ? t2("financial.nav.payables") : t2("financial.nav.receivables"), onBack: embedded ? void 0 : () => onSaved?.() });
5749
5761
  const money4 = (v) => formatCurrency(v, currency);
5750
- const actions = isEdit ? /* @__PURE__ */ jsxs("div", { className: "relative", ref: menuRef, children: [
5751
- /* @__PURE__ */ jsx(Button, { variant: "outline", size: "icon", onClick: () => setMenuOpen(!menuOpen), "aria-label": "More actions", children: /* @__PURE__ */ jsx(MoreVertical, { className: "h-4 w-4" }) }),
5752
- menuOpen && /* @__PURE__ */ jsx("div", { className: "fayz-glass-surface absolute right-0 top-full z-20 mt-1 w-44 rounded-lg border bg-popover py-1 shadow-md", style: { animation: "field-slide-in 150ms ease-out" }, children: /* @__PURE__ */ jsxs(
5753
- "button",
5754
- {
5755
- onClick: () => {
5756
- setConfirmCancel(true);
5757
- setMenuOpen(false);
5758
- },
5759
- className: "flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive transition-colors hover:bg-destructive/10",
5760
- children: [
5761
- /* @__PURE__ */ jsx(Ban, { className: "h-3.5 w-3.5" }),
5762
- " ",
5763
- t2("financial.invoiceForm.cancelInvoice")
5764
- ]
5765
- }
5766
- ) })
5762
+ const actions = isEdit ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
5763
+ /* @__PURE__ */ jsx(WidgetSlot, { zone: FINANCIAL_INVOICE_ZONES.headerActions, invoiceId: editId, direction, cancelled }),
5764
+ /* @__PURE__ */ jsxs("div", { className: "relative", ref: menuRef, children: [
5765
+ /* @__PURE__ */ jsx(Button, { variant: "outline", size: "icon", onClick: () => setMenuOpen(!menuOpen), "aria-label": "More actions", children: /* @__PURE__ */ jsx(MoreVertical, { className: "h-4 w-4" }) }),
5766
+ menuOpen && /* @__PURE__ */ jsx("div", { className: "fayz-glass-surface absolute right-0 top-full z-20 mt-1 w-44 rounded-lg border bg-popover py-1 shadow-md", style: { animation: "field-slide-in 150ms ease-out" }, children: /* @__PURE__ */ jsxs(
5767
+ "button",
5768
+ {
5769
+ onClick: () => {
5770
+ setConfirmCancel(true);
5771
+ setMenuOpen(false);
5772
+ },
5773
+ className: "flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive transition-colors hover:bg-destructive/10",
5774
+ children: [
5775
+ /* @__PURE__ */ jsx(Ban, { className: "h-3.5 w-3.5" }),
5776
+ " ",
5777
+ t2("financial.invoiceForm.cancelInvoice")
5778
+ ]
5779
+ }
5780
+ ) })
5781
+ ] })
5767
5782
  ] }) : null;
5768
5783
  const paidSoFar = savedMovements.reduce((sum, m) => sum + (m.paidAmount ?? 0), 0);
5769
5784
  const hasPayments = paidSoFar > 0;
@@ -6646,11 +6661,8 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
6646
6661
  ...totalRemaining > 0 ? [{ label: t2("financial.invoice.balance"), value: formatCurrency(totalRemaining, currency) }] : []
6647
6662
  ];
6648
6663
  direction === "debit" ? t2("financial.invoice.accountsPayable") : t2("financial.invoice.accountsReceivable");
6649
- const actions = (
6650
- // Declared: the shell gives it a caret on desktop and the FAB on a phone.
6651
- // This was an outline button beside a hand-rolled popup — its own useRef
6652
- // outside-click listener and an inline `style={{animation}}` — sitting next
6653
- // to a Radix Dropdown that already exists.
6664
+ const actions = /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
6665
+ /* @__PURE__ */ jsx(WidgetSlot, { zone: FINANCIAL_INVOICE_ZONES.headerActions, invoiceId: invoice.id, direction, cancelled }),
6654
6666
  /* @__PURE__ */ jsx(
6655
6667
  PageActions,
6656
6668
  {
@@ -6660,7 +6672,7 @@ function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel, em
6660
6672
  ] : []
6661
6673
  }
6662
6674
  )
6663
- );
6675
+ ] });
6664
6676
  const sideBlocks = /* @__PURE__ */ jsxs(Fragment, { children: [
6665
6677
  invoice.bookingStartsAt && /* @__PURE__ */ jsx(OrderDetailBlock, { title: t2("financial.invoice.booking"), children: /* @__PURE__ */ jsxs(
6666
6678
  "button",
@@ -7115,12 +7127,16 @@ function CashSessionReviewModal({ sessionId, open, onOpenChange, mode, onReviewe
7115
7127
  }
7116
7128
  function handlePrint() {
7117
7129
  if (!session) return;
7118
- const popup = window.open("", "_blank", "width=720,height=900");
7130
+ const popup = openPrintWindow("width=720,height=900");
7119
7131
  if (!popup) return;
7120
7132
  const title = session.bankAccountName ?? t2("financial.cash.title");
7121
7133
  const rows = (movements ?? []).map((m) => `<tr><td>${m.paymentDate ? new Date(m.paymentDate).toLocaleString() : "\u2014"}</td><td>${m.method ? t2(`financial.method.${m.method}`) : "\u2014"}</td><td style="text-align:right">${m.direction === "credit" ? "+" : "-"}${formatCurrency(m.paidAmount, currency)}</td></tr>`).join("");
7122
- popup.document.write(`<html><head><title>${title}</title><style>body{font:12px sans-serif;padding:24px}table{width:100%;border-collapse:collapse;margin-top:16px}th,td{border-bottom:1px solid #ddd;padding:8px;text-align:left}h1{font-size:16px;margin-bottom:8px}p{margin:2px 0}</style></head><body><h1>${title}</h1><p>${t2("financial.cash.opened")}: ${new Date(session.openedAt).toLocaleString()}${session.openedByName ? ` ${t2("financial.cash.by")} ${session.openedByName}` : ""}</p>` + (session.closedAt ? `<p>${t2("financial.cash.closeLabel")}: ${new Date(session.closedAt).toLocaleString()}${session.closedByName ? ` ${t2("financial.cash.by")} ${session.closedByName}` : ""}</p>` : "") + `<p>${t2("financial.cash.openingBalance")}: ${formatCurrency(session.openingBalance, currency)}</p><p>${t2("financial.cash.finalValue")}: ${formatCurrency(session.closingBalance ?? 0, currency)}</p><p>${t2("financial.cash.difference")}: ${(session.difference ?? 0) >= 0 ? "+" : ""}${formatCurrency(session.difference ?? 0, currency)}</p><table><thead><tr><th>${t2("financial.cash.opened")}</th><th>${t2("financial.cash.method")}</th><th style="text-align:right">${t2("financial.cash.finalValue")}</th></tr></thead><tbody>${rows}</tbody></table><script>window.print();window.close()</script></body></html>`);
7123
- popup.document.close();
7134
+ printDocument({
7135
+ title,
7136
+ css: "body{font:12px sans-serif}table{width:100%;border-collapse:collapse;margin-top:16px}th,td{border-bottom:1px solid #ddd;padding:8px;text-align:left}h1{font-size:16px;margin-bottom:8px}p{margin:2px 0}",
7137
+ body: `<h1>${title}</h1><p>${t2("financial.cash.opened")}: ${new Date(session.openedAt).toLocaleString()}${session.openedByName ? ` ${t2("financial.cash.by")} ${session.openedByName}` : ""}</p>` + (session.closedAt ? `<p>${t2("financial.cash.closeLabel")}: ${new Date(session.closedAt).toLocaleString()}${session.closedByName ? ` ${t2("financial.cash.by")} ${session.closedByName}` : ""}</p>` : "") + `<p>${t2("financial.cash.openingBalance")}: ${formatCurrency(session.openingBalance, currency)}</p><p>${t2("financial.cash.finalValue")}: ${formatCurrency(session.closingBalance ?? 0, currency)}</p><p>${t2("financial.cash.difference")}: ${(session.difference ?? 0) >= 0 ? "+" : ""}${formatCurrency(session.difference ?? 0, currency)}</p><table><thead><tr><th>${t2("financial.cash.opened")}</th><th>${t2("financial.cash.method")}</th><th style="text-align:right">${t2("financial.cash.finalValue")}</th></tr></thead><tbody>${rows}</tbody></table>`,
7138
+ target: popup
7139
+ });
7124
7140
  }
7125
7141
  return /* @__PURE__ */ jsx(Modal, { open, onOpenChange, children: /* @__PURE__ */ jsxs(ModalContent, { size: "lg", noPadding: true, className: "gap-0", children: [
7126
7142
  /* @__PURE__ */ jsxs(ModalHeader, { className: "border-b px-4 py-3", children: [
@@ -45131,6 +45147,133 @@ REVOKE ALL ON FUNCTION public.financial_gift_card_by_code(text) FROM anon;
45131
45147
  GRANT EXECUTE ON FUNCTION public.financial_gift_card_by_code(text) TO authenticated;
45132
45148
  GRANT EXECUTE ON FUNCTION public.financial_gift_card_by_code(text) TO service_role;
45133
45149
  `;
45150
+ var MIGRATION_119_AN_UNPAID_LEGACY_BILL_CAN_BE_RESCHEDULED = `-- An unpaid bill migrated from V1 could not be rescheduled.
45151
+ --
45152
+ -- Editing the lines of such a bill saved the new lines and total, then
45153
+ -- \`financial_reschedule_invoice\` refused with "carries legacy bill movements":
45154
+ -- the installment kept the old amount and every later save failed the same way.
45155
+ --
45156
+ -- The \`bill\` mirror in plg_financial_movements has had no reader since 044 \u2014
45157
+ -- the installment is the obligation. Its amount is append-only, its status is
45158
+ -- not, so an unpaid mirror is cancelled (stamped in metadata) and the schedule
45159
+ -- goes through. A mirror that records a payment still blocks.
45160
+ --
45161
+ -- Idempotent: replaces the function.
45162
+
45163
+ CREATE OR REPLACE FUNCTION public.financial_reschedule_invoice(
45164
+ p_invoice_id uuid,
45165
+ p_installments jsonb,
45166
+ p_idempotency_key text DEFAULT NULL::text
45167
+ )
45168
+ RETURNS jsonb
45169
+ LANGUAGE plpgsql
45170
+ SECURITY DEFINER
45171
+ SET search_path TO ''
45172
+ AS $function$
45173
+ DECLARE
45174
+ v_tenant uuid := public.plg_financial_require_tenant();
45175
+ v_invoice public.plg_financial_invoices%ROWTYPE;
45176
+ v_paid numeric;
45177
+ v_mirror int;
45178
+ v_sum numeric := 0;
45179
+ v_i jsonb;
45180
+ v_n int := 0;
45181
+ v_out jsonb := '[]'::jsonb;
45182
+ v_inst_id uuid;
45183
+ v_due date;
45184
+ v_amount numeric;
45185
+ v_meta jsonb;
45186
+ v_total int;
45187
+ BEGIN
45188
+ SELECT * INTO v_invoice FROM public.plg_financial_invoices WHERE id = p_invoice_id AND tenant_id = v_tenant;
45189
+ IF NOT FOUND THEN
45190
+ RAISE EXCEPTION 'financial_reschedule_invoice: invoice % not found', p_invoice_id USING ERRCODE = 'P0002';
45191
+ END IF;
45192
+ PERFORM public.plg_financial_require_permission('financial.edit', v_invoice.unit_id);
45193
+ PERFORM public.plg_financial_claim_idempotency(v_tenant, p_idempotency_key);
45194
+
45195
+ IF v_invoice.cancelled_at IS NOT NULL THEN
45196
+ RAISE EXCEPTION 'financial_reschedule_invoice: invoice % is cancelled', v_invoice.number USING ERRCODE = '55000';
45197
+ END IF;
45198
+
45199
+ SELECT coalesce(sum(b.paid), 0) INTO v_paid
45200
+ FROM public.v_financial_installment_balances b WHERE b.invoice_id = p_invoice_id;
45201
+ IF v_paid > 0 THEN
45202
+ RAISE EXCEPTION 'financial_reschedule_invoice: invoice % has % already received; its schedule is history now', v_invoice.number, v_paid
45203
+ USING ERRCODE = '55000',
45204
+ HINT = 'Move the due date of an unpaid installment instead, or cancel and reissue.';
45205
+ END IF;
45206
+
45207
+ -- The legacy \`bill\` mirror can't change amount, but nothing reads it any more
45208
+ -- (the installment is the obligation since 044) and its status may move.
45209
+ -- Retire it unless it records a payment the installments don't know about.
45210
+ SELECT count(*) INTO v_mirror FROM public.plg_financial_movements m
45211
+ WHERE m.financial_invoice_id = p_invoice_id AND m.movement_kind = 'bill'
45212
+ AND m.status <> 'cancelled' AND coalesce(m.paid_amount, 0) > 0;
45213
+ IF v_mirror > 0 THEN
45214
+ RAISE EXCEPTION 'financial_reschedule_invoice: invoice % carries a paid legacy bill movement and cannot be rescheduled', v_invoice.number
45215
+ USING ERRCODE = '55000',
45216
+ HINT = 'Cancel and reissue this invoice.';
45217
+ END IF;
45218
+ UPDATE public.plg_financial_movements m
45219
+ SET status = 'cancelled', updated_at = now(),
45220
+ metadata = coalesce(m.metadata, '{}'::jsonb)
45221
+ || jsonb_build_object('retired_by', 'financial_reschedule_invoice', 'retired_at', now())
45222
+ WHERE m.financial_invoice_id = p_invoice_id AND m.movement_kind = 'bill' AND m.status <> 'cancelled';
45223
+
45224
+ IF jsonb_typeof(p_installments) <> 'array' OR jsonb_array_length(p_installments) = 0 THEN
45225
+ RAISE EXCEPTION 'financial_reschedule_invoice: installments must be a non-empty array' USING ERRCODE = '22023';
45226
+ END IF;
45227
+ FOR v_i IN SELECT * FROM jsonb_array_elements(p_installments) LOOP
45228
+ v_sum := v_sum + round(coalesce((v_i ->> 'amount')::numeric, 0), 2);
45229
+ END LOOP;
45230
+ IF v_sum <> round(v_invoice.total, 2) THEN
45231
+ RAISE EXCEPTION 'financial_reschedule_invoice: installments sum to % but the invoice total is %', v_sum, v_invoice.total
45232
+ USING ERRCODE = '23514';
45233
+ END IF;
45234
+
45235
+ v_total := jsonb_array_length(p_installments);
45236
+
45237
+ -- 1. A sobra sai PRIMEIRO. Se ela tiver movimento, o banco recusa aqui \u2014 e \xE9
45238
+ -- a recusa certa: encolher o cronograma apagaria a linha que um
45239
+ -- lan\xE7amento aponta.
45240
+ DELETE FROM public.plg_financial_invoice_installments
45241
+ WHERE invoice_id = p_invoice_id AND number > v_total;
45242
+
45243
+ -- 2. E a parcela de n\xFAmero N continua sendo a de n\xFAmero N.
45244
+ FOR v_i IN SELECT * FROM jsonb_array_elements(p_installments) LOOP
45245
+ v_n := v_n + 1;
45246
+ v_due := coalesce((v_i ->> 'due_date')::date, v_invoice.competence_date, current_date);
45247
+ v_amount := round(coalesce((v_i ->> 'amount')::numeric, 0), 2);
45248
+ v_meta := CASE WHEN jsonb_typeof(v_i -> 'metadata') = 'object' THEN v_i -> 'metadata' ELSE NULL END;
45249
+
45250
+ UPDATE public.plg_financial_invoice_installments
45251
+ SET due_date = v_due,
45252
+ amount = v_amount,
45253
+ metadata = coalesce(v_meta, metadata),
45254
+ updated_at = now()
45255
+ WHERE invoice_id = p_invoice_id AND number = v_n
45256
+ RETURNING id INTO v_inst_id;
45257
+
45258
+ IF v_inst_id IS NULL THEN
45259
+ INSERT INTO public.plg_financial_invoice_installments
45260
+ (tenant_id, unit_id, invoice_id, number, due_date, amount, metadata)
45261
+ VALUES (v_tenant, v_invoice.unit_id, p_invoice_id, v_n, v_due, v_amount, coalesce(v_meta, '{}'::jsonb))
45262
+ RETURNING id INTO v_inst_id;
45263
+ END IF;
45264
+
45265
+ v_out := v_out || jsonb_build_object('id', v_inst_id, 'number', v_n, 'due_date', v_due, 'amount', v_amount);
45266
+ END LOOP;
45267
+
45268
+ PERFORM public.plg_financial_audit(v_tenant, 'financial.invoice.reschedule', 'plg_financial_invoices', p_invoice_id::text,
45269
+ jsonb_build_object('number', v_invoice.number, 'installments', v_n, 'idempotency_key', p_idempotency_key));
45270
+
45271
+ RETURN jsonb_build_object('invoice_id', p_invoice_id, 'installments', v_out);
45272
+ END $function$;
45273
+
45274
+ COMMENT ON FUNCTION public.financial_reschedule_invoice(uuid, jsonb, text) IS
45275
+ 'Rewrites the schedule by UPDATING each numbered installment in place, and retires an unpaid legacy bill mirror instead of refusing (119).';
45276
+ `;
45134
45277
  var MIGRATIONS = [
45135
45278
  { id: "000_baseline", sql: MIGRATION_000_BASELINE },
45136
45279
  { id: "001_the_comanda_becomes_a_receivable_when_it_closes", sql: MIGRATION_001_THE_COMANDA_BECOMES_A_RECEIVABLE_WHEN_IT_CLOSES },
@@ -45250,7 +45393,8 @@ var MIGRATIONS = [
45250
45393
  { id: "115_a_remessa_aponta_para_a_conta_que_existe", sql: MIGRATION_115_A_REMESSA_APONTA_PARA_A_CONTA_QUE_EXISTE },
45251
45394
  { id: "116_um_estorno_nao_se_estorna", sql: MIGRATION_116_UM_ESTORNO_NAO_SE_ESTORNA },
45252
45395
  { id: "117_copying_lines_is_an_internal_step", sql: MIGRATION_117_COPYING_LINES_IS_AN_INTERNAL_STEP },
45253
- { id: "118_gift_card_found_by_exact_code", sql: MIGRATION_118_GIFT_CARD_FOUND_BY_EXACT_CODE }
45396
+ { id: "118_gift_card_found_by_exact_code", sql: MIGRATION_118_GIFT_CARD_FOUND_BY_EXACT_CODE },
45397
+ { id: "119_an_unpaid_legacy_bill_can_be_rescheduled", sql: MIGRATION_119_AN_UNPAID_LEGACY_BILL_CAN_BE_RESCHEDULED }
45254
45398
  ];
45255
45399
  var STANDALONE_CONFIG = resolveConfig();
45256
45400
  registerTranslations(financialLocales);
@@ -46037,6 +46181,6 @@ function createFinancialPlugin(options) {
46037
46181
  };
46038
46182
  }
46039
46183
 
46040
- export { ClientAccountInline, ClientAccountModal, ClientAccountPanel, FINANCIAL_NAV_FEATURES, ReceivePaymentModal, buildFinancialDomainEvents, buildFinancialMessageDefaults, createFinancialPlugin, createFinancialSettingsPlugin, createMockFinancialProvider, createSafeFinancialProvider };
46184
+ export { ClientAccountInline, ClientAccountModal, ClientAccountPanel, FINANCIAL_INVOICE_ZONES, FINANCIAL_NAV_FEATURES, ReceivePaymentModal, buildFinancialDomainEvents, buildFinancialMessageDefaults, createFinancialPlugin, createFinancialSettingsPlugin, createMockFinancialProvider, createSafeFinancialProvider };
46041
46185
  //# sourceMappingURL=index.js.map
46042
46186
  //# sourceMappingURL=index.js.map