Skip to content

OCR Cash Bill

Turn a member’s photograph of a receipt from another business into loyalty points: the platform reads the image, matches the merchant and each line against reference data kept here, and a reviewer corrects the mapping, rejects fakes and duplicates and finalises the document. Nothing here posts a journal, touches stock or creates a supplier invoice; points are the only output, and none are awarded unless BigLedger has switched on the points subscription for your tenant.

Your job, and the screen for it

The jobScreen or tabRead
Review a member’s receipt and award its points — map every line and check the merchant first, because once posted, a second FINAL changes nothingOCR Generic Doc: compare the Uploaded Image with the reading, Select Financial Item on each N/A line, then FINALWhat FINAL actually runs; One receipt, followed from photo to points
Refuse a fake, repeated or outdated receipt — FINAL overrides a rejection, so a refused receipt is simply left un-finalisedOCR Generic Doc › Main Details: Process Status REJECTED (with a Reason to Reject) or DUPLICATEOCR Generic Doc — Main Details; What FINAL actually runs
Teach the console a merchant’s item once for all its open receipts — a wrong pick is copied just as faithfullySelect Financial Item on a line; correct a bad mapping on the OCR Item screenThe learning link
Upload a receipt from the back officeScanned Receipt › Create; Execution Strategy reads it now or at the next scheduler passScreens and menus
Take back points awarded by mistakeNot this applet — there is no VOID; a negative point adjustment in the Membership Admin appletWhat it will not do, and who does it instead
Set up the price book’s point treatment and validity, the points currency and members’ cards — and have BigLedger switch on the points subscription, without which FINAL awards nothingPricebook and Membership Admin applets; the subscription is BigLedger’s, and no applet shows itBefore you can use it

Overview

OCR Cash Bill is the back-office console for a receipt-to-points loyalty programme. A member photographs a cash bill issued by some other business — a partner shop, a franchisee running its own till, a kiosk beside your branch — and uploads it from the e-commerce storefront or in store. The platform runs the image through AWS Textract, turns the extracted text into a structured OCR Generic Document, matches the merchant and each line item against reference data the applet maintains, and — once a reviewer finalises the document — converts the matched lines into membership points on the member’s card.

This applet is where a reviewer looks at what the machine read, corrects the item mapping, rejects the fakes and the duplicates, and presses FINAL. It is the only screen on which any of that is visible.

Who needed it. A retail group whose members also spend at businesses it does not ring up — a partner kiosk, a franchisee on its own till — and who wants that spending to earn the same points. The receipt is the only evidence of the purchase, so the design is built around a person looking at the photo before anything is awarded: the machine reads, matches and flags, and FINAL is a human decision.

This is not an accounts-payable tool. Nothing here posts a journal, touches stock, creates a supplier invoice or feeds the general ledger (see Lifecycle and effects). The only thing FINAL produces is membership points. The “OCR Company” master data holds third-party merchants, not companies in your own group.

Where it fits

DirectionApplet / componentWhy
UpstreamThe storefront or in-store uploadWhere the member’s photograph actually enters the system; the receipt records whether it came through ECOMMERCE or STORE
UpstreamAWS TextractThe extraction engine that reads the photograph, once
BesidePricebookThe price book whose price sets carry a POINT treatment is what decides how many points a matched line is worth
BesideThe points subscription (no applet shows it)Nothing happens on FINAL unless your tenant holds the subscription that links the OCR posting job to the price-book points job; it also names the company, branch and price book the points are booked under. BigLedger sets it — see How work actually runs
BesideItem MaintenanceAn OCR Item is linked to one of your financial items; that link is what the price book’s item rules test
DownstreamMembership AdminThe points land on the member’s card, on the Point Transaction tab, and roll into the current balance

Screens and menus

Eight screens exist. Six are linked from the sidebar; two have no menu entry and are reachable only by typing their address.

