Warely — to digitalise, to simplifyBCRS QA Evidence PortalInternal · QA reference
Quality assurance · Final development validation

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.

01

Release assurance at a glance

Execution window: 11-12 August 2026

Validated55/55100% pass rate
Live evidence42Physical or browser execution
Automated13Deterministic assertions
Defects closed13Critical and high findings
Recordings13Inline video evidence
Blocked0No incomplete test cases
i

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.

Backend

Server-authoritative controls

Enablement, deposit reconciliation, RRFS, waiver and refund safeguards.

Web

Admin and QR ordering

Configuration, reporting, dine-in, pickup and customer-facing totals.

Android

POS and kiosk

Cart calculation, settlement, receipt, history, refunds and offline behavior.

02

Defect closure register

13 resolved · 0 open
IDSeverityFindingValidated resolutionStatus
DEV-BCRS-01CriticalQR boolean strings such as "0" were truthy and a later total effect could remove the depositStrict flag parser and shared calculator; 15 deterministic assertions passedClosed
DEV-BCRS-02CriticalQR pickup could inherit dine-in service/type behaviorPickup has no dine-in service charge, is non-RRFS, and sends Pickup consistentlyClosed
DEV-BCRS-03CriticalQR dine-in sent location_id, while the backend read only business_location_idValidated fallback added; transaction 9967924 stores deposit 0 and RRFS claim S$0.10Closed
DEV-BCRS-04HighCompleted QR bill omitted persisted BCRSCompleted-order view now shows the separate non-GST row; transaction 9967925 verifiedClosed
DEV-BCRS-05CriticalClient BCRS values could be stale or forgedServer validates product, pack, quantity, enablement, RRFS, waiver, and total deltaClosed
DEV-BCRS-06CriticalRefunds were not safely capped or auditedOriginal sale is scoped/locked; line allocation, reason, remaining amount, over-refund, and duplicate-refund guards addedClosed
DEV-BCRS-07HighCurrent switches suppressed historical BCRS dataStored transaction values now drive sale/history/receipt/report renderingClosed
DEV-BCRS-08HighReport 607 returned HTTP 500 from an unsupported shared-filter variableReport uses only supported filters and loads successfullyClosed
DEV-BCRS-09HighPOS waiver allowed an incomplete reason and survived eligible-cart changesMandatory selection/custom text and eligible-cart signature invalidation addedClosed
DEV-BCRS-10MediumInvalid pack/quantity values could produce invalid depositsEligible pack must be integer >= 1; quantity is nonnegative on client and serverClosed
DEV-BCRS-11CriticalThe paginated Android catalogue endpoint omitted BCRS product fieldsEligible/container fields are now mapped on the paginated response; S1 Coke Zero became eligible on the physical POS without changing the productClosed
DEV-BCRS-12CriticalNormal POS refund routing omitted the deposit, while correction reasons could affect item quantityAdded BCRS refund routing calculator and five focused tests; full, deposit-only, partial, wrong-charge, and repeat-refund physical cases passedClosed
DEV-BCRS-13CriticalThe kiosk activity used a separate save builder that omitted BCRS fields, so the backend added S$0.10 a second timeThe actual payload now includes deposit, RRFS, waiver, and reason fields; corrected transaction 9967967 stores S$3.10 and deposit S$0.10Closed
03

Test case evidence

55 of 55 cases shown

TC_01Backend / Admin / Server

Business OFF

HighPASS-AUTO
Procedure

Disable BCRS at business level, then submit a new-order payload containing stale BCRS values.

Expected

New and unsettled orders must not charge BCRS while the business switch is OFF. Previously settled BCRS values remain stored for audit and reporting.

Validated result

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 / Backend

Business ON

HighPASS-LIVE
Procedure

Enable BCRS

Expected

BCRS visible in product & location

Validated result

Goro configuration produced BCRS in QR, POS, and kiosk

TC_03Backend / Admin / Server

Location OFF

HighPASS-AUTO
Procedure

Disable BCRS in location

Expected

No deposit in POS

Validated result

Server cleared deposit while product remained sellable

TC_04QR Ordering / Backend

Location ON

HighPASS-LIVE
Procedure

Enable BCRS

Expected

