@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.
- 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 +10849 -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 +25 -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,46 @@
|
|
|
1
|
+
export interface CoverGuestQty {
|
|
2
|
+
guestId: string;
|
|
3
|
+
/** O nome que aparece na linha. */
|
|
4
|
+
label: string;
|
|
5
|
+
qty: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A quantidade que o V1 aceita.
|
|
9
|
+
*
|
|
10
|
+
* `Math.max(0, qty)` é literal dele. O piso em zero é o que permite tirar UMA
|
|
11
|
+
* pessoa do couvert sem tirar o couvert da mesa — que é o caso da criança.
|
|
12
|
+
*/
|
|
13
|
+
export declare function normalizeCoverQty(value: unknown): number;
|
|
14
|
+
/** Quantas unidades no total — o número que o V1 mostra no rodapé. */
|
|
15
|
+
export declare function coverTotalQty(linhas: ReadonlyArray<{
|
|
16
|
+
qty: number;
|
|
17
|
+
}>): number;
|
|
18
|
+
/** Quanto a mesa paga de couvert, em centavos. */
|
|
19
|
+
export declare function coverTotalCents(unitCents: number, linhas: ReadonlyArray<{
|
|
20
|
+
qty: number;
|
|
21
|
+
}>): number;
|
|
22
|
+
/**
|
|
23
|
+
* Dá para salvar?
|
|
24
|
+
*
|
|
25
|
+
* **Zero em TODOS é salvável**, e de propósito: é como se zera um couvert
|
|
26
|
+
* lançado por engano sem cancelar a linha. O que não se salva é uma lista
|
|
27
|
+
* vazia — aí não há participante, e o gesto não tem sujeito.
|
|
28
|
+
*/
|
|
29
|
+
export declare function coverQtyBlock(linhas: ReadonlyArray<CoverGuestQty>): string | null;
|
|
30
|
+
/**
|
|
31
|
+
* A quantidade com que a folha ABRE, quando o couvert nunca foi repartido.
|
|
32
|
+
*
|
|
33
|
+
* O V1 usa a política, não um: `isIdentified ? qty_per_identified : qty_per_
|
|
34
|
+
* unidentified`, com `?? 1` em cada (`OrdersDashboard.tsx:553-561`). É a mesma
|
|
35
|
+
* conta que a RPC do V2 faz para somar o total — então abrir com «1 em cada»
|
|
36
|
+
* ofereceria ao operador um ponto de partida que discorda do que a casa cobra.
|
|
37
|
+
*
|
|
38
|
+
* O caso que expõe isso é a casa que cobra de quem tem nome e NÃO cobra de quem
|
|
39
|
+
* não se identificou: `qtyUnidentified` é zero, e «1 em cada» inventaria uma
|
|
40
|
+
* cobrança.
|
|
41
|
+
*/
|
|
42
|
+
export declare function openingCoverQty(identificado: boolean, policy?: {
|
|
43
|
+
qtyIdentified?: number;
|
|
44
|
+
qtyUnidentified?: number;
|
|
45
|
+
}): number;
|
|
46
|
+
//# sourceMappingURL=coverQuantities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverQuantities.d.ts","sourceRoot":"","sources":["../../src/screen/coverQuantities.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIxD;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAE5E;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAEjG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,MAAM,GAAG,IAAI,CAGjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,OAAO,EACrB,MAAM,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,MAAM,CAKR"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O vocabulário de estado do V1, literal.
|
|
3
|
+
*
|
|
4
|
+
* `unknown` existe e não é defeito: é o pedido cujo canal ainda não respondeu o
|
|
5
|
+
* estado, e o V1 o escreve na tela como «Aguardando estado do canal» em vez de
|
|
6
|
+
* fingir que é novo.
|
|
7
|
+
*/
|
|
8
|
+
export type DeliveryStatus = 'unknown' | 'new' | 'confirmed' | 'preparing' | 'ready' | 'dispatched' | 'delivered' | 'completed' | 'cancelled';
|
|
9
|
+
/** O `statusLabels` do V1, palavra por palavra. */
|
|
10
|
+
export declare const DELIVERY_STATUS_LABELS: Record<DeliveryStatus, string>;
|
|
11
|
+
export interface DeliveryColumn {
|
|
12
|
+
/** O nome que o V1 escreve no topo da coluna. */
|
|
13
|
+
name: string;
|
|
14
|
+
states: DeliveryStatus[];
|
|
15
|
+
/**
|
|
16
|
+
* A cor da borda, no matiz do V1 (`border-blue-500` e companhia).
|
|
17
|
+
*
|
|
18
|
+
* Guardada como token para o CSS do pacote, porque aqui não há Tailwind — o
|
|
19
|
+
* hex de cada um é o do V1, não um parecido.
|
|
20
|
+
*/
|
|
21
|
+
tone: 'blue' | 'emerald' | 'amber' | 'violet' | 'slate';
|
|
22
|
+
}
|
|
23
|
+
/** As seis colunas do `DeliveryKanban`, na ordem em que o operador as lê. */
|
|
24
|
+
export declare const DELIVERY_COLUMNS: DeliveryColumn[];
|
|
25
|
+
/** O estado, normalizado — inclusive o vocabulário antigo do V2. */
|
|
26
|
+
export declare function deliveryStatus(raw?: string | null): DeliveryStatus;
|
|
27
|
+
/**
|
|
28
|
+
* Em que coluna este pedido aparece — `undefined` quando em NENHUMA.
|
|
29
|
+
*
|
|
30
|
+
* `cancelled` não tem coluna no V1, e isso é decisão e não esquecimento: um
|
|
31
|
+
* pedido cancelado no quadro de despacho é uma carta que alguém ainda vai tentar
|
|
32
|
+
* mover. Ele existe na lista e no histórico, não na esteira.
|
|
33
|
+
*/
|
|
34
|
+
export declare function deliveryColumnOf(raw?: string | null): DeliveryColumn | undefined;
|
|
35
|
+
/** O rótulo de tela de um estado. Enum cru nunca chega ao operador. */
|
|
36
|
+
export declare function deliveryStatusLabel(raw?: string | null): string;
|
|
37
|
+
export declare function deliveryOriginLabel(source?: string | null): string;
|
|
38
|
+
/** Os três minutos do V1, em milissegundos. */
|
|
39
|
+
export declare const DELIVERED_LINGER_MS: number;
|
|
40
|
+
export declare const DELIVERED_LINGER_NOTE = "Pedidos entregues permanecem aqui por 3 minutos ap\u00F3s a confirma\u00E7\u00E3o da entrega.";
|
|
41
|
+
/**
|
|
42
|
+
* Este pedido ainda aparece na esteira?
|
|
43
|
+
*
|
|
44
|
+
* `deliveredAt` ausente mantém o pedido: **não sei quando** não é **faz
|
|
45
|
+
* tempo**, e sumir com um pedido por falta de carimbo esconde trabalho que
|
|
46
|
+
* talvez ainda exista. É a mesma distinção do `lastOrderAt` na mesa.
|
|
47
|
+
*
|
|
48
|
+
* O cancelado nunca esteve aqui — some pela coluna, não pelo tempo.
|
|
49
|
+
*/
|
|
50
|
+
export declare function stillOnBoard(order: {
|
|
51
|
+
dispatch?: string | null;
|
|
52
|
+
deliveredAt?: string | null;
|
|
53
|
+
}, now?: number): boolean;
|
|
54
|
+
//# sourceMappingURL=deliveryColumns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliveryColumns.d.ts","sourceRoot":"","sources":["../../src/screen/deliveryColumns.ts"],"names":[],"mappings":"AAoBA;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GACtB,SAAS,GAAG,KAAK,GAAG,WAAW,GAAG,WAAW,GAC7C,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAA;AAQpE,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAUjE,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB;;;;;OAKG;IACH,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;CACxD;AAED,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAO5C,CAAA;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,GAAG,SAAS,CAGhF;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAE/D;AAsBD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAElE;AAsBD,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB,QAAa,CAAA;AAE7C,eAAO,MAAM,qBAAqB,kGACgD,CAAA;AAElF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAChE,GAAG,SAAa,GACf,OAAO,CAMT"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface DiscardCandidate {
|
|
2
|
+
/** O que a comanda soma. Zero é a única porta. */
|
|
3
|
+
totalCents?: number;
|
|
4
|
+
/** `'table'` é o que fica de fora. */
|
|
5
|
+
kind?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function isDiscardable(p: DiscardCandidate): boolean;
|
|
8
|
+
//# sourceMappingURL=discardCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discardCheck.d.ts","sourceRoot":"","sources":["../../src/screen/discardCheck.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAE1D"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** O livro de abatimentos: o que já foi concedido, ou o fato de não dar para ler. */
|
|
2
|
+
export type DiscountBook<T> = {
|
|
3
|
+
known: true;
|
|
4
|
+
grants: T[];
|
|
5
|
+
} | {
|
|
6
|
+
known: false;
|
|
7
|
+
reason?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const BOOK_UNREADABLE_TITLE = "N\u00E3o foi poss\u00EDvel ler os descontos j\u00E1 aplicados";
|
|
10
|
+
export declare const BOOK_UNREADABLE_HINT = "Confira a comanda antes de conceder: pode j\u00E1 haver abatimento nela.";
|
|
11
|
+
/** Lê o livro sem transformar falha em lista vazia. */
|
|
12
|
+
export declare function readDiscountBook<T>(read: () => Promise<T[]>): Promise<DiscountBook<T>>;
|
|
13
|
+
/**
|
|
14
|
+
* O livro está vazio de verdade?
|
|
15
|
+
*
|
|
16
|
+
* Só quando foi LIDO e não tinha nada. A dúvida não conta como vazio — é
|
|
17
|
+
* justamente essa confusão que faz a folha abrir limpa sobre uma comanda com
|
|
18
|
+
* desconto.
|
|
19
|
+
*/
|
|
20
|
+
export declare function bookIsEmpty<T>(book: DiscountBook<T> | undefined): boolean;
|
|
21
|
+
/** Quanto o livro explica, em centavos. */
|
|
22
|
+
export declare function bookTotalCents(grants: ReadonlyArray<{
|
|
23
|
+
amountCents?: number;
|
|
24
|
+
}>): number;
|
|
25
|
+
/**
|
|
26
|
+
* O livro está INCOMPLETO — a comanda tem abatimento que ele não explica?
|
|
27
|
+
*
|
|
28
|
+
* `lineDiscountCents` é o desconto que as LINHAS carregam, que o PDV já soma
|
|
29
|
+
* para mostrar o total. A folga de um centavo é para o arredondamento de cada
|
|
30
|
+
* linha, não para esconder diferença.
|
|
31
|
+
*
|
|
32
|
+
* Devolve quanto está faltando, ou `null` quando o livro fecha.
|
|
33
|
+
*/
|
|
34
|
+
export declare function bookShortfallCents<T extends {
|
|
35
|
+
amountCents?: number;
|
|
36
|
+
}>(book: DiscountBook<T> | undefined, lineDiscountCents: number): number | null;
|
|
37
|
+
/** A frase do aviso quando o livro não fecha com a comanda. */
|
|
38
|
+
export declare const BOOK_INCOMPLETE_TITLE = "A lista de descontos est\u00E1 incompleta";
|
|
39
|
+
export declare function bookIncompleteHint(formattedShortfall: string): string;
|
|
40
|
+
//# sourceMappingURL=discountBook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discountBook.d.ts","sourceRoot":"","sources":["../../src/screen/discountBook.ts"],"names":[],"mappings":"AA6CA,qFAAqF;AACrF,MAAM,MAAM,YAAY,CAAC,CAAC,IACtB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,EAAE,CAAA;CAAE,GAC5B;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAErC,eAAO,MAAM,qBAAqB,kEAAmD,CAAA;AACrF,eAAO,MAAM,oBAAoB,6EACsC,CAAA;AAEvE,uDAAuD;AACvD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,GACvB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAM1B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,CAEzE;AAGD,2CAA2C;AAC3C,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,CAAC;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,MAAM,CAER;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACnE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,EACjC,iBAAiB,EAAE,MAAM,GACxB,MAAM,GAAG,IAAI,CAIf;AAED,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,8CAAyC,CAAA;AAC3E,wBAAgB,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAGrE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** `null` = ninguém limita, e aí o desconto vai até 100% pela regra do valor. */
|
|
2
|
+
export declare function discountCap(reasonMax?: number | null, authorizerMax?: number | null): number | null;
|
|
3
|
+
/** A frase que explica a recusa — nomeando QUEM limita, que é o que resolve. */
|
|
4
|
+
export declare function capRefusal(percent: number, { reasonMax, authorizerMax, authorizerName }: {
|
|
5
|
+
reasonMax?: number | null;
|
|
6
|
+
authorizerMax?: number | null;
|
|
7
|
+
authorizerName?: string;
|
|
8
|
+
}): string | null;
|
|
9
|
+
//# sourceMappingURL=discountCap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discountCap.d.ts","sourceRoot":"","sources":["../../src/screen/discountCap.ts"],"names":[],"mappings":"AAYA,iFAAiF;AACjF,wBAAgB,WAAW,CACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAC5B,MAAM,GAAG,IAAI,CAKf;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GACA,MAAM,GAAG,IAAI,CAYf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface DiscountableLine {
|
|
2
|
+
id: string;
|
|
3
|
+
discountCents?: number;
|
|
4
|
+
}
|
|
5
|
+
/** Esta linha pode receber desconto agora? */
|
|
6
|
+
export declare function lineTakesDiscount(line: DiscountableLine): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* As linhas que o «marcar todos» (e a seleção inicial) pega — só as sem
|
|
9
|
+
* abatimento, como no V1.
|
|
10
|
+
*/
|
|
11
|
+
export declare function selectableLineIds(lines: readonly DiscountableLine[]): Set<string>;
|
|
12
|
+
/**
|
|
13
|
+
* A frase para a linha travada.
|
|
14
|
+
*
|
|
15
|
+
* O V1 não tem texto aqui — ele só ignora o toque, e uma caixa que não marca
|
|
16
|
+
* sem dizer por quê faz a pessoa tentar três vezes. A nossa diz a causa e o
|
|
17
|
+
* caminho, que é a lixeira da seção «Com desconto» logo acima.
|
|
18
|
+
*/
|
|
19
|
+
export declare const LINHA_JA_TEM_DESCONTO = "J\u00E1 tem desconto \u2014 remova antes de conceder outro.";
|
|
20
|
+
//# sourceMappingURL=discountSelectable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discountSelectable.d.ts","sourceRoot":"","sources":["../../src/screen/discountSelectable.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAEjF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,gEAAsD,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Esta tela JÁ é a lista das comandas abertas?
|
|
3
|
+
*
|
|
4
|
+
* Quando é, a bandeja se cala: ela seria a segunda cópia, menor e com menos
|
|
5
|
+
* informação, da mesma coisa — e ainda cobraria uma faixa da altura de quem
|
|
6
|
+
* está escolhendo onde tocar.
|
|
7
|
+
*/
|
|
8
|
+
export declare function viewListsOpenOrders(view: string | undefined): boolean;
|
|
9
|
+
//# sourceMappingURL=dockScope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dockScope.d.ts","sourceRoot":"","sources":["../../src/screen/dockScope.ts"],"names":[],"mappings":"AA8BA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAErE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type FiscalSeal = 'com-nota' | 'sem-nota' | 'parcial';
|
|
2
|
+
export declare function comandaSeal(
|
|
3
|
+
/**
|
|
4
|
+
* Quantas notas a comanda DEVERIA ter.
|
|
5
|
+
*
|
|
6
|
+
* No V1 é a contagem de invoices; no V2 é a de PAGAMENTOS, porque o elo
|
|
7
|
+
* daqui liga documento à comanda direto e não passa por invoice. A conta é a
|
|
8
|
+
* mesma: uma conta dividida em quatro paga quatro vezes e pode gerar quatro
|
|
9
|
+
* notas; uma comanda paga de uma vez espera uma.
|
|
10
|
+
*/
|
|
11
|
+
expected: number,
|
|
12
|
+
/** Quantas já têm documento AUTORIZADO. Rejeitado e em processo não valem. */
|
|
13
|
+
issued: number,
|
|
14
|
+
/** Uma NFC-e da comanda INTEIRA, que não corresponde a um pagamento só. */
|
|
15
|
+
hasConsolidated?: boolean): FiscalSeal;
|
|
16
|
+
export interface SealTally {
|
|
17
|
+
issuedCents: number;
|
|
18
|
+
issuedCount: number;
|
|
19
|
+
pendingCents: number;
|
|
20
|
+
pendingCount: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* O PLACAR DO TURNO: quanto já saiu em nota e quanto ainda falta.
|
|
24
|
+
*
|
|
25
|
+
* A lista sozinha responde "esta mesa saiu?" — uma de cada vez. A pergunta do
|
|
26
|
+
* fim do turno é de SOMA: "falta emitir quanto?". Sem isto o caixa desce a
|
|
27
|
+
* lista contando de cabeça.
|
|
28
|
+
*
|
|
29
|
+
* `parcial` conta como PENDENTE. Arredondá-la para resolvida é exatamente o
|
|
30
|
+
* erro que o selo existe para evitar.
|
|
31
|
+
*
|
|
32
|
+
* Comanda SEM selo não entra em nenhum dos dois lados: não saber se saiu nota
|
|
33
|
+
* é diferente de saber que não saiu, e somá-la como pendente inventaria uma
|
|
34
|
+
* dívida fiscal que ninguém apurou.
|
|
35
|
+
*/
|
|
36
|
+
export declare function tallySeals(items: Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
totalCents: number;
|
|
39
|
+
}>, seals: Record<string, FiscalSeal | undefined>): SealTally;
|
|
40
|
+
//# sourceMappingURL=fiscalSeal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fiscalSeal.d.ts","sourceRoot":"","sources":["../../src/screen/fiscalSeal.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;AAE5D,wBAAgB,WAAW;AACzB;;;;;;;GAOG;AACH,QAAQ,EAAE,MAAM;AAChB,8EAA8E;AAC9E,MAAM,EAAE,MAAM;AACd,2EAA2E;AAC3E,eAAe,UAAQ,GACtB,UAAU,CAQZ;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,GAC5C,SAAS,CASX"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface FloorEmptyState {
|
|
2
|
+
/** O garçom está recortado a praças/mesas dele. */
|
|
3
|
+
scoped: boolean;
|
|
4
|
+
/** A casa tem mesas cadastradas (fora do recorte e do filtro). */
|
|
5
|
+
houseHasTables: boolean;
|
|
6
|
+
/** Há um filtro de área ligado agora. */
|
|
7
|
+
filtered: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface FloorEmptyText {
|
|
10
|
+
title: string;
|
|
11
|
+
hint?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* O que dizer quando não há mesa para mostrar.
|
|
15
|
+
*
|
|
16
|
+
* A ordem das perguntas é a do V1: primeiro o escopo, porque ele é o recorte
|
|
17
|
+
* que o operador NÃO controla.
|
|
18
|
+
*/
|
|
19
|
+
export declare function floorEmpty(s: FloorEmptyState): FloorEmptyText;
|
|
20
|
+
//# sourceMappingURL=floorEmpty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floorEmpty.d.ts","sourceRoot":"","sources":["../../src/screen/floorEmpty.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,MAAM,EAAE,OAAO,CAAA;IACf,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAA;IACvB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,GAAG,cAAc,CAe7D"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
export interface Point {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
export interface Box {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
w: number;
|
|
9
|
+
h: number;
|
|
10
|
+
}
|
|
11
|
+
export type AreaShape = 'rect' | 'ellipse' | 'polygon';
|
|
12
|
+
export type TableShape = 'round' | 'rectangle' | 'square';
|
|
13
|
+
/** Uma praça: o pedaço do salão que um garçom atende. */
|
|
14
|
+
export interface FloorArea {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
color?: string | null;
|
|
18
|
+
shape?: AreaShape | null;
|
|
19
|
+
posX?: number | null;
|
|
20
|
+
posY?: number | null;
|
|
21
|
+
widthM?: number | null;
|
|
22
|
+
heightM?: number | null;
|
|
23
|
+
polygon?: Point[] | null;
|
|
24
|
+
}
|
|
25
|
+
export interface FloorTable {
|
|
26
|
+
id: string;
|
|
27
|
+
label: string;
|
|
28
|
+
areaId?: string | null;
|
|
29
|
+
shape?: TableShape | null;
|
|
30
|
+
posX?: number | null;
|
|
31
|
+
posY?: number | null;
|
|
32
|
+
widthM?: number | null;
|
|
33
|
+
heightM?: number | null;
|
|
34
|
+
diameterM?: number | null;
|
|
35
|
+
seats?: number | null;
|
|
36
|
+
rotation?: number | null;
|
|
37
|
+
}
|
|
38
|
+
/** Bbox LOCAL da praça: no polígono, o mínimo e o tamanho dos pontos. */
|
|
39
|
+
export declare function areaBounds(a: Pick<FloorArea, 'shape' | 'widthM' | 'heightM' | 'polygon'>): {
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
minX: number;
|
|
43
|
+
minY: number;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Enfileira as praças num tabuleiro virtual, quebrando linha a cada `maxRowW`
|
|
47
|
+
* metros. É o arranjo que vale enquanto ninguém arrastou nada.
|
|
48
|
+
*/
|
|
49
|
+
export declare function layoutAreas<T extends Pick<FloorArea, 'shape' | 'widthM' | 'heightM' | 'polygon'>>(areas: T[], gap?: number, maxRowW?: number): Array<{
|
|
50
|
+
area: T;
|
|
51
|
+
offsetX: number;
|
|
52
|
+
offsetY: number;
|
|
53
|
+
w: number;
|
|
54
|
+
h: number;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Uma praça em (0,0) está CERTA; várias, todas em (0,0), não.
|
|
58
|
+
*
|
|
59
|
+
* Enquanto ninguém arrastou, o banco tem tudo na origem. Com uma só, essa
|
|
60
|
+
* posição é a verdade. Com mais de uma, todas empilhadas no mesmo canto, a
|
|
61
|
+
* posição gravada não vale nada e o arranjo automático entra no lugar —
|
|
62
|
+
* senão o salão inteiro desenha por cima de si mesmo.
|
|
63
|
+
*/
|
|
64
|
+
export declare function needsAutoLayout(areas: Array<Pick<FloorArea, 'posX' | 'posY'>>): boolean;
|
|
65
|
+
export interface PlacedArea {
|
|
66
|
+
area: FloorArea;
|
|
67
|
+
origin: Point;
|
|
68
|
+
box: Box;
|
|
69
|
+
}
|
|
70
|
+
/** Resolve a origem e o bbox global de cada praça. */
|
|
71
|
+
export declare function placeAreas(areas: FloorArea[]): PlacedArea[];
|
|
72
|
+
/** O polígono da praça em coordenadas locais (origem no canto do bbox). */
|
|
73
|
+
export declare function localPolygon(a: Pick<FloorArea, 'shape' | 'widthM' | 'heightM' | 'polygon'>): Point[];
|
|
74
|
+
/** Centro da mesa no mundo: origem da praça + a posição local dela. */
|
|
75
|
+
export declare function tableCenter(t: Pick<FloorTable, 'posX' | 'posY'>, origin: Point): Point;
|
|
76
|
+
/** Tamanho do TAMPO, sem as cadeiras. A redonda usa o diâmetro nos dois eixos. */
|
|
77
|
+
export declare function tableSize(t: Pick<FloorTable, 'shape' | 'widthM' | 'heightM' | 'diameterM'>): {
|
|
78
|
+
w: number;
|
|
79
|
+
h: number;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Onde sentam as cadeiras, em metros, relativas ao CANTO superior esquerdo do
|
|
83
|
+
* tampo. A redonda espalha em círculo; a retangular distribui pelo perímetro,
|
|
84
|
+
* proporcional a cada lado — é o que faz uma mesa de 1,40 × 0,80 pôr duas
|
|
85
|
+
* cadeiras de cada lado comprido e uma em cada ponta, como na vida.
|
|
86
|
+
*/
|
|
87
|
+
export declare function chairPositions(shape: TableShape, seats: number, w: number, h: number): Array<{
|
|
88
|
+
x: number;
|
|
89
|
+
y: number;
|
|
90
|
+
rot: number;
|
|
91
|
+
}>;
|
|
92
|
+
/** Menor retângulo que contém todos. `null` sem entrada. */
|
|
93
|
+
export declare function unionBox(boxes: Box[]): Box | null;
|
|
94
|
+
/** O mundo inteiro da unidade; sem praça nenhuma, um pátio de 10 × 10 m. */
|
|
95
|
+
export declare function floorBox(placed: PlacedArea[]): Box;
|
|
96
|
+
/**
|
|
97
|
+
* O viewBox que ENQUADRA `target` num palco de proporção `aspect`.
|
|
98
|
+
*
|
|
99
|
+
* Alarga ou alteia o alvo, centrado, até bater com a proporção do palco. É o
|
|
100
|
+
* que impede a mesa redonda de virar elipse quando o tablet gira.
|
|
101
|
+
*/
|
|
102
|
+
export declare function fitViewBox(target: Box, aspect: number, marginFrac?: number, marginMin?: number): Box;
|
|
103
|
+
export declare function pointInRect(p: Point, box: Box): boolean;
|
|
104
|
+
/** Elipse inscrita no bbox. A fronteira conta como dentro. */
|
|
105
|
+
export declare function pointInEllipse(p: Point, box: Box): boolean;
|
|
106
|
+
/** Ray casting (par/ímpar), em coordenadas do mundo. */
|
|
107
|
+
export declare function pointInPolygon(p: Point, poly: Point[]): boolean;
|
|
108
|
+
export declare function areaBox(a: Pick<FloorArea, 'posX' | 'posY' | 'widthM' | 'heightM'>): Box;
|
|
109
|
+
/**
|
|
110
|
+
* O ponto está dentro da praça?
|
|
111
|
+
*
|
|
112
|
+
* **PREVIEW no cliente** — a verdade é o gatilho do banco, que faz exatamente
|
|
113
|
+
* esta conta. O cliente só antecipa o que ele vai dizer; divergir daqui faria
|
|
114
|
+
* a tela mostrar a mesa numa praça e a escala mandar o garçom para outra.
|
|
115
|
+
*/
|
|
116
|
+
export declare function pointInArea(pt: Point, a: FloorArea): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Qual praça contém o ponto. Com sobreposição vale a ÚLTIMA da ordem dada —
|
|
119
|
+
* é a que o SVG pinta por cima, e é nela que o olho vê a mesa.
|
|
120
|
+
*/
|
|
121
|
+
export declare function areaAtPoint(p: Point, areas: FloorArea[]): FloorArea | null;
|
|
122
|
+
/** Tamanho padrão do tampo por formato — o mesmo do cadastro de mesas. */
|
|
123
|
+
export declare const TABLE_SHAPE_DIMS: Record<TableShape, {
|
|
124
|
+
widthM: number;
|
|
125
|
+
heightM: number;
|
|
126
|
+
diameterM: number;
|
|
127
|
+
}>;
|
|
128
|
+
/**
|
|
129
|
+
* As medidas de um formato — para QUALQUER texto que o banco guarde.
|
|
130
|
+
*
|
|
131
|
+
* O cadastro não fala só os três formatos do desenho: o Pertinho tem um
|
|
132
|
+
* `bar` entre 208 mesas, e `TABLE_SHAPE_DIMS['bar']` é `undefined`. Ler
|
|
133
|
+
* `.widthM` dali derrubou a tela inteira por causa de UMA mesa — e a pilha
|
|
134
|
+
* apontava para o `.map`, não para o cadastro.
|
|
135
|
+
*
|
|
136
|
+
* O balcão cai em retangular, que é a forma que ele tem no chão.
|
|
137
|
+
*/
|
|
138
|
+
export declare function tableDims(shape?: string | null): {
|
|
139
|
+
widthM: number;
|
|
140
|
+
heightM: number;
|
|
141
|
+
diameterM: number;
|
|
142
|
+
};
|
|
143
|
+
/** Tolerância da simplificação do traço de mão livre, em metros. */
|
|
144
|
+
export declare const STROKE_EPSILON_M = 0.15;
|
|
145
|
+
/** Perto disto do primeiro ponto, o traço se fecha sozinho. */
|
|
146
|
+
export declare const STROKE_CLOSE_M = 0.3;
|
|
147
|
+
/** Abaixo disto o desenho é um tremor, não uma praça. */
|
|
148
|
+
export declare const AREA_MIN_M2 = 0.5;
|
|
149
|
+
/** Teto de pontos do polígono — o banco recusa acima disto. */
|
|
150
|
+
export declare const AREA_MAX_POINTS = 400;
|
|
151
|
+
/** Lado mínimo de uma praça, em metros. */
|
|
152
|
+
export declare const AREA_MIN_SIDE_M = 0.5;
|
|
153
|
+
/** Retângulo a partir de dois cantos quaisquer (arrasto diagonal). */
|
|
154
|
+
export declare function boxFromPoints(a: Point, b: Point): Box;
|
|
155
|
+
/** Área do polígono (fórmula do cadarço), sempre positiva. */
|
|
156
|
+
export declare function polygonArea(points: Point[]): number;
|
|
157
|
+
/**
|
|
158
|
+
* Ramer-Douglas-Peucker: joga fora os pontos que ficam a menos de `epsilon`
|
|
159
|
+
* da reta entre os vizinhos que sobram. O dedo produz centenas de pontos por
|
|
160
|
+
* segundo; o banco guarda o contorno, não o tremor da mão.
|
|
161
|
+
*
|
|
162
|
+
* Com PILHA, não recursão — e o V1 diz por quê: um traço comprido tem
|
|
163
|
+
* profundidade da ordem do número de pontos, e a recursão estourava a pilha
|
|
164
|
+
* do JS num contorno demorado. O desenho sumia sem dizer por quê.
|
|
165
|
+
*/
|
|
166
|
+
export declare function simplifyStroke(points: Point[], epsilon?: number): Point[];
|
|
167
|
+
/** Arredonda para centímetro — a precisão que o banco guarda. */
|
|
168
|
+
export declare function roundPoints(points: Point[]): Point[];
|
|
169
|
+
/**
|
|
170
|
+
* Reduz o traço a no máximo `CRU_MAX_POINTS` amostras uniformes, guardando
|
|
171
|
+
* SEMPRE o primeiro e o último ponto — é a distância entre eles que decide se
|
|
172
|
+
* o contorno fecha.
|
|
173
|
+
*/
|
|
174
|
+
export declare function thinStroke(stroke: Point[], max?: number): Point[];
|
|
175
|
+
/**
|
|
176
|
+
* O traço cru do dedo vira o polígono que o banco aceita. `null` = não é
|
|
177
|
+
* praça (tremor, linha, toque solto).
|
|
178
|
+
*
|
|
179
|
+
* A ORDEM das etapas é a regra, e as duas inversões estão comentadas no V1:
|
|
180
|
+
*
|
|
181
|
+
* 1. **Afrouxar a tolerância até caber no teto vem ANTES de fechar** — cada
|
|
182
|
+
* passada re-simplifica o traço CRU, e desfaria o fechamento.
|
|
183
|
+
* 2. **Arredondar vem ANTES de medir a área** — quem vai para o banco é o
|
|
184
|
+
* arredondado, e é a área DELE que precisa existir; o trigger recusa
|
|
185
|
+
* polígono sem área.
|
|
186
|
+
*/
|
|
187
|
+
export declare function strokeToPolygon(stroke: Point[], epsilon?: number): Point[] | null;
|
|
188
|
+
/** As oito alças de um bbox, pelos pontos cardeais. */
|
|
189
|
+
export type AreaHandle = 'nw' | 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w';
|
|
190
|
+
export declare const AREA_HANDLES: AreaHandle[];
|
|
191
|
+
/** Onde cada alça fica, em coordenadas do mundo. */
|
|
192
|
+
export declare function handlePoint(box: Box, handle: AreaHandle): Point;
|
|
193
|
+
/**
|
|
194
|
+
* Arrastar uma alça: a borda OPOSTA fica parada, e o lado nunca encolhe além
|
|
195
|
+
* do mínimo — passar da borda oposta gruda no mínimo em vez de virar a praça
|
|
196
|
+
* do avesso, que é o que confunde quem está desenhando.
|
|
197
|
+
*/
|
|
198
|
+
export declare function resizeBox(box: Box, handle: AreaHandle, delta: Point, min?: number): Box;
|
|
199
|
+
/** Move todos os pontos de um polígono. */
|
|
200
|
+
export declare function translatePolygon(points: Point[], delta: Point): Point[];
|
|
201
|
+
/** Move um vértice. Fora do índice, devolve os pontos como estavam. */
|
|
202
|
+
export declare function moveVertex(points: Point[], index: number, to: Point): Point[];
|
|
203
|
+
/** Tira um vértice; abaixo de 3 pontos não é polígono, então recusa. */
|
|
204
|
+
export declare function removeVertex(points: Point[], index: number): Point[] | null;
|
|
205
|
+
/** O ponto médio de cada lado — é onde nasce um vértice novo. */
|
|
206
|
+
export declare function edgeMidpoints(points: Point[]): Array<{
|
|
207
|
+
index: number;
|
|
208
|
+
point: Point;
|
|
209
|
+
}>;
|
|
210
|
+
/** Insere um vértice na posição dada (o índice vem de `edgeMidpoints`). */
|
|
211
|
+
export declare function insertVertex(points: Point[], index: number, point: Point): Point[];
|
|
212
|
+
/**
|
|
213
|
+
* O vazio da planta, quando a unidade não tem NENHUM ambiente desenhado.
|
|
214
|
+
*
|
|
215
|
+
* O V2 não tinha ramo para isso: com zero ambientes a planta desenhava o pátio
|
|
216
|
+
* padrão de 10 × 10 m — uma caixa cinza vazia, sem uma palavra. Quem abre
|
|
217
|
+
* «Planta baixa» numa casa que nunca desenhou a planta via um retângulo e
|
|
218
|
+
* nenhuma pista de que fazer.
|
|
219
|
+
*
|
|
220
|
+
* O V1 tem DUAS frases, e a diferença é quem está olhando:
|
|
221
|
+
*
|
|
222
|
+
* - no EDITOR (`FloorPlanEditor`), ele diz o próximo passo nas palavras do
|
|
223
|
+
* próprio editor — quem está ali pode agir agora;
|
|
224
|
+
* - na LEITURA (`FloorPlanView`), ele aponta para onde se configura — quem está
|
|
225
|
+
* ali não pode desenhar nada.
|
|
226
|
+
*
|
|
227
|
+
* **As dicas foram adaptadas, e de propósito.** O V1 manda para a «aba
|
|
228
|
+
* Ambientes» e para «Configurações → Salão», e nenhum dos dois existe no V2: aqui
|
|
229
|
+
* o ambiente nasce da ferramenta de desenho do próprio editor, alcançada por
|
|
230
|
+
* «Editar planta». Repetir a frase do V1 ao pé da letra mandaria o operador a um
|
|
231
|
+
* lugar que não existe — e uma mensagem fiel que mente é pior que uma adaptada
|
|
232
|
+
* que acerta. O TÍTULO é o do V1, palavra por palavra.
|
|
233
|
+
*/
|
|
234
|
+
export declare function emptyFloorMessage(editing: boolean): {
|
|
235
|
+
title: string;
|
|
236
|
+
hint: string;
|
|
237
|
+
};
|
|
238
|
+
/** A posição da mesa NO MUNDO, ou `null` quando não dá para saber. */
|
|
239
|
+
export declare function tableWorldPoint(table: {
|
|
240
|
+
posXM?: number | null;
|
|
241
|
+
posYM?: number | null;
|
|
242
|
+
zoneId?: string | null;
|
|
243
|
+
}, originOf: (zoneId: string) => Point | null | undefined): Point | null;
|
|
244
|
+
/** As mesas que a geometria da praça pega. */
|
|
245
|
+
export declare function tablesInServiceArea(area: FloorArea, tables: Array<{
|
|
246
|
+
id: string;
|
|
247
|
+
posXM?: number | null;
|
|
248
|
+
posYM?: number | null;
|
|
249
|
+
zoneId?: string | null;
|
|
250
|
+
}>, originOf: (zoneId: string) => Point | null | undefined): string[];
|
|
251
|
+
/**
|
|
252
|
+
* A pertinência FINAL: a geometria, mais o que foi incluído à mão, menos o que
|
|
253
|
+
* foi excluído.
|
|
254
|
+
*
|
|
255
|
+
* É o modelo do V1, e é o que dá sentido ao «voltar ao automático»: tirar o
|
|
256
|
+
* vínculo manual devolve a mesa à decisão do desenho, em vez de deixá-la sem
|
|
257
|
+
* praça nenhuma.
|
|
258
|
+
*/
|
|
259
|
+
export declare function serviceAreaTables(automatic: string[], manual?: {
|
|
260
|
+
included?: string[];
|
|
261
|
+
excluded?: string[];
|
|
262
|
+
}): string[];
|
|
263
|
+
/**
|
|
264
|
+
* Quais praças precisam ser REESCRITAS depois de a mesa mudar de lugar.
|
|
265
|
+
*
|
|
266
|
+
* A conta é a mesma de sempre; o que esta função guarda é a decisão de NÃO
|
|
267
|
+
* escrever. Arrastar uma mesa num salão de cinco praças não pode virar cinco
|
|
268
|
+
* gravações: só muda a praça que a mesa deixou e a que ela passou a ocupar, e
|
|
269
|
+
* reescrever as outras três seria três chamadas para dizer o que já estava
|
|
270
|
+
* dito — com a chance de sobrescrever, no caminho, uma decisão manual que
|
|
271
|
+
* alguém tomou entre a leitura e a escrita.
|
|
272
|
+
*/
|
|
273
|
+
export declare function serviceAreasToRewrite(areas: Array<FloorArea & {
|
|
274
|
+
tableIds?: string[];
|
|
275
|
+
}>, movedTableId: string, tables: Array<{
|
|
276
|
+
id: string;
|
|
277
|
+
posXM?: number | null;
|
|
278
|
+
posYM?: number | null;
|
|
279
|
+
zoneId?: string | null;
|
|
280
|
+
}>, originOf: (zoneId: string) => Point | null | undefined): Array<{
|
|
281
|
+
id: string;
|
|
282
|
+
tableIds: string[];
|
|
283
|
+
}>;
|
|
284
|
+
/**
|
|
285
|
+
* Onde desenhar as mesas que não estão em praça nenhuma.
|
|
286
|
+
*
|
|
287
|
+
* Devolve o centro de cada uma, em metros, numa grade à ESQUERDA do mundo
|
|
288
|
+
* desenhado — longe das praças, para que o amontoado não se confunda com um
|
|
289
|
+
* ambiente de verdade.
|
|
290
|
+
*
|
|
291
|
+
* A mesa que JÁ TEM coordenada própria é respeitada: alguém a posicionou, e
|
|
292
|
+
* mover o que foi posicionado à mão é desfazer trabalho.
|
|
293
|
+
*/
|
|
294
|
+
export declare function layoutUnzonedTables(tables: Array<Pick<FloorTable, 'id' | 'posX' | 'posY'>>, world: Box, perColumn?: number): Map<string, Point>;
|
|
295
|
+
//# sourceMappingURL=floorGeometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floorGeometry.d.ts","sourceRoot":"","sources":["../../src/screen/floorGeometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface FloorScope {
|
|
2
|
+
/** A ficha de pessoa de quem está logado. `null` = login sem ficha. */
|
|
3
|
+
staffId?: string | null;
|
|
4
|
+
/** As praças atribuídas a essa pessoa AGORA. */
|
|
5
|
+
areaIds: string[];
|
|
6
|
+
/** As mesas escaladas diretamente para ela. */
|
|
7
|
+
directTableIds: string[];
|
|
8
|
+
}
|
|
9
|
+
export type ScopeNotice = {
|
|
10
|
+
kind: 'none';
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'no-assignment';
|
|
13
|
+
text: string;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'scoped';
|
|
16
|
+
description: string;
|
|
17
|
+
seeingAll: boolean;
|
|
18
|
+
text: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* O aviso que a tela deve mostrar — ou nenhum.
|
|
22
|
+
*
|
|
23
|
+
* Os três casos, na ordem em que o V1 os resolve:
|
|
24
|
+
*
|
|
25
|
+
* 1. **Login sem ficha de pessoa** (gerente por login, dono): NADA. *"Não há
|
|
26
|
+
* escala possível, e um aviso aqui seria ruído em toda tela."*
|
|
27
|
+
* 2. **Casa sem praça desenhada**: NADA. *"sem praça desenhada, nada muda
|
|
28
|
+
* para ninguém."*
|
|
29
|
+
* 3. **Pessoa sem vínculo vigente**: "vendo todas" — e a decisão do V1 é
|
|
30
|
+
* explícita: *ninguém fica sem mesa por falta de escala*. O contrário
|
|
31
|
+
* (esconder tudo) deixaria o garçom sem trabalho por um cadastro que
|
|
32
|
+
* alguém esqueceu de fazer.
|
|
33
|
+
*/
|
|
34
|
+
export declare function scopeNotice(scope: FloorScope | null, areas: Array<{
|
|
35
|
+
id: string;
|
|
36
|
+
name: string;
|
|
37
|
+
}>, seeingAll: boolean): ScopeNotice;
|
|
38
|
+
/**
|
|
39
|
+
* «a praça Salão» · «as praças A, B» · «3 mesas escaladas para você», unidos
|
|
40
|
+
* por " e ". Sem nada reconhecível, cai para "as suas mesas" — o aviso existe
|
|
41
|
+
* para dizer de quem é o salão, e um aviso sem sujeito não diz nada.
|
|
42
|
+
*/
|
|
43
|
+
export declare function scopeDescription(scope: FloorScope, areas: Array<{
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
}>): string;
|
|
47
|
+
/** A mesa está no escopo de quem olha? Sem escopo, todas estão. */
|
|
48
|
+
export declare function inScope(tableId: string, tableAreaIds: string[], scope: FloorScope | null): boolean;
|
|
49
|
+
//# sourceMappingURL=floorScope.d.ts.map
|