Menu itemRouteWhat it is
Scanned Receiptscanned-receiptThe raw upload record — image, status, verification status, and what the OCR read. Create here to upload a receipt from the back office
OCR Generic Dococr-generic-docThe review screen and the applet’s landing page. One row per extracted receipt: doc no, receipt date, merchant (OCR Retailer), confidence level, verification status, process status, posting status, membership points
OCR Generic Doc Line Itemocr-generic-doc-line-itemThe same lines, listed flat across all documents, with the Select Financial Item picker
OCR Companyocr-companyThird-party merchant master: code, name, description, country, address, postal code, city
OCR Itemocr-itemMerchant item master: the item code and name as that merchant prints them, and the link to your financial item
OCR Scanned Doc Reportocr-reportAsynchronous CSV export. Set optional created/updated date ranges, press Generate CSV, then download from the row’s action button when its status reaches DONE
(not linked)ocr-branchOCR Branch master. Works, but has no menu entry
(not linked)inv-itemAn inventory-item listing. No menu entry

Two broken links are visible in the chrome rather than the content:

  • The shared settings sidebar shows Permission Wizard, Release Notes and Audit Trail; this applet has none of the three, so all three open a 404. (Permission Set, User Permission and Role Permission work.)
  • Personalization → Field Settings opens a 404 — the screen exists only under Settings.
Scanned Receipt create form with the Execution Strategy drop-down open showing RUN_NOW and INSERT_TO_QUEUE
Scanned Receipt → Create. Execution Strategy decides whether the OCR reads the receipt during the request or later, when the background scheduler next passes.

Configuration

Before you can use it

PrerequisiteWhereWhy
A price book with a POINT treatment, and a Validity Period (Days) on itPricebookThe points job fails if the matched price-set line has no point treatment. The validity days are counted from the receipt date; with none set, the points’ end date is the receipt date itself, so they are already past their end date when they are written
A points currencyMembership Admin (PTS CCY Module)The point treatment names a points currency; a missing one makes the points job fail
A membership card for the uploading memberMembership AdminWithout one the points job fails, and the FINAL button fails earlier still (see Troubleshooting)
The points subscription on your tenant, naming a company, a branch and the price bookBigLedger — no applet shows or edits itThe OCR posting job starts only the subscriptions your tenant holds. With none, FINAL updates the status and awards nothing, silently. Every OCR point is booked to the company and branch the subscription names, not to wherever the member usually shops
Financial items to map OCR items ontoItem MaintenanceThe financial item a line is mapped to is what the price book’s item and category rules test, and the item the points are awarded against

Applet settings

Settings › Field Settings. This applet does not use the shared Field Configuration screen that most document applets use — it has its own two-toggle screen, and both toggles change what the listing’s advanced search offers you rather than what it looks like. Both are off until somebody saves them, and an applet with no saved settings row behaves as though both are off. How settings are stored and who they apply to.

The first toggle, HIDE_CUSTOMER_ADVANCED_SEARCH, takes the Customer criterion off the OCR Generic Doc listing’s advanced search. It is a hide toggle and you can see what it did immediately, but one consequence is not on the screen: the criterion’s label, data type, form control and options are all deleted from the search model before the panel renders, so a saved search that used Customer stops filtering by it rather than warning you. Absent means shown — the consuming code simply does not take the branch.

The second changes what the panel can do, so it gets a row:

SettingWhat changesDefault when never savedAdvisory or hard
ENABLE_MEMBER_ADVANCED_SEARCH — the screen’s label is the identifierAdds a multi-select Member criterion to the front of the advanced search on the OCR Generic Doc listing. This is the one to switch on if the back office chases one member’s receipts rather than one merchant’s: it lets you pick the member by name or card. Without it, pick the member’s customer record in the Customer criterion instead, which filters the same column. Either way only the first person picked is applied, so search one member at a timeAbsent. The criterion is only added when the key is trueNeither: it changes what you can search by, not what the server will accept

Both keys are read by exactly one component — the listing’s search panel. No other screen consults them, and neither reaches the server.

This applet’s settings screen labels each toggle with the raw identifier — the visible text on the screen is literally HIDE_CUSTOMER_ADVANCED_SEARCH. That is unusual, and it is why the table above prints the identifier as the setting’s name: here the identifier is the reader’s label.

On the screen and doing nothing

