Skip to content

Overage surcharge and GST: the booking journal credits a CHARGE_ORG surcharge gross to PLATFORM_FEE while GST_PAYABLE is derived from the nominal price only #1466

Description

@teetangh

Context

#1460 (fixing #1458 and Sentry FAMILIARISE_WEB-28) made the BOOKING ledger posting balance on the INVOICE rail when a programme sets overageSurchargeBps > 0: the surcharge is the one funding amount outside Payment.originalAmount, so createEarningsFromPayment now credits it to PLATFORM_FEE (it is a markup the platform charges the organisation for exceeding its own cap, not consultant income).

That credit is booked gross. Payment.taxAmount, which is what the posting credits to GST_PAYABLE, is computed on the nominal price and is not re-derived for an overage. Under the Principal model (ADR 26) the surcharge is consideration for the same taxable supply, so 18% of it belongs in GST_PAYABLE and on the organisation's tax invoice.

What to check and align

  1. How lib/payments/billing/invoice-rollup.ts taxes an OVERAGE_INVOICE_ACCRUAL line: whether GST is applied on the line subtotal (then the invoice carries GST on the surcharge and the journal understates GST_PAYABLE by 18/118 or 18/100 of it, depending on whether the surcharge is tax-inclusive), or not at all (then the invoice is short).
  2. Decide whether surchargePaise is tax-inclusive or tax-exclusive at computeOverageForBooking, and make the journal split it into PLATFORM_FEE + GST_PAYABLE accordingly, matching the invoice.
  3. The nightly ledger reconciler should compare invoice tax totals against GST_PAYABLE credits per period so a drift of this class is caught.

No programme configures a surcharge today (both overageSurchargeBps writers default to 0), so this is dormant. It becomes launch-relevant the first time an operator sets a surcharge. CA question for the ADR 26 list: confirm the surcharge is part of the taxable value of the consultation supply rather than a separate service.

Activity

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

    complianceTax, regulatory, DPDP, consent, legal exposurefinancePayments, refunds, earnings, payouts, invoicing, ledgerlaunch: post-mvpFirst 90 days after launch — coverage, polish, operational maturitytech-debtRefactors, structure, dependency upgrades, cleanup

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions