System Configuration

A single list of typed key/value settings that steer specific pieces of portal behaviour — from AIR's GST home state to the on/off switches for the daily background schedulers.

Built — viewing and editing are both live in the console today.
Permissions

Opening this list requires admin.view_system_config (or the super-admin role). The console does not check a separate permission before letting you save an edit — the same admin.view_system_config gate covers both the list and the edit screen. A distinct admin.edit_system_config permission is seeded for future use but is not yet wired to any check in this resource.

What this screen is

System Configuration is not a business record you create — it is a fixed catalogue of settings that ships with the code. Each row is one key (for example reservation.enabled) holding a current value. You cannot add a new key or delete an existing one from the console; keys are defined and seeded by developers. What you can do is open a key and, if it is marked editable, change its value.

Screenshot placeholderThe System Configuration list — columns Key, Group, Value, Editable, Updated at; no search box, filter panel or bulk actions above the table.

The list

Nav: Administration → System Configuration.

ColumnShows
keyThe setting's unique identifier, e.g. gst.home_state_code. Searchable and sortable.
groupA category label the setting belongs to, shown as a plain badge. Sortable.
valueThe current value, truncated to 40 characters in the list — open the record to see it in full.
is_editableA tick/cross icon. Ticked keys can have their value changed from this console; crossed keys are locked — even an administrator cannot change them here.
updated_atWhen the value last changed. Hidden by default — switch it on from the column toggle.

There are no filters on this list — with typically only a handful of keys in the whole system, the plain sortable/searchable table is enough to find what you need.

Editing a value

  1. Open the key

    Select Edit on the row. The edit screen shows key, group, type and description — all disabled. They are read-only reference information, not fields you change.

  2. Change the value, if you are allowed to

    The value field is a text box. It is only enabled when the row's is_editable flag is on; otherwise it appears disabled and the console will refuse the save regardless.

  3. Save

    Your input is validated and cast to the setting's underlying type before it is stored, and the cached copy of that key is cleared immediately — the new value takes effect straight away, with no restart or wait.

Screenshot placeholderThe edit form for one key — key/group/type/description shown disabled at the top, the value field below (enabled or greyed out depending on is_editable), Save button at the bottom.
Why the value is validated and cast, not just saved as text

Each key has a fixed underlying type. Saving does not simply store whatever text you type — it is parsed and converted to that type (for example, a JSON-typed value is JSON-encoded unless it is already a plain string) before it is written, so a mistyped value is rejected with an error instead of silently breaking whatever else in the portal reads that key.

Currently seeded keys

These are the settings shipped with the system today, in the order the seeder writes them. The Editable column tells you whether the value field is enabled when you open the key — a No here means the portal manages that value itself and the field is greyed out.

KeyWhat it controlsEditable
gst.home_state_codeAIR's home GST state code, shipped as 27 (Maharashtra). Billing compares an order's delivery state against this to decide whether GST is split as intra-state (CGST + SGST) or inter-state (IGST).Yes
placeholder.region_idA stand-in region ID, used internally wherever a process still needs a region reference that isn't otherwise resolvable — a stop-gap value, not a setting you would normally touch.No
placeholder.pincode_idThe same placeholder pattern as above, for pincode references.No
reservation.enabledThe kill-switch for the daily auto-reservation scheduler. Turn it off to pause automatic stock reservation across the whole portal.Yes
reservation.cod_in_transit_limitHow many despatched-but-unremitted COD packages a customer may already have out before the nightly auto-reservation job holds their further parts. Seeded as 0, and 0 means the check is off — nothing is held on these grounds until someone sets a real number here. Set it to, say, 3 and a customer with three or more COD packages out whose money hasn't come back will have their next parts held as Too many unremitted COD packages already out for this customer until the cash is remitted. Lower it to tighten credit, raise it (or return it to 0) to loosen it.Yes
wave.enabledThe kill-switch for the daily auto-wave-creation scheduler. Turn it off to stop new picking waves being created automatically.Yes
refund.create_journal_entryWhen on and both refund accounts below are filled in, issuing a refund also posts a balanced entry to the ledger. Shipped off.Yes
refund.debit_accountThe account code debited by that refund entry — the customer advance/liability being cleared. Shipped blank.Yes
refund.credit_accountThe account code credited by that refund entry — the bank or cash the refund is actually paid from. Shipped blank.Yes
bounced.create_journal_entryWhen on and both bounced accounts below are filled in, marking a payment voucher dishonoured posts a balanced reversal entry to the ledger. Shipped off.Yes
bounced.debit_accountThe account code debited by that reversal — the customer receivable being re-established. Shipped blank.Yes
bounced.credit_accountThe account code credited by that reversal — the bank or cash that did not clear. Shipped blank.Yes
purchase.create_journal_entryWhen on and all three purchase accounts below are filled in, posting a vendor bill also posts a balanced entry to the ledger. Shipped off.Yes
purchase.purchases_accountThe account code debited for the taxable amount of a posted vendor bill. Shipped blank.Yes
purchase.input_gst_accountThe account code debited for input GST on a posted vendor bill (CGST + SGST + IGST together). Shipped blank.Yes
purchase.payables_accountThe account code credited with the vendor payable — the bill's total amount. Shipped blank.Yes
purchase.payment_credit_accountThe account code (bank or cash) a vendor payment is paid from. Shipped blank.Yes
despatch.customer_location_idThe global virtual Customers endpoint every delivery ships to. The portal points this at the seeded location itself — you never set it by hand. See Warehouses & Carriers for what the virtual endpoints are.No
despatch.default_source_location_idThe stock location that despatch releases create their moves from when nothing more specific applies. Shipped blank, and this one you must fill in before releasing anything — see the warning below.Yes
Set despatch.default_source_location_id before your first release

It ships blank on purpose — only AIR knows which location despatch should draw from. Until you set it, releasing an approved order has no source to create its stock moves from. Set it once, early, as part of initial setup.

The accounting keys come in sets — a half-filled set does nothing

The three refund.* keys, the three bounced.* keys and the four purchase.* keys each work as a group: the …create_journal_entry switch only takes effect once every account code in its set is filled in. Turning the switch on and leaving an account blank simply means no entry is posted — you get no error. See Accounting — Journal & GST for what each entry looks like once it is posted.

Kill-switches, not day-to-day settings

reservation.enabled and wave.enabled are emergency/maintenance switches for two background jobs, not values you change routinely. reservation.cod_in_transit_limit is different — it is a real business policy dial, and it is deliberately shipped at 0 (off) so that no despatch is silently held until AIR decides what the limit should be. See Background Schedulers for exactly what each job does, when it runs, and what happens while its switch is off.