Deposit applied

Validated result

Goro location produced S$0.10 deposit

TC_05Android POS / Backend

Product eligible

HighPASS-LIVE
Procedure

Enable BCRS in product

Expected

Deposit applied

Validated result

Product 93667 charged S$0.10 on all channels

TC_06Android POS / Backend

Product not eligible

HighPASS-LIVE
Procedure

Disable BCRS in product

Expected

No deposit

Validated result

Mixed carts did not charge product 93678/non-eligible item

TC_07QR Ordering / Backend

Single item

HighPASS-LIVE
Procedure

Add 1 item

Expected

Deposit = 0.10

Validated result

S$0.10 shown and persisted

TC_08Android Kiosk / Backend

Multiple items

HighPASS-AUTO
Procedure

Add 3 items

Expected

Deposit = 0.30

Validated result

Quantity evidence and deterministic calculator validation confirmed S$0.30 for three eligible containers.

TC_09Cross-channel

Multi-pack

HighPASS-AUTO
Procedure

Pack=6, qty=2

Expected

Deposit = 1.20

Validated result

Production QR calculator returned S$1.20 for quantity 2 with six containers per pack.

TC_10Android POS / Backend

Mixed cart

HighPASS-LIVE
Procedure

Add eligible + non-eligible

Expected

Deposit only for eligible

Validated result

QR/POS/kiosk mixed carts charged only one eligible deposit

TC_11Android Kiosk / Backend

Increase quantity

HighPASS-AUTO
Procedure

Increase quantity

Expected

Deposit updates

Validated result

Quantity increase recalculated immediately; physical kiosk quantity 2 displayed S$0.20.

TC_12Android Kiosk / Backend

Remove item

HighPASS-AUTO
Procedure

Remove BCRS item

Expected

Deposit removed

Validated result

Removing the final eligible item removed the deposit row and returned the deposit total to zero.

TC_13QR Ordering / Backend

GST exclusion

CriticalPASS-LIVE
Procedure

Add item + deposit

Expected

GST only on item

Validated result

Deposit stayed separate while item GST remained unchanged

TC_14QR Ordering / Backend

Total calculation

HighPASS-LIVE
Procedure

Verify total

Expected

Total = subtotal + GST + deposit

Validated result

QR, POS, and corrected kiosk totals reconciled

TC_15QR Ordering / Backend

RRFS dine-in

CriticalPASS-LIVE
Procedure

Enable RRFS + dine-in

Expected

Deposit = 0

Validated result

9967924: deposit 0, RRFS claim S$0.10

TC_16QR Ordering / Backend

RRFS takeaway/pickup

HighPASS-LIVE
Procedure

RRFS + takeaway

Expected

Deposit applied

Validated result

9967925: deposit S$0.10, RRFS claim 0

TC_17Backend / Admin / Server

Non-RRFS

HighPASS-AUTO
Procedure

Normal location

Expected

Deposit applied

Validated result

Server charged S$0.10

TC_18Android POS / Backend

Open waiver

HighPASS-LIVE
Procedure

Tap deposit row

Expected

Popup opens

Validated result

pos-bcrs-waiver-open.png

TC_19Android POS / Backend

Apply waiver

HighPASS-LIVE
Procedure

Select reason

Expected

Deposit = 0

Validated result

pos-bcrs-waived.png; deposit became zero

TC_20Android POS / Backend

Mandatory waiver reason

HighPASS-LIVE
Procedure

Select “Others” without text

Expected

Error shown

Validated result

pos-bcrs-waiver-reason-required.png

TC_21Android POS / Backend

Waiver persistence

CriticalPASS-LIVE
Procedure

Complete order

Expected

Waiver saved

Validated result

Sale 9967958 and order/history evidence retain waiver

TC_22Android POS / Backend

Waiver then add item

CriticalPASS-LIVE
Procedure

Apply waiver, add item

Expected

Deposit recalculated

Validated result

pos-bcrs-waiver-invalidated-add.png; deposit recalculated

TC_23Android POS / Backend

Deposit row display

HighPASS-LIVE
Procedure

Add BCRS item

Expected

Row visible

Validated result

pos-bcrs-mixed-cart.png

TC_24Android POS / Backend

