Import Standing Rates
What it is
Loads a supplier's price list from a CSV file: what they charge for an item, at a port, in a unit, optionally with an expiry date. Those standing rates are what the system later quotes from when it looks for a price.
It works in three steps — Upload, Validate, Done — and nothing is written until you have seen the validation result and pressed the import button.
Who can open it
Any signed-in staff account that is active, subject to the same two gates as
Suppliers — an active account, and the ops.suppliers feature grant while
FEATURE_GRANULAR_RBAC is on. The owner bypasses the grant.
Reach it from the supplier's record — the Import Rates button next to Ledger on
the supplier screen. Until 2026-08-23 nothing linked here at all and the only way in was
to type /suppliers/<supplier id>/import-rates.
Before you start
🔴 Importing overwrites existing prices, it does not add to them. A rate is matched on supplier, description, port, unit and entity — import the same row twice and the second price replaces the first. That makes re-importing a corrected file safe, and it also means a wrong file overwrites good prices.
A port name the system does not recognise is refused, not imported. The port is matched by name. Rows whose name matches nothing are listed on the Validate step in red — "N row(s) will NOT be imported: unknown port" — with the offending names, and they are skipped. If no row in the file has a usable port the import is refused outright, naming the ports. Spell port names exactly as they appear in the system.
Until 2026-08-23 such a row was written anyway with no port attached. That row was unusable twice over: no price lookup filters to a rate with no port, and the de-duplication key includes the port, so re-importing the same file appended a fresh copy every time instead of updating.
⚠️ The currency applies to the whole file. It is chosen from a dropdown on this screen, not read from the CSV. One file cannot mix currencies.
Every control on the page
Currency — USD, INR, AED or LKR. Applied to every row.
Download template — saves standing_rates_template.csv, with the exact columns and two example
rows.
The drop zone — drag a file on, or click to browse. .csv only.
The file's columns are:
item_description, impa_code, port_name, unit_price, unit, valid_until.
impa_code and valid_until may be left blank.
Validate step — the file is checked without being saved. You get counts of rows read, rows valid, rows in error and duplicates, the list of errors with their row numbers, and a preview table of the valid rows — the first 30 only, with "…and N more rows" beneath.
| Control | What it does |
|---|---|
| ← Back | Returns to the upload step and forgets the file |
| Import N Rates | Writes them. Disabled when nothing is valid |
Done step — "Import Complete" with the count, then Back to Suppliers or Import Another.
What it writes
Nothing at all during Upload and Validate. The file is sent to the server for checking with a dry-run flag, and the server replies with the result without saving anything.
Import N Rates sends the same file again with the flag cleared. The server then:
- looks up each row's port by name, storing the port's id where the name matched and nothing where it did not;
- writes the rates, replacing any existing rate for the same supplier, description, port, unit and entity.
⚠️ The completion count is the number of rows sent, not the number confirmed written. Treat it as "this many were submitted".
When it goes wrong
"Failed to reach server." Nothing was sent. Try again.
Rows appear under errors with row numbers. Fix those lines in the CSV and upload the file again — the whole file is re-validated each time.
"Import N Rates" is greyed out. No row passed validation. The error list says why.
The import succeeded but prices are not found when quoting. Most often the port name did not match and the rates were stored unlinked. Check the spelling against the port list and re-import; because the import replaces rather than duplicates, a corrected file fixes it in place.
Prices you did not expect to change have changed. The file contained rows matching existing rates, which are replaced silently. There is no undo — re-import the correct prices.
The preview shows fewer rows than the file. Only the first 30 valid rows are previewed. The count above the table is the real number.
Related screens
- Supplier — the supplier these rates belong to, and where to read the id from the address bar.
- Suppliers — where Back to Suppliers goes.
- Supplier RFQs — asking a supplier for prices instead of loading them.