Configuration Wizard

Build and manage client configuration files

No client selected — start a new config or select one from the sidebar
1

Client Information

Used when a group in Step 3 has no delivery emails of its own, and for v1.1 email-triggered runs.

Skip assets newer than this many days — not enough sales data yet. Set to 0 to disable.

If a coil hasn't sold in this many days, force its par down to the min par — overrides the Avg Daily Vends math. Catches occasional bad ADV output from Cantaloupe on very slow items. Set to 0 to disable. Per-asset-class overrides live in each asset class section.

What mode scheduled cron runs use for this client. Dry-run writes proposed changes but never commits or bills. Commit actually applies the changes and counts toward the client's monthly bill. Email-triggered runs ignore this setting — they use the subject prefix instead ([Liquid Par] = commit, [Liquid Par dry-run] = dry-run).

Exclusions bulk edit: Download opens as a real Excel table; upload accepts .xlsx or .csv and replaces the current tables.
Excluded Assets (0)

These assets are skipped entirely — never optimized. Leave Expires blank for a permanent exclusion; set a date if it should come back on its own.

No rows match your search.

Excluded Items (0)

If any of these items appear in a planogram the engine leaves them untouched — no par adjustments. Match is on Item Code or Item name (case-insensitive).

No rows match your search.

Excluded Coils (0)

Skip a specific coil on a specific machine (e.g. broken spring, out-of-service slot). Both Asset ID and Coil are required and matched together — a machine-wide exclusion above still wins.

No rows match your search.

2

VMS Reports & API Access

Spotlight API credentials + the report IDs to pull. Credentials are written to a locked-down secrets.yaml on the server; the password is never persisted in the wizard JSON or shown back in the UI.

The Spotlight API username Cantaloupe issued (NOT the operator's regular Seed login).

Leave blank to keep the saved password. Fill in to rotate.

No credentials saved

The saved Seed report that returns the coils / planogram export.

The saved Seed report that returns the sales-history export.

Optional coil-change report (Spotlight). When set, Liquid Par locks out coils whose SKU was recently swapped so a brand-new product isn't floored on stale history. Lookback window is baked into the report (typically 6 weeks). Leave blank to disable.

Both coils + sales reports must include a Route column. Groups below are defined by route number, then filtered locally after the pull — no Cantaloupe custom field needed.

3

Groups & Schedule

A “group” is a slice of the client’s assets that runs as one Liquid Par job. Groups are defined by route numbers — list the routes that belong to each group. Moving an account between routes updates group membership automatically. Each group gets its own schedule and delivery email(s).

Schedule times below are in this timezone. Server converts to UTC when generating cron entries.

4

Category Detection

The exact column name in the Cantaloupe report that contains product categories

5

Asset Class

Select all asset classes this client operates. Pick a class below to tune its rules.

// Select an Asset Class above to tune its rules.
6

Generate Configuration

7

Billing Manifest

Generate the monthly billing manifest for this client. Preview aggregates runs.db and shows the JSON without touching disk. Save writes to tenants/<tenant>/clients/<slug>/billing/<YYYY-MM>/manifest.json. Send to Ledger POSTs to the configured Ledger endpoint (requires a ledger: block in state/instance.yaml). Only mode=commit runs count — dry-runs never bill.

7

Min Par Watchlist

What this is
The Min Par Watchlist is a second tab on every details file your run produces. It lists every coil where the engine wanted to set par lower than your minimum, so we shipped min_par instead. In other words: these are coils that are turning too slowly for their current SKU.

Why it matters
A slow coil in a busy machine is an opportunity — swap the SKU for something that will actually turn, and you either sell more or stretch service further. A slow coil in a slow machine is just reality — the whole machine is quiet, replacing one SKU won't fix it.

How to triage
The tab is sorted by machine tier (Good → Average → Poor), then by opportunity within each tier. Start at the top: those are the biggest layups in your best machines. Work down. Poor-tier machines at the bottom are informational — don't waste change-outs there unless something else is going on.

The columns, in order
Machine context: Machine, Market, Total avg daily vends, Active coils, Vends per active coil per week, Machine tier, Machine avg vends/coil/week
Coil detail: Coil, SKU, SKU name, Category, Avg daily vends, Vends/week, Days to sellout, Target DTS, Computed par (engine wanted), Min par (shipped), Gap, Opportunity, Reason

Key column: Opportunity
Opportunity = machine average vends per coil per week − this coil's vends per week. Big positive number = this slot is dragging the machine down, and an average SKU here would do better. Sort by this descending to find the biggest wins.

Key column: Reason
dead_sku = zero vends, probably stale product. slow_turner = sold a few but not enough to hit target DTS. stale = last-sale signal says the ADV number isn't trustworthy; we floored at min as a safety fallback. at_target = engine computed exactly min_par or didn't change it — the coil's already right where it should be.

When checked, every details xlsx this client produces includes the Min Par Watchlist as a second worksheet. Uncheck to drop back to single-sheet details files.

Vends per active coil per week. Machines at or above this are Good tier.

Vends per active coil per week. Machines at or above this (and below Good) are Average tier. Below this is Poor tier.