Singapore Beverage Container Return Scheme
End-to-end validation across Backend Admin, QR Ordering, Android POS and Android Kiosk. Every case includes traceable evidence; applicable workflows include native, playable recordings.
Release assurance at a glance
Execution window: 11-12 August 2026
Business OFF - historical transaction interpretation
Disabling BCRS prevents the charge on new or unsettled orders. It does not erase a settled transaction's stored deposit, waiver, refund or RRFS values. Historical screens may suppress the active BCRS label when the module is OFF, while reports and audit evidence continue to use the stored financial values.
Server-authoritative controls
Enablement, deposit reconciliation, RRFS, waiver and refund safeguards.
Admin and QR ordering
Configuration, reporting, dine-in, pickup and customer-facing totals.
POS and kiosk
Cart calculation, settlement, receipt, history, refunds and offline behavior.
Defect closure register
| ID | Severity | Finding | Validated resolution | Status |
|---|---|---|---|---|
| DEV-BCRS-01 | Critical | QR boolean strings such as "0" were truthy and a later total effect could remove the deposit | Strict flag parser and shared calculator; 15 deterministic assertions passed | Closed |
| DEV-BCRS-02 | Critical | QR pickup could inherit dine-in service/type behavior | Pickup has no dine-in service charge, is non-RRFS, and sends Pickup consistently | Closed |
| DEV-BCRS-03 | Critical | QR dine-in sent location_id, while the backend read only business_location_id | Validated fallback added; transaction 9967924 stores deposit 0 and RRFS claim S$0.10 | Closed |
| DEV-BCRS-04 | High | Completed QR bill omitted persisted BCRS | Completed-order view now shows the separate non-GST row; transaction 9967925 verified | Closed |
| DEV-BCRS-05 | Critical | Client BCRS values could be stale or forged | Server validates product, pack, quantity, enablement, RRFS, waiver, and total delta | Closed |
| DEV-BCRS-06 | Critical | Refunds were not safely capped or audited | Original sale is scoped/locked; line allocation, reason, remaining amount, over-refund, and duplicate-refund guards added | Closed |
| DEV-BCRS-07 | High | Current switches suppressed historical BCRS data | Stored transaction values now drive sale/history/receipt/report rendering | Closed |
| DEV-BCRS-08 | High | Report 607 returned HTTP 500 from an unsupported shared-filter variable | Report uses only supported filters and loads successfully | Closed |
| DEV-BCRS-09 | High | POS waiver allowed an incomplete reason and survived eligible-cart changes | Mandatory selection/custom text and eligible-cart signature invalidation added | Closed |
| DEV-BCRS-10 | Medium | Invalid pack/quantity values could produce invalid deposits | Eligible pack must be integer >= 1; quantity is nonnegative on client and server | Closed |
| DEV-BCRS-11 | Critical | The paginated Android catalogue endpoint omitted BCRS product fields | Eligible/container fields are now mapped on the paginated response; S1 Coke Zero became eligible on the physical POS without changing the product | Closed |
| DEV-BCRS-12 | Critical | Normal POS refund routing omitted the deposit, while correction reasons could affect item quantity | Added BCRS refund routing calculator and five focused tests; full, deposit-only, partial, wrong-charge, and repeat-refund physical cases passed | Closed |
| DEV-BCRS-13 | Critical | The kiosk activity used a separate save builder that omitted BCRS fields, so the backend added S$0.10 a second time | The actual payload now includes deposit, RRFS, waiver, and reason fields; corrected transaction 9967967 stores S$3.10 and deposit S$0.10 | Closed |
Test case evidence
55 of 55 cases shown
TC_01Backend / Admin / ServerBusiness OFF
Disable BCRS at business level, then submit a new-order payload containing stale BCRS values.
New and unsettled orders must not charge BCRS while the business switch is OFF. Previously settled BCRS values remain stored for audit and reporting.
A new-order save request submitted while the business switch was OFF was normalized to deposit S$0.00 and RRFS claim S$0.00. The validation fixture was rolled back after the assertion; settled historical values were not changed.
TC_02QR Ordering / BackendBusiness ON
TC_03Backend / Admin / ServerLocation OFF
TC_04QR Ordering / BackendLocation ON
TC_05Android POS / BackendProduct eligible
TC_06Android POS / BackendProduct not eligible
TC_07QR Ordering / BackendSingle item
TC_08Android Kiosk / BackendMultiple items
TC_09Cross-channelMulti-pack
TC_10Android POS / BackendMixed cart
TC_11Android Kiosk / BackendIncrease quantity
TC_12Android Kiosk / BackendRemove item
TC_13QR Ordering / BackendGST exclusion
TC_14QR Ordering / BackendTotal calculation
TC_15QR Ordering / BackendRRFS dine-in
TC_16QR Ordering / BackendRRFS takeaway/pickup
TC_17Backend / Admin / ServerNon-RRFS
TC_18Android POS / BackendOpen waiver
TC_19Android POS / BackendApply waiver
TC_20Android POS / BackendMandatory waiver reason
TC_21Android POS / BackendWaiver persistence
TC_22Android POS / BackendWaiver then add item
TC_23Android POS / BackendDeposit row display
TC_24Android POS / BackendRemove deposit row
TC_25Android Kiosk / BackendCart quantity update
TC_26Android POS / BackendMixed removal
TC_27Android POS / BackendNormal POS order
TC_28Android POS / BackendWaiver order
TC_29QR Ordering / BackendRRFS order
TC_30Android POS / BackendFull refund
TC_31Android POS / BackendDeposit-only refund
TC_32Android POS / BackendWrong-charge refund
TC_33Android POS / BackendPartial refund
TC_34Backend / Admin / ServerOver-refund
TC_35Android POS / BackendDouble refund
TC_36Android Kiosk / BackendKiosk deposit
TC_37Android Kiosk / BackendNo kiosk waiver
TC_38QR Ordering / BackendQR deposit
TC_39QR Ordering / BackendRRFS QR
TC_40Backend / Admin / ServerBCRS report section
TC_41Backend / Admin / ServerRevenue excludes deposit
TC_42Backend / Admin / ServerRRFS claim report
TC_43Backend / Admin / ServerBusiness OFF + location ON
TC_44QR Ordering / BackendGST on deposit
TC_45QR Ordering / BackendRRFS wrong charge
TC_46Backend / Admin / ServerRefund more than paid
TC_47Android POS / BackendWaiver not saved
TC_48Backend / Admin / ServerInvalid pack value
TC_49Backend / Admin / ServerNegative quantity
TC_50Android Kiosk / BackendProduct change/no sync
TC_51Android POS / BackendWaiver without reason
TC_52Android POS / BackendAdd after waiver
TC_53Backend / Admin / ServerRefund non-BCRS item
TC_54Android POS / BackendDuplicate refund
TC_55Android Kiosk / BackendOffline mode
Playable video evidence
Native HTML5 playback · No third-party watermark
Recordings load only when played. Use full-screen mode for detailed Android and browser evidence. Each source recording is identified by a full SHA-256 integrity value.
Backend and admin regression walkthrough
Kiosk BCRS live purchase flow
Kiosk offline resilience
Kiosk payload correction verification
Kiosk settlement and receipt
POS cart, deposit and waiver flow
POS deposit-only refund
POS order and item refund
POS paginated product synchronization
POS partial-refund safeguards
POS corrected BCRS refund flow
QR RRFS dine-in end-to-end flow
QR takeaway BCRS end-to-end flow
QA handoff
Development validation is complete with no blocked cases. This portal and PDF are internal reference artifacts; QA acceptance remains subject to the team's formal sign-off.
- Prepared by
- Surendra K (Technical Manager)
- Document status
- Final · Development QA Pass
- Classification
- Internal - QA Reference











































