BLogic Systems

Tax For Custom Fee

Last updated on 
Target release
Document owner Vu
Developer Nhàn,Trường
QA Vu

- Các logic cơ bản cần nắm về Tax for Custom Fee

  • Điều kiện để tính Custom Fee trước Tax(VAT, Sale Tax) hay sau Tax(VAT, Sale Tax) là dựa theo config Apply Tax for Custom Fee:
    1. Trường hợp sử dụng file 0_4 thì sẽ tính theo kiểu cũ là luôn cộng Tax(VAT, Sale Tax) vào rồi mới tính Custom Fee
  • Khi ticket có ít nhất 1 item Sale Tax hoặc Sale Tax của item > 0 thì Service charges và Custom Fee mới được tính Sales Tax, tương tự như vậy thì khi ticket discount 100% hoặc comp item thì cũng ko tính tax cho service charges và custom fee vì lúc này tax của item cũng = 0
  • Khi ticket có item VAT, muốn tính Custom Fee thì phải trừ VAT(tax) ra rồi mới tính Custom Fee trên phần Subtotal còn lại của VAT item vì VAT cũng là Tax, nếu ko trừ VAT(tax) ra thì sẽ bị charge tax 2 lần
  • Tip có Custom Fee nhưng logic sẽ ko tính tax for custom fee của Tip (Custom Fee của Tip sẽ ko tính Tax)
  • Khi thanh toán CC add Tip Suggestion thì phải lấy Total(CC) trừ Custom Fee và SalesTax của Custom Fee ra rồi mới tính Tip Suggestion
  • EBT Food:
    1. Logic hiện tại khi thanh toán là ko tính Servic charges, ko tính Sales Tax nhưng vẫn tính VAT(tax) nhưng khi tính Custom Fee cho item EBT Food thì phải trừ VAT ra rồi mới được tính Custom Fee thì mới đúng
    2. Khi select hết tất cả item Sale tax để thanh toán bằng EBT Food thì ticket cũng ko còn Sale Tax nữa nên sẽ ko có Tax for Custom Fee, nhưng để tính Custom Fee cho ticket thì phải trừ VAT ra (nếu có) rồi mới tính Custom Fee vì Config apply tax for Custom Fee là phải tính Custom Fee từ amount chưa bao gồm Tax
    3. Khi select item để thanh toán bằng EBT Food nhưng vẫn còn chừa lại item Sale Tax thì ticket vẫn còn Sale Tax => vẫn có Tax for Custom Fee, lúc này để tính Custom Fee và Tax for Custom Fee thì phải trừ amount và Tax(Sale Tax + VAT) của những item đã thanh toán bằng EBT Food ra để tính

Option/Config Tax for Custom Fee : Khi đã sử dụng config apply Sales tax for Custom Fee thì phải nhớ rằng khi tính Custom Fee cần phải trừ VAT ra rồi mới tính chứ ko như logic cũ là chỉ cần lấy Total(bao gồm cả Sale Tax và VAT) để tính Custom Fee

2_option_tax_for_custom_fee.jpg

#### - Những Case sau sẽ chặn tạm thời, trong tương sẽ tìm cách fix sau ko chặn nữa:

Information cho Tax for Custom Fee : Amount trong hình dùng để tính ra Base Custom Fee => Amount này phải ko bao gồm VAT(tax) và Sales Tax của ticket (anh Khánh đã confirm logic này)

1_informartion_tax_for_custom_fee.jpg

PAYMENT SCREEN (AMOUNT GỐC CỦA TICKET) : Những Custom Fee amount show ở đây sẽ nhỏ hơn Cash Discount vì nó ko bao gồm Sales Tax, Sale Tax của Custom Fee được tách ra và gộp chung với dòng Tax bên dưới Còn Cash Discount thì phải tính Tax chung vào để khi lấy Total Credit trừ Cash Discount mới bằng được Total Cash

1-payment_screen.jpg

Đối với config Tax đã included trong Custom Fee thì khi tính ra Custom Fee(Final) bằng Subtotal-discount+service charges xong, ta sẽ tính Tax của custom fee trước bằng Base amount fee%, sau đó lấy Final Custom Fee(bao gồm Tax) trừ đi Tax của custom fee vừa tính ra để có được Base Custom Fee