Remove deposit row

HighPASS-LIVE
Procedure

Remove item

Expected

Row removed

Validated result

pos-bcrs-row-removed.png

TC_25Android Kiosk / Backend

Cart quantity update

HighPASS-LIVE
Procedure

Modify qty

Expected

Deposit updates

Validated result

Kiosk quantity 2 showed S$0.20 in kiosk-bcrs-qty2.png

TC_26Android POS / Backend

Mixed removal

HighPASS-LIVE
Procedure

Remove only BCRS item

Expected

Deposit cleared

Validated result

pos-bcrs-mixed-eligible-removed.png; deposit cleared

TC_27Android POS / Backend

Normal POS order

HighPASS-LIVE
Procedure

Place order

Expected

Deposit included

Validated result

Corrected physical sales 9967960, 9967962, 9967964

TC_28Android POS / Backend

Waiver order

HighPASS-LIVE
Procedure

Apply waiver

Expected

Deposit removed

Validated result

9967958; pos-waiver-order-complete.png

TC_29QR Ordering / Backend

RRFS order

CriticalPASS-LIVE
Procedure

RRFS dine-in

Expected

Deposit = 0

Validated result

QR dine-in 9967924

TC_30Android POS / Backend

Full refund

CriticalPASS-LIVE
Procedure

Refund item

Expected

Item + deposit refunded

Validated result

Sale 9967960 produced return 9967961 and ledger 11; the item and S$0.10 deposit were refunded.

TC_31Android POS / Backend

Deposit-only refund

HighPASS-LIVE
Procedure

Select “No container”

Expected

Only deposit refunded

Validated result

Sale 9967962 produced return 9967963 and ledger 12; only S$0.10 was refunded and item quantity_returned stayed zero.

TC_32Android POS / Backend

Wrong-charge refund

HighPASS-LIVE
Procedure

Select error reason

Expected

Deposit refunded

Validated result

Wrong-charge correction created ledger 14 for S$0.10 without changing item quantity_returned.

TC_33Android POS / Backend

Partial refund

HighPASS-LIVE
Procedure

Refund some items

Expected

Correct deposit refund

Validated result

Partial refund created return 9967965 and ledger 13 for the selected eligible line and S$0.10 deposit.

TC_34Backend / Admin / Server

Over-refund

CriticalPASS-AUTO
Procedure

Refund extra

Expected

Error shown

Validated result

S$0.20 against S$0.10 rejected

TC_35Android POS / Backend

Double refund

CriticalPASS-LIVE
Procedure

Refund twice

Expected

Second blocked

Validated result

Repeat attempt blocked; no new ledger

TC_36Android Kiosk / Backend

Kiosk deposit

HighPASS-LIVE
Procedure

Add item

Expected

Deposit shown

Validated result

Physical kiosk receipt and writer transaction 9967967 both show final S$3.10 and deposit S$0.10.

TC_37Android Kiosk / Backend

No kiosk waiver

HighPASS-LIVE
Procedure

Try waiver

Expected

Not allowed

Validated result

Physical kiosk has no waiver action; payload sends waiver false

TC_38QR Ordering / Backend

QR deposit

HighPASS-LIVE
Procedure

Add via QR

Expected

Deposit shown

Validated result

Pickup UI/request showed S$0.10

TC_39QR Ordering / Backend

RRFS QR

HighPASS-LIVE
Procedure

Dine-in QR

Expected

Deposit not charged

Validated result

Dine-in UI and writer charged zero customer deposit

TC_40Backend / Admin / Server

BCRS report section

HighPASS-LIVE
Procedure

Generate report

Expected

Section visible

Validated result

Historical details and reports show BCRS

TC_41Backend / Admin / Server

Revenue excludes deposit

CriticalPASS-LIVE
Procedure

Verify totals

Expected

Deposit NOT included

Validated result

All Sales, Report 607, Sales by Receipt, and Product Sell verified

TC_42Backend / Admin / Server

RRFS claim report

HighPASS-LIVE
Procedure

Check report

Expected

Claim shown

Validated result

Historical report and transaction evidence verified

TC_43Backend / Admin / Server

Business OFF + location ON

MediumPASS-AUTO
Procedure