Settings › Default Selection renders four controls — Default Branch, Default Location, Default Company and Default Timezone — and saves all four into the applet’s settings. No screen in this applet reads any of them. Picking a branch does fill Default Company from that branch’s company and Default Location from its main location, so the four values stay internally consistent; they simply have no consumer, and a new OCR document does not open pre-filled with them.

  • The default time zone is the one to be careful about, because a time zone is the kind of setting a reader will assume is being applied to the receipt dates they are looking at. It is not applied anywhere.
  • DEFAULT_BRANCH, DEFAULT_LOCATION and DEFAULT_COMPANY behave the same way. The only thing that reads them back is the settings screen itself, re-displaying what you saved. In particular, the branch the points are booked to comes from the points subscription, not from Default Branch.

Personalization › Default Selection is worse than unused: it cannot save. The first change to either drop-down fails with Cannot read properties of undefined in the browser console, and SAVE saves nothing. Treat the screen as absent.

Settings in other places that control this applet

Four validation thresholds are set per tenant by BigLedger support, not on any screen here (they are stored under OCR_GENERIC_DOC_VALIDATION). An absent or unreadable value falls back to the default.

KeyWhat it controlsDefault when unset
OCR_SUBMISSION_LIMIT_DURING_PERIODHow many receipts one member may have dated in the current calendar month before the next one is auto-rejected. The receipt being checked is counted with the others, so the receipt that brings the count to this number is the one rejected: on the default, six pass and the seventh is rejected7
OCR_OUTDATED_RECEIPT_PERIOD_IN_DAYS (and …_FOR_ECOMMERCE for e-commerce receipts)How old a receipt may be before it is auto-rejected as Outdated receipt. The e-commerce value applies only to receipts from the e-commerce channel; every other channel uses the first one1 (e-commerce 14)
OCR_SUBMISSION_LIMIT_PERIOD_IN_DAYSDoes nothing. The submission window is always “receipts dated on or after the first day of the current month”—

The age is measured in 24-hour periods back from the moment the receipt is processed, against the receipt date — not in calendar days — so the default of 1 is tighter than “yesterday’s receipt is fine” suggests. A receipt dated more than a day in the future (a misread date, for instance) is rejected with the same Outdated receipt reason, which is misleading when you read it on the member’s complaint.

The monthly count goes by receipt date, not upload date: a receipt from the last days of the previous month, uploaded on the 2nd, does not count against this month. It counts every OCR document the member has with a receipt date in the month — ones rejected and ones a reviewer marked duplicate included. A photo the duplicate check caught does not make a new document, so it does not add to the count.

Three further thresholds are fixed and cannot be configured at all: the verification pass mark, how closely a merchant’s name must match an existing OCR Company, and how closely a scanned line must match an existing OCR Item.

Who can change what

Client-side permissions this applet defines: none. The registry holds zero active client-side permission definitions for applet code OCR Cash Bill, so neither Field Settings toggle can be reopened for one team and closed for another — each is an all-or-nothing tenant-wide switch, and anyone who can open the applet’s Settings section can flip it. If you need two groups of back-office staff to see different search panels, this applet cannot do it.

Pressing FINAL from the back office needs the OCR Generic Document update permission (or its owner or admin permission) on that document — set in Permission Set, User Permission or Role Permission like any other. FINAL is the decision that spends the programme’s money, so give it to the people who review, and not to everyone who can open the listing.

Fields

OCR Generic Doc — Main Details

FieldMeaningEditableNotes
Doc NoThe receipt number the OCR readNoFrequently blank; duplicate detection falls back to date + merchant + item codes + total when it is
AmountComputed in the browser as the sum of the line amounts — not the extracted header totalNoA mismatch against the extracted header total is what set verification status to FLAGGED when the receipt was read
Receipt DateThe date and time the OCR read off the receiptYesThe outdated-receipt rule tested it once, when the receipt was read; changing it later does not re-run that rule. What it still decides is the date of the member’s points line and the start of the points’ validity
Verification StatusPASS, FAIL, FLAGGEDNo — the control is [disabled]="true"Machine-set once, when the receipt is read; your corrections do not change it. See Lifecycle
Process StatusPENDING_REVIEW, DUPLICATE, REJECTEDYesStored on the scanned receipt, not on this document. APPROVED is deliberately removed from the drop-down — only the points job sets it. FINAL does not read this field (see What FINAL actually runs)
Reason to RejectOne of six fixed stringsYes, and only while Process Status is REJECTEDCleared automatically when Process Status moves off REJECTED, and cleared by FINAL; the control is disabled once the document is FINAL
Membership Points / Points Currency / Points TypeThe points awardedNoRendered only when posting status is FINAL. Membership Points is the browser’s sum of the lines’ points; the listing shows the same sum in its Membership Points column

