Sample output from the Native-Record Footprint Map prompt in the Sonar AI Prompt Library, run against a NetSuite test account. Every name and number here is test data. Back to the post · The library
Customization Governance · Provider Attribution Audit

Native-Record Footprint Map

A field-by-field inventory of every custom field attached to the six core native record types — Customer, Vendor, Item, Sales Order, Invoice, Vendor Bill — with each field attributed to the provider (bundle, in-house app, or test tooling) that owns it. The goal: make visible how many independent hands are reshaping each core record.

TD3016323 · Production · OneWorld Generated 2026-08-22 Prepared by Sonar AI for Tim Dietrich Data: live schema introspection, this session

01Executive Summary

Every one of the six core record types is being reshaped by three or more distinct providers — the flag threshold for this audit was met account-wide, 6 for 6. Transactions carry the heaviest load: Sales Order and Invoice are each touched by 10 distinct providers. Three providers dominate everywhere: Electronic Bank Payments, SuiteTax, and Atlas/SuiteSuccess.

6
Core record types analyzed
6 / 6
Flagged — touched by ≥3 providers
255
Verified field attachments (+3 unverified)
16
Distinct providers identified
28
Test-debris fields (TDM + WS demo)
1
Credential-risk field (plain-text password)
Headline risk: custentity_ps_password (PromoStandards app) stores a plain-text credential on vendor records. First flagged 2026-08-05; still live as of this audit. This is independent of the footprint question but surfaced again during the sweep.
Headline noise: 22 of the 45 custom fields on Customer (49%) are TDM test-tooling debris, and 5 of 36 item fields are WS-configurator demo leftovers. Nearly half the customer form's custom footprint serves no business purpose.
Record typeCustom fieldsBody / EntityColumnDistinct providersFlag (≥3)Dominant provider

