@qrwise/pos-calculations 0.0.12 → 0.0.14

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/index.cjs CHANGED
@@ -75,7 +75,6 @@ function calculateTotals(input) {
75
75
  voucherDiscounted = -format2(totalOrderAmount * voucherRate);
76
76
  }
77
77
  }
78
- const togoCharge = input.togoableTotalAmount > 0 ? input.togoCharge : 0;
79
78
  const subtotal = totalOrderAmount + voucherDiscounted;
80
79
  const voucherVatNet = format2(totalOrderAmount / vatRate);
81
80
  const voucherVat = format2(voucherVatNet * 0.12);
@@ -98,42 +97,55 @@ function calculateTotals(input) {
98
97
  serviceCharge = format2(vatNet * scRate);
99
98
  }
100
99
  }
100
+ const togoCharge = input.togoCharge;
101
101
  let totalAmount = vatNet + vat + serviceCharge + togoCharge;
102
102
  if (isSpecial && !isAddVat) {
103
103
  totalAmount -= vat;
104
104
  }
105
105
  if (totalAmount < 0) totalAmount = 0;
106
106
  return {
107
- gross: subtotal + Math.abs(voucherDiscounted),
108
- hasVoucher: voucherRate > 0,
109
- voucher: {
110
- discount: voucherDiscounted,
111
- net: subtotal,
112
- vatNet: voucherVatNet,
113
- vat: voucherVat,
114
- forBirDiscount: -(input.voucherType === "FIXED" ? voucherVatNet - Number(voucherRate.toFixed(2)) : voucherVatNet * Number(voucherRate.toFixed(2)))
115
- },
116
- hasDiscount: discountRate > 0,
117
- discount: {
118
- discount: discounted,
119
- net: vatNet
120
- },
121
- netOfVat: vatNet + Math.abs(discounted),
107
+ quantity: input.quantity,
108
+ subtotal,
109
+ isAddVat,
110
+ vatNet,
122
111
  vat,
112
+ discounted,
113
+ voucherDiscounted,
123
114
  serviceCharge,
124
115
  togoCharge,
125
- totalAmount: format2(totalAmount),
126
- bir: {
127
- vatSales: vat > 0 ? vatNet + Math.abs(discounted) : 0,
128
- vatExemptSales: vat > 0 ? 0 : vatNet + Math.abs(discounted),
129
- vatZeroRatedSales: 0,
130
- nonTaxableSales: 0,
116
+ totalAmount: Number(totalAmount.toFixed(2)),
117
+ receipt: {
118
+ gross: subtotal + Math.abs(voucherDiscounted),
119
+ hasVoucher: voucherRate > 0,
120
+ voucher: {
121
+ discount: voucherDiscounted,
122
+ net: subtotal,
123
+ vatNet: voucherVatNet,
124
+ vat: voucherVat,
125
+ forBirDiscount: -(input.voucherType === "FIXED" ? voucherVatNet - Number(voucherRate.toFixed(2)) : voucherVatNet * Number(voucherRate.toFixed(2)))
126
+ },
127
+ hasDiscount: discountRate > 0,
128
+ discount: {
129
+ discount: discounted,
130
+ net: vatNet
131
+ },
132
+ netOfVat: vatNet + Math.abs(discounted),
131
133
  vat,
132
- totalSales: vat > 0 ? subtotal : vatNet + Math.abs(discounted),
133
- discount: discounted,
134
134
  serviceCharge,
135
135
  togoCharge,
136
- amountPayable: format2(totalAmount)
136
+ totalAmount: format2(totalAmount),
137
+ bir: {
138
+ vatSales: vat > 0 ? vatNet + Math.abs(discounted) : 0,
139
+ vatExemptSales: vat > 0 ? 0 : vatNet + Math.abs(discounted),
140
+ vatZeroRatedSales: 0,
141
+ nonTaxableSales: 0,
142
+ vat,
143
+ totalSales: vat > 0 ? subtotal : vatNet + Math.abs(discounted),
144
+ discount: discounted,
145
+ serviceCharge,
146
+ togoCharge,
147
+ amountPayable: format2(totalAmount)
148
+ }
137
149
  }
138
150
  };
139
151
  }
