TD3016323 is a OneWorld production account with four US subsidiaries (one elimination) operating in a single currency (USD). It models a retail/wholesale business: two retail stores, two distribution centers, a Miami site, 3PL and FBA locations. Full order-to-cash and procure-to-pay cycles are live — roughly 7,900 transactions across 40 types — with light manufacturing (work orders and assembly builds).
The customization footprint is dominated by managed bundles: SuiteSuccess/Atlas starter edition, Fixed Assets Management, Electronic Bank Payments, SuiteTax, Ship Central, Manufacturing Mobile, and the 360-family analytics apps. Of 437 custom record types and ~1,800 active script deployments, the genuinely local footprint is small and identifiable: a PromoStandards product-sourcing app, an in-house "Atlas" API/agent layer with token auth, webhooks and staged writes, a family of modern UI applications (CRM, POS, collections, journal entry, reporting), and the Sonar AI / Chartstone agent tooling.
Three findings deserve immediate attention: (1) 23 of ~50 employees hold the Administrator role, an access-control posture that should be tightened before any go-live hardening; (2) a vendor field CUSTENTITY_PS_PASSWORD stores a plaintext credential; (3) the installed invoice/vendor-bill approval workflows are not initiating — approvals are effectively inactive except one 3-way-match workflow. Everything else is well-structured, and this document maps each customization to its owner, dependencies, and upgrade risk.
| Area | Enabled | Notes |
|---|---|---|
| OneWorld / Subsidiaries | Yes | 4 subsidiaries: 1 Parent Company, 2 Subsidiary 1, 3 Subsidiary 2, 4 xElim (elimination). All US. |
| Multiple Currencies | No | Single currency, USD (id 1). Unusual for OneWorld — simplifies consolidation. |
| Inventory / Multi-Location | Yes | 15 locations incl. quarantine and return-to-vendor sublocations per site. |
| Matrix Items | Yes | Apparel color/size matrices in active use (lists 24, 26). |
| Work Orders & Assemblies | Yes | 24 work orders, assembly builds present — light manufacturing. |
| CRM / Opportunities / Estimates | Yes | Low volume (22 opportunities, 10 estimates) — sales entry is mostly direct SO/cash sale. |
| Advanced PDF/HTML Printing | Yes | |
| SuiteTax | Yes | SuiteTax Engine + Tax Reporting bundles installed; three STE workflows released on transactions. |
Attribution by scriptid prefix — the frombundle column is unreliable in this account (empty on customsegment, broken for NULL predicates on script).
| SuiteApp / bundle | Prefix | What it adds here |
|---|---|---|
| SuiteSuccess / Atlas starter | _ATLAS_*, SS RT PRM | Role packs, saved dashboards, translation workflows, AI Companion prompt records, churn/credit customer workflows. |
| Fixed Assets Management | _FAM_ / _NCFAR_ | Asset records, depreciation scripts (large script count). |
| Electronic Bank Payments | _2663_ / _9572_ / _9997_ / _15529_ | Payment batches, EFT file formats; workflow "Update Batch" (id 1). |
| SuiteTax Engine + Reporting | _STE_ / _STR_ | Tax lookup/compliance workflows 110–112 on transactions. |
| Ship Central | _PACKSHIP_ / SHIPCENTRAL | Warehouse pack/ship mobile flows. |
| Manufacturing Mobile | _MFGMOB_ | Shop-floor mobile roles & scripts. |
| Benchmark / Cash / Item 360 | _B360_ / _CASH360_ / _ITEM360_ | Analytics apps with their own service roles (1449, 1549, 1987). |
| Application Performance Mgmt | customscript_nsapm_* | ~40 APM suitelets (NetSuite-managed). |
| NetSuite AI Companion | ATLAS_AICOMP_* | Prompt library, role map, usage rollup; weekly role-sync scheduled script (§3.4). |
Sales · Product Development · Administration · Store Operations · Warehouse Operations · Support · Marketing · Merchandising · Production · eCommerce
Apparel · Beauty · Home & Decor · Miscellaneous · Electronics
01 San Francisco Store (1) · 02 New York Store (3) · 03 LA Distribution Center (5) · 04 Chicago DC (8) · 05 Miami (12) · 3PL (14) · FBA (15) · In Transit (16) · plus per-site Quarantine (2,4,6,9,13) and Return-to-Vendor (7,11).
Several locations share the same display name (e.g., multiple "Quarantine Area") — always disambiguate by internal id.
The bundle families in §1.2 own the large majority. The genuinely local record types are:
| Record type (scriptid) | Id | Purpose | Rows |
|---|---|---|---|
CUSTOMRECORD_PROMO_PROJECT | — | PromoStandards project header (in-house promo-products app) | 6 |
CUSTOMRECORD_PROMO_PRESENTATION | — | Client presentation container | 5 |
CUSTOMRECORD_PROMO_PRES_LINE | — | Presentation line; carries CUSTRECORDCUSTRECORD_PPL_PS_PAYLOAD (long-text PromoStandards payload) | 11 |
CUSTOMRECORD_DECORATION_PRICE | — | Decoration price tiers | 16 |
CUSTOMRECORD1052 | 1052 | "Demo Asset" — local demo record | small |
CUSTOMRECORD_ATLAS_API_TOKEN | 2397 | Atlas API bearer tokens (local API layer, §6.2) | 2 |
CUSTOMRECORD_ATLAS_AUDIT | 2398 | Atlas audit events | 750 |
CUSTOMRECORD_ATLAS_WEBHOOK | 2404 | Outbound webhook subscriptions | 4 |
CUSTOMRECORD_ATLAS_EVENT | 2405 | Event queue for webhook dispatch | 13 |
CUSTOMRECORD_ATLAS_STAGED | 2406 | Agent writes awaiting human approval | 0 |
CUSTOMRECORD_ATLAS_TBCACHE | 2407 | Materialized trial-balance cache | 0 |
CUSTOMRECORD_OB_ORG_TREE | — | Org Browser tree (ownership unconfirmed — verify with owner) | — |
TDM_* family | — | Tooling test records — safe to ignore / candidates for cleanup | — |
Promo-family volumes (6 / 5 / 11 / 16 rows) indicate demo-scale usage, not production load.
Locally notable: CUSTOMLIST24 Colors, CUSTOMLIST_CUSTOMLIST_SIZES (26) Sizes, CUSTOMLIST25/_MATTRESS Mattress, CUSTOMLIST1054 Document Type, CUSTOMLIST_RENEWAL_RISK, CUSTOMLIST_VB_MEMO_LIST, and the promo-app lists (CUSTOMLIST_DEC_TECHNIQUE, _PRES_STATE, _PRES_STYLE, _PROMO_PROJECT_STAGE, _PUBLISH_ITEM 514).
3,109 RECORD-type, 627 SCRIPT, 96 BODY, 85 WORKFLOW, 62 ENTITY, 42 COLUMN, 36 ITEM custom fields exist account-wide (source: customfield table); the vast majority are bundle-owned. Locally meaningful fields:
| Scriptid | Label / type | Notes |
|---|---|---|
CUSTENTITY_RENEWAL_RISK | Renewal Risk · list | Sources CUSTOMLIST_RENEWAL_RISK; used by collections/CRM apps. |
CUSTENTITY_PROMOSTANDARDS_ID + CUSTENTITY_PS_* | PromoStandards vendor endpoints | Vendor-facing integration config for the promo app. |
CUSTENTITY_PS_PASSWORD | Plaintext credential · free text | Stores a vendor API password in cleartext. Remediate (§7). |
CUSTENTITY_ATLAS_CHURN_DATE, _AVAIL_CREDIT, _CUSTOMER_INVOICE_EMAIL | Atlas customer fields | Maintained by workflows 116 & 119 (§3.1). |
| Scriptid | Label | Notes |
|---|---|---|
CUSTBODY_INHAND_DATE | In-Hand Date | Promo-app delivery commitment date. |
CUSTBODY_ATLAS_JUSTIFICATION / _REQUEST_ID / _SOURCE / _SOURCE_ACTOR | Atlas write attribution | Stamped by the Atlas API layer on agent-originated writes — an audit convention worth preserving. |
CUSTBODY_RAC_LINK_TO_CASE, _RAC_REPLACEMENT_FOR | RAC linkage | Ownership unconfirmed — verify before change. |
| Scriptid | Label / type | Notes |
|---|---|---|
CUSTCOL1 | Color · list→24 | Legacy numeric scriptid; same Colors list as the item field. |
CUSTCOL_ATLAS_PROMISE_DATE | Promise Date | Defaulted by workflow 118 on POs. |
CUSTCOL_ATLAS_RETURN_REASON | Return Reason | |
CUSTITEMCUSTITEM_COLOR / _SIZE / _MATTRESS | Multi-select → lists 24/26/25 | Matrix-item dimensions. |
CUSTITEM_PUBLISH_ITEM, CUSTITEM_SUPPLIER_IMAGE_URL, CUSTITEMCUSTITEM_IMAGE_CODE | Publishing / imagery | Promo-app item publishing pipeline. |
Bundle-vs-local attribution for a few generic-prefix fields (CUSTCOL_NS_USETAX, CUSTITEM_*_COUNT supply-planning counters, CUSTCOL_CALCULATE_ATB) is inferred, not verified.
| Id | Scriptid | Name | Origin |
|---|---|---|---|
| 4 / 5 / 6 | CSEGMH_CSEG_1/2/3 | Merch Hierarchy L1 Department / L2 Category / L3 Sub-Category | Bundle (Merch Hierarchy) |
| 104 | CSEG_ATLAS_COST_CTR | Cost Center | Atlas bundle |
| 105 | CSEG_ATLAS_SLS_CHAN | Sales Channel | Atlas bundle |
| 204 | CSEG_CLIENT_TAG | Client Tag | Local (likely) |
| 205 | CSEG_CONTACT_TAG | Contact Tag | Local (likely) |
Not queryable: the segment→record-type application mapping (customsegmentapplication is an invalid search type). Verify applied-to lists in the UI (Customization > Lists, Records & Fields > Custom Segments).
Not queryable via SuiteQL in this account — transactionform, entryform, and customform all fail as invalid search types. The form inventory (and form-to-role preferences) must be documented from the UI (Customization > Forms) or an SDF object export. This is flagged as a documentation gap rather than guessed.
Source: workflow table. States, transitions and actions are not queryable via SuiteQL (workflowstate not exposed) — per-state detail requires the workflow designer UI. Trigger data below is from the workflow header record.
| Id | Name | Scriptid | Status | Trigger / record | Origin |
|---|---|---|---|---|---|
| 1 | Update Batch | customworkflow_2663_update_batch | Released | View/update · EP payment batch | EBP bundle |
| 8 | Lock Client Audit Trail Record | customworkflow_8299_lock_cat_record | Released | Before load | Bundle 116144 |
| 109 | SS RT PRM 3 Way Match VB Approval | customworkflow_3way_match_vb_approv_2 | Released | Create + update · Vendor Bill | SuiteSuccess |
| 110–112 | STE Compliance Text / Lookup / Rate Type | customworkflow_ste_wf_* | Released | Create/update/before-submit · transactions | SuiteTax |
| 113 | 3 Way Match VB Approval | customworkflow_3way_match_vb_approval_pr | Not initiating | Vendor Bill | Bundle 240841 |
| 114 | Invoice Approval Workflow | customworkflow_naw_iaw | Not initiating | Create · Invoice | Bundle 240841 |
| 115 | Vendor Bill Approval Routing | customworkflow_vb_workflow | Not initiating | Vendor Bill | Bundle 240841 |
| 116 | Available Credit Field | customworkflow_atlas_available_credit | Released | Before load · Customer → CUSTENTITY_ATLAS_AVAIL_CREDIT | Atlas |
| 117 | Inventory Adjustment Reason | customworkflow_atlas_invadj | Not initiating | Create · Inv. Adjustment | Atlas |
| 118 | Default Promise Date | customworkflow_atlas_promise_date_dflt | Released | Create/update · PO → CUSTCOL_ATLAS_PROMISE_DATE | Atlas |
| 119 | Set Churn Date on Customer | customworkflow_atlas_set_churn_date | Released | After submit · Customer → CUSTENTITY_ATLAS_CHURN_DATE | Atlas |
| 120–121 | Set Field Values — PO / Invoice | customworkflow_atlas_set_po / _setinv | Not initiating | Create | Atlas |
| 216 | FinWB Translations | customworkflow_atlas_finwb_translations | Released | Scheduled | Atlas |
| 316 | Procurement Translations | customworkflow_atlas_prowb_translations | Testing | Scheduled | Atlas |
Key finding: the only transaction-approval automation actually running is workflow 109 (3-way-match vendor-bill approval). The NetSuite Approvals Workflow bundle's invoice and vendor-bill routing workflows (113–115) are installed but Not Initiating — invoices and most vendor bills flow unapproved. Decide deliberately whether to activate or remove them.
Automation in this account is overwhelmingly SuiteScript-driven: 17 workflows vs. 1,843 active script deployments. Workflows handle field defaulting and bundle-internal locking; business applications, integrations, and analytics all live in script.
Bundle install / SDF / SPA / dataset-builder / plug-in types aggregated as "Other". The vast majority are bundle-owned (FAM, EBP, SuiteTax, Ship Central, Mfg Mobile, APM, 360 apps).
Only one non-bundle-core script holds an active schedule: customscript_atlas_aicomp_role_sync (status Scheduled) — the AI Companion's weekly role sync from aiprompt_role_import.csv; idempotent, add-only. All other local scheduled/MR scripts (customscript_atlas_materialize_tb, _atlas_bulk_tag, _atlas_aicomp_usage_rollup, customscript3248 Delete Item Line MR, _de_dept_hotfix_ss, _example_agent_1) are deployed but Not Scheduled — on-demand only. Scheduled workflows 216/316 handle SuiteSuccess workbook translations.
No workflow in the account uses a saved-search initiation condition (initsavedsearchcondition empty on all 17). The reporting/automation surface is instead SuiteQL-first: the Report Runner, Living Ledger, Fathom BI, and Atlas trial-balance apps all query SuiteQL directly rather than depending on saved searches — which reduces the classic "someone edited the saved search" fragility.
109 roles (108 active): 30 standard, 79 custom. One inactive (customrole_atlas_admin_dash_pub, 1349). Custom roles cluster into:
| Group | Ids | Assigned? | Notes |
|---|---|---|---|
| SuiteSuccess "RT PRM" pack | 1131–1145 (15) | 0 employees | Atlas-provisioned; entirely unused. |
| SuiteSuccess "SS RT PRM" pack | 1659–1673, 1878–1880, 1982 (19) | Yes — primary working roles | CEO/CFO/Controller/Accountant/A-R Analyst etc. |
| Legacy demo | 41 CFO, 42/43 Retail Clerk | 41 assigned | 41 has 240 FULL-level permissions; 43 is web-services-only. |
| Integration / service | 1350, 1449, 1549, 1674, 1986, 1987, 2090, 2195 | 1986 assigned | Cash360/Item360/B360/SuiteTalk REST/Atlas Service/Sonar VBM; mostly ALL-subsidiary. |
| Mobile / WMS / Mfg | 1649–1658, 1774–1776 | 2 assigned | Own-subsidiary operator roles. |
| Misc / test | 1005 EFT, 1231/1232, 1348, 1677, 1881 FAM, 1983–1985 MCP, 2087–2094, 2193/2194 | Scattered | Includes assigned "TEST_DELETE_ME" (2087) and smoketest (2088). |
Administrator (role 3) is held by 23 of ~50 employees — Alex Rymarquis, Ann Traynor, Ben Morgan, Caleb Schmitz, Ephraim Goyena, Eric Nelson03, Hazel Alcoy, Jacob Bailey, Jef Sauco, Jenny Lunsford03, Kate Cabalar, Kathryn Glass (system id −5), Marc Ordinanza, Marcy Meinert, Pao Pao, Paolo Abutal, Philip Cutler, Ron Villanueva, Ryan Rote, Steph Azoulay, Tim Dietrich, Timothy Dietrich, Trisha Cabral. Reduce to a small named set and move daily work to the SuiteSuccess functional roles.
Admin-like grants inside custom roles (from rolepermissions, level FULL): role 2093 AI Companion Controller holds ADMI_ENABLEFEATURES, ADMI_CUSTOMSCRIPT, ADMI_MANAGE_OAUTH2, ADMI_PERIODOVERRIDE and MCP Server; roles 1987 and 1664 hold ADMI_ENABLEFEATURES + SuiteScript; roles 1231/1232/1671/1987 hold Bulk Manage Roles. Heaviest FULL counts: 41 CFO (240), 1984 MCP-Custom CFO (170), 1664 SS Controller (108), 1661 SS Accountant (97), 2093 (93).
subsidiaryoption=ALL) in a OneWorld account — including the service roles 1449, 1549, 2090, 2195. Acceptable for integrations; review for human roles.employeerestriction=UNASSIGNED.coreadminpermission.Not verified: employee-level global permission grants and per-role last-login usage (LoginAudit) — recommend a follow-up permissions-audit run (a permissions-audit process definition exists in this account's Sonar process library).
~1,120 script records (Suitelet 384, RESTlet 183, User Event 181, Map/Reduce 143, Client 101, Scheduled 97, others <20 each); ~35 are locally authored. The local estate divides into five families:
| Family | Scripts (scriptid) | What it does |
|---|---|---|
| Atlas API layer | customscript_atlas_api (RESTlet), customscript_atlas_ui (Suitelet), MR dispatch/materialize/bulk-tag, cache-invalidate UE | Function-dispatched API over NetSuite reads/writes with its own bearer-token auth (token records), per-function permissions, audit logging to CUSTOMRECORD_ATLAS_AUDIT, staged (approval-gated) writes, webhook event dispatch, and a materialized trial-balance cache. Handlers live in lib/atlas-functions.module.js. Source: file 91077 header. |
| Modern UI apps | customscript_crm_app_sl / _crm_data_rl / _crm_portlet; customscript_pos_app / _pos_data / _pos_portlet; customscript_ws_app / _ws_data / _ws_share / _ws_portlet | Single-page CRM, POS, and Workspace apps served as Suitelets with companion data RESTlets. POS creates customers, cash sales and cash refunds with hardcoded defaults: location 1, subsidiary 2, walk-in customer 3892, bank account 1; overrides shipping address for origin-based SuiteTax. |
| Finance & ops tools | customscript_ar_collections, _collections_priority, _je_entry, _living_ledger, _report_runner_app (+ RESTlet), _sales_mgr_dashboard, _marginpulse_portlet, _cabinet_plus | Collections worklists; modern JE-entry UI (hardcoded chart-of-accounts list — see §7); read-only SuiteQL financial reporting; a File Cabinet manager with versioning; sales dashboards. |
| AI / agent tooling | customscript_sonar_ai, _sonar_mission_control_sl, _sonar_flux_radar_portlet, _fathom (testing), _cs_studio, _cs_toolkit, customscript3564 (SuiteQL Query Tool 2026) | Sonar AI agent Suitelet; Fathom BI workbench; Chartstone Studio agent chat (LLM relay) and its Toolkit RESTlet — an RPC surface that can create roles, set permissions, assign roles, and CRUD records/fields/files (high-risk admin surface, §7). |
| Utility / misc | customscript_usr_ue_transaction, _cs_emp_change_notifier, _fetch_record_fields, _updater, _atb_sl_data_service, _atb_engine_restlet, _portletwarmer, customscript3248 | See per-script notes below. |
customscript_usr_ue_transaction — a single User Event deployed to 15 transaction types (Sales Order, Invoice, Vendor Bill, PO, Credit Memo, Cash Sale, Estimate, Opportunity, …) via customdeploy_usr_ue_tran_*. Source file usr_ue_transaction.js (id 24736, 1.3 KB) is access-blocked to this session — its logic could not be read and is flagged rather than guessed. Given the breadth of deployment, characterize it before any transaction-form or UE work.customscript_cs_emp_change_notifier (file 91211) — UE afterSubmit on Employee; emails a hardcoded external address jterneus@anchorgroup.tech when departure or job-change fields change (isinactive, releasedate, title, department, supervisor…). Status Testing, deployment customdeploy1. External data egress — confirm this is intended.customscript_atlas_aicomp_role_sync — the only locally-visible script with an active schedule (weekly); part of NetSuite's AI Companion app; source in a protected bundle folder (not readable). Add-only, idempotent per its description.customscript_atb_sl_data_service / _atb_engine_restlet — thin gateways (0.5–1.3 KB) delegating to bundle-protected ATB_*Gateway modules (folders 2792–2807); an Available-to-Build/Promise managed app, not truly local (inferred).| Script / file | Destination | Purpose |
|---|---|---|
| chartstone-studio.suitelet.js (90760) | api.anthropic.com, Cohere via N/llm, chartstone.studio/verify | LLM relay for agent chat; HMAC license check. |
| SalesManagerDashboard.js (90756) | api.openai.com, api.anthropic.com | AI summaries with user-supplied key. |
| Atlas webhook dispatch (91094/91095) | Configured webhook URLs — currently 4 subscriptions incl. a webhook.site test bin | Outbound event notifications. |
| Sonar AI / Fathom | api.anthropic.com (browser-side, user key) | Second-opinion review / BI insights; keys never stored server-side. |
Script execution logs (scriptnote) show zero HTTP/webhook/API error entries since 2026-06-01 — the outbound surface is quiet, not broken.
Not queryable: the integration, tokenpassport and accesstoken tables are not exposed to SuiteQL in this account. Enumerate registered integration applications in the UI: Setup > Integration > Manage Integrations. The existence of a "SuiteTalk REST" custom role (1986, assigned) and web-services-only roles (§4.3) indicates token-based access is in use.
The account's primary custom integration surface. customscript_atlas_api (deployment customdeploy_atlas_api, Released, audience restricted to roles 3 / 2089 / 2090) accepts NetSuite-TBA-authenticated calls, optionally further scoped by an Atlas bearer token (CUSTOMRECORD_ATLAS_API_TOKEN, 2 tokens on file). Writes can be staged to CUSTOMRECORD_ATLAS_STAGED for human approval; every call lands in CUSTOMRECORD_ATLAS_AUDIT (750 events). Outbound: 4 webhook subscriptions with 13 queued/processed events — one target is a webhook.site test bin (cleanup candidate). Agent-originated transactions are stamped with CUSTBODY_ATLAS_SOURCE / _SOURCE_ACTOR / _REQUEST_ID / _JUSTIFICATION.
| RESTlet | Deployment | Audience |
|---|---|---|
customscript_atlas_api | customdeploy_atlas_api | Roles 3, 2089, 2090 |
customscript_cs_toolkit | customdeploy_cs_toolkit | (blank — verify) |
customscript_crm_data_rl | customdeploy_crm_data_rl | (blank — verify) |
customscript_pos_data | customdeploy_pos_data | (blank — verify) |
customscript_ws_data | customdeploy_ws_data | (blank — verify) |
customscript_fetch_record_fields | customdeploy_fetch_record_fields | All roles |
customscript_updater | customdeploy_updater | All roles |
customscript_atb_engine_restlet | customdeploy_atb_engine_restlet | All roles + 14/15/16/21 |
Not queryable: saved CSV import maps (csvimport invalid search type). Review in UI: Setup > Import/Export > Saved CSV Imports. The AI Companion role sync consumes aiprompt_role_import.csv on a weekly schedule (§3.4).
Parallel retail path: Cash Sale (1,077) — the highest-volume transaction type — entered largely through the POS app (§5.2) against walk-in customer 3892, subsidiary 2, location 1. DCs take few/large orders (LA DC ≈ $6K average); stores take many/small (~$160–180 tickets). Estimate→SO lineage is traceable via nexttransactionlink (linktype='EstInvc'), though link rows are sparse — line-level createdfrom is the reliable join.
Promise dates default via workflow 118; 3-way-match approval (workflow 109) is the only released approval gate. Electronic Bank Payments handles payment batching (workflow 1). Vendor bills outnumber POs — direct-billed expenses are common.
Single-currency consolidation through elimination subsidiary 4 (xElim). Fixed Assets Management posts depreciation. Reporting is SuiteQL-first through the local tool family; the Atlas layer can materialize a trial-balance cache (CUSTOMRECORD_ATLAS_TBCACHE, currently empty) via customscript_atlas_materialize_tb.
| Origin | Transform / mechanism | Lands in |
|---|---|---|
| POS app (browser) | customscript_pos_data RESTlet; hardcoded loc/sub/customer defaults | Cash Sale, Cash Refund, Customer |
| CRM / Workspace apps | _crm_data_rl / _ws_data RESTlets | CRM records, transactions |
| External agents / integrations | Atlas API — token auth, optional staging, audit stamp | Any permitted record + ATLAS_AUDIT |
| NetSuite events | Atlas event queue → MR dispatch | Outbound webhooks (4 targets) |
| Employee record changes | _cs_emp_change_notifier UE | Email to anchorgroup.tech (external) |
| AI Companion CSV | Weekly scheduled role sync | AI Companion role records |
| Automation | Depends on | Break impact |
|---|---|---|
| Workflow 116 (Available Credit) | CUSTENTITY_ATLAS_AVAIL_CREDIT on Customer | Field removal breaks customer before-load. |
| Workflow 119 (Churn Date) | CUSTENTITY_ATLAS_CHURN_DATE | Customer after-submit failure. |
| Workflow 118 (Promise Date) | CUSTCOL_ATLAS_PROMISE_DATE on PO lines | PO defaulting stops. |
| Atlas API attribution convention | CUSTBODY_ATLAS_SOURCE/_SOURCE_ACTOR/_REQUEST_ID/_JUSTIFICATION | Losing these fields removes agent-write auditability. |
| Matrix items | Lists 24 (Colors) / 26 (Sizes) / 25 (Mattress) + CUSTITEMCUSTITEM_* + CUSTCOL1 | List edits ripple into item matrices and historic transaction lines. |
| POS app | Hardcoded ids: location 1, subsidiary 2, customer 3892, bank account 1 | Inactivating any of these silently breaks POS sales entry. |
| JE Entry suitelet | Hardcoded chart-of-accounts list | New/renamed GL accounts won't appear until the script is edited. |
| Promo app | 4 custom records + CUSTENTITY_PS_* + item publishing fields | Self-contained; low blast radius. |
| AI Companion role sync | aiprompt_role_import.csv in File Cabinet | Missing file = sync no-ops (add-only design limits damage). |
| # | Finding | Severity | Recommendation |
|---|---|---|---|
| 1 | CUSTENTITY_PS_PASSWORD stores a plaintext vendor credential | High | Move to N/crypto secrets or an API-secret record; purge field history. |
| 2 | 23 Administrator holders (~46% of staff) | High | Reduce to 2–3; migrate users to SuiteSuccess functional roles. |
| 3 | Chartstone Toolkit RESTlet can create roles / set permissions / assign roles; deployment audience is blank | High | Verify effective audience; restrict to named admin roles or undeploy when idle. |
| 4 | customscript_updater and customscript_fetch_record_fields RESTlets deployed to All Roles | Medium | Restrict audience; "Account Preload / Updater" with all-roles reach deserves review. |
| 5 | Employee-change UE emails PII to an external domain (anchorgroup.tech) | Medium | Confirm business intent; parameterize the recipient. |
| 6 | Atlas webhook pointing at a webhook.site test bin | Medium | Delete the test subscription — it exfiltrates event payloads to a public bin. |
| 7 | Role 2093 (AI Companion Controller) holds Enable Features, SuiteScript, OAuth2 management, Period Override | Medium | Confirm managed-app requirement; monitor assignees (currently informal). |
| 8 | Assigned test roles: 2087 TEST_DELETE_ME, 2088 smoketest; 52 zero-assignee custom roles | Low | Inactivate; rerun a permissions audit after cleanup. |
usr_ue_transaction.js (deployed to 15 transaction types) and the ATB gateway modules are access-blocked; treat them as black boxes until an Administrator exports them.bi-workbench-prototype.html (91424), duplicate Read-Only roles, RT PRM role pack, TEST_DELETE_ME role, testing-status suitelets (customscript_hello, _simple_so_entry, customscriptrpt_tester).transaction.subsidiary is not exposed to SuiteQL — filter on transactionline.subsidiary.REGEXP_LIKE is rejected by this account's SuiteQL — use LIKE chains; escape _ in LIKE patterns.script.frombundle / customsegment.frombundle are unreliable (NULL predicates return 0 rows) — attribute by prefix/internal id.ABS(); revenue on transactionaccountingline.amount is stored negative.| File (File Cabinet path / id) | Purpose |
|---|---|
/SuiteScripts/sonar-ai.suitelet.js · 91212 | Sonar AI agent Suitelet (v1.7.0) — this tooling. |
atlas-api.restlet.js · 91077 (folder 4825) | Atlas API entry: auth, permission enforcement, audit, error envelope. |
lib/atlas-functions.module.js · 91083 | Atlas API handler implementations (read/write/admin ops). |
lib/atlas-tokens.module.js · 91082 | Atlas bearer-token validation. |
atlas-ui.suitelet.js · 91078 | Atlas admin SPA (tokens, webhooks, staged writes, TB, dashboards). |
atlas-dispatch.mapreduce.js · 91094 / atlas-webhooks.js · 91095 | Event-queue webhook dispatch. |
atlas-materialize-tb.mapreduce.js · 91099 | Trial-balance cache materialization. |
usr_ue_transaction.js · 24736 (folder 3141) | UE on 15 transaction types — source access-blocked; logic undocumented. |
cs_employee_change_notifier_ue.js · 91211 | Employee-change email notifier → external address. |
chartstone-studio.suitelet.js · 90760 | Agent chat SPA; LLM relay (Anthropic/Cohere); license check. |
chartstone-toolkit.restlet.js · 90725 | Admin RPC RESTlet (role/permission/record/file CRUD) — high-risk surface. |
je_entry.suitelet.js · 90755 | Modern JE-entry UI (hardcoded COA). |
sonar_living_ledger.js · 91328 | Read-only cash-flow visualization. |
sonar_cabinet_plus_sl.js · 91329 | File Cabinet manager with versioning. |
report-runner.suitelet.js · 90704 / report-runner.restlet.js · 90703 | SuiteQL financial-report API + UI (read-only). |
SalesManagerDashboard.js · 90756 | Sales dashboard; calls OpenAI/Anthropic with user key. |
fathom.suitelet.js · 91425 | Fathom BI workbench (grids, charts, KPI cards) — deployment in Testing. |
sonar_flux_radar_portlet.js · 91334 | Flux Radar dashboard portlet. |
ATB_SL_DataService.js · 15865 / ATBMainRestlet.js · 15863 | ATB gateways — bundle-protected, unreadable (folders 2792–2807). |
scheduled_role_sync.js · 91219 (folder 4832) | AI Companion weekly role sync — bundle-protected, unreadable. |
Method: compiled 2026-08-26 by live introspection of account TD3016323 via SuiteQL (workflow, scriptdeployment, script, role, rolepermissions, employeerolesforsearch, customfield, customrecordtype, customsegment, transaction, scriptnote) and File Cabinet source reads. Items marked "not queryable" or "access-blocked" were verified to fail and are flagged rather than inferred. Counts are point-in-time. Assumptions: bundle attribution by scriptid prefix where frombundle is unreliable; a small number of generic-prefix fields have inferred ownership as noted in §2.3.