The panel also shows Created Date, Updated By and the Uploaded Image (with rotate and zoom), the matched merchant as Company — changed through Select OCR Company — and a Status of Active or Close; choosing Close only asks you to confirm.

The six rejection reasons are fixed in the applet, not configurable: Outdated receipt, Non-related receipt, Duplicated receipt, Incomplete details, Exceeded Monthly Submission Limit (Max. 7 receipts per month), More than 1 receipt. The parenthetical “Max. 7” in the fifth is a label, not the limit — the limit is the configurable OCR_SUBMISSION_LIMIT_DURING_PERIOD above, and the label does not follow it.

OCR Generic Doc Line Item

FieldMeaningRequiredNotes
Financial ItemYour item, chosen through Select Financial ItemYesShows N/A until set. Setting it also creates a permanent OCR-item → financial-item link (see below). A line left at N/A earns nothing from an item or category rule
CompanyThe merchant—Shows Unknown where the OCR Item was auto-created without a merchant
Quantity, Unit PriceWhat the receipt line saysYesChanging either one rewrites the line amount as quantity × unit price, replacing whatever amount the OCR read for the line — and the document’s Amount is the sum of the line amounts. Correct the line amount this way only when the receipt really shows that price, because a point treatment that multiplies the amount awards on the corrected figure
Point AmtThe points on this lineNoWritten by the points job at FINAL, one figure per line it matched

Each line also carries its parent document number (read-only), the Item Code, Item Name and Description as the merchant printed them (upper-cased, from the matched OCR Item), free-text Remarks and a Status.

Lifecycle and effects

What posting does

DocumentNot a financial document — no amounts or quantities that post
JournalNone. No GL code is used anywhere in the OCR pipeline
StockNone
What VOID reversesThere is no VOID. The posting status has exactly one value, FINAL, and the applet offers no way back. Points awarded by mistake come off with a negative point adjustment in Membership Admin
What FINAL does produceMembership points — one points line per receipt line the price book matched — and the receipt marked as posted for membership

The pipeline

    flowchart TD
    U["Member uploads a receipt photo<br/>(storefront or in store)"] --> SD["Scanned Receipt created<br/>Process Status PENDING_REVIEW"]
    SD -->|"now, or at the next scheduler pass"| TX["AWS Textract reads the photo<br/>result stored once"]
    TX -->|"straight away"| GD["OCR Generic Doc created"]
    GD --> M["Merchant match · item match · validation<br/>confidence, duplicates, limits, age"]
    M --> RV["Reviewer opens OCR Generic Doc<br/>checks the photo, corrects the mapping"]
    RV -->|FINAL| PP["The OCR posting job"]
    PP -->|"the subscription your tenant holds"| PB["Points job: evaluates the price book"]
    PB --> PT["Membership points lines<br/>lines written back · receipt APPROVED"]
    PT --> BAL["Member's balance and lots updated"]
  

What the server decides before a human sees it

Extraction. The OCR reads the receipt’s summary fields into the header and its item lines into the lines. Each value comes with the OCR’s confidence in it. The result is stored on the scanned receipt the first time and never requested again: if a photo was read badly, the reading does not improve by waiting — the reviewer corrects it, or the member photographs the bill again. Only the first receipt the OCR finds in the photo is kept, and a line on which it read neither an item code nor an item name is dropped before the document is made, so it never appears on the console at all.