Counts include only verified attachments. Three Sonar VBM fields on Vendor Bill are listed in the explorer but excluded from counts (attachment metadata empty, zero populated rows — see Assumptions #7).

02Provider × Record-Type Matrix

Each cell is the number of verified custom fields that provider attaches to that record type. Color intensity scales with count. This is the single best view of who is reshaping what.

Reading the matrix: EBP reaches 5 of 6 record types — including sales-side line columns on Sales Order and Invoice, which is unusual for a payments bundle (see Finding F2). SuiteTax also touches 5 of 6. Atlas/SuiteSuccess touches all 6, largely via its write-attribution fields (custbody_atlas_source, _source_actor, _request_id, _justification) which blanket nearly every transaction type.

03Per-Record Composition

Share of each record type's custom-field footprint by provider. Bar width is proportional to field count.

04Field Explorer (interactive — search, filter; 258 rows)

The complete inventory. Every field is cited by its actual NetSuite scriptid. Filter by record type, provider, or free text. Badges: live-verified = confirmed by querying real data, unverified = attachment inferred but not confirmed, risk = flagged security concern.

0 of 0 rows
Field scriptidLabelLevelProviderAttached toNotes

05Key Findings

  1. F1 — Universal flag condition. All six core record types exceed the 3-provider threshold. The account has no "clean" core record: even Vendor, the lightest at 20 fields, carries 6 providers. Any form redesign, integration mapping, or CSV import template for these records must account for multi-provider field ownership.
  2. F2 — EBP is the most invasive provider. Its EFT/direct-debit columns (custcol_9572_*, custcol_2663_*, custcol_9997_dd_file_format) attach to sales-side line items on Sales Orders and Invoices — 11 line columns on SO that have nothing to do with order entry. This is pure form noise for sales users and a common source of "why is this field here?" confusion.
  3. F3 — Atlas write-attribution fields blanket everything. custbody_atlas_source/_source_actor/_request_id/_justification/_committed_at appear on ~28 transaction types each. They are the Atlas agent-write audit layer — harmless but they inflate every transaction form's field count by 5+.
  4. F4 — Test debris is half the Customer footprint. 22 TDM-tooling fields on Customer, 1 on Vendor, 2 TDM body fields on SO/Invoice, plus 5 WS-configurator demo fields on Item: 28 fields with no business owner. All are retirement candidates.
  5. F5 — Local (genuinely in-house) footprint is small and coherent. PromoStandards app (7 fields across Vendor + Item), matrix attributes on Item (Color/Size/Mattress/Image Code), custbody_inhand_date, custentity_renewal_risk, Sonar VBM (4 fields), RAC case-linking (2). The reshaping pressure is overwhelmingly from bundles, not local customization.
  6. F6 — Credential exposure. custentity_ps_password remains a plain-text password on vendor records, readable by any role with vendor access. (Repeat flag from 2026-08-05.)
  7. F7 — Attribution gaps exist but are minor. 8 fields could not be conclusively attributed (e.g. custentity_naw_trans_need_approval, custitem_cust_uom, the supply-alert trio, custcol_ns_usetax). None appear high-risk; all are catalogued under "Unknown / unattributed" pending an owner interview.

06Recommendations

P1 · SecurityRemediate the PromoStandards credential field

Migrate custentity_ps_password values to an API-secrets store (or at minimum a role-restricted encrypted custom record), then clear and retire the field. Until then, restrict field-level access on the vendor form.

P2 · HygieneRetire the 28 test-debris fields

Run the customization-retirement process against the TDM family (custentitytdm_*, custentitytk_*, custbodytdm_*, custbodytk_*) and the WS demo family (custitem_ws_*, custcol_ws_cfg_instance, custbody_ws_share_token). Verify zero stored data and zero script/search references before deletion — the process gates this.

P2 · UXHide EBP columns from sales-side entry forms

The 11 EBP line columns on SO/Invoice can be hidden per-form (custom transaction forms) without touching the bundle. This declutters order entry with zero functional risk.

P3 · GovernanceAssign owners to the 8 unattributed fields

Confirm ownership of custentity_naw_trans_need_approval, custitem_cust_uom, the supply-alert counters, custcol_calculate_atb (ATB scripts?), custcol_ns_usetax, and the _c360_/_11724_ family attributions. Then bake this map into a quarterly re-run.

07Methodology & Data Sources

All data was gathered live from account TD3016323 on 2026-08-22 via SuiteQL and SuiteScript record introspection. No cached or training-data field lists were used.

Pipeline

  1. Schema discovery. A one-row SELECT * FROM customfield established the columns actually exposed in this account (notably fieldtype and visibleontransactions; there is no applies-to column, and per-type tables like transactionbodycustomfield do not exist here).
  2. Entity fields (Customer / Vendor). recordTypeDescribe output truncated for both types, so a read-only research subagent verified attachment by live column presence on SELECT * FROM customer / vendor, cross-checked with per-field fieldDescribe probes for field types that don't surface as SQL columns (long text, inline HTML, hidden). Negative tests confirmed non-attachment (e.g. custentity_ste_vendor_stecode is NOT on customer).
  3. Transaction fields (SO / Invoice / Vendor Bill). Authority = customfield.visibleontransactions, the comma-delimited list of NS transaction short codes each BODY/COLUMN field applies to. Retrieved for all 141 body+column fields via keyset pagination (LIKE filters on this column are rejected — it is computed; see Assumptions #3).
  4. Item fields. All 36 fieldtype='ITEM' rows, with attachment corroborated by a subagent describe of inventoryitem (the dominant item type: 263 of 374 items).
  5. Provider attribution. Scriptid-prefix heuristic (see Assumptions #1), consistent with the account's known bundle inventory. customsegment.frombundle is empty for ALL rows in this account, so prefix attribution is the only viable method.
  6. Spot verification. Fields with ambiguous metadata were checked against real transaction data — e.g. custcol1 (Color) has an empty applies-to list yet is populated on 103 live Sales Order lines; the Sonar VBM flag has zero populated Vendor Bills.

Verification levels used in this report

08Source Queries

Reproduce this audit by re-running these against the account. Q2/Q3 are paged by scriptid keyset because result size exceeds a single response window.

Q1 — customfield column discovery
SELECT * FROM customfield WHERE fieldtype = 'ENTITY' FETCH FIRST 1 ROWS ONLY
Q2 — body + column fields with transaction applies-to (page 1)
SELECT scriptid, name, fieldtype, visibleontransactions
FROM customfield
WHERE fieldtype IN ('BODY','COLUMN') AND visibleontransactions IS NOT NULL
ORDER BY fieldtype, scriptid
-- 141 rows total; paged with maxRows + scriptid keyset, e.g. page 2:
--   AND ((fieldtype='BODY' AND scriptid > 'CUSTBODY_MFGMOB_WOBACKFLUSH') OR fieldtype='COLUMN')
Q3 — truncated-slice recovery (column fields, middle window)
SELECT scriptid, name, visibleontransactions
FROM customfield
WHERE fieldtype = 'COLUMN' AND visibleontransactions IS NOT NULL
  AND scriptid > 'CUSTCOL_2663_LASTNAME' AND scriptid < 'CUSTCOL_SCM'
ORDER BY scriptid
Q4 — all item custom fields
SELECT scriptid, name FROM customfield WHERE fieldtype = 'ITEM' ORDER BY scriptid
-- 36 rows
Q5 — entity-field attachment (subagent pattern, Customer/Vendor)
-- Attachment authority = live column presence:
SELECT * FROM customer FETCH FIRST 1 ROWS ONLY   -- keys inspected, not values
SELECT * FROM vendor   FETCH FIRST 1 ROWS ONLY
-- Labels recovered from (63 ENTITY fields account-wide):
SELECT scriptid, name FROM customfield WHERE fieldtype = 'ENTITY' ORDER BY scriptid
-- Non-SQL-surfacing field types (longtext/inlinehtml/hidden) probed via fieldDescribe(recordType, fieldId)
Q6 — live spot-verification (custcol1 on SO; Sonar VBM on Vendor Bill)
SELECT
  SUM(CASE WHEN t.type = 'SalesOrd' AND tl.custcol1 IS NOT NULL THEN 1 ELSE 0 END) AS so_color_lines,   -- → 103
  SUM(CASE WHEN t.type = 'VendBill' AND t.custbody_sonar_vbm_flag IS NOT NULL THEN 1 ELSE 0 END) AS vb_vbm_flagged  -- → 0
FROM transaction t JOIN transactionline tl ON tl.transaction = t.id
WHERE t.type IN ('SalesOrd','VendBill')

09Assumptions, Caveats & Known Limitations

  1. Provider attribution is a scriptid-prefix heuristic. customsegment.frombundle and equivalent bundle-linkage metadata are empty account-wide, so ownership is inferred from naming conventions (_ATLAS_, _2663_/_9572_/_9997_/_15529_ = EBP numbered-bundle family, _STE_/_STR_, _PACKSHIP_/SHIPCENTRAL, _SCM_, _FAM_/_FAR_/_NCFAR_, _MFGMOB_, _WS_, TDM/TK, etc.). This matches the account's known installed-bundle inventory but is not authoritative bundle metadata.
  2. _C360_ → Cash 360 and _11724_ → EBP-family are probable, not certain — numbered-prefix style matches, but neither prefix was cross-confirmed against a bundle manifest. Marked as such in the explorer.
  3. visibleontransactions is the attachment authority for transaction fields. Strictly it encodes visibility/applies-to as configured; a field could exist but be hidden on a given custom form. Also note: SQL LIKE filters against this column silently return 0 rows (it is a computed multivalue) — filtering was therefore done client-side after full retrieval.
  4. Item = inventoryitem as representative. Item custom fields can be scoped to subsets of item types; per-subtype applies-to was not decomposed. All 36 ITEM fields are shown; a small number may not render on e.g. Service or Kit forms.
  5. custcol1 (Color) has empty applies-to metadata but is live-verified on 103 SO lines. It very likely flows to Invoices via transform, but no populated invoice line was verified — it is counted on SO only.
  6. FAM's footprint on core records is nearly nil by design — its 40+ body fields target custom transaction types (Custom101–105: lease/depreciation journals), not the audited six. Only custcol_far_trn_relatedasset touches SO/Invoice/Vendor Bill.
  7. Sonar VBM body fields (custbody_sonar_vbm_flag/_reason/_detail) have empty applies-to metadata and zero populated Vendor Bills. They are listed as unverified and excluded from all counts; Vendor Bill's provider count is stated as 7 verified (8 if Sonar confirmed).
  8. Segments were counted only where directly observed (cseg_client_tag on Customer). The Atlas segments (cseg_atlas_cost_ctr, cseg_atlas_sls_chan) and Merch Hierarchy segments apply at the transaction/line level per prior sessions but were not re-verified in this sweep, so they are excluded from counts — a conservative choice that slightly understates Atlas's transaction footprint.
  9. Point-in-time snapshot. Accurate as of 2026-08-22. Bundle updates routinely add/remove fields; re-run Q1–Q6 to refresh.