@fayz-ai/pos 0.20.5 → 0.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/config.d.ts +216 -4
- package/dist/app/config.d.ts.map +1 -1
- package/dist/index.d.ts +101 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10857 -2517
- package/dist/index.js.map +1 -1
- package/dist/lib/useFloorBell.d.ts +21 -0
- package/dist/lib/useFloorBell.d.ts.map +1 -0
- package/dist/screen/AreaInspector.d.ts +19 -0
- package/dist/screen/AreaInspector.d.ts.map +1 -0
- package/dist/screen/AreaOutlineSheet.d.ts +15 -0
- package/dist/screen/AreaOutlineSheet.d.ts.map +1 -0
- package/dist/screen/ArrangeSheet.d.ts +8 -0
- package/dist/screen/ArrangeSheet.d.ts.map +1 -0
- package/dist/screen/AuthorizeSheet.d.ts +73 -0
- package/dist/screen/AuthorizeSheet.d.ts.map +1 -0
- package/dist/screen/CancelSheet.d.ts +35 -0
- package/dist/screen/CancelSheet.d.ts.map +1 -0
- package/dist/screen/ClosedPanel.d.ts +55 -0
- package/dist/screen/ClosedPanel.d.ts.map +1 -0
- package/dist/screen/ConfirmSheet.d.ts +12 -0
- package/dist/screen/ConfirmSheet.d.ts.map +1 -0
- package/dist/screen/CourtesySheet.d.ts +23 -0
- package/dist/screen/CourtesySheet.d.ts.map +1 -0
- package/dist/screen/CoverChargeSheet.d.ts +16 -0
- package/dist/screen/CoverChargeSheet.d.ts.map +1 -0
- package/dist/screen/DeliveryBoard.d.ts +13 -0
- package/dist/screen/DeliveryBoard.d.ts.map +1 -1
- package/dist/screen/DiscountSheet.d.ts +85 -0
- package/dist/screen/DiscountSheet.d.ts.map +1 -0
- package/dist/screen/DispatchRail.d.ts.map +1 -1
- package/dist/screen/FloorScopeBanner.d.ts +11 -0
- package/dist/screen/FloorScopeBanner.d.ts.map +1 -0
- package/dist/screen/GuestBar.d.ts +51 -0
- package/dist/screen/GuestBar.d.ts.map +1 -0
- package/dist/screen/GuestCountSheet.d.ts +16 -0
- package/dist/screen/GuestCountSheet.d.ts.map +1 -0
- package/dist/screen/IdentitySheet.d.ts.map +1 -1
- package/dist/screen/ModifierSheet.d.ts.map +1 -1
- package/dist/screen/OpenTableSheet.d.ts.map +1 -1
- package/dist/screen/PinSheet.d.ts.map +1 -1
- package/dist/screen/PlanStage.d.ts +130 -0
- package/dist/screen/PlanStage.d.ts.map +1 -0
- package/dist/screen/PosScreen.d.ts +350 -3
- package/dist/screen/PosScreen.d.ts.map +1 -1
- package/dist/screen/ServiceChargeSheet.d.ts +98 -0
- package/dist/screen/ServiceChargeSheet.d.ts.map +1 -0
- package/dist/screen/SheetLayer.d.ts +8 -0
- package/dist/screen/SheetLayer.d.ts.map +1 -0
- package/dist/screen/ShiftPanel.d.ts +45 -0
- package/dist/screen/ShiftPanel.d.ts.map +1 -0
- package/dist/screen/ShortcutsOverlay.d.ts.map +1 -1
- package/dist/screen/SplitSheet.d.ts.map +1 -1
- package/dist/screen/TableInspector.d.ts +22 -0
- package/dist/screen/TableInspector.d.ts.map +1 -0
- package/dist/screen/TicketRail.d.ts +175 -2
- package/dist/screen/TicketRail.d.ts.map +1 -1
- package/dist/screen/TransferHistorySheet.d.ts +17 -0
- package/dist/screen/TransferHistorySheet.d.ts.map +1 -0
- package/dist/screen/TransferSheet.d.ts +65 -0
- package/dist/screen/TransferSheet.d.ts.map +1 -0
- package/dist/screen/UnassignedTables.d.ts +14 -0
- package/dist/screen/UnassignedTables.d.ts.map +1 -0
- package/dist/screen/WaitlistEntrySheet.d.ts +23 -0
- package/dist/screen/WaitlistEntrySheet.d.ts.map +1 -0
- package/dist/screen/WaitlistView.d.ts +41 -0
- package/dist/screen/WaitlistView.d.ts.map +1 -0
- package/dist/screen/ZoneDrawLayer.d.ts +11 -0
- package/dist/screen/ZoneDrawLayer.d.ts.map +1 -0
- package/dist/screen/ZoneHandles.d.ts +18 -0
- package/dist/screen/ZoneHandles.d.ts.map +1 -0
- package/dist/screen/ZoneInspector.d.ts +27 -0
- package/dist/screen/ZoneInspector.d.ts.map +1 -0
- package/dist/screen/accountFit.d.ts +17 -0
- package/dist/screen/accountFit.d.ts.map +1 -0
- package/dist/screen/accountPick.d.ts +16 -0
- package/dist/screen/accountPick.d.ts.map +1 -0
- package/dist/screen/areaOutline.d.ts +59 -0
- package/dist/screen/areaOutline.d.ts.map +1 -0
- package/dist/screen/arrangePlan.d.ts +109 -0
- package/dist/screen/arrangePlan.d.ts.map +1 -0
- package/dist/screen/arrangeTables.d.ts +69 -0
- package/dist/screen/arrangeTables.d.ts.map +1 -0
- package/dist/screen/billPrint.d.ts +66 -0
- package/dist/screen/billPrint.d.ts.map +1 -0
- package/dist/screen/cancelCheck.d.ts +31 -0
- package/dist/screen/cancelCheck.d.ts.map +1 -0
- package/dist/screen/cardBrand.d.ts +44 -0
- package/dist/screen/cardBrand.d.ts.map +1 -0
- package/dist/screen/cashGate.d.ts +31 -0
- package/dist/screen/cashGate.d.ts.map +1 -0
- package/dist/screen/catalogEmpty.d.ts +13 -0
- package/dist/screen/catalogEmpty.d.ts.map +1 -0
- package/dist/screen/categoryIcon.d.ts +4 -0
- package/dist/screen/categoryIcon.d.ts.map +1 -0
- package/dist/screen/channelSlot.d.ts +93 -0
- package/dist/screen/channelSlot.d.ts.map +1 -0
- package/dist/screen/comandaChannel.d.ts +49 -0
- package/dist/screen/comandaChannel.d.ts.map +1 -0
- package/dist/screen/courtesyGate.d.ts +31 -0
- package/dist/screen/courtesyGate.d.ts.map +1 -0
- package/dist/screen/coverQuantities.d.ts +46 -0
- package/dist/screen/coverQuantities.d.ts.map +1 -0
- package/dist/screen/deliveryColumns.d.ts +54 -0
- package/dist/screen/deliveryColumns.d.ts.map +1 -0
- package/dist/screen/discardCheck.d.ts +8 -0
- package/dist/screen/discardCheck.d.ts.map +1 -0
- package/dist/screen/discountBook.d.ts +40 -0
- package/dist/screen/discountBook.d.ts.map +1 -0
- package/dist/screen/discountCap.d.ts +9 -0
- package/dist/screen/discountCap.d.ts.map +1 -0
- package/dist/screen/discountSelectable.d.ts +20 -0
- package/dist/screen/discountSelectable.d.ts.map +1 -0
- package/dist/screen/dockScope.d.ts +9 -0
- package/dist/screen/dockScope.d.ts.map +1 -0
- package/dist/screen/fiscalSeal.d.ts +40 -0
- package/dist/screen/fiscalSeal.d.ts.map +1 -0
- package/dist/screen/floorEmpty.d.ts +20 -0
- package/dist/screen/floorEmpty.d.ts.map +1 -0
- package/dist/screen/floorGeometry.d.ts +295 -0
- package/dist/screen/floorGeometry.d.ts.map +1 -0
- package/dist/screen/floorScope.d.ts +49 -0
- package/dist/screen/floorScope.d.ts.map +1 -0
- package/dist/screen/floorStale.d.ts +5 -0
- package/dist/screen/floorStale.d.ts.map +1 -0
- package/dist/screen/guestCount.d.ts +28 -0
- package/dist/screen/guestCount.d.ts.map +1 -0
- package/dist/screen/guestCountOnClose.d.ts +11 -0
- package/dist/screen/guestCountOnClose.d.ts.map +1 -0
- package/dist/screen/ledgerMethod.d.ts +11 -0
- package/dist/screen/ledgerMethod.d.ts.map +1 -0
- package/dist/screen/menuFreshness.d.ts +18 -0
- package/dist/screen/menuFreshness.d.ts.map +1 -0
- package/dist/screen/menuSearch.d.ts +55 -0
- package/dist/screen/menuSearch.d.ts.map +1 -0
- package/dist/screen/modifierCheck.d.ts +23 -0
- package/dist/screen/modifierCheck.d.ts.map +1 -0
- package/dist/screen/openChannelCounts.d.ts +26 -0
- package/dist/screen/openChannelCounts.d.ts.map +1 -0
- package/dist/screen/orderRef.d.ts +17 -0
- package/dist/screen/orderRef.d.ts.map +1 -0
- package/dist/screen/paymentList.d.ts +26 -0
- package/dist/screen/paymentList.d.ts.map +1 -0
- package/dist/screen/pinGate.d.ts +28 -0
- package/dist/screen/pinGate.d.ts.map +1 -0
- package/dist/screen/reopen.d.ts +36 -0
- package/dist/screen/reopen.d.ts.map +1 -0
- package/dist/screen/searchSubject.d.ts +22 -0
- package/dist/screen/searchSubject.d.ts.map +1 -0
- package/dist/screen/serviceChargeCheck.d.ts +29 -0
- package/dist/screen/serviceChargeCheck.d.ts.map +1 -0
- package/dist/screen/serviceChargeGuard.d.ts +145 -0
- package/dist/screen/serviceChargeGuard.d.ts.map +1 -0
- package/dist/screen/servicePreview.d.ts +35 -0
- package/dist/screen/servicePreview.d.ts.map +1 -0
- package/dist/screen/session.d.ts +207 -0
- package/dist/screen/session.d.ts.map +1 -1
- package/dist/screen/sheetSubtitle.d.ts +8 -0
- package/dist/screen/sheetSubtitle.d.ts.map +1 -0
- package/dist/screen/shift.d.ts +97 -0
- package/dist/screen/shift.d.ts.map +1 -0
- package/dist/screen/specialReuse.d.ts +45 -0
- package/dist/screen/specialReuse.d.ts.map +1 -0
- package/dist/screen/svgDrag.d.ts +24 -0
- package/dist/screen/svgDrag.d.ts.map +1 -0
- package/dist/screen/tableTone.d.ts +64 -0
- package/dist/screen/tableTone.d.ts.map +1 -0
- package/dist/screen/transferDone.d.ts +12 -0
- package/dist/screen/transferDone.d.ts.map +1 -0
- package/dist/screen/transferGuestBlock.d.ts +30 -0
- package/dist/screen/transferGuestBlock.d.ts.map +1 -0
- package/dist/screen/transferPick.d.ts +51 -0
- package/dist/screen/transferPick.d.ts.map +1 -0
- package/dist/screen/views.d.ts +139 -4
- package/dist/screen/views.d.ts.map +1 -1
- package/dist/screen/waitlist.d.ts +211 -0
- package/dist/screen/waitlist.d.ts.map +1 -0
- package/dist/screen/writeFailure.d.ts +22 -0
- package/dist/screen/writeFailure.d.ts.map +1 -0
- package/dist/screen/zoneDraft.d.ts +75 -0
- package/dist/screen/zoneDraft.d.ts.map +1 -0
- package/dist/screen/zoneEditing.d.ts +56 -0
- package/dist/screen/zoneEditing.d.ts.map +1 -0
- package/dist/styles.css +2697 -200
- package/package.json +2 -2
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { type FloorArea, type FloorTable, type Point } from './floorGeometry';
|
|
2
|
+
import { type ZoneDraft, type ZoneTool } from './zoneDraft';
|
|
3
|
+
import { type ZoneGeometry, type ZoneMembershipAction } from './zoneEditing';
|
|
4
|
+
import { type TableTone } from './tableTone';
|
|
5
|
+
export interface PlanTableView extends FloorTable {
|
|
6
|
+
label: string;
|
|
7
|
+
name?: string | null;
|
|
8
|
+
tone: TableTone;
|
|
9
|
+
seats?: number | null;
|
|
10
|
+
/** O cliente pediu a conta — ganha o anel sólido, por cima do tom. */
|
|
11
|
+
billRequested?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Escalada DIRETAMENTE para quem está logado.
|
|
14
|
+
*
|
|
15
|
+
* O V1 desenha uma bolinha no canto e acrescenta «, escalada para você» ao
|
|
16
|
+
* rótulo. A razão está no comentário dele: *«a mesa aparece para os dois,
|
|
17
|
+
* esta é "a sua"»* — dentro da praça que o garçom atende, esta foi dada a
|
|
18
|
+
* ele por nome. Sem o ponto, as duas coisas se parecem.
|
|
19
|
+
*/
|
|
20
|
+
assignedToMe?: boolean;
|
|
21
|
+
/** Quantas pessoas sentaram, no chip de cima. */
|
|
22
|
+
guests?: number | null;
|
|
23
|
+
/** O que o chip de baixo diz — o total, o tempo. */
|
|
24
|
+
info?: string | null;
|
|
25
|
+
}
|
|
26
|
+
/** Uma PRAÇA desenhada — a região de um garçom. */
|
|
27
|
+
export interface PlanZone {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
color?: string | null;
|
|
31
|
+
/** Retângulo, elipse ou mão livre — o desenho que a criou. */
|
|
32
|
+
shape?: 'rect' | 'rectangle' | 'ellipse' | 'polygon' | null;
|
|
33
|
+
posX?: number | null;
|
|
34
|
+
posY?: number | null;
|
|
35
|
+
widthM?: number | null;
|
|
36
|
+
heightM?: number | null;
|
|
37
|
+
polygon?: Array<{
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
}> | null;
|
|
41
|
+
/** As mesas que caem nela. */
|
|
42
|
+
tableIds?: string[];
|
|
43
|
+
}
|
|
44
|
+
export type PlanFocus = {
|
|
45
|
+
level: 'macro';
|
|
46
|
+
} | {
|
|
47
|
+
level: 'area';
|
|
48
|
+
id: string;
|
|
49
|
+
};
|
|
50
|
+
export declare function PlanStage({ areas, zones, tables, activeId, onSelect, dimmedIds, focusAreaId, editing, onMoveTable, tool, onDrawZone, draftColor, selectedZoneId, onSelectZone, onUpdateZone, onRefuseZone, pickingZone, onToggleTableInZone, selectedAreaId, onSelectArea, aspect }: {
|
|
51
|
+
/** Os AMBIENTES — o chão. */
|
|
52
|
+
areas: FloorArea[];
|
|
53
|
+
/**
|
|
54
|
+
* As PRAÇAS — a região que cada garçom atende, por cima do chão.
|
|
55
|
+
*
|
|
56
|
+
* Irmãs do ambiente, não filhas: uma praça CRUZA ambientes, e por isso a
|
|
57
|
+
* geometria dela é absoluta. Translúcidas, para as mesas continuarem
|
|
58
|
+
* legíveis por baixo — a praça diz DE QUEM é a mesa, não o que ela é.
|
|
59
|
+
*/
|
|
60
|
+
zones?: PlanZone[];
|
|
61
|
+
tables: PlanTableView[];
|
|
62
|
+
activeId?: string;
|
|
63
|
+
onSelect?: (t: PlanTableView) => void;
|
|
64
|
+
/** Fora do ambiente em foco: translúcidas, mas ainda clicáveis. */
|
|
65
|
+
dimmedIds?: ReadonlySet<string>;
|
|
66
|
+
/**
|
|
67
|
+
* O foco vem DE FORA — do filtro que já mora no rodapé do salão.
|
|
68
|
+
*
|
|
69
|
+
* Ele tinha trilha própria aqui em cima, e eram dois controles para a mesma
|
|
70
|
+
* pergunta: "que parte do salão eu estou vendo?". Quem manda é o de baixo,
|
|
71
|
+
* onde o polegar já está.
|
|
72
|
+
*/
|
|
73
|
+
focusAreaId?: string;
|
|
74
|
+
/**
|
|
75
|
+
* MODO EDIÇÃO: a mesa passa a se arrastar em vez de abrir a comanda.
|
|
76
|
+
*
|
|
77
|
+
* O mesmo glifo, o mesmo palco e o mesmo toque — o que muda é o que o gesto
|
|
78
|
+
* significa. Duas telas separadas para ver e para mover fariam o operador
|
|
79
|
+
* conferir numa e corrigir na outra, comparando de memória.
|
|
80
|
+
*/
|
|
81
|
+
editing?: boolean;
|
|
82
|
+
/** Ao soltar a mesa: o novo centro, em metros, já arredondado ao cm. */
|
|
83
|
+
onMoveTable?: (id: string, to: Point) => void;
|
|
84
|
+
/**
|
|
85
|
+
* A ferramenta de praça ARMADA, vinda da barra.
|
|
86
|
+
*
|
|
87
|
+
* Com ela ligada o palco muda de assunto: as mesas e os ambientes param de
|
|
88
|
+
* ouvir o ponteiro e uma folha transparente por cima captura o gesto. É o
|
|
89
|
+
* mesmo palco — o que muda é o que o dedo significa.
|
|
90
|
+
*/
|
|
91
|
+
tool?: ZoneTool | null;
|
|
92
|
+
/** O resultado do gesto: a praça montada, ou a recusa com as palavras dela. */
|
|
93
|
+
onDrawZone?: (draft: ZoneDraft) => void;
|
|
94
|
+
/** Nome e cor com que a praça VAI nascer — o contorno já sai na cor certa. */
|
|
95
|
+
draftColor?: string;
|
|
96
|
+
/**
|
|
97
|
+
* A praça ESCOLHIDA para mexer — a que ganha as alças.
|
|
98
|
+
*
|
|
99
|
+
* Separada do foco do rodapé de propósito: aquele responde "que parte do
|
|
100
|
+
* salão eu estou vendo", este responde "em qual eu estou mexendo". Foram a
|
|
101
|
+
* mesma coisa por um momento, e aproximar numa praça punha alças nela sem
|
|
102
|
+
* ninguém ter pedido.
|
|
103
|
+
*/
|
|
104
|
+
selectedZoneId?: string | null;
|
|
105
|
+
onSelectZone?: (id: string | null) => void;
|
|
106
|
+
/** Grava a geometria da praça ao fim do gesto. */
|
|
107
|
+
onUpdateZone?: (id: string, patch: Partial<ZoneGeometry>) => void;
|
|
108
|
+
/** A recusa do contorno, com a frase que explica a regra. */
|
|
109
|
+
onRefuseZone?: (reason: string) => void;
|
|
110
|
+
/**
|
|
111
|
+
* MODO «escolher mesas na planta».
|
|
112
|
+
*
|
|
113
|
+
* O palco apaga tudo menos a praça e o toque na mesa deixa de arrastar:
|
|
114
|
+
* ele inclui ou exclui. É o mesmo glifo com um terceiro significado, e o
|
|
115
|
+
* que decide é o modo — nunca o gesto.
|
|
116
|
+
*/
|
|
117
|
+
pickingZone?: boolean;
|
|
118
|
+
onToggleTableInZone?: (tableId: string, how: ZoneMembershipAction) => void;
|
|
119
|
+
/**
|
|
120
|
+
* O AMBIENTE escolhido para mexer.
|
|
121
|
+
*
|
|
122
|
+
* Em edição o clique no chão deixa de aproximar e passa a SELECIONAR: o
|
|
123
|
+
* mesmo gesto, e o modo decide — como na mesa e na praça. Fora da edição
|
|
124
|
+
* ele continua aproximando, que é o que o garçom quer.
|
|
125
|
+
*/
|
|
126
|
+
selectedAreaId?: string | null;
|
|
127
|
+
onSelectArea?: (id: string | null) => void;
|
|
128
|
+
aspect?: number;
|
|
129
|
+
}): import("react").JSX.Element;
|
|
130
|
+
//# sourceMappingURL=PlanStage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanStage.d.ts","sourceRoot":"","sources":["../../src/screen/PlanStage.tsx"],"names":[],"mappings":"AAeA,OAAO,EAA0H,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAGrM,OAAO,EAAiC,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE1F,OAAO,EAAgC,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAC1G,OAAO,EAAwD,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAGlG,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAKD,mDAAmD;AACnD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAA;IAC3D,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;IAChD,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAQD,MAAM,MAAM,SAAS,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAgB1E,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAY,EAAE,EAAE;IAC1R,6BAA6B;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;IAClB,MAAM,EAAE,aAAa,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;IACrC,mEAAmE;IACnE,SAAS,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7C;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IACtB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IACvC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1C,kDAAkD;IAClD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAA;IACjE,6DAA6D;IAC7D,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,KAAK,IAAI,CAAA;IAC1E;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,+BA2bA"}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
+
import { type TablePatch } from './TableInspector';
|
|
2
3
|
import type { DispatchStatus, PosAppConfig, PosCategory, PosItem, PosPosition, PosReservation, PosStaff } from '../app/config';
|
|
3
|
-
import { type Ticket, type TicketLine, type TicketTotals } from './session';
|
|
4
|
+
import { type Ticket, type TicketGuest, type TicketLine, type TicketTotals } from './session';
|
|
5
|
+
import type { PaymentRow } from './paymentList';
|
|
6
|
+
import { type OrderCover } from './TicketRail';
|
|
7
|
+
import type { GuestDraft } from './GuestBar';
|
|
8
|
+
import type { ClosedTicket } from './ClosedPanel';
|
|
9
|
+
import type { FiscalSeal } from './fiscalSeal';
|
|
10
|
+
import { type NewWaitlistEntry, type WaitlistEntry } from './waitlist';
|
|
4
11
|
import { type PosNotice } from './Notice';
|
|
12
|
+
import { type ZoneFields } from './zoneDraft';
|
|
13
|
+
import type { ZoneGeometry } from './zoneEditing';
|
|
14
|
+
import { type FloorScope } from './floorScope';
|
|
15
|
+
import type { OutlinePatch } from './areaOutline';
|
|
16
|
+
import type { ArrangementPlan } from './arrangePlan';
|
|
5
17
|
/**
|
|
6
18
|
* A bill at the moment the operator confirms it. Everything the app needs to
|
|
7
19
|
* settle it is here, so the handler never has to reach back into the screen.
|
|
@@ -11,6 +23,56 @@ export interface PosBill {
|
|
|
11
23
|
totals: TicketTotals;
|
|
12
24
|
/** Which of `config.paymentMethods` was chosen. Never guessed. */
|
|
13
25
|
paymentMethodId: string;
|
|
26
|
+
/**
|
|
27
|
+
* QUEM está pagando agora. Vazio = a comanda inteira.
|
|
28
|
+
*
|
|
29
|
+
* A tela de fechamento deixa marcar uma parte das contas, e essa escolha
|
|
30
|
+
* mudava o total À VISTA e mais nada: o gesto terminava com `onClose()` sem
|
|
31
|
+
* argumento, e quem recebia a conta cobrava sempre o valor cheio. Marcar um
|
|
32
|
+
* de quatro mostrava R$ 40 e fechava R$ 160 — sem aviso.
|
|
33
|
+
*/
|
|
34
|
+
guestIds?: string[];
|
|
35
|
+
/**
|
|
36
|
+
* O que se está cobrando NESTE gesto, em centavos.
|
|
37
|
+
*
|
|
38
|
+
* `totals.totalCents` é a comanda inteira e continua aqui: quem fecha
|
|
39
|
+
* precisa saber as duas coisas — quanto a mesa deve e quanto entrou agora —
|
|
40
|
+
* para decidir se a conta zerou. Confundir as duas é fechar mesa com saldo.
|
|
41
|
+
*/
|
|
42
|
+
amountCents: number;
|
|
43
|
+
/**
|
|
44
|
+
* O que a comanda AINDA DEVE, em centavos — o total menos o que já entrou.
|
|
45
|
+
*
|
|
46
|
+
* Não é `totals.totalCents`: uma mesa que já recebeu R$ 179,67 deve menos
|
|
47
|
+
* do que soma. Comparar a cobrança com o total BRUTO acusa de parcial um
|
|
48
|
+
* pagamento que na verdade quita a conta — foi o primeiro jeito que eu
|
|
49
|
+
* escrevi esta regra, e ele recusava o fechamento correto.
|
|
50
|
+
*/
|
|
51
|
+
outstandingCents: number;
|
|
52
|
+
/**
|
|
53
|
+
* Para ONDE o dinheiro vai — a gaveta, o banco, o recebível do cartão.
|
|
54
|
+
*
|
|
55
|
+
* O razão precisa de um lado de débito, e ele é esta conta. Sem ela,
|
|
56
|
+
* `financial_receive_payment` recusa com "an account is required for
|
|
57
|
+
* method %" — e a recusa é justa: dinheiro que entra sem dizer onde é
|
|
58
|
+
* dinheiro que ninguém concilia.
|
|
59
|
+
*/
|
|
60
|
+
accountId?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Em quantas vezes. `1` é à vista, e é o que o débito sempre é.
|
|
63
|
+
*
|
|
64
|
+
* Vai ao razão junto com a forma: uma venda de 3× não é a mesma coisa que
|
|
65
|
+
* três vendas, e o recebível do cartão só bate com a maquininha se souber
|
|
66
|
+
* em quantas parcelas saiu.
|
|
67
|
+
*/
|
|
68
|
+
installments?: number;
|
|
69
|
+
/**
|
|
70
|
+
* A bandeira — «Visa», «Alelo».
|
|
71
|
+
*
|
|
72
|
+
* Vai ao razão junto com a forma: a conciliação do mês separa Visa de
|
|
73
|
+
* Mastercard, e sem ela o extrato da adquirente não bate linha a linha.
|
|
74
|
+
*/
|
|
75
|
+
cardBrand?: string;
|
|
14
76
|
}
|
|
15
77
|
export interface PosScreenProps {
|
|
16
78
|
config: PosAppConfig;
|
|
@@ -19,6 +81,35 @@ export interface PosScreenProps {
|
|
|
19
81
|
positions: PosPosition[];
|
|
20
82
|
staff?: PosStaff[];
|
|
21
83
|
reservations?: PosReservation[];
|
|
84
|
+
/**
|
|
85
|
+
* A fila de espera — quem chegou sem reserva.
|
|
86
|
+
*
|
|
87
|
+
* Só os ATIVOS (`waiting` e `called`). Quem sentou ou saiu não é fila: é
|
|
88
|
+
* histórico, e ele não disputa a atenção de quem está com o salão cheio.
|
|
89
|
+
*/
|
|
90
|
+
waitlist?: WaitlistEntry[];
|
|
91
|
+
/** Pôr alguém na fila. Ausente, o botão «Novo» não aparece. */
|
|
92
|
+
onWaitlistAdd?: (entry: NewWaitlistEntry) => Promise<void> | void;
|
|
93
|
+
/** Chamar (e rechamar) — o banco carimba o prazo de tolerância. */
|
|
94
|
+
onWaitlistCall?: (entryId: string) => Promise<void> | void;
|
|
95
|
+
/** O grupo sentou na mesa `positionId`, na comanda `orderId`. */
|
|
96
|
+
onWaitlistSeat?: (entryId: string, positionId: string) => Promise<void> | void;
|
|
97
|
+
/** Não compareceu ao chamado. Quem decide é o anfitrião, nunca o relógio. */
|
|
98
|
+
onWaitlistNoShow?: (entryId: string) => Promise<void> | void;
|
|
99
|
+
/** O telefone já é de alguém? Ver `WaitlistEntrySheet.onLookupPhone`. */
|
|
100
|
+
onWaitlistLookupPhone?: (digits: string) => Promise<{
|
|
101
|
+
id: string;
|
|
102
|
+
name: string;
|
|
103
|
+
} | null>;
|
|
104
|
+
/**
|
|
105
|
+
* O check-in da reserva, GRAVADO.
|
|
106
|
+
*
|
|
107
|
+
* Sem ele o estado «Chegou» continua existindo, só que na memória deste
|
|
108
|
+
* terminal — que é como a tela de reservas já se comporta. Com ele, o outro
|
|
109
|
+
* terminal do balcão também vê que o grupo se apresentou, e é essa a razão
|
|
110
|
+
* de o gesto existir: duas pessoas atendendo a mesma porta.
|
|
111
|
+
*/
|
|
112
|
+
onReservationArrived?: (reservationId: string) => Promise<void> | void;
|
|
22
113
|
terminalName?: string;
|
|
23
114
|
operatorName?: string;
|
|
24
115
|
/**
|
|
@@ -31,7 +122,203 @@ export interface PosScreenProps {
|
|
|
31
122
|
*/
|
|
32
123
|
operatorId?: string;
|
|
33
124
|
connection?: 'online' | 'reconnecting' | 'offline';
|
|
34
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Uma ação que o pacote não resolve sozinho.
|
|
127
|
+
*
|
|
128
|
+
* Vai com o CONTEXTO: sem saber de qual comanda a ação partiu, o app abriria
|
|
129
|
+
* a folha de desconto sobre "a comanda atual" e acertaria por sorte — o
|
|
130
|
+
* operador troca de mesa entre tocar o botão e a folha subir.
|
|
131
|
+
*/
|
|
132
|
+
/** `guestId` só vem quando a ação foi pedida a partir de UM participante —
|
|
133
|
+
* a pastilha de taxa ao lado do nome dele. */
|
|
134
|
+
onAction?: (actionId: string, ctx: {
|
|
135
|
+
positionId?: string;
|
|
136
|
+
ticket: Ticket;
|
|
137
|
+
guestId?: string;
|
|
138
|
+
}) => void;
|
|
139
|
+
/**
|
|
140
|
+
* Descartar uma comanda vazia, pela régua do rodapé.
|
|
141
|
+
*
|
|
142
|
+
* O pacote só oferece o gesto onde ele é seguro (comanda de R$ 0,00 e sem
|
|
143
|
+
* mesa); quem apaga no banco é o app.
|
|
144
|
+
*/
|
|
145
|
+
onDiscardTicket?: (positionId: string) => void;
|
|
146
|
+
/**
|
|
147
|
+
* As pessoas da comanda ativa.
|
|
148
|
+
*
|
|
149
|
+
* Por posição, porque a seleção é DESTA mesa: escolher a Ana na mesa 3 e
|
|
150
|
+
* andar até a 5 não pode continuar lançando na Ana.
|
|
151
|
+
*
|
|
152
|
+
* O app é quem sabe: no salão são os participantes da mesa; no balcão
|
|
153
|
+
* costuma não haver nenhum, e aí a comanda volta a ser uma lista só — que é
|
|
154
|
+
* o comportamento do V1 e o certo para a fila do caixa.
|
|
155
|
+
*/
|
|
156
|
+
/**
|
|
157
|
+
* Um painel que toma a COLUNA da direita — hoje a «Escala de hoje».
|
|
158
|
+
*
|
|
159
|
+
* Aberto, ele substitui a comanda e a planta continua à vista: é dela que se
|
|
160
|
+
* escolhe a praça ou a mesa a escalar. Em diálogo, o gesto exigia fechar,
|
|
161
|
+
* olhar e reabrir.
|
|
162
|
+
*/
|
|
163
|
+
railPanel?: React.ReactNode;
|
|
164
|
+
/** O couvert aplicado a cada comanda — linhas da conta, por posição. */
|
|
165
|
+
coversByPosition?: Record<string, OrderCover[]>;
|
|
166
|
+
/**
|
|
167
|
+
* Repartir o couvert por participante — o lápis do V1 na linha dos totais.
|
|
168
|
+
*
|
|
169
|
+
* Recebe a comanda junto porque o escritor precisa saber em qual delas
|
|
170
|
+
* mexer, e o cartão do couvert só carrega o próprio id.
|
|
171
|
+
*/
|
|
172
|
+
onEditCover?: (positionId: string, cover: OrderCover) => void;
|
|
173
|
+
/** O que já entrou em cada comanda, por pagamento. */
|
|
174
|
+
paymentsByPosition?: Record<string, PaymentRow[]>;
|
|
175
|
+
/** Abrir «Número de Pessoas» da comanda corrente. */
|
|
176
|
+
onEditGuestCount?: (positionId: string) => void;
|
|
177
|
+
/**
|
|
178
|
+
* Uma posição OCUPADA acabou de ser escolhida.
|
|
179
|
+
*
|
|
180
|
+
* Existe para o app buscar o que ainda não trouxe: a comanda de canal
|
|
181
|
+
* avulsa entra na bandeja com valor e idade, e as LINHAS dela só valem a
|
|
182
|
+
* consulta quando alguém a toca — carregar as onze abertas no boot custaria
|
|
183
|
+
* seis consultas cada.
|
|
184
|
+
*/
|
|
185
|
+
onActivatePosition?: (positionId: string) => void;
|
|
186
|
+
/** As contas fechadas hoje — o que a coluna mostra sem comanda aberta. */
|
|
187
|
+
closedTickets?: ClosedTicket[];
|
|
188
|
+
/** Reabrir uma conta fechada — ver `reopen.ts`. */
|
|
189
|
+
onReopenClosed?: (t: ClosedTicket) => void;
|
|
190
|
+
closedLoading?: boolean;
|
|
191
|
+
/** Saiu nota? Por conta fechada — ver `fiscalSeal.ts`. */
|
|
192
|
+
closedSeals?: Record<string, FiscalSeal>;
|
|
193
|
+
/** A leitura fiscal falhou. O painel diz isso em vez de pintar tudo de
|
|
194
|
+
* "sem nota": num painel que existe para apontar o que falta emitir, não
|
|
195
|
+
* saber e saber que não são coisas diferentes. */
|
|
196
|
+
closedSealsFailed?: boolean;
|
|
197
|
+
onOpenClosed?: (id: string) => void;
|
|
198
|
+
/**
|
|
199
|
+
* O gesto de SAIR, em dois estágios.
|
|
200
|
+
*
|
|
201
|
+
* O ✕ do canto pertence ao hospedeiro e fecha o PDV inteiro. Mas quem está
|
|
202
|
+
* com a mesa 12 aberta e toca ali quase nunca quer sair do PDV: quer largar
|
|
203
|
+
* a mesa. O PDV registra aqui uma função que CONSOME o gesto quando há o que
|
|
204
|
+
* largar, e devolve `false` quando não há — e aí o hospedeiro fecha, como
|
|
205
|
+
* antes. Sem isto, um toque no canto tira o operador do caixa no meio do
|
|
206
|
+
* serviço, e voltar custa dois gestos e uma tela de carregamento.
|
|
207
|
+
*/
|
|
208
|
+
registerEscape?: (fn: () => boolean) => void;
|
|
209
|
+
/**
|
|
210
|
+
* Mover uma mesa na planta. Sem isto não há «Editar planta» — o botão que
|
|
211
|
+
* abre um modo sem ação é pior que a ausência dele.
|
|
212
|
+
*/
|
|
213
|
+
onMoveTable?: (id: string, to: {
|
|
214
|
+
x: number;
|
|
215
|
+
y: number;
|
|
216
|
+
}) => void | Promise<void>;
|
|
217
|
+
/** Grava um campo da ficha da mesa. Sem isto a ficha não abre. */
|
|
218
|
+
onUpdateTable?: (id: string, patch: TablePatch) => void | Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* Cria uma PRAÇA a partir do desenho. Sem isto as três ferramentas somem.
|
|
221
|
+
*
|
|
222
|
+
* Praça não é ambiente: ela é o RECORTE de atendimento, desenhado por cima
|
|
223
|
+
* do chão, e pode cruzar dois ambientes. O vocabulário é contrato — foi
|
|
224
|
+
* chamar uma de outra que fez a casa batizar os ambientes de «Praça 1».
|
|
225
|
+
*/
|
|
226
|
+
onCreateZone?: (fields: ZoneFields) => void | Promise<void>;
|
|
227
|
+
/** Grava a geometria de uma praça já desenhada — mover, esticar, reformar. */
|
|
228
|
+
onUpdateZone?: (id: string, patch: Partial<ZoneGeometry>) => void | Promise<void>;
|
|
229
|
+
/** Põe ou tira uma mesa da praça, à mão. */
|
|
230
|
+
onTogglaMesaNaPraca?: (zoneId: string, tableId: string, how: 'include' | 'exclude' | 'reset') => void;
|
|
231
|
+
/** Apaga a praça. As mesas ficam; o que se perde é o recorte. */
|
|
232
|
+
onDeleteZone?: (id: string) => void | Promise<void>;
|
|
233
|
+
/**
|
|
234
|
+
* Aplica o plano de «Organizar automaticamente».
|
|
235
|
+
*
|
|
236
|
+
* Vai em LOTE de propósito: cem mesas em cem chamadas fariam o salão andar
|
|
237
|
+
* a conta-gotas na tela e deixariam o banco num meio-termo se uma falhasse.
|
|
238
|
+
*/
|
|
239
|
+
onArrange?: (plan: ArrangementPlan) => void | Promise<void>;
|
|
240
|
+
/**
|
|
241
|
+
* Grava a ficha e o contorno do AMBIENTE — a parede, não o recorte.
|
|
242
|
+
*
|
|
243
|
+
* Nunca leva unidade nem inquilino: o V1 conta que um campo a mais no
|
|
244
|
+
* update carregou um salão inteiro, com as mesas dentro, para a unidade que
|
|
245
|
+
* estava selecionada no topo da tela.
|
|
246
|
+
*/
|
|
247
|
+
onUpdateArea?: (id: string, patch: Partial<OutlinePatch>) => void | Promise<void>;
|
|
248
|
+
/**
|
|
249
|
+
* De quem são estas mesas — a escala vigente de quem está logado.
|
|
250
|
+
*
|
|
251
|
+
* Sem ficha de pessoa (`staffId` nulo) a tela não mostra aviso nenhum: não
|
|
252
|
+
* há escala possível, e um aviso em toda tela seria ruído.
|
|
253
|
+
*/
|
|
254
|
+
floorScope?: FloorScope | null;
|
|
255
|
+
/**
|
|
256
|
+
* A porta para o CADASTRO de mesas — número, lugares, criar em lote.
|
|
257
|
+
*
|
|
258
|
+
* O V1 a põe ao lado do `Simplificada | Planta baixa`, atrás de
|
|
259
|
+
* `restaurant_tables_admin`. Aqui ela só existe quando o app manda o
|
|
260
|
+
* atalho: quem decide a permissão é quem a conhece, e um botão que aparece
|
|
261
|
+
* para negar depois é pior que a ausência dele.
|
|
262
|
+
*
|
|
263
|
+
* É diferente de «Editar planta»: lá se ARRUMA o salão desenhado, aqui se
|
|
264
|
+
* CADASTRA a mesa que ainda não existe.
|
|
265
|
+
*/
|
|
266
|
+
onConfigureTables?: () => void;
|
|
267
|
+
/**
|
|
268
|
+
* Um controle do app na barra da PLANTA — hoje o "Escala de hoje".
|
|
269
|
+
*
|
|
270
|
+
* Vive aqui e não numa ação da comanda porque a pergunta é do salão, não da
|
|
271
|
+
* conta: "de quem é aquela mesa?" se responde olhando a planta.
|
|
272
|
+
*/
|
|
273
|
+
floorTool?: React.ReactNode;
|
|
274
|
+
/**
|
|
275
|
+
* A planta vira um SELETOR.
|
|
276
|
+
*
|
|
277
|
+
* Com a escala aberta, tocar uma mesa escolhe o alvo em vez de abrir a
|
|
278
|
+
* comanda — é o gesto do V1, e é mais direto do que procurar um nome entre
|
|
279
|
+
* duzentos numa lista.
|
|
280
|
+
*/
|
|
281
|
+
shiftMode?: boolean;
|
|
282
|
+
onPickTarget?: (t: {
|
|
283
|
+
kind: 'area' | 'table';
|
|
284
|
+
id: string;
|
|
285
|
+
label: string;
|
|
286
|
+
}) => void;
|
|
287
|
+
/** Chamado quando a tela sai do modo em que o painel da escala faz sentido. */
|
|
288
|
+
onCloseShift?: () => void;
|
|
289
|
+
parties?: Record<string, TicketGuest[]>;
|
|
290
|
+
/**
|
|
291
|
+
* A taxa DESTA comanda, quando ela difere da política da casa.
|
|
292
|
+
*
|
|
293
|
+
* A casa tem uma taxa; a mesa pode ter a sua, combinada na hora. O rodapé
|
|
294
|
+
* precisa da taxa da MESA — com a da casa ele mostrava R$ 74,00 numa conta
|
|
295
|
+
* que o banco já tinha fechado em R$ 83,62, e a diferença é o que o cliente
|
|
296
|
+
* vê na maquininha.
|
|
297
|
+
*/
|
|
298
|
+
serviceChargeByPosition?: Record<string, number>;
|
|
299
|
+
/** Sobrepõe o rótulo da pastilha compartilhada ("Mesa"/"Balcão"/"Pedido"). */
|
|
300
|
+
sharedLabel?: string;
|
|
301
|
+
/** Quanto já foi pago em cada comanda, por participante (chave `mesa` = o
|
|
302
|
+
* compartilhado). O rail recebe o da comanda ativa. */
|
|
303
|
+
paidByPosition?: Record<string, Record<string, number>>;
|
|
304
|
+
/**
|
|
305
|
+
* Senta mais uma pessoa. A POSIÇÃO vem junto: o app não tem como saber
|
|
306
|
+
* sozinho em que mesa o operador está — quem sabe isso é esta tela.
|
|
307
|
+
*/
|
|
308
|
+
/**
|
|
309
|
+
* O cliente da comanda foi identificado.
|
|
310
|
+
*
|
|
311
|
+
* O app decide o que fazer com isso — gravar o nome na comanda e, quando a
|
|
312
|
+
* primeira cadeira ainda não tem dono, dar o nome a ela também.
|
|
313
|
+
*/
|
|
314
|
+
onIdentify?: (positionId: string, alias: string, phone?: string) => void | Promise<void>;
|
|
315
|
+
onAddGuest?: (draft: GuestDraft, positionId: string) => void | Promise<void>;
|
|
316
|
+
onIdentifyGuest?: (id: string, draft: GuestDraft) => void | Promise<void>;
|
|
317
|
+
onRemoveGuest?: (id: string) => void | Promise<void>;
|
|
318
|
+
onLookupPhone?: (phone: string) => Promise<{
|
|
319
|
+
id: string;
|
|
320
|
+
name: string;
|
|
321
|
+
} | null>;
|
|
35
322
|
/** Fired when the operator opens a position, so the app can persist it. */
|
|
36
323
|
onOpenPosition?: (positionId: string, guests: number, attendantId?: string) => void;
|
|
37
324
|
/**
|
|
@@ -57,6 +344,24 @@ export interface PosScreenProps {
|
|
|
57
344
|
verifyPin?: (pin: string, actionId: string) => PosStaff | null | Promise<PosStaff | null>;
|
|
58
345
|
/** Called after a gated action is authorised, with who released it. */
|
|
59
346
|
onAuthorised?: (actionId: string, by: PosStaff) => void;
|
|
347
|
+
/**
|
|
348
|
+
* Por que ESTA ação não pode agora — a regra de NEGÓCIO, que é do app.
|
|
349
|
+
*
|
|
350
|
+
* O pacote sabe que "não se cancela o que a cozinha não viu": isso é sobre a
|
|
351
|
+
* comanda e vale em qualquer casa. Mas "cortesia não existe em retirada nem
|
|
352
|
+
* em delivery, porque esses canais têm jornada própria de pagamento e
|
|
353
|
+
* repasse" é política do produto — e enfiá-la aqui faria o PDV carregar a
|
|
354
|
+
* regra fiscal de um país dentro de um componente de tela.
|
|
355
|
+
*
|
|
356
|
+
* O que o app devolve VENCE o padrão do pacote: uma casa pode proibir o que
|
|
357
|
+
* o pacote permitiria, e nunca o contrário.
|
|
358
|
+
*/
|
|
359
|
+
actionGate?: (actionId: string, ctx: {
|
|
360
|
+
/** O menu aberto — é dele que sai o canal da venda. */
|
|
361
|
+
menuId?: string;
|
|
362
|
+
position?: PosPosition;
|
|
363
|
+
ticket: Ticket;
|
|
364
|
+
}) => string | undefined | false;
|
|
60
365
|
/** Orders already open when the screen mounts, keyed by position id. */
|
|
61
366
|
initialTickets?: Record<string, TicketLine[]>;
|
|
62
367
|
/**
|
|
@@ -66,6 +371,22 @@ export interface PosScreenProps {
|
|
|
66
371
|
* one that did not).
|
|
67
372
|
*/
|
|
68
373
|
notice?: PosNotice;
|
|
374
|
+
/**
|
|
375
|
+
* O mapa do salão não carregou — a mesa «livre» pode não estar.
|
|
376
|
+
*
|
|
377
|
+
* Faixa FIXA enquanto durar, com a frase do V1. Ver `floorStale.ts`.
|
|
378
|
+
*/
|
|
379
|
+
/**
|
|
380
|
+
* Há CAIXA ABERTO para quem está no teclado?
|
|
381
|
+
*
|
|
382
|
+
* O sexto motivo do V1 para a cortesia estar bloqueada — «Abra seu caixa para
|
|
383
|
+
* usar a cortesia». `undefined` quer dizer «não sei» e não bloqueia: o app que
|
|
384
|
+
* não lê sessão de caixa não deve negar por um caixa que ninguém conferiu.
|
|
385
|
+
*/
|
|
386
|
+
cashOpen?: boolean;
|
|
387
|
+
floorStale?: boolean;
|
|
388
|
+
/** O «Tentar novamente» da faixa. Sem ele, o botão não aparece. */
|
|
389
|
+
onRetryFloor?: () => void;
|
|
69
390
|
/**
|
|
70
391
|
* The product's own mark, in the operator plate.
|
|
71
392
|
*
|
|
@@ -113,6 +434,19 @@ export interface PosScreenProps {
|
|
|
113
434
|
* — it never accepts a second one.
|
|
114
435
|
*/
|
|
115
436
|
className?: string;
|
|
437
|
+
/**
|
|
438
|
+
* Sob que luz esta tela abre.
|
|
439
|
+
*
|
|
440
|
+
* `'dark'` (o padrão) é o terminal dedicado: ele vive sozinho num balcão, a
|
|
441
|
+
* noite inteira, e o carvão é o fundo certo. `'light'` é o PDV aberto POR
|
|
442
|
+
* CIMA de uma retaguarda clara — ali o operador estava numa tela de papel
|
|
443
|
+
* meio segundo antes, e trocar o fundo faria a chave de modo parecer troca
|
|
444
|
+
* de programa em vez de troca de lado da mesma casa.
|
|
445
|
+
*
|
|
446
|
+
* Não é um segundo design system: as duas peles declaram o MESMO conjunto
|
|
447
|
+
* de `--pos-*`, e toque, ritmo, raio e tempo não mudam entre elas.
|
|
448
|
+
*/
|
|
449
|
+
theme?: 'dark' | 'light';
|
|
116
450
|
/**
|
|
117
451
|
* A MESMA costura do `className`, para o valor que não cabe numa classe.
|
|
118
452
|
*
|
|
@@ -132,8 +466,21 @@ export interface PosScreenProps {
|
|
|
132
466
|
* o operador ir cadastrar mesa que já existe.
|
|
133
467
|
*/
|
|
134
468
|
loading?: boolean;
|
|
469
|
+
/**
|
|
470
|
+
* Quando esta cópia do cardápio saiu do banco (epoch ms).
|
|
471
|
+
*
|
|
472
|
+
* O cardápio do PDV não se relê a cada gesto — ver `catalog-cache` no
|
|
473
|
+
* plugin-menu. O preço disso é que o operador não sabe de quando é o que
|
|
474
|
+
* está vendo, e estes três campos são a resposta: a idade, a revalidação em
|
|
475
|
+
* curso e o gesto de forçar. Sem `onRefreshMenu` nada disso aparece.
|
|
476
|
+
*/
|
|
477
|
+
menuFetchedAt?: number;
|
|
478
|
+
menuRefreshing?: boolean;
|
|
479
|
+
/** A última revalidação falhou; o que está na tela é a cópia anterior. */
|
|
480
|
+
menuStale?: boolean;
|
|
481
|
+
onRefreshMenu?: () => void;
|
|
135
482
|
/** Injected in tests so elapsed times are not wall-clock dependent. */
|
|
136
483
|
now?: number;
|
|
137
484
|
}
|
|
138
|
-
export declare function PosScreen({ config, categories, items, positions, staff, reservations, terminalName, operatorName, connection, operatorId, onAction, onOpenPosition, onFire, onCloseBill, onDispatch, verifyPin, onAuthorised, initialTickets, notice: appNotice, brandMark, brandName, className, style, railTop, unitSwitcher, loading, now, }: PosScreenProps): import("react").JSX.Element;
|
|
485
|
+
export declare function PosScreen({ config, categories, items, positions, staff, reservations, terminalName, operatorName, waitlist, onWaitlistAdd, onWaitlistCall, onWaitlistSeat, onWaitlistNoShow, onWaitlistLookupPhone, onReservationArrived, connection, operatorId, onAction, onOpenPosition, onFire, onCloseBill, onDispatch, verifyPin, onAuthorised, actionGate, onDiscardTicket, initialTickets, notice: appNotice, cashOpen, floorStale, onRetryFloor, brandMark, brandName, className, theme, style, railTop, parties, sharedLabel, paidByPosition, serviceChargeByPosition, floorTool, shiftMode, onPickTarget, onCloseShift, registerEscape, onMoveTable: onMoveTableProp, onUpdateTable, onCreateZone, onUpdateZone, onTogglaMesaNaPraca, onDeleteZone, onArrange, onUpdateArea, floorScope, onConfigureTables, closedTickets, closedLoading, closedSeals, closedSealsFailed, onOpenClosed, onReopenClosed, railPanel, coversByPosition, onEditCover, paymentsByPosition, onEditGuestCount, onActivatePosition, onIdentify, onAddGuest, onIdentifyGuest, onRemoveGuest, onLookupPhone, unitSwitcher, loading, menuFetchedAt, menuRefreshing, menuStale, onRefreshMenu, now, }: PosScreenProps): import("react").JSX.Element;
|
|
139
486
|
//# sourceMappingURL=PosScreen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PosScreen.d.ts","sourceRoot":"","sources":["../../src/screen/PosScreen.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAiE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"PosScreen.d.ts","sourceRoot":"","sources":["../../src/screen/PosScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/** Uma taxa cadastrada pela casa. */
|
|
2
|
+
export interface ServicePreset {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
percent: number;
|
|
6
|
+
isDefault?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Um participante da comanda, para o percentual dele. */
|
|
9
|
+
export interface ServiceGuest {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
/** `null` = usa a taxa da mesa. Vazio NÃO é zero. */
|
|
13
|
+
percent?: number | null;
|
|
14
|
+
/** Quem já quitou não entra: a parte paga fica congelada. */
|
|
15
|
+
settled?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* A taxa que ESTE participante já pagou, em centavos — do `settledBill` que
|
|
18
|
+
* o banco gravou na hora do pagamento, não do que a tela somaria agora.
|
|
19
|
+
* Ver `SettledService` em `servicePreview`.
|
|
20
|
+
*/
|
|
21
|
+
settledServiceCents?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ServiceChargeIntent {
|
|
24
|
+
percent: number;
|
|
25
|
+
/** Só os participantes cujo percentual MUDOU. */
|
|
26
|
+
guestOverrides: Array<{
|
|
27
|
+
guestId: string;
|
|
28
|
+
percent: number | null;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
export declare function ServiceChargeSheet({ currentPercent, eligibleCents, lines, presets, guests, guestsUnavailable, authorizers, error, focusGuestId, onCancel, onConfirm, waivable, onWaive, }: {
|
|
32
|
+
currentPercent: number;
|
|
33
|
+
/** A base ELEGÍVEL, já sem as isenções — não o subtotal. */
|
|
34
|
+
eligibleCents: number;
|
|
35
|
+
/**
|
|
36
|
+
* As linhas ELEGÍVEIS, com o dono de cada uma.
|
|
37
|
+
*
|
|
38
|
+
* Sem elas a prévia inventava a sua própria conta de taxa — a TERCEIRA no
|
|
39
|
+
* PDV, depois da tela e do papel. Ver `previewServiceCents`.
|
|
40
|
+
*/
|
|
41
|
+
lines?: Array<{
|
|
42
|
+
unitPriceCents: number;
|
|
43
|
+
quantity: number;
|
|
44
|
+
discountCents?: number;
|
|
45
|
+
guestId?: string | null;
|
|
46
|
+
}>;
|
|
47
|
+
presets: ServicePreset[];
|
|
48
|
+
/**
|
|
49
|
+
* A saída de emergência está aberta?
|
|
50
|
+
*
|
|
51
|
+
* Só depois de o servidor RECUSAR a mudança por pagamento sem dono, e só
|
|
52
|
+
* quando a intenção era BAIXAR a taxa — é o `offersWaive` do
|
|
53
|
+
* `serviceChargeGuard`. Não é item de menu: é o que resta quando o caminho
|
|
54
|
+
* normal fechou, e oferecê-la antes convidaria a usá-la como atalho para
|
|
55
|
+
* não cobrar.
|
|
56
|
+
*/
|
|
57
|
+
waivable?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* A lista de participantes NÃO pôde ser lida.
|
|
60
|
+
*
|
|
61
|
+
* O V1 avisa e **trava o salvar** (`loadFailed` entra no `disabled` e no
|
|
62
|
+
* early return do confirm). A regra é sobre dinheiro: a taxa incide por
|
|
63
|
+
* participante, e sem saber quem já quitou a folha oferece como disponível
|
|
64
|
+
* quem fechou a conta — mexer no percentual dele mexe num total que alguém
|
|
65
|
+
* já pagou.
|
|
66
|
+
*/
|
|
67
|
+
guestsUnavailable?: boolean;
|
|
68
|
+
/** Quem executa a retirada. Sem ele o aviso não aparece — um botão que não
|
|
69
|
+
* tem para onde ir é pior do que a ausência dele. */
|
|
70
|
+
onWaive?: () => void;
|
|
71
|
+
guests: ServiceGuest[];
|
|
72
|
+
authorizers: Array<{
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* A recusa do SERVIDOR — PIN errado, alçada estourada, comanda travada.
|
|
78
|
+
*
|
|
79
|
+
* Vive na folha, e não num aviso atrás dela: a folha cobre a tela, e um
|
|
80
|
+
* recado que aparece por baixo não existe. Foi o que aconteceu ao portar a
|
|
81
|
+
* conferência de PIN — a autorização era recusada corretamente e o operador
|
|
82
|
+
* via a tela parada, sem uma palavra.
|
|
83
|
+
*/
|
|
84
|
+
error?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Abrir JÁ NAQUELA pessoa.
|
|
87
|
+
*
|
|
88
|
+
* O `13%` ao lado do nome de cada participante abre esta folha. Sem isto ela
|
|
89
|
+
* abria na taxa da mesa, com a lista de todo mundo embaixo — e numa mesa de
|
|
90
|
+
* vinte e duas pessoas o garçom precisava reencontrar, dentro da folha, a
|
|
91
|
+
* linha em que acabou de tocar. O alvo já disse de quem é: a folha começa
|
|
92
|
+
* ali.
|
|
93
|
+
*/
|
|
94
|
+
focusGuestId?: string;
|
|
95
|
+
onCancel: () => void;
|
|
96
|
+
onConfirm: (intent: ServiceChargeIntent) => void;
|
|
97
|
+
}): import("react").JSX.Element;
|
|
98
|
+
//# sourceMappingURL=ServiceChargeSheet.d.ts.map
|