Verification status. The document’s confidence level is the average confidence across the fields actually used. At or above a fixed pass mark it is PASS, below it FAIL — the same rule is applied independently to each line. Afterwards, if the extracted header total does not exactly equal the sum of the line amounts (or the header total is missing), a PASS is downgraded to FLAGGED. All of this is worked out once, when the receipt is read.

Merchant matching. The extracted merchant name is compared against the existing OCR Companies; if none is close enough, a new OCR Company is created.

Item matching. Each scanned line is compared with every OCR Item of that merchant, on item code, item name and unit price. The best candidate wins if it is close enough; otherwise a new OCR Item is created and linked. If the winning OCR Item is already mapped to one of your financial items, that mapping is copied onto the line immediately.

Duplicate detection. If the receipt number was read, a duplicate is an existing document with the same number and merchant at about the same time on the same date. If it was not, the match is on merchant, time, the same set of scanned item codes and an identical total. A match sets the scanned receipt to DUPLICATE / FAIL and reuses the existing document rather than creating a second one.

Two cases are never compared at all: a receipt whose date the OCR could not read, and one whose merchant it could not match. Both skip the check rather than fail it, so the same receipt uploaded twice and matched to two different merchants — or with its date unreadable both times — goes through as two receipts. Both searches also look only one hour either side of the receipt’s time, so a reprint carrying a later timestamp is a new receipt as far as the check is concerned.

Auto-rejection. Four rules run, and only the first one that fires is recorded: monthly submission limit reached; receipt older than the configured window or dated more than a day in the future; more than one receipt number and more than one date and more than one total detected (read as “more than one receipt in the photo”); or incomplete details — no merchant, no receipt date, or any line without a matched OCR item. Any of them sets the scanned receipt to REJECTED / FAIL and writes the reason onto the document.

The figures on the console, and the source of each

When a member or a colleague asks “where did this number come from?”, each figure on the console has one writer and one moment.

FigureWritten byWhenWhat changes it afterwards
Doc No, Receipt Date, merchant (Company, OCR Retailer on the listing)The intake job, from the OCR readingOnce, when the receipt is readYour edit. Changing the merchant through Select OCR Company does not re-run the duplicate check
Line Qty, Unit Price, line amountThe intake job; when the OCR read only two of the three, it works out the thirdOnce, when the receipt is readYour edit of Qty or Unit Price, which rewrites the line amount
AmountYour browser, adding up the line amountsEvery time the screen loadsAny line edit
Confidence Level, Verification StatusThe intake jobOnce, when the receipt is readNothing — they describe the reading, not the corrected document
Process StatusThe intake job (PENDING_REVIEW, DUPLICATE, REJECTED); you (any of those three); the points job (APPROVED)At reading, at your edit, at FINALIt lives on the scanned receipt, which is why the Scanned Receipt screen shows the same value
Financial Item on a lineCopied from the OCR Item’s mapping at reading, or set by youAt reading, or when you pick itYour pick on another receipt of the same merchant fills it here too, while this one is not yet FINAL (see The learning link)
Point Amt, Membership Points, Points Currency, Points TypeThe points job, from the price book named on the subscriptionAt FINALNothing — the document is then marked posted and the job skips it ever after

What FINAL actually runs

Pressing FINAL first finds the member: if the document has no membership card yet, the applet looks up the card by the uploading login and customer and records it on the document and the scanned receipt, then finalises. On both paths it also clears the rejection reason — finalising a rejected receipt erases the reason it was rejected.

FINAL is the approval, and it overrides a rejection. The points job does not read Process Status. A receipt the server rejected — or one you marked REJECTED or DUPLICATE — earns points the moment somebody finalises it, and the points job then sets its Process Status to APPROVED. That is the deliberate way to overrule an auto-rejection you disagree with (a bill the one-day window caught, for example). It is also why a receipt you mean to refuse is simply left un-finalised.