/publish/assets/0b2e68b57f84b30932eb36e4fc52d3269e3a5737c381805b356501e94cf5c6b9.jpg

Nếu ko sử dụng config này thì sẽ tính theo kiểu cũ là luôn cộng Tax(VAT, Sale Tax) vào rồi mới tính Custom Fee

/publish/assets/600952b8f00224ef15ca872a02a625ac691f202d3aa9897aa7b91d77de75b4b4.jpg

Nếu config này được sử dụng (apply/select Sale Tax for Custom fee ở BO) thì sẽ luôn trừ Tax(VAT, Sale Tax) ra để tính Custom Fee cho dù ticket ko có item Sale Tax

/publish/assets/36d72624b63a704203cd7d2e047ae3953044fa121137a0f1b01a1626258b5eeb.jpg
  1. Show thông báo cho trường hợp trước đó thanh toán 1 phần khi ticket chỉ có item Nontax hoặc VAT, rồi sau đó recall ticket lại add thêm item Sale Tax rồi thanh toán thì Tax for Custom Fee ko charge thêm được “Ticket #13863 has been partially paid in advance with a tax for “tên Custom Fee” equal to 0. Please cancel all previous payments and make a new payment to include the tax for “tên Custom Fee”.”
  2. Show thông báo cho trường hợp trước đó thanh toán 1 phần khi ticket có items Sale Tax, VAT và Nontax (tính tax cho Custom fee), rồi sau đó recall lại remove hết item Sale Tax rồi thanh toán thì Tax for Custom Fee vẫn còn charge (sai) “Ticket #13863 has been partially paid in advance and includes tax for the “tên Custom Fee”. Please cancel all previous payments and make a new payment to exclude the tax for “tên Custom Fee”.”
  3. Trường hợp ticket có Sale Tax nhưng số tiền thanh toán 1 phần quá nhỏ nên Tax for Custom Fee của phần thanh toán này bằng 0 thì lần thanh toán sau sẽ không show thông báo lên bắt void payment, trừ khi có sự thay đổi (remove item sale tax hoặc ticket Nontax rồi sau đó add thêm item sale tax) thì mới show thông báo chặn bắt void all partial payments và thanh toán lại từ đầu #### - Sale report show Tax for Custom Fee:
  • Logic thanh toán 1 phần hiện tại là tính Custom Fee và tax for Custom Fee trên từng phần amount thanh toán, nhưng khi in ra sale receipt, in tạm tính và Payment Screen đang chưa đồng bộ logic với nhau nên sẽ có vài case lệch nhau 0.01 gây confuse => sẽ confirm logic với nhau để fix ở release sau
  • Logic của Split Evenly là tính custom fee và tax for custom fee trên từng phần và làm tròn #### - Service Charges và Cash Owed:

Nếu Tax for Custom Fee = 0 (bao gồm Dual Price hoặc setting ko apply tax for custom fee, item Nontax, item VAT) thì trên Sale report sẽ ko show ra Custom Fee amount luôn, Custom Fee chỉ show ra khi có Tax for Custom Fee vì mục đích của Tax for Custom Fee là để khai thuế chứ ko phải để show ra Custom Fee

/publish/assets/b8f0cbd253f947c13ec593c608c83add08fd4abba89797c940d1c063682982e5.jpg

#### - Cách tính Custom Fee,Tax for Custom Fee khi thanh toán 1 phần và khi Split Evenly (sẽ confirm và fix logic ở release sau)

  1. Khi 1 ticket apply nhiều loại Service charges và được thanh toán nhiều lần bởi nhiều phương thức(Cash, CC, EBT, Debit, Custom Methods, NonCredit/Credit Methods) thì thứ tự được chia của các loại Service charges lần lượt sẽ là : Auto gratuity -> Area Fee -> Party Gratuity -> Service Charge manually & Extra Fee
  2. Bình thường để tính Custom Fee và show trên Section Cash Owed thì chỉ cần lấy từng loại Service charge amount(ko bao gồm tax của Service charge) nhân với Custom Fee% sau đó cộng tất cả Custom Fee của từng loại Service charge đã tính được so sánh với tổng Custom Fee được tính trên tổng amount của tất cả service charges, nếu có sự chênh lệch thì loại service charge nào có độ ưu tiên thấp nhất sẽ lấy phần còn lại để ko bị lệch 0.01

