@fayz-ai/pos 0.20.5 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/app/config.d.ts +216 -4
  2. package/dist/app/config.d.ts.map +1 -1
  3. package/dist/index.d.ts +101 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +10849 -2517
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/useFloorBell.d.ts +21 -0
  8. package/dist/lib/useFloorBell.d.ts.map +1 -0
  9. package/dist/screen/AreaInspector.d.ts +19 -0
  10. package/dist/screen/AreaInspector.d.ts.map +1 -0
  11. package/dist/screen/AreaOutlineSheet.d.ts +15 -0
  12. package/dist/screen/AreaOutlineSheet.d.ts.map +1 -0
  13. package/dist/screen/ArrangeSheet.d.ts +8 -0
  14. package/dist/screen/ArrangeSheet.d.ts.map +1 -0
  15. package/dist/screen/AuthorizeSheet.d.ts +73 -0
  16. package/dist/screen/AuthorizeSheet.d.ts.map +1 -0
  17. package/dist/screen/CancelSheet.d.ts +35 -0
  18. package/dist/screen/CancelSheet.d.ts.map +1 -0
  19. package/dist/screen/ClosedPanel.d.ts +55 -0
  20. package/dist/screen/ClosedPanel.d.ts.map +1 -0
  21. package/dist/screen/ConfirmSheet.d.ts +12 -0
  22. package/dist/screen/ConfirmSheet.d.ts.map +1 -0
  23. package/dist/screen/CourtesySheet.d.ts +23 -0
  24. package/dist/screen/CourtesySheet.d.ts.map +1 -0
  25. package/dist/screen/CoverChargeSheet.d.ts +16 -0
  26. package/dist/screen/CoverChargeSheet.d.ts.map +1 -0
  27. package/dist/screen/DeliveryBoard.d.ts +13 -0
  28. package/dist/screen/DeliveryBoard.d.ts.map +1 -1
  29. package/dist/screen/DiscountSheet.d.ts +85 -0
  30. package/dist/screen/DiscountSheet.d.ts.map +1 -0
  31. package/dist/screen/DispatchRail.d.ts.map +1 -1
  32. package/dist/screen/FloorScopeBanner.d.ts +11 -0
  33. package/dist/screen/FloorScopeBanner.d.ts.map +1 -0
  34. package/dist/screen/GuestBar.d.ts +51 -0
  35. package/dist/screen/GuestBar.d.ts.map +1 -0
  36. package/dist/screen/GuestCountSheet.d.ts +16 -0
  37. package/dist/screen/GuestCountSheet.d.ts.map +1 -0
  38. package/dist/screen/IdentitySheet.d.ts.map +1 -1
  39. package/dist/screen/ModifierSheet.d.ts.map +1 -1
  40. package/dist/screen/OpenTableSheet.d.ts.map +1 -1
  41. package/dist/screen/PinSheet.d.ts.map +1 -1
  42. package/dist/screen/PlanStage.d.ts +130 -0
  43. package/dist/screen/PlanStage.d.ts.map +1 -0
  44. package/dist/screen/PosScreen.d.ts +350 -3
  45. package/dist/screen/PosScreen.d.ts.map +1 -1
  46. package/dist/screen/ServiceChargeSheet.d.ts +98 -0
  47. package/dist/screen/ServiceChargeSheet.d.ts.map +1 -0
  48. package/dist/screen/SheetLayer.d.ts +8 -0
  49. package/dist/screen/SheetLayer.d.ts.map +1 -0
  50. package/dist/screen/ShiftPanel.d.ts +45 -0
  51. package/dist/screen/ShiftPanel.d.ts.map +1 -0
  52. package/dist/screen/ShortcutsOverlay.d.ts.map +1 -1
  53. package/dist/screen/SplitSheet.d.ts.map +1 -1
  54. package/dist/screen/TableInspector.d.ts +22 -0
  55. package/dist/screen/TableInspector.d.ts.map +1 -0
  56. package/dist/screen/TicketRail.d.ts +175 -2
  57. package/dist/screen/TicketRail.d.ts.map +1 -1
  58. package/dist/screen/TransferHistorySheet.d.ts +17 -0
  59. package/dist/screen/TransferHistorySheet.d.ts.map +1 -0
  60. package/dist/screen/TransferSheet.d.ts +65 -0
  61. package/dist/screen/TransferSheet.d.ts.map +1 -0
  62. package/dist/screen/UnassignedTables.d.ts +14 -0
  63. package/dist/screen/UnassignedTables.d.ts.map +1 -0
  64. package/dist/screen/WaitlistEntrySheet.d.ts +23 -0
  65. package/dist/screen/WaitlistEntrySheet.d.ts.map +1 -0
  66. package/dist/screen/WaitlistView.d.ts +41 -0
  67. package/dist/screen/WaitlistView.d.ts.map +1 -0
  68. package/dist/screen/ZoneDrawLayer.d.ts +11 -0
  69. package/dist/screen/ZoneDrawLayer.d.ts.map +1 -0
  70. package/dist/screen/ZoneHandles.d.ts +18 -0
  71. package/dist/screen/ZoneHandles.d.ts.map +1 -0
  72. package/dist/screen/ZoneInspector.d.ts +27 -0
  73. package/dist/screen/ZoneInspector.d.ts.map +1 -0
  74. package/dist/screen/accountFit.d.ts +17 -0
  75. package/dist/screen/accountFit.d.ts.map +1 -0
  76. package/dist/screen/accountPick.d.ts +16 -0
  77. package/dist/screen/accountPick.d.ts.map +1 -0
  78. package/dist/screen/areaOutline.d.ts +59 -0
  79. package/dist/screen/areaOutline.d.ts.map +1 -0
  80. package/dist/screen/arrangePlan.d.ts +109 -0
  81. package/dist/screen/arrangePlan.d.ts.map +1 -0
  82. package/dist/screen/arrangeTables.d.ts +69 -0
  83. package/dist/screen/arrangeTables.d.ts.map +1 -0
  84. package/dist/screen/billPrint.d.ts +66 -0
  85. package/dist/screen/billPrint.d.ts.map +1 -0
  86. package/dist/screen/cancelCheck.d.ts +31 -0
  87. package/dist/screen/cancelCheck.d.ts.map +1 -0
  88. package/dist/screen/cardBrand.d.ts +44 -0
  89. package/dist/screen/cardBrand.d.ts.map +1 -0
  90. package/dist/screen/cashGate.d.ts +31 -0
  91. package/dist/screen/cashGate.d.ts.map +1 -0
  92. package/dist/screen/catalogEmpty.d.ts +13 -0
  93. package/dist/screen/catalogEmpty.d.ts.map +1 -0
  94. package/dist/screen/categoryIcon.d.ts +4 -0
  95. package/dist/screen/categoryIcon.d.ts.map +1 -0
  96. package/dist/screen/channelSlot.d.ts +93 -0
  97. package/dist/screen/channelSlot.d.ts.map +1 -0
  98. package/dist/screen/comandaChannel.d.ts +25 -0
  99. package/dist/screen/comandaChannel.d.ts.map +1 -0
  100. package/dist/screen/courtesyGate.d.ts +31 -0
  101. package/dist/screen/courtesyGate.d.ts.map +1 -0
  102. package/dist/screen/coverQuantities.d.ts +46 -0
  103. package/dist/screen/coverQuantities.d.ts.map +1 -0
  104. package/dist/screen/deliveryColumns.d.ts +54 -0
  105. package/dist/screen/deliveryColumns.d.ts.map +1 -0
  106. package/dist/screen/discardCheck.d.ts +8 -0
  107. package/dist/screen/discardCheck.d.ts.map +1 -0
  108. package/dist/screen/discountBook.d.ts +40 -0
  109. package/dist/screen/discountBook.d.ts.map +1 -0
  110. package/dist/screen/discountCap.d.ts +9 -0
  111. package/dist/screen/discountCap.d.ts.map +1 -0
  112. package/dist/screen/discountSelectable.d.ts +20 -0
  113. package/dist/screen/discountSelectable.d.ts.map +1 -0
  114. package/dist/screen/dockScope.d.ts +9 -0
  115. package/dist/screen/dockScope.d.ts.map +1 -0
  116. package/dist/screen/fiscalSeal.d.ts +40 -0
  117. package/dist/screen/fiscalSeal.d.ts.map +1 -0
  118. package/dist/screen/floorEmpty.d.ts +20 -0
  119. package/dist/screen/floorEmpty.d.ts.map +1 -0
  120. package/dist/screen/floorGeometry.d.ts +295 -0
  121. package/dist/screen/floorGeometry.d.ts.map +1 -0
  122. package/dist/screen/floorScope.d.ts +49 -0
  123. package/dist/screen/floorScope.d.ts.map +1 -0
  124. package/dist/screen/floorStale.d.ts +5 -0
  125. package/dist/screen/floorStale.d.ts.map +1 -0
  126. package/dist/screen/guestCount.d.ts +28 -0
  127. package/dist/screen/guestCount.d.ts.map +1 -0
  128. package/dist/screen/guestCountOnClose.d.ts +11 -0
  129. package/dist/screen/guestCountOnClose.d.ts.map +1 -0
  130. package/dist/screen/ledgerMethod.d.ts +11 -0
  131. package/dist/screen/ledgerMethod.d.ts.map +1 -0
  132. package/dist/screen/menuFreshness.d.ts +18 -0
  133. package/dist/screen/menuFreshness.d.ts.map +1 -0
  134. package/dist/screen/menuSearch.d.ts +55 -0
  135. package/dist/screen/menuSearch.d.ts.map +1 -0
  136. package/dist/screen/modifierCheck.d.ts +23 -0
  137. package/dist/screen/modifierCheck.d.ts.map +1 -0
  138. package/dist/screen/openChannelCounts.d.ts +26 -0
  139. package/dist/screen/openChannelCounts.d.ts.map +1 -0
  140. package/dist/screen/orderRef.d.ts +17 -0
  141. package/dist/screen/orderRef.d.ts.map +1 -0
  142. package/dist/screen/paymentList.d.ts +26 -0
  143. package/dist/screen/paymentList.d.ts.map +1 -0
  144. package/dist/screen/pinGate.d.ts +28 -0
  145. package/dist/screen/pinGate.d.ts.map +1 -0
  146. package/dist/screen/reopen.d.ts +36 -0
  147. package/dist/screen/reopen.d.ts.map +1 -0
  148. package/dist/screen/searchSubject.d.ts +22 -0
  149. package/dist/screen/searchSubject.d.ts.map +1 -0
  150. package/dist/screen/serviceChargeCheck.d.ts +29 -0
  151. package/dist/screen/serviceChargeCheck.d.ts.map +1 -0
  152. package/dist/screen/serviceChargeGuard.d.ts +145 -0
  153. package/dist/screen/serviceChargeGuard.d.ts.map +1 -0
  154. package/dist/screen/servicePreview.d.ts +35 -0
  155. package/dist/screen/servicePreview.d.ts.map +1 -0
  156. package/dist/screen/session.d.ts +207 -0
  157. package/dist/screen/session.d.ts.map +1 -1
  158. package/dist/screen/sheetSubtitle.d.ts +8 -0
  159. package/dist/screen/sheetSubtitle.d.ts.map +1 -0
  160. package/dist/screen/shift.d.ts +97 -0
  161. package/dist/screen/shift.d.ts.map +1 -0
  162. package/dist/screen/specialReuse.d.ts +45 -0
  163. package/dist/screen/specialReuse.d.ts.map +1 -0
  164. package/dist/screen/svgDrag.d.ts +24 -0
  165. package/dist/screen/svgDrag.d.ts.map +1 -0
  166. package/dist/screen/tableTone.d.ts +64 -0
  167. package/dist/screen/tableTone.d.ts.map +1 -0
  168. package/dist/screen/transferDone.d.ts +12 -0
  169. package/dist/screen/transferDone.d.ts.map +1 -0
  170. package/dist/screen/transferGuestBlock.d.ts +30 -0
  171. package/dist/screen/transferGuestBlock.d.ts.map +1 -0
  172. package/dist/screen/transferPick.d.ts +51 -0
  173. package/dist/screen/transferPick.d.ts.map +1 -0
  174. package/dist/screen/views.d.ts +139 -4
  175. package/dist/screen/views.d.ts.map +1 -1
  176. package/dist/screen/waitlist.d.ts +211 -0
  177. package/dist/screen/waitlist.d.ts.map +1 -0
  178. package/dist/screen/writeFailure.d.ts +22 -0
  179. package/dist/screen/writeFailure.d.ts.map +1 -0
  180. package/dist/screen/zoneDraft.d.ts +75 -0
  181. package/dist/screen/zoneDraft.d.ts.map +1 -0
  182. package/dist/screen/zoneEditing.d.ts +56 -0
  183. package/dist/screen/zoneEditing.d.ts.map +1 -0
  184. package/dist/styles.css +2697 -200
  185. package/package.json +2 -2