The server then starts the OCR posting job. That job does no work of its own: it starts each points subscription your tenant holds, passing on the company, branch and price book the subscription names. The subscription runs straight away; if it fails, the background scheduler retries it, up to five attempts in all, and then drops it without a message on any screen. One subscription is wired in the product:

  • Membership points from the price book. It evaluates the price book’s rules against each document line — the merchant rule against the document’s OCR Company, and the item and category rules against each line’s mapped financial item — works out the points from the line’s amount or quantity, writes them back onto the line (type REWARD, currency, validity window, amount), creates one membership points line per matched receipt line, marks the document posted and finally sets the scanned receipt to APPROVED. All of that succeeds or fails together. The points line is dated with the receipt date, carries the subscription’s company and branch, and shows the job’s own name in the member’s Source column.

The document is marked posted even when no line matched. A receipt finalised with a line still at N/A, or matched to the wrong merchant, earns points only on the lines the price book did match — and because the document is now posted, pressing FINAL again changes nothing. Map every line, and check the merchant, before FINAL.

A second points job — one that copies a point amount already sitting on each line instead of reading a price book — is in the product, but no subscription links it to the OCR posting job, so a FINAL never starts it. If you have read elsewhere that OCR Cash Bill can award “without a price book”, that is this job, and it does not run.

One receipt, followed from photo to points

The scenario. GadgetSphere runs its member programme in a points currency GSPTS, and pays partner points on accessories bought at an independent accessory kiosk that trades beside branch GS-KV-03 on its own till. The price book on GadgetSphere’s OCR subscription has one price set for the kiosk: a merchant rule naming the kiosk’s OCR Company, a category rule for Accessories, and a POINT treatment of one point per ringgit of line amount, valid for 365 days. The subscription books the points to GadgetSphere Sdn Bhd, branch GS-KV-01.

14 March, 3.40 pm. A member photographs the kiosk’s cash bill in the storefront: a screen protector at RM 39.00, a USB-C cable at RM 25.00 and a clear phone case at RM 45.00 — RM 109.00.

What the console shows a minute later. One row on OCR Generic Doc: the kiosk as OCR Retailer, Verification Status PASS (the reading was confident enough, and the three lines add up to the RM 109.00 the OCR read as the total), Process Status PENDING_REVIEW, Posting Status empty, Membership Points 0.00. Open it: the first two lines carry financial items already, because the kiosk’s screen protector and cable were mapped on earlier receipts. The third, printed as PHONE CASE CLR, is new to the kiosk’s catalogue — the server created an OCR Item for it, and its Financial Item reads N/A.

The review. You compare the photo with the reading: the kiosk’s name and the date, the three prices, the total. Then on the third line you pick the clear phone case from your item master (in the Accessories category). That pick maps the kiosk’s PHONE CASE CLR to your item for good, and fills the same line on any other open receipt from the kiosk.

FINAL. Posting Status turns FINAL, the points job runs, and on reload Membership Points reads 109.00 in GSPTS, type REWARD; each line’s Point Amt reads 39, 25 and 45; Process Status reads APPROVED here and on Scanned Receipt. Nothing reaches the journal, stock or the kiosk’s account.

In Membership Admin. The member’s Point Transaction tab gains three REWARD lines dated 14 March — 39, 25 and 45 — whose Source reads OcrGenericDocMembershipPointsPriceBookProcessor; the Details tab’s Current Point Balance rises by 109; Points Expiry shows the lots ending on 14 March the next year.

Had you pressed FINAL first. The phone-case line would have matched no category rule, the member would have received 64 points, and the document would already be posted — a second FINAL changes nothing. The 45 points then go on by hand as a point adjustment in Membership Admin, with a remark naming the receipt’s doc no, by somebody allowed to adjust points.

Status model

StatusValuesWho sets it
Verification statusPASS, FAIL, FLAGGEDServer only, once, when the receipt is read. The UI control is disabled
Process statusPENDING_REVIEW, DUPLICATE, REJECTED, APPROVEDReviewer sets the first three; APPROVED is written only by the points job, at the moment the points are created. Held on the scanned receipt
Posting statusFINAL (or empty)The reviewer, by pressing FINAL
Membership postingPOSTED (or empty)The points job. It is what stops points being awarded twice — the job skips a document already marked POSTED

The learning link