Tuy nhiên ở trường hợp số 3(Party’s Gratuity) đươc thanh toán bởi Credit (có custom fee) và EBT Cash (hay còn gọi là Non Credit, ko tính custom fee) thì muốn tính Custom Fee của Party’s Gratuity để show trên Section Cash Owed, ta phải tính được Tax của Party’s Gratuity trên từng Payment method amount (Credit và EBT Cash) rồi trừ ra để có được base amount của Credit, lúc này mới tính được phần Custom Fee của Party’s Gratuity được thanh toán bằng Credit, còn EBT Cash ko có tính Custom Fee nên ko cần tính tax để trừ ra cũng được

/publish/assets/218604d263a15fc9e8c07d25b97eb484f3265b10502f93ee3b717c308d15ec53.jpg

#### - Custom Method apply Custom Fee : 1/ Khi thanh toán bằng Custom Method có apply Custom Fee và add Tip thì trong Tip đã bao gồm Custom Fee của Tip trong đó, dùng Base amount Fee% để tính ra Custom Fee của Tip 2/ Custom Fee show ra trên Payment sẽ chỉ là Custom Fee + Tax for Custom Fee của phần amount enter vào để thanh toán

/publish/assets/165cf21749e6a5324cb82de6db9b4cd0352f997986141830762155a8ed129312.jpg

3/ Amount trong Information là Base amount entered(ko bao gồm Tax), Sale Tax trong Information là Tax for Custom Fee của phần amount mình enter vào chứ ko tính của Tip vì Tip ko được tính Tax for Custom Fee

/publish/assets/514c9ce919cebbab7d6b231af427886a51786308f7fe4fda22ed3d51ffafaf73.jpg

