Skip to content

Feature: Tipping (separate tip_amount, customer-facing selection) #364

Open

Description

@khaira777

Feature: Tipping (separate tip_amount, customer-facing selection)

Summary

Tips must NOT be modeled as discount, tax, or service charge — they have their own ledger value. Add a bill-level tip_amount that is persisted separately for reporting.

Proposed MVP

  • Customer picks: No tip / 10% / 15% / 20% / Custom (on the customer-facing display or checkout).
  • Store tip_amount on the bill separately from sale/discount/service charge.
  • Configurable per store (many merchants want the prompt disabled entirely).
  • Foundation only — no staff attribution/pooling/tip-payout reports yet; that would need a proper tip ledger later.

Notes / current state

  • There is already a service_charge line modeled as a taxed charge (tax packs, main/routes/bills.ts), which is a fee, not a tip. This issue is about a distinct tip value.
  • Natural home is the customer-facing display work (tip selection on the second screen, cashier confirms, then payment).

Acceptance criteria

Activity

  1. araguz90 commented on Sep 10, 2026

    @araguz90

    Hello. First, I want to thank you for the software you’ve created; I’d like to leave a comment and share some ideas regarding this implementation.

    I had originally planned to fork the project and implement a tipping function myself, but I see you are already working on something—perhaps an even better implementation than what I had in mind.

    Real-world experience:
    At our food truck, cash tips are handed over immediately, but card tips involve a more complex workflow. We use a payment terminal that calculates the card surcharge and then asks the customer how much they want to tip (10%, 15%, 20%, custom amount, or no tip). Afterward, we manually note down the tip amount in a notebook (since the payment terminal's software doesn't generate reports showing which staff member received the tip or the specific amount).

    First idea:
    My idea was simply to implement a way to log servers and tips without affecting the customer's total bill. The server would enter the tip amount into their FloCafe screen; once the payment terminal confirmed the transaction, they would mark the order as paid on the FloCafe screen.

    The workflow would look like this:
    At checkout:
    Select the "Card" payment option.
    Display three text fields:

    • The first showing the logged-in user's name.
    • The second for the payment reference or transaction number provided by the terminal.
    • The third for the tip amount.
      Then, confirm the payment.

    Report:
    Include a report that allows filtering by date and by server/cashier to show the total tips for the day.

    Fraudulent tips

    Since Flocafe doesn't have its own dedicated payment gateway (though one might be implemented in the future),

    the tip amounts might differ between the two terminals—the Flocafe system and the card payment terminal. However, this can be resolved through regular audits: at the end of the month, the only tip report provided by the payment terminal is the total, and this must match the Flocafe tip report.

    That concludes my thoughts on this idea; I hope I’ve conveyed my concept clearly. English isn't my native language. I’m not sure if I’ll be able to implement this in my own Flork instance due to time constraints, but I’d be happy to provide feedback once I see the PR for this feature.

  2. khaira777 commented on Oct 23, 2026

    @khaira777
    ContributorAuthor

    Update from the #830 support close-out (verified against main @ 8e39053, 23 Oct):

    • There is still no tip code. tip_amount, gratuity and tips return 0 hits in main, shared and frontend/src, and docs/reference/daily-sales-export.md says "No tips".
    • Field requirements gathered since this issue was written:
      • +505 (27 Sep): a waiter tip percentage, removable per invoice, with tax untouched (the tip is outside the tax base).
      • +52 MX (27 Sep): today they use the manual "service charges" tax category as a workaround, and worry about the invoicing breakdown.
      • +55 BR (13 and 22 Sep): the service amount is paid to employees monthly, so they need it reported separately. Partly covered now: the optional or waivable service charge (feat(pos): unified charges and fees engine #947) and separate service_charge_total in the daily export.
    • Interim workaround available today: an optional percentage custom charge with no tax category, waivable per bill (feat(pos): unified charges and fees engine #947, feat(catalog): consolidate add-on editor and add charge presets (#1155, #1157) #1186). It is not attributed to a waiter.
    • Scope note (27 Sep): planned for after the next release, because taxes and reporting make it complex.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions