Sales channels
There are two sales channel lists. NetSuite's is read-only and arrives with the data; CCC's own is editable and is what every report groups by. The second points at the first.
A sales channel is where an order came from: one of the webshops, a marketplace, a phone order. Like accounts, the name covers two separate things, and knowing which one you are looking at is the difference between a correct report and a confusing one.
The two lists
ns_saleschannels | saleschannels | |
|---|---|---|
| Owner | NetSuite | CCC |
| Arrives from | app/jobs/netsuite/saleschannels.php, ns_saleschannels batch type | Seeded once, then maintained in the app |
| Refreshed | Replaced wholesale on every run, swap pattern | Never overwritten by a job |
| Editable | No | Yes, at /configuration/saleschannels |
| Read at | /entities/saleschannels/ns | /entities/saleschannels |
| Used for | Nothing reports on it directly | Every grouping, filter and rule |
ns_saleschannel_id on a CCC sales channel is the join. It is what ties the channel you report on to the channel the transactions arrived with. A CCC channel with no ns_saleschannel_id exists and is selectable, and nothing upstream will ever land on it.
The seed builds the first list from the domains: one CCC channel per domain, matched to the NetSuite channel with the same name, plus Undefined, channel 1, which is what a transaction gets when nothing matched. saleschannels is seeded through config/seed/, so the database owns it after the first install and an edit to the seed reaches fresh installs only.
Groups
saleschannelgroups is one level above: a name, a technical key and a sort order. A group is what a report collapses to when per-channel is too fine, and the technical key is the stable handle for it, because the numeric ids differ per environment.
/configuration/saleschannelgroups is a read-only listing. Groups are maintained in config/reference/saleschannelgroups.json and reloaded by the installer.
Intake method
Each CCC sales channel carries an intake method, and there are two:
| Value | Means |
|---|---|
all | The order counts from the moment it arrives |
paid | The order counts once it has been paid |
This is the channel saying when an order becomes real for it. A marketplace that only confirms on payment is not comparable to a webshop that confirms on order, and this is where that difference is recorded rather than worked around in each report.
What reads it
Nearly everything. The transaction screens filter on it, the income statement can break down by it, the classification stores saleschannel_id on every transaction type, and calculation rules filter on it: the seeded commission rules are one rule per sales channel, from config/seed/cm_calculationrules/commission.csv.
Where to look, and where to change
| What | Where |
|---|---|
| The channels reports use | /entities/saleschannels |
| NetSuite's own list | /entities/saleschannels/ns |
| Add or edit a channel, its group, its intake method, its NetSuite link | /configuration/saleschannels |
| Inspect groups; change their reference JSON to edit them | /configuration/saleschannelgroups |
| The commission rule per channel | /contributionmargin/calculationrules |
Changing a channel does not reclassify anything by itself. The classification stores the channel id that was resolved at the time, so a remapping applies from then on; re-queue the affected dates to apply it backwards.
Related
- Accounts, the same two-list shape on the general ledger
- Sales orders
- Calculation rules
- NetSuite
Evidence
Import and swap from app/jobs/netsuite/saleschannels.php. The two lists, the ns_saleschannel_id join and the editable fields from app/http/configuration/saleschannels.php and templates/main/configuration/saleschannels.tpl. Intake methods from saleschannels->getintakemethods(). Seeding from app/jobs/install/seed_saleschannels.php and the config/seed/ rule in AGENTS.md, Configuration and .env. Views from app/http/entities/saleschannels.php. Commission rules from config/seed/cm_calculationrules/commission.csv. Basis: code-checked at 30f5313.
- Type
object - Status
active - Updated
2026-09-14 - Created
2026-09-13 - Covers
entities/saleschannelsconfiguration/saleschannelsconfiguration/saleschannelgroups