Add item

Expected

No deposit

Validated result

Both flags are required

TC_44QR Ordering / Backend

GST on deposit

MediumPASS-LIVE
Procedure

Add item

Expected

GST NOT applied on deposit

Validated result

Separate deposit did not increase taxable GST

TC_45QR Ordering / Backend

RRFS wrong charge

MediumPASS-LIVE
Procedure

Dine-in

Expected

Deposit = 0

Validated result

Fixed location fallback verified in 9967924

TC_46Backend / Admin / Server

Refund more than paid

MediumPASS-AUTO
Procedure

Try extra refund

Expected

Blocked

Validated result

Remaining-deposit guard rejected request

TC_47Android POS / Backend

Waiver not saved

MediumPASS-LIVE
Procedure

Apply waiver

Expected

Saved in order

Validated result

9967958 proves waiver and reason persistence

TC_48Backend / Admin / Server

Invalid pack value

MediumPASS-AUTO
Procedure

Set pack=0

Expected

Error / no deposit

Validated result

Backend requires integer >= 1; clients clamp defensively

TC_49Backend / Admin / Server

Negative quantity

MediumPASS-AUTO
Procedure

Reduce below 0

Expected

Not allowed

Validated result

Server rejected it; client calculator returned zero

TC_50Android Kiosk / Backend

Product change/no sync

MediumPASS-LIVE
Procedure

Change product, no sync

Expected

Old data used

Validated result

During a guarded server eligibility change, the unsynchronized kiosk continued using its cached S$0.10 metadata; the product row was restored exactly.

TC_51Android POS / Backend

Waiver without reason

MediumPASS-LIVE
Procedure

Apply waiver

Expected

Error

Validated result

Physical POS blocked blank custom reason

TC_52Android POS / Backend

Add after waiver

MediumPASS-LIVE
Procedure

Add item after waiver

Expected

Deposit recalculated

Validated result

Physical add invalidated waiver and restored deposit

TC_53Backend / Admin / Server

Refund non-BCRS item

MediumPASS-AUTO
Procedure

Refund item

Expected

No deposit refund

Validated result

Backend rejected deposit allocation to product 93678

TC_54Android POS / Backend

Duplicate refund

MediumPASS-LIVE
Procedure

Trigger twice

Expected

One blocked

Validated result

Physical repeat attempt blocked; no second ledger

TC_55Android Kiosk / Backend

Offline mode

MediumPASS-LIVE
Procedure

Disable internet

Expected

Works correctly

Validated result

With Wi-Fi disabled, local BCRS remained correct, submit failed safely, the cart stayed intact, and no transaction newer than 9967967 was inserted.

04

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.

VID-01

Backend and admin regression walkthrough

41.5 MiBSHA-256 D97D02FC75B8…D1062513
VID-02

Kiosk BCRS live purchase flow

26.3 MiBSHA-256 25E87B9AE281…F129914B
VID-03

Kiosk offline resilience

28.0 MiBSHA-256 72200F4C7713…36E8DD56
VID-04

Kiosk payload correction verification

28.2 MiBSHA-256 484878433094…88C12025
VID-05

Kiosk settlement and receipt

45.1 MiBSHA-256 8FB3C16D346F…7DFCDB94
VID-06

POS cart, deposit and waiver flow

11.7 MiBSHA-256 5659CED461F1…7A6D34AB
VID-07

POS deposit-only refund

31.9 MiBSHA-256 75AE2EE18F2C…CD1509E8
VID-08

POS order and item refund

12.4 MiBSHA-256 4F27F6CAFE64…7F0F9CD4
VID-09

POS paginated product synchronization

16.9 MiBSHA-256 012634458A0C…CC1A4403
VID-10

POS partial-refund safeguards

38.6 MiBSHA-256 5040D8272CC3…D84EA76A
VID-11

POS corrected BCRS refund flow

23.5 MiBSHA-256 C370D906C510…7F9E1740
VID-12

QR RRFS dine-in end-to-end flow

66.8 MiBSHA-256 59D5ABF55CB4…67065865
VID-13

QR takeaway BCRS end-to-end flow

15.8 MiBSHA-256 7E0DA59DED7B…5A589FCD
05

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