@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,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A parte da taxa que JÁ FOI QUITADA, e por isso não se recalcula.
|
|
3
|
+
*
|
|
4
|
+
* O V1 monta a prévia como `settled_service_charge + Σ(base × percentual)`,
|
|
5
|
+
* onde as bases elegíveis vêm do servidor já SEM quem fechou a conta. Aqui as
|
|
6
|
+
* linhas chegam todas — inclusive as de quem quitou —, então o corte é feito
|
|
7
|
+
* aqui: o dono quitado sai do laço e o valor dele entra somado.
|
|
8
|
+
*
|
|
9
|
+
* Sem isto, baixar a taxa da mesa de 13% para 10% mostrava a fatia de quem já
|
|
10
|
+
* pagou recalculada em 10% — um número menor do que a casa recebeu, sobre
|
|
11
|
+
* dinheiro que já entrou. Latente hoje (o fechamento por participante é a onda
|
|
12
|
+
* seguinte) e escrito agora porque o consumidor está a um passo.
|
|
13
|
+
*/
|
|
14
|
+
export interface SettledService {
|
|
15
|
+
isSettled: (guestId: string) => boolean;
|
|
16
|
+
/** A taxa já quitada, em centavos, congelada. */
|
|
17
|
+
serviceCents: number;
|
|
18
|
+
}
|
|
19
|
+
export interface PreviewLine {
|
|
20
|
+
unitPriceCents: number;
|
|
21
|
+
quantity: number;
|
|
22
|
+
discountCents?: number;
|
|
23
|
+
/** Nulo/ausente = a linha é da MESA. */
|
|
24
|
+
guestId?: string | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Quanto de taxa esta comanda vai cobrar com os percentuais que estão na tela.
|
|
28
|
+
*
|
|
29
|
+
* `percentOf` devolve o percentual do participante — `null` quer dizer «usa o
|
|
30
|
+
* da mesa», que é diferente de zero. Sem `lines` (o app que ainda não as passa)
|
|
31
|
+
* cai na conta simples da mesa inteira, que é o comportamento de uma comanda
|
|
32
|
+
* sem participante e não inventa distribuição nenhuma.
|
|
33
|
+
*/
|
|
34
|
+
export declare function previewServiceCents(lines: readonly PreviewLine[] | undefined, eligibleCents: number, tablePercent: number, percentOf: (guestId: string) => number | null | undefined, settled?: SettledService): number;
|
|
35
|
+
//# sourceMappingURL=servicePreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicePreview.d.ts","sourceRoot":"","sources":["../../src/screen/servicePreview.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;IACvC,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,EACzC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,EACzD,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,CAyBR"}
|
package/dist/screen/session.d.ts
CHANGED
|
@@ -24,7 +24,105 @@ export interface TicketLine {
|
|
|
24
24
|
state?: LineState;
|
|
25
25
|
/** When the kitchen got it. Drives the elapsed clock the expeditor reads. */
|
|
26
26
|
firedAt?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Esta linha NÃO entra na base da taxa de serviço.
|
|
29
|
+
*
|
|
30
|
+
* A casa isenta por produto ou por categoria (couvert, brinde, item de
|
|
31
|
+
* revenda), e a taxa incide sobre o que sobra — não sobre o subtotal. Somar
|
|
32
|
+
* o subtotal inteiro cobra taxa sobre o que a casa disse que não cobra, e o
|
|
33
|
+
* erro só aparece na conta do cliente.
|
|
34
|
+
*
|
|
35
|
+
* Quem marca é o app, que conhece a lista de isenções do inquilino; o
|
|
36
|
+
* pacote só sabe respeitar a marca.
|
|
37
|
+
*/
|
|
38
|
+
exemptFromService?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* O desconto JÁ APLICADO nesta linha, em centavos.
|
|
41
|
+
*
|
|
42
|
+
* Mora na linha e não no rodapé porque é assim que ele foi concedido: o V1
|
|
43
|
+
* desconta item a item, com motivo e autorizador, e o espelho da conta
|
|
44
|
+
* imprime "Desconto: -R$ 5,00" embaixo do item que o recebeu. Um desconto
|
|
45
|
+
* só no total não responde "em quê?", que é a primeira pergunta da mesa.
|
|
46
|
+
*/
|
|
47
|
+
discountCents?: number;
|
|
48
|
+
/**
|
|
49
|
+
* De QUEM é esta linha.
|
|
50
|
+
*
|
|
51
|
+
* `undefined`/`null` quer dizer "da mesa" — o que o grupo dividiu, e que no
|
|
52
|
+
* V1 mora na pastilha "Mesa". Não é o mesmo que "ainda não sei de quem é":
|
|
53
|
+
* é uma resposta, e é a resposta mais comum da noite.
|
|
54
|
+
*/
|
|
55
|
+
guestId?: string | null;
|
|
27
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Uma pessoa sentada nesta comanda.
|
|
59
|
+
*
|
|
60
|
+
* Portado de `beautyplace/src/components/orders/GuestBar.tsx`. O V1 guarda
|
|
61
|
+
* gente de verdade na comanda — nome, telefone e o vínculo com a ficha do
|
|
62
|
+
* cliente — e não um contador. É o que permite dividir a conta por pessoa,
|
|
63
|
+
* dar taxa diferente a um participante e reconhecer quem já esteve na casa.
|
|
64
|
+
*/
|
|
65
|
+
export interface TicketGuest {
|
|
66
|
+
id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
/**
|
|
69
|
+
* O ASSENTO — e é ele que a pastilha mostra, não a inicial do nome.
|
|
70
|
+
*
|
|
71
|
+
* O garçom fala com a mesa pelo número ("o da 3"), e é assim que ele acha a
|
|
72
|
+
* pessoa quando volta com o prato. A inicial só ajuda quem já sabe o nome —
|
|
73
|
+
* e quem já sabe o nome lê o nome, que está escrito ao lado.
|
|
74
|
+
*/
|
|
75
|
+
seatNo?: number;
|
|
76
|
+
phone?: string | null;
|
|
77
|
+
/** Ficha do cliente, quando o telefone encontrou alguém no cadastro. */
|
|
78
|
+
clientId?: string | null;
|
|
79
|
+
/** `null` = usa a taxa da mesa. Vazio NÃO é zero. */
|
|
80
|
+
serviceChargePercent?: number | null;
|
|
81
|
+
/** Quem já quitou a parte dele: congelado, não se recalcula nem se move. */
|
|
82
|
+
settled?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* A CONTA CONGELADA de quem quitou.
|
|
85
|
+
*
|
|
86
|
+
* A mesa continua andando depois que alguém paga: entra item, muda a taxa,
|
|
87
|
+
* some um cancelamento. Recalcular a conta de quem já quitou faria o valor
|
|
88
|
+
* na tela divergir do valor no caixa — e é esse valor que o cliente levou no
|
|
89
|
+
* comprovante. Por isso quem quitou carrega os números que o banco gravou na
|
|
90
|
+
* hora do pagamento, e não os que a tela somaria agora.
|
|
91
|
+
*
|
|
92
|
+
* Ausente quer dizer "nunca foi fechada", que é diferente de zero: zero é
|
|
93
|
+
* uma cortesia integral, e as duas leem a mesma tela.
|
|
94
|
+
*/
|
|
95
|
+
/**
|
|
96
|
+
* Quanto ESTE participante já pôs, em centavos — some quitado ou não.
|
|
97
|
+
*
|
|
98
|
+
* Diferente do `settledBill.paidCents`, que só existe para quem fechou a
|
|
99
|
+
* conta. A transferência bloqueia por QUALQUER pagamento, que é a regra do
|
|
100
|
+
* V1 — ver `guestTransferBlocked`.
|
|
101
|
+
*/
|
|
102
|
+
paidCents?: number;
|
|
103
|
+
settledBill?: {
|
|
104
|
+
itemsCents: number;
|
|
105
|
+
sharedCents: number;
|
|
106
|
+
coverCents: number;
|
|
107
|
+
serviceCents: number;
|
|
108
|
+
discountCents: number;
|
|
109
|
+
totalCents: number;
|
|
110
|
+
paidCents: number;
|
|
111
|
+
at?: string;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Este participante é só uma CADEIRA, ainda sem nome.
|
|
116
|
+
*
|
|
117
|
+
* Regra literal do V1 (`lib/syncGuestsToCount.ts`): sem telefone, sem ficha, e
|
|
118
|
+
* com o nome no formato "Pessoa N". Abrir a mesa para 4 cria quatro cadeiras
|
|
119
|
+
* assim, e a diferença importa na tela: a cadeira anônima ABRE A IDENTIFICAÇÃO
|
|
120
|
+
* ao ser tocada, enquanto a pessoa com nome apenas se seleciona.
|
|
121
|
+
*
|
|
122
|
+
* É a razão de o operador conseguir dizer "a Ana pediu esse" sem cadastrar
|
|
123
|
+
* ninguém antes: o nome entra quando aparece, não na abertura.
|
|
124
|
+
*/
|
|
125
|
+
export declare function isAnonymousGuest(g: Pick<TicketGuest, 'name' | 'phone' | 'clientId'>): boolean;
|
|
28
126
|
export interface Ticket {
|
|
29
127
|
id: string;
|
|
30
128
|
/** When the guests sat. Different from the first item, and both matter: a
|
|
@@ -34,6 +132,8 @@ export interface Ticket {
|
|
|
34
132
|
positionLabel?: string;
|
|
35
133
|
attendantName?: string;
|
|
36
134
|
guests?: number;
|
|
135
|
+
/** As pessoas da comanda, quando a casa as identifica uma a uma. */
|
|
136
|
+
party?: TicketGuest[];
|
|
37
137
|
lines: TicketLine[];
|
|
38
138
|
openedAt: string;
|
|
39
139
|
}
|
|
@@ -41,12 +141,16 @@ export interface TicketTotals {
|
|
|
41
141
|
subtotalCents: number;
|
|
42
142
|
serviceCents: number;
|
|
43
143
|
discountCents: number;
|
|
144
|
+
/** O couvert: entra no total, fora da base da taxa. */
|
|
145
|
+
coverCents: number;
|
|
44
146
|
totalCents: number;
|
|
45
147
|
}
|
|
46
148
|
export type TicketAction = {
|
|
47
149
|
type: 'add_item';
|
|
48
150
|
item: PosItem;
|
|
49
151
|
lineId: string;
|
|
152
|
+
/** De quem é. Ausente = da mesa — o compartilhado, e o caso comum. */
|
|
153
|
+
guestId?: string | null;
|
|
50
154
|
quantity?: number;
|
|
51
155
|
modifiers?: PickedModifier[];
|
|
52
156
|
note?: string;
|
|
@@ -85,6 +189,18 @@ export declare function ticketReducer(ticket: Ticket, action: TicketAction): Tic
|
|
|
85
189
|
export declare function totalsOf(ticket: Ticket, options?: {
|
|
86
190
|
serviceChargePercent?: number;
|
|
87
191
|
discountCents?: number;
|
|
192
|
+
coverCents?: number;
|
|
193
|
+
/**
|
|
194
|
+
* Os participantes, com a taxa própria de cada um.
|
|
195
|
+
*
|
|
196
|
+
* Sem eles a TELA cobra um percentual só, e passa a discordar do PAPEL —
|
|
197
|
+
* que sempre soube dividir por participante (`calculateBillTotals`). Ver
|
|
198
|
+
* a nota da taxa abaixo.
|
|
199
|
+
*/
|
|
200
|
+
party?: readonly {
|
|
201
|
+
id: string;
|
|
202
|
+
serviceChargePercent?: number | null;
|
|
203
|
+
}[];
|
|
88
204
|
}): TicketTotals;
|
|
89
205
|
export declare function emptyTicket(id: string, openedAt: string): Ticket;
|
|
90
206
|
/** Slot for a sale with no position — counter service, walk-up, takeaway. */
|
|
@@ -97,9 +213,100 @@ export type BookAction = {
|
|
|
97
213
|
} | {
|
|
98
214
|
type: 'drop';
|
|
99
215
|
positionId: string;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* As comandas que o POOL conhece, chegando depois da montagem.
|
|
219
|
+
*
|
|
220
|
+
* O livro nasce de um inicializador de `useReducer`, que roda UMA vez — e
|
|
221
|
+
* as comandas abertas levam uma ida ao banco para chegar. Sem esta ação, o
|
|
222
|
+
* livro fica com o que existia no primeiro render (nada) e a mesa aberta
|
|
223
|
+
* abre vazia: o operador lança três itens, envia para a cozinha, volta à
|
|
224
|
+
* mesa e não vê nada. Foi exatamente o que aconteceu.
|
|
225
|
+
*
|
|
226
|
+
* A regra da fusão: o servidor preenche o que o livro NÃO TEM, e nunca
|
|
227
|
+
* substitui uma comanda com linha pendente. Uma linha que o operador acabou
|
|
228
|
+
* de tocar e ainda não enviou só existe aqui; sobrescrevê-la com a versão do
|
|
229
|
+
* banco apagaria o trabalho dele no meio do pedido.
|
|
230
|
+
*/
|
|
231
|
+
| {
|
|
232
|
+
type: 'hydrate';
|
|
233
|
+
tickets: Record<string, TicketLine[]>;
|
|
234
|
+
at: string;
|
|
100
235
|
};
|
|
101
236
|
export declare function bookReducer(book: TicketBook, action: BookAction): TicketBook;
|
|
102
237
|
export declare function ticketAt(book: TicketBook, positionId: string | undefined): Ticket;
|
|
103
238
|
/** Item counts per position — what the floor and the dock read at a glance. */
|
|
104
239
|
export declare function countsOf(book: TicketBook): Record<string, number>;
|
|
240
|
+
/**
|
|
241
|
+
* As linhas da comanda, repartidas por quem vai pagar.
|
|
242
|
+
*
|
|
243
|
+
* Portado de `groupedSentItems()` em `beautyplace/src/components/orders/OrderCart.tsx`.
|
|
244
|
+
* Três regras, e as três são do V1:
|
|
245
|
+
*
|
|
246
|
+
* 1. **Sem participante, sem grupo.** Uma comanda que ninguém identificou é
|
|
247
|
+
* uma lista, não um conjunto de contas — e desenhar um cartão "Mesa" em
|
|
248
|
+
* volta dela só gasta borda.
|
|
249
|
+
* 2. **A "Mesa" vem primeiro**, e só se tiver o que mostrar. É o que o grupo
|
|
250
|
+
* dividiu: a couvert, a travessa, a garrafa.
|
|
251
|
+
* 3. **Participante sem item não aparece.** O lugar dele é a pastilha lá em
|
|
252
|
+
* cima; um cartão vazio no meio da conta sugere que falta alguma coisa.
|
|
253
|
+
*/
|
|
254
|
+
export declare function groupLinesByGuest(lines: TicketLine[], party: TicketGuest[], sharedLabel?: string): Array<{
|
|
255
|
+
guestId: string | null;
|
|
256
|
+
guestName: string | null;
|
|
257
|
+
lines: TicketLine[];
|
|
258
|
+
}>;
|
|
259
|
+
/**
|
|
260
|
+
* O que ESTE participante deve: itens, mais a taxa sobre a parte elegível.
|
|
261
|
+
*
|
|
262
|
+
* O percentual efetivo é o override dele quando existe, e o da mesa quando
|
|
263
|
+
* não — `null` no participante quer dizer "usa o da mesa", nunca zero. Errar
|
|
264
|
+
* isso cobra 0% de quem nunca pediu isenção.
|
|
265
|
+
*/
|
|
266
|
+
export declare function guestSubtotal(lines: TicketLine[], tablePercent: number, guestPercent?: number | null): {
|
|
267
|
+
itemsCents: number;
|
|
268
|
+
discountCents: number;
|
|
269
|
+
eligibleCents: number;
|
|
270
|
+
serviceCents: number;
|
|
271
|
+
totalCents: number;
|
|
272
|
+
};
|
|
273
|
+
/** O estado de quitação de um participante no fechamento. */
|
|
274
|
+
export type SettlementStatus = 'open' | 'partial' | 'settled';
|
|
275
|
+
export interface SettlementItem {
|
|
276
|
+
id: string;
|
|
277
|
+
name: string;
|
|
278
|
+
/** Fracionária quando o item é DA MESA e está rateado. */
|
|
279
|
+
quantity: number;
|
|
280
|
+
totalCents: number;
|
|
281
|
+
shared: boolean;
|
|
282
|
+
}
|
|
283
|
+
export interface Settlement {
|
|
284
|
+
guestId: string | null;
|
|
285
|
+
guestName: string;
|
|
286
|
+
items: SettlementItem[];
|
|
287
|
+
subtotalCents: number;
|
|
288
|
+
serviceCents: number;
|
|
289
|
+
coverCents: number;
|
|
290
|
+
totalCents: number;
|
|
291
|
+
paidCents: number;
|
|
292
|
+
balanceCents: number;
|
|
293
|
+
status: SettlementStatus;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* A conta de cada participante no fechamento — o «Resumo da Conta» do V1.
|
|
297
|
+
*
|
|
298
|
+
* A parte difícil é o RATEIO: o que a mesa dividiu (a travessa, a garrafa) não
|
|
299
|
+
* é de ninguém, e some da conta se cada um só vir o que pediu. O V1 divide
|
|
300
|
+
* pelo número de pessoas e mostra a quantidade FRACIONÁRIA — `0,50× Garrafa de
|
|
301
|
+
* vinho` — porque é isso que faz a divisão se explicar sozinha na mesa. Um
|
|
302
|
+
* valor rateado sem a fração vira "por que estou pagando por isso?".
|
|
303
|
+
*
|
|
304
|
+
* A taxa sai da base elegível de cada um, com o percentual dele quando tem.
|
|
305
|
+
*/
|
|
306
|
+
export declare function settlementsOf(ticket: Ticket, party: TicketGuest[], options?: {
|
|
307
|
+
serviceChargePercent?: number;
|
|
308
|
+
paidCents?: Record<string, number>;
|
|
309
|
+
coverCents?: Record<string, number>;
|
|
310
|
+
sharedLabel?: string;
|
|
311
|
+
}): Settlement[];
|
|
105
312
|
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/screen/session.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAG5D;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAA;AAEzD,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAA;IACtB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,cAAc,EAAE,CAAA;IAC5B,uDAAuD;IACvD,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/screen/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** O subtítulo da folha de TRANSFERÊNCIA, por modo — literal do V1. */
|
|
2
|
+
export declare function transferSubtitle(kind: 'table' | 'guest' | 'items', picked: number): string;
|
|
3
|
+
/** O subtítulo da folha de CANCELAMENTO. */
|
|
4
|
+
export declare const CANCEL_SUBTITLE = "Selecione os itens e quantidades que deseja cancelar.";
|
|
5
|
+
/** O subtítulo da folha de DESCONTO. */
|
|
6
|
+
export declare const DISCOUNT_SUBTITLE = "Gerencie os descontos dos itens da comanda.";
|
|
7
|
+
export declare function authorizeSubtitle(action: string | undefined): string | undefined;
|
|
8
|
+
//# sourceMappingURL=sheetSubtitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheetSubtitle.d.ts","sourceRoot":"","sources":["../../src/screen/sheetSubtitle.ts"],"names":[],"mappings":"AAyBA,uEAAuE;AACvE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,EACjC,MAAM,EAAE,MAAM,GACb,MAAM,CAOR;AAED,4CAA4C;AAC5C,eAAO,MAAM,eAAe,0DAA0D,CAAA;AAEtF,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,gDAAgD,CAAA;AAkB9E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEhF"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export type ShiftRole = 'waiter' | 'busser';
|
|
2
|
+
/** Uma linha da escala vigente. */
|
|
3
|
+
export interface ShiftAssignment {
|
|
4
|
+
id: string;
|
|
5
|
+
areaId?: string | null;
|
|
6
|
+
areaName?: string | null;
|
|
7
|
+
areaColor?: string | null;
|
|
8
|
+
tableId?: string | null;
|
|
9
|
+
tableNumber?: string | number | null;
|
|
10
|
+
tableName?: string | null;
|
|
11
|
+
personId: string;
|
|
12
|
+
personName?: string | null;
|
|
13
|
+
role?: string | null;
|
|
14
|
+
/** `null` em `endsAt` quer dizer PERMANENTE — não "sem informação". */
|
|
15
|
+
startsAt: string;
|
|
16
|
+
endsAt: string | null;
|
|
17
|
+
}
|
|
18
|
+
export declare const ROLE_LABEL: Record<ShiftRole, string>;
|
|
19
|
+
/** Papel que a casa inventou não vira texto cru na tela: vira "Equipe". */
|
|
20
|
+
export declare function roleLabel(role: string | null | undefined): string;
|
|
21
|
+
/** Vigente AGORA: já começou e ainda não terminou. */
|
|
22
|
+
export declare function isCurrent(e: {
|
|
23
|
+
startsAt: string;
|
|
24
|
+
endsAt: string | null;
|
|
25
|
+
}, now?: Date | number): boolean;
|
|
26
|
+
/** "permanente" / "até as 05:00" — nas palavras de quem opera. */
|
|
27
|
+
export declare function describeValidity(e: {
|
|
28
|
+
endsAt: string | null;
|
|
29
|
+
}): string;
|
|
30
|
+
export interface ShiftTarget {
|
|
31
|
+
key: string;
|
|
32
|
+
label: string;
|
|
33
|
+
kind: 'area' | 'table';
|
|
34
|
+
color?: string | null;
|
|
35
|
+
}
|
|
36
|
+
/** De que praça (ou mesa) é esta linha. */
|
|
37
|
+
export declare function targetOf(e: ShiftAssignment): ShiftTarget;
|
|
38
|
+
/**
|
|
39
|
+
* Agrupa por alvo: praças primeiro, mesas depois, cada grupo por nome.
|
|
40
|
+
*
|
|
41
|
+
* A chave é o ID, NUNCA o nome. Duas praças podem se chamar "Salão" — o banco
|
|
42
|
+
* permite — e agrupar por nome juntaria as duas numa só: a escala de uma
|
|
43
|
+
* apareceria como se fosse da outra, e o garçom iria para o lugar errado.
|
|
44
|
+
*/
|
|
45
|
+
export declare function groupByTarget(assignments: ShiftAssignment[]): Array<ShiftTarget & {
|
|
46
|
+
rows: ShiftAssignment[];
|
|
47
|
+
}>;
|
|
48
|
+
/** "05:00:00" do banco vira "05:00" na tela. */
|
|
49
|
+
export declare function shortTime(cutoff: string | null | undefined): string;
|
|
50
|
+
/**
|
|
51
|
+
* Quem atende ESTA mesa, agora.
|
|
52
|
+
*
|
|
53
|
+
* A mesa ganha da praça: escalar alguém para uma mesa específica é a exceção
|
|
54
|
+
* que o gerente faz de propósito — a mesa do aniversário, a mesa do cliente
|
|
55
|
+
* difícil — e uma exceção que perde para a regra geral não é exceção.
|
|
56
|
+
*/
|
|
57
|
+
export declare function staffForTable(assignments: ShiftAssignment[], tableId: string, areaId: string | null | undefined, now?: Date | number): ShiftAssignment[];
|
|
58
|
+
/**
|
|
59
|
+
* O corte do dia pode ser SALVO?
|
|
60
|
+
*
|
|
61
|
+
* O V1 exige `HH:MM` completo (`/^\d{2}:\d{2}$/`) e mantém o botão apagado até
|
|
62
|
+
* lá — um corte meio digitado gravaria um horário que ninguém quis.
|
|
63
|
+
*/
|
|
64
|
+
export declare function canSaveDayCut(valor: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* O aviso DEPOIS de salvar o corte, e só quando há gente escalada terminando hoje.
|
|
67
|
+
*
|
|
68
|
+
* A regra que ele comunica é a que mais surpreende: **mudar o corte não é
|
|
69
|
+
* retroativo.** O fim de quem já está escalado foi congelado na hora em que se
|
|
70
|
+
* escalou, então o corte novo vale para as PRÓXIMAS. Sem esta frase, o gerente
|
|
71
|
+
* muda o corte para consertar a escala de hoje, ela não muda, e ele conclui que
|
|
72
|
+
* o sistema não salvou.
|
|
73
|
+
*/
|
|
74
|
+
export declare function dayCutSavedNotice(temFimHoje: boolean): {
|
|
75
|
+
title: string;
|
|
76
|
+
description: string;
|
|
77
|
+
} | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Como uma mesa se identifica na bandeja «Mesas sem ambiente».
|
|
80
|
+
*
|
|
81
|
+
* O V1 escreve `#{number} · {name}` porque tem a COLUNA `number`. O V2 não a
|
|
82
|
+
* carrega no `PosPosition` e o número saía de `Number(label.replace(/\D/g,''))`
|
|
83
|
+
* — que dá **0** para toda mesa cujo nome não tem dígito.
|
|
84
|
+
*
|
|
85
|
+
* No Pertinho isso apareceu como três linhas `#0 · 1 lug.` indistinguíveis: são
|
|
86
|
+
* «Balcão», «Delivery» e «Cardápio», pseudo-mesas que o V1 usava para guardar
|
|
87
|
+
* comanda de canal. Três linhas com o mesmo nome, e o operador tinha de escolher
|
|
88
|
+
* uma delas para colocar no salão.
|
|
89
|
+
*
|
|
90
|
+
* Sem número, o NOME identifica. `#0` não identifica nada e afirma um número que
|
|
91
|
+
* a mesa não tem.
|
|
92
|
+
*/
|
|
93
|
+
export declare function unassignedLabel(t: {
|
|
94
|
+
number?: number | null;
|
|
95
|
+
name?: string | null;
|
|
96
|
+
}): string;
|
|
97
|
+
//# sourceMappingURL=shift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shift.d.ts","sourceRoot":"","sources":["../../src/screen/shift.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE3C,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAGhD,CAAA;AAED,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEjE;AAED,sDAAsD;AACtD,wBAAgB,SAAS,CACvB,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC9C,GAAG,GAAE,IAAI,GAAG,MAAmB,GAC9B,OAAO,CAIT;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAIrE;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,2CAA2C;AAC3C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,eAAe,GAAG,WAAW,CAaxD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,eAAe,EAAE,GAC7B,KAAK,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAgBlD;AAED,gDAAgD;AAChD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGnE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,eAAe,EAAE,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,GAAG,GAAE,IAAI,GAAG,MAAmB,GAC9B,eAAe,EAAE,CAKnB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,OAAO,GACnD;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAMnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAK3F"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Qual conta o toque no canal REABRE, em vez de começar outra.
|
|
3
|
+
*
|
|
4
|
+
* Porte literal de `specialOrderReuse.ts` do V1 — uma regra para os três
|
|
5
|
+
* canais sem mesa, porque antes eram lidas como três:
|
|
6
|
+
*
|
|
7
|
+
* - **BALCÃO** reaproveita a conta DO DIA. O reaproveitamento é o que mantém o
|
|
8
|
+
* número do balcão estável ao longo de um turno, mas no V1 ele não tinha fim:
|
|
9
|
+
* uma conta deixada aberta em abril continuava sendo a que o canal reabria em
|
|
10
|
+
* setembro, então a venda seguinte entrava numa conta com itens de outras
|
|
11
|
+
* pessoas, mandados para a cozinha em dias que ninguém lembra, e ninguém
|
|
12
|
+
* nunca a fechava.
|
|
13
|
+
* - **RETIRADA** reaproveita só a VAZIA. Cada retirada é um cliente diferente,
|
|
14
|
+
* então duas com item nunca se juntam — mas tocar no canal duas vezes não
|
|
15
|
+
* pode deixar uma conta de R$ 0,00 para trás.
|
|
16
|
+
* - **DELIVERY** nunca reaproveita: começa o pedido de outro cliente, e pedido
|
|
17
|
+
* importado de canal não é candidato.
|
|
18
|
+
*
|
|
19
|
+
* A unidade entra em todas: numa conta com várias casas, o balcão da casa
|
|
20
|
+
* seguinte é outra conta.
|
|
21
|
+
*
|
|
22
|
+
* Conta que cai fora da regra NÃO é escondida nem fechada — fica na bandeja com
|
|
23
|
+
* a idade dela, porque conta aberta é dinheiro que não entrou. Ela só deixa de
|
|
24
|
+
* ser aquela em que a próxima venda cai.
|
|
25
|
+
*
|
|
26
|
+
* O vocabulário é o do V2: a coluna é `channel` (`balcao` / `retirada` /
|
|
27
|
+
* `delivery`), não o `type` do V1, e o fim de vida é `completed`, não `closed`.
|
|
28
|
+
* A REGRA é a mesma, palavra por palavra.
|
|
29
|
+
*/
|
|
30
|
+
export type SpecialChannel = 'balcao' | 'retirada' | 'delivery';
|
|
31
|
+
/** O pedaço de `orders` que a regra precisa — a comanda do PDV satisfaz. */
|
|
32
|
+
export interface ReusableOrder {
|
|
33
|
+
id: string;
|
|
34
|
+
channel: string;
|
|
35
|
+
/** Comanda de mesa nunca é candidata, mesmo que o canal bata. */
|
|
36
|
+
tableId?: string | null;
|
|
37
|
+
unitId?: string | null;
|
|
38
|
+
status: string;
|
|
39
|
+
totalCents: number;
|
|
40
|
+
openedAt: string;
|
|
41
|
+
}
|
|
42
|
+
/** Meia-noite local do dia de `now` — o começo da janela do balcão. */
|
|
43
|
+
export declare function dayStart(now: Date): number;
|
|
44
|
+
export declare function findReusableSpecialOrder(orders: ReusableOrder[], channel: SpecialChannel, unitId: string | null | undefined, now: Date): ReusableOrder | undefined;
|
|
45
|
+
//# sourceMappingURL=specialReuse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specialReuse.d.ts","sourceRoot":"","sources":["../../src/screen/specialReuse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;AAE/D,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAE1C;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EAAE,EACvB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,GAAG,EAAE,IAAI,GACR,aAAa,GAAG,SAAS,CAgB3B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PointerEvent as ReactPointerEvent } from 'react';
|
|
2
|
+
import type { Point } from './floorGeometry';
|
|
3
|
+
export interface DragHandlers {
|
|
4
|
+
/** A cada movimento: o ponto atual e o deslocamento desde o início. */
|
|
5
|
+
onMove?: (point: Point, delta: Point) => void;
|
|
6
|
+
/** Ao soltar. `moved = false` é um CLIQUE (seleção), não um arrasto. */
|
|
7
|
+
onEnd: (point: Point, delta: Point, moved: boolean) => void;
|
|
8
|
+
/** O navegador tomou o gesto (virou rolagem): nada se grava. */
|
|
9
|
+
onCancel?: () => void;
|
|
10
|
+
}
|
|
11
|
+
/** Abaixo disto, em metros, o gesto é clique e não arrasto. */
|
|
12
|
+
export declare const DRAG_THRESHOLD_M = 0.05;
|
|
13
|
+
/** O gesto andou o bastante para ser um arrasto? */
|
|
14
|
+
export declare function isDrag(delta: Point, threshold?: number): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Arrasto em coordenadas de MUNDO. Recebe o conversor do palco e devolve o
|
|
17
|
+
* iniciador para o `onPointerDown` do glifo.
|
|
18
|
+
*
|
|
19
|
+
* Os ouvintes de movimento e soltura ficam na WINDOW, não no elemento: sem
|
|
20
|
+
* isso o arrasto morre assim que o ponteiro sai do glifo — ou do SVG —, e a
|
|
21
|
+
* mesa para no meio do caminho.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createSvgDrag(toWorld: (clientX: number, clientY: number) => Point): (e: ReactPointerEvent, handlers: DragHandlers) => boolean;
|
|
24
|
+
//# sourceMappingURL=svgDrag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svgDrag.d.ts","sourceRoot":"","sources":["../../src/screen/svgDrag.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC7C,wEAAwE;IACxE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3D,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAEpC,oDAAoD;AACpD,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,SAAmB,GAAG,OAAO,CAE1E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,KAAK,IAE1D,GAAG,iBAAiB,EAAE,UAAU,YAAY,KAAG,OAAO,CA2C7E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type TableTone = 'livre' | 'ocupada' | 'atrasada' | 'parada' | 'reservada' | 'manutencao';
|
|
2
|
+
/** A partir de quantos minutos de comanda aberta a mesa passa a «atrasada». */
|
|
3
|
+
export declare const ATRASO_MINUTOS = 60;
|
|
4
|
+
/** A partir de quantos minutos SEM PEDIDO NOVO a mesa passa a «parada». */
|
|
5
|
+
export declare const SEM_PEDIDO_MINUTOS = 60;
|
|
6
|
+
export interface TableToneInput {
|
|
7
|
+
/** O `status` do cadastro: available | occupied | reserved | maintenance. */
|
|
8
|
+
status?: string | null;
|
|
9
|
+
/** Há comanda aberta nesta mesa. */
|
|
10
|
+
hasActiveOrder: boolean;
|
|
11
|
+
/** Abertura da comanda — é o que decide «atrasada». */
|
|
12
|
+
openedAt?: string | null;
|
|
13
|
+
/**
|
|
14
|
+
* Último item lançado — é o que decide «parada».
|
|
15
|
+
*
|
|
16
|
+
* `undefined` = a tela NÃO SABE (não carregou itens), e aí a mesa nunca vira
|
|
17
|
+
* «parada» por falta de dado. `null` = sabe que não há item nenhum, e aí
|
|
18
|
+
* conta desde a abertura: mesa aberta há uma hora sem pedir nada também é
|
|
19
|
+
* parada. A diferença entre os dois é a diferença entre ignorância e fato.
|
|
20
|
+
*/
|
|
21
|
+
lastOrderAt?: string | null;
|
|
22
|
+
/** «Agora», injetado, para a mesa virar atrasada sem depender de outro
|
|
23
|
+
* evento provocar um re-render. */
|
|
24
|
+
now?: number;
|
|
25
|
+
}
|
|
26
|
+
export declare function deriveTableTone(input: TableToneInput): TableTone;
|
|
27
|
+
/** «Tem gente sentada»: os três tons de comanda aberta. */
|
|
28
|
+
export declare function isTomOcupado(tone: TableTone): boolean;
|
|
29
|
+
/** O rótulo que a pastilha do cartão mostra, na língua da casa. */
|
|
30
|
+
export declare const TONE_LABEL: Record<TableTone, string>;
|
|
31
|
+
/** «Fechar conta» mora por cima do tom, não no lugar dele. */
|
|
32
|
+
export declare const CONTA_PEDIDA_LABEL = "Fechar conta";
|
|
33
|
+
/**
|
|
34
|
+
* A mesma linguagem de cor, para o SVG da planta.
|
|
35
|
+
*
|
|
36
|
+
* Portado de `TONE_SVG` no `tableTone.ts` do V1. A grade pinta com classes; a
|
|
37
|
+
* planta desenha num `<svg>`, onde `fill` e `stroke` precisam de um valor. São
|
|
38
|
+
* os MESMOS tons — o operador que aprendeu a cor na grade não reaprende na
|
|
39
|
+
* planta —, escritos nos tokens do PDV.
|
|
40
|
+
*/
|
|
41
|
+
export interface ToneSvg {
|
|
42
|
+
fill: string;
|
|
43
|
+
stroke: string;
|
|
44
|
+
label: string;
|
|
45
|
+
/** As cadeiras em volta do tampo, sempre mais apagadas que ele. */
|
|
46
|
+
chair: string;
|
|
47
|
+
}
|
|
48
|
+
export declare const TONE_SVG: Record<TableTone, ToneSvg>;
|
|
49
|
+
/**
|
|
50
|
+
* O anel de «Fechar conta» na planta — sólido, contra o tracejado da seleção.
|
|
51
|
+
*
|
|
52
|
+
* **Vermelho**, e é o mesmo vermelho da grade. Estava azul (`--pos-info`), e com
|
|
53
|
+
* isso a MESMA mesa ganhava anel vermelho na grade e azul na planta: quem
|
|
54
|
+
* aprendeu a cor de um lado tinha de reaprender do outro, que é exatamente o que
|
|
55
|
+
* a nota do `TONE_SVG` acima diz não pode acontecer.
|
|
56
|
+
*
|
|
57
|
+
* O V1 usa `hsl(var(--destructive))`, e o `--destructive` dele também pinta o tom
|
|
58
|
+
* `parada`. A colisão é deliberada: o que distingue o pedido de conta não é o
|
|
59
|
+
* matiz, é a GEOMETRIA — 2px de anel com 1px de folga, por cima de qualquer tom.
|
|
60
|
+
* Dar-lhe um matiz próprio inventaria uma quinta cor no salão para dizer o que o
|
|
61
|
+
* anel já diz.
|
|
62
|
+
*/
|
|
63
|
+
export declare const CONTA_PEDIDA_SVG = "var(--pos-danger)";
|
|
64
|
+
//# sourceMappingURL=tableTone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableTone.d.ts","sourceRoot":"","sources":["../../src/screen/tableTone.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,SAAS,GACT,UAAU,GACV,QAAQ,GACR,WAAW,GACX,YAAY,CAAA;AAEhB,+EAA+E;AAC/E,eAAO,MAAM,cAAc,KAAK,CAAA;AAEhC,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAEpC,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,oCAAoC;IACpC,cAAc,EAAE,OAAO,CAAA;IACvB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B;wCACoC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAahE;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAErD;AAED,mEAAmE;AACnE,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAOhD,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,iBAAiB,CAAA;AAEhD;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAqC/C,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type TransferDoneKind = 'table' | 'guest' | 'items';
|
|
2
|
+
/**
|
|
3
|
+
* A frase de sucesso da transferência.
|
|
4
|
+
*
|
|
5
|
+
* `label` é a comanda de ORIGEM — «Mesa 189» ou «Comanda de balcão», o
|
|
6
|
+
* `sourceOrderLabel` do V1.
|
|
7
|
+
*/
|
|
8
|
+
export declare function transferDoneMessage(kind: TransferDoneKind, { label, count }?: {
|
|
9
|
+
label?: string;
|
|
10
|
+
count?: number;
|
|
11
|
+
}): string;
|
|
12
|
+
//# sourceMappingURL=transferDone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferDone.d.ts","sourceRoot":"","sources":["../../src/screen/transferDone.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAE1D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,gBAAgB,EACtB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,MAAM,CASR"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** O selo do V1, palavra por palavra. */
|
|
2
|
+
export declare const JA_PAGOU = "J\u00E1 pagou";
|
|
3
|
+
export interface TransferGuestMoney {
|
|
4
|
+
/** A conta dele foi fechada e congelada. */
|
|
5
|
+
settled?: boolean;
|
|
6
|
+
/** Quanto ele já pôs, em centavos — qualquer valor acima de zero basta. */
|
|
7
|
+
paidCents?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Este participante pode se mudar de mesa?
|
|
11
|
+
*
|
|
12
|
+
* Quitado OU com qualquer pagamento = não. Zero pago e sem quitação = sim, e
|
|
13
|
+
* `undefined` conta como zero: a ausência de pagamento é o estado normal de
|
|
14
|
+
* quase todo participante, e travar a transferência por falta de dado
|
|
15
|
+
* impediria o gesto normal da casa.
|
|
16
|
+
*/
|
|
17
|
+
export declare function guestTransferBlocked(g: TransferGuestMoney): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* A frase para quando o participante ESCOLHIDO já pagou.
|
|
20
|
+
*
|
|
21
|
+
* O V1 não tem esta mensagem — ele só desabilita o botão. A segunda trava
|
|
22
|
+
* existe porque desabilitar depende de a lista estar fresca: a seleção pode ter
|
|
23
|
+
* sido feita antes de o pagamento chegar (outro aparelho cobrando a pessoa no
|
|
24
|
+
* mesmo minuto), e aí o `disabled` aparece tarde, com o nome já escolhido.
|
|
25
|
+
*
|
|
26
|
+
* As palavras são as do V1 («Já pagou»), com o que fazer em seguida — porque
|
|
27
|
+
* uma ação travada que não diz o motivo manda o garçom clicar de novo.
|
|
28
|
+
*/
|
|
29
|
+
export declare const GUEST_JA_PAGOU_IMPEDE = "Este participante j\u00E1 pagou, e quem p\u00F4s dinheiro na conta n\u00E3o muda de mesa. Feche a parte dele ou transfira os itens.";
|
|
30
|
+
//# sourceMappingURL=transferGuestBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferGuestBlock.d.ts","sourceRoot":"","sources":["../../src/screen/transferGuestBlock.ts"],"names":[],"mappings":"AAyBA,yCAAyC;AACzC,eAAO,MAAM,QAAQ,kBAAa,CAAA;AAElC,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAEnE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,wIACsF,CAAA"}
|