Skip to main content
Version: v1.0.0(int)

Customers

Customers and the master-data tables that classify them: types, segments, and brokers. All four tables move together — types/segments/brokers exist only to classify customers.

Tables owned

TablePurpose
org.customersCustomer records (name, type, segment, broker, parent, address, country, QBO ID, notes, active flag).
org.customer_typesCustomer classifications (e.g., Purchaser, Location).
org.customer_segmentsCustomer segments (e.g., Club, Distributor, Grocery).
org.brokersBrokers — reusable broker entities referenced by customers and SOs.

Operations

Writes — Customers

  • createCustomer(conn, input)Customer. input: { name, typeId?, segmentId?, brokerId?, parentId?, country?, address?, qboId?, notes? }.
  • updateCustomer(conn, customerId, patch)Customer. Partial update (incl. parent change for hierarchy moves).
  • setCustomerActive(conn, customerId, isActive)Customer. Archive / reactivate.
  • deleteCustomer(conn, customerId)void. Hard-delete.

Writes — Customer types

  • createCustomerType(conn, { name })CustomerType.
  • updateCustomerType(conn, typeId, patch)CustomerType. Rename.
  • deleteCustomerType(conn, typeId)void. L3 enforces "no customer uses it".

Writes — Customer segments

  • createCustomerSegment(conn, { name })CustomerSegment.
  • updateCustomerSegment(conn, segmentId, patch)CustomerSegment. Rename.
  • deleteCustomerSegment(conn, segmentId)void. L3 enforces "no customer uses it".

Writes — Brokers

  • createBroker(conn, { name })Broker.
  • updateBroker(conn, brokerId, patch)Broker. Rename.
  • deleteBroker(conn, brokerId)void. L3 enforces "no customer or SO references it".

Reads — Customers

  • listCustomers(conn, filters?)Customer[]. Filters: { typeId?, segmentId?, isActive? }.
  • getCustomerById(conn, customerId)Customer | null.
  • getCustomersByIds(conn, customerIds)Customer[]. Batch hydration.
  • listCustomerChildren(conn, parentId)Customer[]. For hierarchy views.

Reads — Lookups

  • listCustomerTypes(conn)CustomerType[].
  • isCustomerTypeInUse(conn, typeId){ inUse: boolean, customerCount: number }.
  • listCustomerSegments(conn)CustomerSegment[].
  • isCustomerSegmentInUse(conn, segmentId){ inUse: boolean, customerCount: number }.
  • listBrokers(conn)Broker[].
  • getBrokersByIds(conn, brokerIds)Broker[]. Batch hydration.
  • isBrokerInUse(conn, brokerId){ inUse: boolean, customerCount: number, soCount: number }.