Setting a line’s Financial Item does more than fix that line. It maps the OCR Item itself to that financial item, and then back-fills every other non-FINAL line that carries the same OCR item and the same merchant and has no financial item yet. One correction can therefore change many open documents at once, and it is the mechanism by which a merchant’s catalogue becomes self-maintaining. The flip side: a wrong pick is copied just as faithfully, so correct a bad mapping on the OCR Item screen as soon as you spot it, before more receipts inherit it.

What success looks like: one receipt, three places that agree

Run this on your own tenant, on one receipt finalised this week; it takes about thirty seconds. (A demo tenant may have no OCR subscription, so the check is written for the tenant that runs your programme.)

  1. The console. Open the receipt on OCR Generic Doc. Note Membership Points and each line’s Point Amt, and that Process Status reads APPROVED.
  2. The member’s points history. In Membership Admin, open the member and the Point Transaction tab. Find the REWARD lines dated with the receipt date whose Source is the OCR price-book job. There is one per line that has a Point Amt, and their Points add up to Membership Points.
  3. The member’s balance and lots. The Details tab’s Current Point Balance must equal the sum of the Point Transaction tab for that currency, and Points Expiry must show the lots with an end date after today.

Pass is three places that agree. When they do not:

What you seeWhat it meansWho repairs it, and how
Posting Status FINAL, Membership Points 0.00, Process Status not APPROVED, no REWARD linesThe points job never ran or failed: no subscription on the tenant, a price set with no point treatment, a missing points currency or a missing cardWhoever runs the programme fixes the cause, then presses FINAL again: Troubleshooting, rows FINAL succeeds … never reaches APPROVED and FINAL succeeds, no points, and the price book is named
Process Status APPROVED, but Membership Points is less than you expected and some lines have no Point AmtThose lines matched no price setThe programme owner adds the missing points by hand: Troubleshooting, Points arrived for some lines and not others
A line shows a Point Amt but no REWARD line matches itThat figure was not written by the points job, and nothing was awarded for itTreat the REWARD lines as the truth; adjust by hand if the line should have earned
REWARD lines present, but the Details balance has not movedThe balance is a stored figure kept by a separate job, and it is behindFollow the membership points chain: re-drive the balance; never adjust to make the numbers meet
The lots end on the receipt date itselfThe point treatment has no Validity Period (Days)Troubleshooting, The new points’ lots end on the receipt date

What it will not do, and who does it instead

  • It does not decide whether a bill is genuine. The machine reads and flags; the reviewer decides, before FINAL, by comparing the photo with what was read — the merchant, the date and time, every price, the total — and with what that merchant’s real bills look like. A reviewer who knows a merchant notices a doctored total that the duplicate check will not.
  • It does not catch every repeat. A photo whose date or merchant was not read, or a reprint with a later time, passes the duplicate check. The reviewer searches the member’s other receipts (the advanced search’s Customer or Member criterion) before finalising a large one.
  • It does not stop a reviewer finalising a rejected receipt. That is by design — FINAL is the override. Keep the people who review receipts separate from the people who set the price book, and have the programme owner read the month’s finalised receipts once a month: anything with a large Membership Points figure, and any receipt finalised after the server rejected it.
  • It does not keep the rejection reason once a receipt is finalised. When you override a rejection, write down what the reason was and why you overrode it, in whatever log your team keeps, before you press FINAL.
  • It does not settle a dispute with a member. When a member challenges a rejection, the programme owner decides, from the photo (it stays on Scanned Receipt) and the programme’s own rules. Overruled means FINAL; upheld means the receipt stays rejected and the member is told why.
  • It does not take points back. There is no VOID. Points awarded in error come off as a negative point adjustment in Membership Admin, with a remark naming the receipt.
  • It does not account for the points. Nothing here journals the cost of the points you have promised; finance carries that liability — see Points liability, and remember that every OCR point is booked to the one company and branch the subscription names.

