iVendNextDevelopers Request a sandbox

4. Configure first

What the cashier meets once the pack is applied: member price, reasons, a line detail, an IMEI, a void reason

Settings only, no code: the till gives a member their price, asks for a reason on a markdown and on a void, checks a line detail, and asks for the phone's IMEI.

Most of what a shop asks for is already in iVendNext as a setting. This chapter shows how to set it up: the shop's administrator sets these in iVendNext Desk, or runs a one-time script, and nothing of yours runs in the shop. It is for every builder, before any code: most needs stop here.

Reference implementation: Setting a shop up with no code with the sample ../samples/s5_config_pack/ (coded reasons, IMEI tracking, one more detail per line, member pricing), and A receipt laid out for your market with ../samples/s4_receipt_pack/.

When to use it

Always first: rung 1 of the ladder (chapter 3, which lists everything that is configuration). Check this chapter and chapter 16 before you propose an app. This chapter teaches the five set-ups the kit has built and tested.

You want The shop's own setting
A coded reason when a cashier voids, returns or discounts Reason Code Master rows, and the switch for that type in Retail Setting (a void reason also needs save_voided_transaction)
The IMEI of every phone sold, once the item's Has Serial No; the IMEI is the serial number, received with the stock
One more detail on a line, for goods with no serial number a Transaction Item Attribute (a name, a pattern, an order)
A member price one Customer Group per tier, and one promotion per tier that applies to the sale and excludes every other group
A receipt for your market: tax number, address, logo, a line per VAT rate, a second language a print format (chapter 7), then chosen on the till's POS Profile

Steps: reasons, IMEI, line detail, member pricing

  1. Copy config.json and change the names, codes and numbers to the shop's. It is the whole set-up as data. The PP CFG prefix is only there so the sample's test can find its records.

  2. Give the script a key of a user who may edit those records. System Manager, Retail Manager, Item Manager, Stock Manager and Sales Master Manager together are enough (measured). It is the administrator's key, used once.

  3. Run it:

    PP_BASE=https://your-shop PP_KEY=<api key> PP_SECRET=<api secret> python3 samples/s5_config_pack/apply_config.py
    

    You can run it twice: nothing doubles. Each run recomputes the member promotion's exclusion list, so if the shop adds a customer group later, run the script again and the new group is excluded. --remove undoes it, except the stock: the item, its price, the unsold serial numbers and the booked Material Receipt stay. On a real shop use your own IMEIs and quantities.

  4. The shop needs a default Company. A sale of a serial-tracked item takes its company from it. Without one, the first IMEI sale fails with "Error: Value missing for Serial and Batch Bundle: Company".

  5. Nothing to do at the till. The cashier is offered the reasons, asked for the IMEI, offered the line detail, and gets the member price once the member is attached to the sale. Each costs an extra step per line: switch on only what the shop will use.

Two limits to know before you rely on these settings:

Steps: a receipt for your market

A sale at two VAT rates, and its tax invoice in the till's Print sheet

A sale at two VAT rates, then its tax invoice in the till's Print sheet: logo, address, tax number, each line's VAT rate and the taxable value per rate, in English beside Arabic.

  1. Put the facts where the shop keeps them, not in the layout: the tax ID on the Company, and an Address linked to it. The sample reads them at print time, so one layout serves every company.

  2. Copy receipt.html and logo.png and edit the words, the order and the logo; the format's name starts with your prefix. VAT rates are read from each sale's own lines, never typed in, so a reprint should keep its old rate. Arabic sits beside English in a row marked right-to-left; the logo is written into the page. A script, a frame or an event attribute in a template is refused.

  3. Build and check, before anyone installs it:

    python3 samples/s4_receipt_pack/build.py
    python3 tools/manifest/validate.py samples/s4_receipt_pack/manifest.json     # VALID, exit 0
    
  4. Install the manifest (chapter 7: today we run the installer for you).

  5. Choose it on the till profile: Desk → POS Profile → the profile → Print Format → Save. This step is configuration; a manifest cannot do it yet. The till reads the format at each print, so it is live on the next receipt.

  6. Book a sale and open the Print sheet to see it.

Limits to know before you ship a receipt:

What is refused, and why

When your service is down, and when the till is offline

No service of yours is involved: everything here lives in the shop, so there is nothing to be down. Offline has not been tried for any part of this chapter. One limit is known: an offline sale prints a provisional slip only; the final receipt format is for the booked sale.

Technical notes

The pictures

Both were walked on our test bench on 2026-10-07, iVendNext POS app at 8dc36aab8, in the till frame (/pos?frame=terminal, 1440 wide). The S5 walk ends with the sale voided, so nothing was sold. The S4 walk sent nothing to a printer; the test bench's currency is the Rand, so the invoice shows R where a UAE shop shows its own. Each sample's README has the stills, step by step.

What the kit has proven

What it has not

See also

3. The ladder and the four rules · 7. Manifests · 9. The extension-point catalogue and requests · 14. Testing and release · 16. Possible, not possible, limits

This page in the kit