- LOGIC MỚI TÍNH THEO TỈ LỆ KHI THANH TOÁN 1 PHẦN:

  • Thanh toán toàn bộ ticket trong 1 lần vẫn như cũ ko bị ảnh hưởng gì, nhưng khi thanh toán 1 phần nhiều lần thì sẽ tính theo tỉ lệ Tax trên từng amount thanh toán để trừ ra và tính Custom Fee, cách tính như sau :
    1. Ticket có Subtotal - Discount + All Service Charges + All Tax amount = $110, có All Tax amount = $10 => ta có tỉ lệ Tax tại thời điểm này là : 10/110 = 0.09090909% Trường hợp thanh toán 1 phần lần thứ nhất $5 thì mình sẽ dựa vào tỉ lệ % vừa tính ra để tính Tax amount có trong $5 : 5 x 0.090909 = 0.45(đã làm tròn) => Base amount trong $5 = 5 - 0.45 = $4.55 => Custom Fee 10% trong $5 = 4.55 x 10% = 0.46
    2. Nếu ko thanh toán hết phần amount còn lại mà thanh toán tiếp 1 phần $10 thì mình cần tính tỉ lệ Tax của phần còn lại so với Total của phần còn lại : Lấy Total gốc(bao gồm cả Tax) của ticket $110 - $5 (Total amount và Tax của phần vừa thanh toán) = $105 Lấy Total Tax của ticket gốc $10 - $0.45(Total Tax của phần $5 đã thanh toán trước đó) = $9.55 (Total Tax của phần còn lại) Sau khi có được Total của phần còn lại và Tax của phần còn lại thì ta đi tính tỉ lệ Tax rate của phần còn lại như lúc đầu : 9.55/105 = 0.0909523% Có tỉ lệ rồi thì đi tính Tax của phần $10 mà ta enter vào để thanh toán : $10 x 0.0909523% = $0.91 => Base amount trong phần amount $10 = $10 - 0.91 = $9.09 => Custom Fee 10% trong phần amount $10 = 9.09 x 10% = $0.91
    3. Nếu thanh toán hết phần amount còn lại thì phải lấy Total amount còn lại(bao gồm Tax) trừ đi Tax của phần còn lại để có được Base amount của phần còn lại để tính Custom Fee chứ ko cần tính tỉ lệ nữa, vì nếu thanh toán hết phần còn lại mà vẫn tính tỉ lệ thì có thể sẽ bị lệch 0.01 cho nên phải dùng logic bù trừ ra amount còn lại sẽ chính xác hơn : Lấy Total gốc(bao gồm cả Tax) của ticket $110 - $5 -$10 (Total amount và Tax của những phần đã thanh toán = $95 Lấy Total Tax gốc của ticket $10 - $0.45 - $0.91 (Total Tax của những phần đã thanh toán) = $8.64 Tính Base amount của phần amount còn lại : $95 - $8.64 = $86.36 Custom Fee 10% trong phần amount còn lại = $86.36 x 10% = $8.64
    4. Tương tự như vậy khi add thêm item hoặc remove bớt đi thì cũng đi tính tỉ lệ của tax còn lại so với Total amount còn lại thì mới tính được Tax của phần partial amount mà mình định thanh toán tiếp #### - Case thẻ ko đủ tiền :
  • Option Add Sales Tax for Custom Fee : Khi thanh toán case thẻ Credit ko đủ tiền($52, $11.11) ví dụ $52 nhưng chỉ approve được có $42 thì ko thể dùng cách tính tỉ lệ Tax từ $52 trừ ra để tính Custom Fee ngay lập tức được, mà tỉ lệ Tax tính từ $42 sau đó trừ ra có được Base amount thì phải dùng Base Amount Fee%(có được từ Custom Fee%) nhân với Base amount của $42 để tính ra Custom Fee và tax for Custom Fee included bên trong $42 vì số tiền được phép approve chỉ có $42 nên ko được charge lên theo Custom Fee% như bình thường -> Sau khi có được Custom Fee, Tax for Custom Fee & Final Custom Fee (Custom Fee + Tax) thì đi tính lại Partial amount, Base amount, Tax cho đúng : lấy $42 – Final Custom Fee để có được Partial amount(số tiền enter vào để thanh toán từng phần) -> Partial amount x Tax rate sẽ có được Tax for Custom Fee, trừ Tax for Custom Fee ra sẽ có được Base amount dùng để tính Custom Fee => từ những amount này đã có thể tính xuôi cho ra đúng Custom Fee và Tax for Custom Fee lúc đầu bằng Custom Fee% chứ ko cần dùng Base Amount Fee% nữa.
  • Option Sales tax already included in Custom Fee: Tương tự như Option add Sales tax for Custom Fee, tính Tax theo Tax rate trong $42 để trừ ra và có được Base amount để tính Final Custom Fee trước rồi mới tính Tax for Custom Fee sau đó trừ Tax for Custom Fee ra để có được Custom Fee (tính Final Custom Fee bằng Base amount Fee% vì lúc này thẻ ko đủ tiền nên phải tính ngược Final Custom Fee included bên trong $42), bước cuối cùng là lấy Base Amount lúc đầu trừ đi Tax lúc đầu tính từ Tax rate trong $42 là sẽ có được Base amount đúng, còn Tax lúc đầu vẫn giữ nguyên ko thay đổi => Tóm tắt lại cho case thẻ ko đủ tiền : đối với Option charge thêm Tax for Custom Fee thì cần tính Custom Fee và Tax for Custom Fee theo cách tính ngược từ $42(ko đủ tiền), sau đó lấy $42 trừ Custom Fee và Tax for Custom Fee ra để tính lại Tax và Base amount cho đúng đối với Option Tax for Custom Fee đã include bên trong thì tính Tax trong $42 trước (Tax này là tax đúng ko cần tính lại), sau đó trừ Tax ra có Base amount tạm để tính Final Custom Fee, Tax for Custom Fee và Custom Fee bên trong theo các tính ngược, cuối cùng là lấy Base amount tạm để trừ Final Custom Fee ra để có được Base amount đúng.