Related applets

  • Pricebook — the price book BigLedger names for the OCR points job is what converts a matched line into a number of points; its Calculation Logic is honoured by the points job and by almost nothing else. Unlike the till, the OCR job tests the price set’s OCR Company rule, and treats a price set with no single-line rule as matching every line.
  • Membership Admin — the member’s card, the Point Transaction tab the points land on, the balance, and the point adjustment that repairs a short award.
  • The points currency the price-book treatment names is defined in Membership Admin’s PTS CCY Module.
  • Item Maintenance — the financial items OCR items are mapped onto; their categories are what a category rule tests.
  • Scheduler — the background scheduler that reads a receipt queued with INSERT_TO_QUEUE and retries a failed points job. The OCR subscription itself is not a clock and does not appear there.

Troubleshooting

SymptomCauseFix
FINAL succeeds, posting status shows FINAL, no points appear and Process Status never reaches APPROVEDThe OCR posting job starts only the subscriptions your tenant holds. With none it starts nothing and finishes normally — no error, nothing on the documentAsk BigLedger to switch on the OCR points subscription, naming the company, branch and price book; then press FINAL again on the receipts that missed out — the document was never marked posted, so FINAL starts the job afresh
Pressing FINAL throws in the browser and the document does not changeThe member lookup found no membership card for the uploading login and customer, and the screen fails before anything is sentCreate the membership card first
FINAL succeeds, no points, and the price book is named on the subscriptionThe price set that matched has no POINT treatment, or the treatment names a points currency that does not exist, or the card on the document is goneFix the price set or the currency, then press FINAL again
Points arrived for some lines and not othersThose lines matched no price set: a financial item still N/A, an item outside the rule’s category, or the receipt matched to a different OCR Company than the price set namesMap lines and check the merchant before FINAL. This receipt is posted, so FINAL will not revisit it: the programme owner adds the missing points as a point adjustment in Membership Admin, with the receipt’s doc no in the remark
A receipt is on Scanned Receipt but has no OCR Generic DocThe OCR found no receipt summary in the photo (blurred, cropped, not a receipt), or it was uploaded with INSERT_TO_QUEUE and the scheduler has not reached itWait one scheduler pass for a queued upload; otherwise ask the member for a clearer photo
A line on the paper receipt is missing from the consoleThe OCR read neither an item code nor a name on that line, and such lines are droppedJudge the receipt from the photo; the missing line earns nothing unless you add points by hand
A receipt is rejected as Exceeded Monthly Submission Limit although the member submitted fewer than the configured numberThe count includes the receipt being checked, and every OCR document of that member dated in the month — rejected ones includedHave OCR_SUBMISSION_LIMIT_DURING_PERIOD set one higher than the number you mean to allow; the window itself is not configurable
A receipt is rejected as Outdated receipt on the day it was issuedThe default window is one day for store-channel uploads. A receipt from the previous day fails itAsk BigLedger support to set OCR_OUTDATED_RECEIPT_PERIOD_IN_DAYS for your tenant
Verification status is FLAGGED on an otherwise clean receiptExtracted header total ≠ sum of the line amounts. Very common where the OCR reads a subtotal, a rounding line or a service charge inconsistentlyCorrect the line amounts; the flag is advisory, does not block FINAL, and stays on the document after you correct it
A rejected receipt loses its rejection reasonFINAL clears the rejection reasonRecord the reason elsewhere before finalising, or do not finalise rejected receipts
A receipt you rejected shows APPROVED and earned pointsSomebody pressed FINAL on it; FINAL does not read Process StatusTake the points back with a negative point adjustment in Membership Admin
FINAL can be pressed again on an already-final documentThe button is never disabled. The re-run is harmless — the points job skips a document already marked POSTED—
The new points’ lots end on the receipt date (Points Expiry tab)The point treatment has no Validity Period (Days), so the validity window is zero days longSet the validity on the price set for future receipts; extend the existing lots in Points Expiry only if the programme owner agrees
Settings → Permission Wizard, Release Notes or Audit Trail is a 404The shared settings sidebar shows those three links; this applet has none of them—
Personalization → Field Settings is a 404The screen exists only under SettingsUse Settings → Field Settings
Personalization → Default Selection saves nothing and the console shows Cannot read properties of undefinedThe screen does not workUse Settings → Default Selection — though its four settings are not used anywhere either

Related documentation

Last updated on