package/dist/index.d.cts CHANGED
@@ -1,11 +1,10 @@
1
- type DiningOption = "FOR_HERE" | "TO_GO";
2
1
  type VoucherType = "FIXED" | "PERCENTAGE";
3
2
  type DiscountType = "SENIOR" | "PWD" | "NAAC" | "SOLO" | "MOV";
4
3
  interface CalculateTotalsInput {
4
+ quantity: number;
5
5
  discountableTotalAmount: number;
6
6
  nonDiscountableTotalAmount: number;
7
7
  serviceChargeableTotalAmount: number;
8
- togoableTotalAmount: number;
9
8
  voucherType: VoucherType | null;
10
9
  voucherRate: number;
11
10
  discountType: DiscountType | null;
@@ -15,36 +14,48 @@ interface CalculateTotalsInput {
15
14
  togoCharge: number;
16
15
  }
17
16
  interface CalculateTotalsResult {
18
- gross: number;
19
- hasVoucher: boolean;
20
- voucher: {
21
- discount: number;
22
- net: number;
23
- vatNet: number;
24
- vat: number;
25
- forBirDiscount: number;
26
- };
27
- hasDiscount: boolean;
28
- discount: {
29
- discount: number;
30
- net: number;
31
- };
32
- netOfVat: number;
17
+ quantity: number;
18
+ subtotal: number;
19
+ isAddVat: boolean;
20
+ vatNet: number;
33
21
  vat: number;
22
+ discounted: number;
23
+ voucherDiscounted: number;
34
24
  serviceCharge: number;
35
25
  togoCharge: number;
36
26
  totalAmount: number;
37
- bir: {
38
- vatSales: number;
39
- vatExemptSales: number;
40
- vatZeroRatedSales: number;
41
- nonTaxableSales: number;
27
+ receipt: {
28
+ gross: number;
29
+ hasVoucher: boolean;
30
+ voucher: {
31
+ discount: number;
32
+ net: number;
33
+ vatNet: number;
34
+ vat: number;
35
+ forBirDiscount: number;
36
+ };
37
+ hasDiscount: boolean;
38
+ discount: {
39
+ discount: number;
40
+ net: number;
41
+ };
42
+ netOfVat: number;
42
43
  vat: number;
43
- totalSales: number;
44
- discount: number;
45
44
  serviceCharge: number;
46
45
  togoCharge: number;
47
- amountPayable: number;
46
+ totalAmount: number;
47
+ bir: {
48
+ vatSales: number;
49
+ vatExemptSales: number;
50
+ vatZeroRatedSales: number;
51
+ nonTaxableSales: number;
52
+ vat: number;
53
+ totalSales: number;
54
+ discount: number;
55
+ serviceCharge: number;
56
+ togoCharge: number;
57
+ amountPayable: number;
58
+ };
48
59
  };
49
60
  }
50
61
 
@@ -62,4 +73,4 @@ declare function getDiscountBreakdown(discountType: string | null | undefined, d
62
73
  };
63
74
  declare function calculateTotals(input: CalculateTotalsInput): CalculateTotalsResult;
64
75
 
65
- export { type CalculateTotalsInput, type CalculateTotalsResult, type DiningOption, type DiscountType, type VoucherType, calculateTotals, clamp, format2, getDiscountBreakdown, isAddVatAfterDiscount, isVatExemptDiscount, toMoneyNumber };
76
+ export { type CalculateTotalsInput, type CalculateTotalsResult, type DiscountType, type VoucherType, calculateTotals, clamp, format2, getDiscountBreakdown, isAddVatAfterDiscount, isVatExemptDiscount, toMoneyNumber };
package/dist/index.d.ts CHANGED
@@ -1,11 +1,10 @@
1
- type DiningOption = "FOR_HERE" | "TO_GO";
2
1
  type VoucherType = "FIXED" | "PERCENTAGE";
3
2
  type DiscountType = "SENIOR" | "PWD" | "NAAC" | "SOLO" | "MOV";
4
3
  interface CalculateTotalsInput {
4
+ quantity: number;
5
5
  discountableTotalAmount: number;
6
6
  nonDiscountableTotalAmount: number;
7
7
  serviceChargeableTotalAmount: number;
8
- togoableTotalAmount: number;
9
8
  voucherType: VoucherType | null;
10
9
  voucherRate: number;
11
10
  discountType: DiscountType | null;
@@ -15,36 +14,48 @@ interface CalculateTotalsInput {
15
14
  togoCharge: number;
16
15
  }
17
16
  interface CalculateTotalsResult {
18
- gross: number;
19
- hasVoucher: boolean;
20
- voucher: {
21
- discount: number;
22
- net: number;
23
- vatNet: number;
24
- vat: number;
25
- forBirDiscount: number;
26
- };
27
- hasDiscount: boolean;
28
- discount: {
29
- discount: number;
30
- net: number;
31
- };
32
- netOfVat: number;
17
+ quantity: number;
18
+ subtotal: number;
19
+ isAddVat: boolean;
20
+ vatNet: number;
33
21
  vat: number;
22
+ discounted: number;
23
+ voucherDiscounted: number;
34
24
  serviceCharge: number;
35
25
  togoCharge: number;
36
26
  totalAmount: number;
37
- bir: {
38
- vatSales: number;
39
- vatExemptSales: number;
40
- vatZeroRatedSales: number;
41
- nonTaxableSales: number;
27
+ receipt: {
28
+ gross: number;
29
+ hasVoucher: boolean;
30
+ voucher: {
31
+ discount: number;
32
+ net: number;
33
+ vatNet: number;
34
+ vat: number;
35
+ forBirDiscount: number;
36
+ };
37
+ hasDiscount: boolean;
38
+ discount: {
39
+ discount: number;
40
+ net: number;
41
+ };
42
+ netOfVat: number;
42
43
  vat: number;
43
- totalSales: number;
44
- discount: number;
45
44
  serviceCharge: number;
46
45
  togoCharge: number;
47
- amountPayable: number;
46
+ totalAmount: number;
47
+ bir: {
48
+ vatSales: number;
49
+ vatExemptSales: number;
50
+ vatZeroRatedSales: number;
51
+ nonTaxableSales: number;
52
+ vat: number;
53
+ totalSales: number;
54
+ discount: number;
55
+ serviceCharge: number;
56
+ togoCharge: number;
57
+ amountPayable: number;
58
+ };
48
59
  };
49
60
  }
50
61
 
@@ -62,4 +73,4 @@ declare function getDiscountBreakdown(discountType: string | null | undefined, d
62
73
  };
63
74
  declare function calculateTotals(input: CalculateTotalsInput): CalculateTotalsResult;
64
75
 
65
- export { type CalculateTotalsInput, type CalculateTotalsResult, type DiningOption, type DiscountType, type VoucherType, calculateTotals, clamp, format2, getDiscountBreakdown, isAddVatAfterDiscount, isVatExemptDiscount, toMoneyNumber };
76
+ export { type CalculateTotalsInput, type CalculateTotalsResult, type DiscountType, type VoucherType, calculateTotals, clamp, format2, getDiscountBreakdown, isAddVatAfterDiscount, isVatExemptDiscount, toMoneyNumber };
package/dist/index.js CHANGED
@@ -43,7 +43,6 @@ function calculateTotals(input) {
43
43
  voucherDiscounted = -format2(totalOrderAmount * voucherRate);
44
44
  }
45
45
  }
46
- const togoCharge = input.togoableTotalAmount > 0 ? input.togoCharge : 0;
47
46
  const subtotal = totalOrderAmount + voucherDiscounted;
48
47
  const voucherVatNet = format2(totalOrderAmount / vatRate);
49
48
  const voucherVat = format2(voucherVatNet * 0.12);
@@ -66,42 +65,55 @@ function calculateTotals(input) {
66
65
  serviceCharge = format2(vatNet * scRate);
67
66
  }
68
67
  }
68
+ const togoCharge = input.togoCharge;
69
69
  let totalAmount = vatNet + vat + serviceCharge + togoCharge;
70
70
  if (isSpecial && !isAddVat) {
71
71
  totalAmount -= vat;
72
72
  }
73
73
  if (totalAmount < 0) totalAmount = 0;
74
74
  return {
75
- gross: subtotal + Math.abs(voucherDiscounted),
76
- hasVoucher: voucherRate > 0,
77
- voucher: {
78
- discount: voucherDiscounted,
79
- net: subtotal,
80
- vatNet: voucherVatNet,
81
- vat: voucherVat,
82
- forBirDiscount: -(input.voucherType === "FIXED" ? voucherVatNet - Number(voucherRate.toFixed(2)) : voucherVatNet * Number(voucherRate.toFixed(2)))
83
- },
84
- hasDiscount: discountRate > 0,
85
- discount: {
86
- discount: discounted,
87
- net: vatNet
88
- },
89
- netOfVat: vatNet + Math.abs(discounted),
75
+ quantity: input.quantity,
76
+ subtotal,
77
+ isAddVat,
78
+ vatNet,
90
79
  vat,
80
+ discounted,
81
+ voucherDiscounted,
91
82
  serviceCharge,
92
83
  togoCharge,
93
- totalAmount: format2(totalAmount),
94
- bir: {
95
- vatSales: vat > 0 ? vatNet + Math.abs(discounted) : 0,
96
- vatExemptSales: vat > 0 ? 0 : vatNet + Math.abs(discounted),
97
- vatZeroRatedSales: 0,
98
- nonTaxableSales: 0,
84
+ totalAmount: Number(totalAmount.toFixed(2)),
85
+ receipt: {
86
+ gross: subtotal + Math.abs(voucherDiscounted),
87
+ hasVoucher: voucherRate > 0,
88
+ voucher: {
89
+ discount: voucherDiscounted,
90
+ net: subtotal,
91
+ vatNet: voucherVatNet,
92
+ vat: voucherVat,
93
+ forBirDiscount: -(input.voucherType === "FIXED" ? voucherVatNet - Number(voucherRate.toFixed(2)) : voucherVatNet * Number(voucherRate.toFixed(2)))
94
+ },
95
+ hasDiscount: discountRate > 0,
96
+ discount: {
97
+ discount: discounted,
98
+ net: vatNet
99
+ },
100
+ netOfVat: vatNet + Math.abs(discounted),
99
101
  vat,
100
- totalSales: vat > 0 ? subtotal : vatNet + Math.abs(discounted),
101
- discount: discounted,
102
102
  serviceCharge,
103
103
  togoCharge,
104
- amountPayable: format2(totalAmount)
104
+ totalAmount: format2(totalAmount),
105
+ bir: {
106
+ vatSales: vat > 0 ? vatNet + Math.abs(discounted) : 0,
107
+ vatExemptSales: vat > 0 ? 0 : vatNet + Math.abs(discounted),
108
+ vatZeroRatedSales: 0,
109
+ nonTaxableSales: 0,
110
+ vat,
111
+ totalSales: vat > 0 ? subtotal : vatNet + Math.abs(discounted),
112
+ discount: discounted,
113
+ serviceCharge,
114
+ togoCharge,
115
+ amountPayable: format2(totalAmount)
116
+ }
105
117
  }
106
118
  };
107
119
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qrwise/pos-calculations",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Shared POS calculations for QR Wise POS",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",