NetSuite

TL;DR

The financial and order system of record, reached through an own middleware proxy, supplying transactions, items, customers and the ledger.

The system of record for orders and finance. CCC reaches it through an in-house middleware proxy rather than directly. CCC depends on both the proxy and the upstream service; the request contract it implements is the proxy's.

What it delivers

FeedNotes
Seven transaction typessalesorder, invoice, itemfulfillment, prepayment, returnauthorization, creditmemo, itemreceipt
ItemsThe catalogue as finance sees it
CustomersUpstream customer records, which are not CCC's computed customers
Sales channels, categoriesDimensions
Paazl shipping optionsShipping method reference
Subsidiaries, accounts, accounting periodsLedger structure
GL account totalsPlain and extended actuals. Budgets are loaded separately from repository CSVs

The seven transaction types are the backbone. Each has a header and classification. Line-bearing types have item and non-inventory lines, with discounts and taxes on financial documents. Prepayments have no lines; shipments and receipts have no discount or tax tables. See data model.

Cadence and window

Today's transactions are re-queued through the day, so recent data refreshes continuously. A daily fan-out covers the wider set overnight.

It can be asked for a specific date, which is what makes it backfillable, unlike GA4 order attribution. A historic reload is a matter of queueing the days you want.

CCC holds NetSuite data from 2022 onward. Earlier history comes from verkoopdump.

Quirks and limits

  • The proxy serves some calls one at a time. The account total endpoints answer a second concurrent caller with an immediate refusal, which is why those jobs run on offset minutes and check whether their own type is already running.
  • A transaction arrives before its downstream documents do. An order exists before its invoice, which is why expected margin exists.
  • Cancelled and closed orders both arrive and are both stored. Both mean the order did not happen.

Where it lands

ns_-prefixed tables for reference data, and the seven transaction families under their own names. Ledger data lands under gl_.

Evidence

Feed list from AGENTS.md, The application. Transaction types and their table names from config/reference/cm_transactiontypes.json. Table family shape from AGENTS.md, Models and database. Concurrency behaviour and the offset-minute mitigation from AGENTS.md, Jobs and the batches queue. Basis: code-checked against the current implementation.

The proxy's own rate limits and availability are properties of that service. What this repository records is the behaviour CCC sees: the two account total endpoints serve one call at a time and answer a second caller with an immediate 503, which is what the getrunning() guard and the offset cron minutes exist for.

About this document
  • Type
    source
  • Status
    active
  • Updated
    2026-09-14
  • Created
    2026-09-13