@@ -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":"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"}
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"}
@@ -0,0 +1,51 @@
1
+ /** A chave de dono de uma linha. Sem participante, é a da mesa. */
2
+ export declare const SHARED_OWNER = "__mesa__";
3
+ export declare function ownerOfLine(line: {
4
+ guestId?: string | null;
5
+ }): string;
6
+ export interface PickOutcome {
7
+ /** A seleção depois do clique — a MESMA de antes quando foi recusado. */
8
+ picked: Set<string>;
9
+ /** A frase do V1, quando o clique foi recusado. */
10
+ refusal?: string;
11
+ }
12
+ /**
13
+ * Marca ou desmarca uma linha, aplicando a regra do dono único.
14
+ *
15
+ * Desmarcar NUNCA é recusado: sair de uma seleção inválida não pode depender de
16
+ * uma seleção válida.
17
+ */
18
+ export declare function pickLineForTransfer(picked: Set<string>, lines: Array<{
19
+ id: string;
20
+ guestId?: string | null;
21
+ }>, lineId: string): PickOutcome;
22
+ export declare const NO_GUESTS_HINT = "Dispon\u00EDvel em comandas com participantes";
23
+ /** O subtítulo do modo, ou o motivo de ele estar fechado. */
24
+ export declare function transferModeHint(hint: string, needsGuests: boolean | undefined, guestCount: number): {
25
+ text: string;
26
+ blocked: boolean;
27
+ };
28
+ /** O rótulo do destino compartilhado. É o mesmo do agrupamento. */
29
+ export declare const SHARED_LABEL = "Mesa";
30
+ export interface TransferDestination {
31
+ /** `SHARED_OWNER` quando é a mesa. */
32
+ value: string;
33
+ label: string;
34
+ }
35
+ /**
36
+ * Os destinos possíveis para as linhas selecionadas.
37
+ *
38
+ * `source` é o dono da seleção — `undefined` enquanto nada foi marcado, e aí a
39
+ * lista sai inteira: não há origem para excluir ainda.
40
+ */
41
+ export declare function transferDestinations(guests: Array<{
42
+ id: string;
43
+ label: string;
44
+ settled?: boolean;
45
+ }>, source: string | undefined): TransferDestination[];
46
+ /** O dono da seleção atual, ou `undefined` se nada está marcado. */
47
+ export declare function selectionOwner(picked: Set<string> | string[], lines: Array<{
48
+ id: string;
49
+ guestId?: string | null;
50
+ }>): string | undefined;
51
+ //# sourceMappingURL=transferPick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferPick.d.ts","sourceRoot":"","sources":["../../src/screen/transferPick.ts"],"names":[],"mappings":"AAkBA,mEAAmE;AACnE,eAAO,MAAM,YAAY,aAAa,CAAA;AAEtC,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAErE;AAED,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EACrD,MAAM,EAAE,MAAM,GACb,WAAW,CAmBb;AAmBD,eAAO,MAAM,cAAc,kDAA6C,CAAA;AAExE,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAGpC;AA+BD,mEAAmE;AACnE,eAAO,MAAM,YAAY,SAAS,CAAA;AAElC,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAC/D,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,mBAAmB,EAAE,CAQvB;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,EAC9B,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GACpD,MAAM,GAAG,SAAS,CAMpB"}