Skip to content
Back to skills

Sagex3 Assistant

ASecurity

Sage X3 ERP assistant for consultants and integrators. Use for anything Sage X3, even if the user only says \"X3\", a folder name, a table or abbreviation (SORDER/SOH, BPCUSTOMER, ITMMASTER, STOCK), a local menu number, a module, or a release (\"V11\", \"V12\", \"2026 R1\", \"patch 39\", \"12.0.38\"). Capabilities - (1) Data dictionary / SQL: verified SQL views/queries against an X3 folder from the bundled V11 table dictionary (tables, keys, columns, data types, dimensions, local-menu enum va...

  • 7 stars
  • 0 votes
  • 1 copy
  • 7 views
  • Added October 3, 2026
ai-agentspythonrustgojavashellsqlexpressapidatabasedocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 11 files and shows the line behind each finding

Scanned October 3, 2026

npx -y skills add fdtaljaard/claude-skills --skill sagex3-assistant --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Sagex3 Assistant?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Sagex3 Assistant
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/fdtaljaard-sagex3-assistant/badge)](https://www.skillsdirectory.com/skills/fdtaljaard-sagex3-assistant)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: sagex3-assistant
description: "Sage X3 ERP assistant for consultants and integrators. Use for anything Sage X3, even if the user only says \"X3\", a folder name, a table or abbreviation (SORDER/SOH, BPCUSTOMER, ITMMASTER, STOCK), a local menu number, a module, or a release (\"V11\", \"V12\", \"2026 R1\", \"patch 39\", \"12.0.38\"). Capabilities - (1) Data dictionary / SQL: verified SQL views/queries against an X3 folder from the bundled V11 table dictionary (tables, keys, columns, data types, dimensions, local-menu enum values, foreign-key link expressions), \"what table/field holds X\". (2) Versions and upgrades: V12 release and patch names, lifecycle stage and end of maintenance, platform prerequisites per release (Windows Server, SQL Server/Oracle, MongoDB, Java), upgrade paths and methods from V6/V7/U9/V11/V12 to the current release, what changed per release, whether views and integrations break. More capabilities (development) follow; trigger on any Sage X3 question, casually phrased or not."
compatibility: "Runtime needs file read + grep over the bundled references and, for versions other than V11 or anything newer than a reference's verified date, web access to online-help.sagex3.com. Maintenance scripts (not needed at runtime) need Python 3.10+ and internet access."
metadata:
  author: Francois Taljaard
  version: "2026.10.2"
  domain: Sage X3 ERP
---

# Sage X3 Assistant

Reference-backed assistant for Sage X3 consultants and integrators. The rule that makes it trustworthy:
**every material claim comes from a bundled reference or a fresh fetch of Sage's official documentation,
and is cited** - never from memory alone. X3 table abbreviations, column names, local-menu values and
dimensions are exactly the things a model guesses plausibly and wrongly.

## 1. Route the request

| Request looks like | Go to |
|---|---|
| a view, query, report extract, "what table/field holds X", "what does value N of status mean", a join, a table/abbreviation lookup, "which tables are in Sales" | § 3 Dictionary / SQL |
| "client on V11 / 2024 R2 wants to go to 2026 R1", "what does 2026 R1 need", "is 2025 R1 still supported", "what changed in 12.0.38", "will our views / integration break", upgrade checklist, SQL Server / Windows / MongoDB / Java support, patch vs release names | § 4 Versions & upgrades |
| both - "we're moving to 2026 R1, will this view still work?" | § 4 then § 3 |

If it doesn't fit (4GL / web-service development, screen behaviour - planned capabilities, see `MAINTENANCE.md`),
say so, answer from Sage's official help (`https://online-help.sagex3.com/erp/<version>/en-US/`) with a citation, and
note that the skill could be extended.

## 2. Ground rules

- **Never write SQL that modifies X3 tables** - no INSERT/UPDATE/DELETE/TRIGGER/ALTER on X3-owned objects.
  Views, queries, read-only diagnostics and separate reporting objects only. If asked to change X3 data via
  SQL, warn that direct writes bypass X3's business logic (stock, accounting, sequence numbers, audit) and
  corrupt integrity; point to the application, import templates or X3 web services instead. Don't print the
  modifying statement even as an illustration - describe it in words.
- **Verify, then cite.** Every table, column, key and local-menu value you emit must have been seen in a
  reference file, and you say which file. Nothing from memory.
- **Match the client's version.** The bundled dictionary is **V11**. Ask which version the client runs when
  it changes the answer; for V12 (or a newer version) confirm the table on Sage's help at the same URL
  (`https://online-help.sagex3.com/erp/12/en-us/Content/MCD/<TABLE>.htm`, or `scripts/diff_table_versions.py TABLE`)
  before relying on it, and say so.
- **Match the folder.** Tables live in the folder's schema; local menus, activity codes and dimensions are
  folder-specific. Anything the dictionary marks with an activity code or a dimension must be confirmed on
  the client's folder (`conventions.md` § 2).
- If the user reports a fact the references lack or contradict, verify it on Sage's help and say the
  reference should be updated (`MAINTENANCE.md`).

## 3. Dictionary / SQL

Bundled: `references/dictionary/V11/` - `table-index.md` (every table, one line, grouped by module),
`dict/<Module>.md` (per-table keys and fields), `local-menus.md` (enum values), `data-types.md` (type → internal
type + linked table), plus `references/dictionary/conventions.md` (how X3 stores data in SQL, join map,
worked example). `references/dictionary/INDEX.md` lists files, coverage and verified dates - read it first.

1. **Pin the requirement**: entities (orders, invoices, customers, items, stock…), columns, filters, and the
   **grain** (one row per order / line / item-site / stock lot). Ask when grain or status semantics are
   ambiguous - X3 status columns are local menus with several "open" values, and getting this wrong silently
   doubles or drops rows.
2. **Find the tables** in `references/dictionary/V11/table-index.md` (grep by topic, table name or
   abbreviation). Sales orders → `SORDER` (header) + `SORDERQ`/`SORDERP` (lines); customers → `BPCUSTOMER`
   + `BPARTNER`; items → `ITMMASTER` (+ `ITMFACILIT` per site); the `conventions.md` join map covers the rest.
   The heading of each module section names the `dict/` file to open (Sage files the master tables -
   `BPARTNER`, `ITMMASTER`, `FACILITY`, `COMPANY` … - under **Common Data**, so grep by name, don't guess the
   module). A `+` after the table name means it does not exist in V9.0 P12 and/or V10 P1, `*` that it differs
   there; the entry's `Notes:` line says which. 348 tables are header-only (Sage publishes no columns for
   them) and say so - read those structures from the client's folder.
3. **Verify every field** in `references/dictionary/V11/dict/<Module>.md`. Never emit a column you haven't
   seen there. Read the field line in full: `TYPE*LENGTH(DIM)` - a `(DIM)` field is stored as
   `NAME_0 … NAME_(DIM-1)`; `-> [ABR]KEY=expr (TABLE)` is the dictionary's **link expression**, i.e. the
   foreign-key join to use; `-> TABLE` alone means the column's data type points at that table. The `Keys`
   line lists the indexes (first = primary key, `(D)` = duplicates allowed) - join and filter on them.
4. **Decode local menus and never guess them**: a type-`M` field carries `[menu N: 1=…,2=…]` inline, or
   `[menu N: K values, see local-menus.md]` - look it up there. Booleans are **menu 1: 1=No, 2=Yes** (not
   0/1). Decode with CASE in output and cite the values used in filters. Local menus can be customized per
   folder, so for a value that matters, confirm on the client's system (table `APLSTD` - local menu texts by
   chapter/number/language - or the local menu screen).
5. **Write the SQL** after reading `references/dictionary/conventions.md` (schema = folder, type mapping,
   empty-value semantics, dimensioned columns, dates, join map, worked example). **Every physical column is
   `NAME_0`** (`SOHNUM_0`, `ITMREF_0`), dimensioned ones continue `_1 …`; only `ROWID` has no suffix.
6. **Deliver**: one ```sql block with the complete `CREATE OR ALTER VIEW` (or query), then a short note on
   tables used and why, joins (quote the link expressions), status filters in business terms, and explicit
   assumptions (grain, folder/schema, which date column, currency). Add a sanity-check `SELECT TOP 20 …` the
   user can run first.

Grep recipes (paths relative to the skill root; one field per line in `dict/`):
`(?i)sales order` in `references/dictionary/V11/table-index.md` → tables by topic;
`^## SORDER ` in `references/dictionary/V11/dict/Sales.md` → a table's entry;
`^  BPCORD ` across `references/dictionary/V11/dict/` → every table carrying a column;
`(?i)allocation status` in `references/dictionary/V11/dict/Sales.md` → a column by title;
`^- menu 416 ` in `references/dictionary/V11/local-menus.md` → a local menu's values.

## 4. Versions & upgrades

Bundled: `references/upgrades/upgrade-guide.md` (naming, lifecycle policy, official URLs, upgrade paths and
methods, the in-place and folder-upgrade procedures, `UU*` processes, SQL/integration impact method, verification
SQL, answer shape), `references/upgrades/platform-matrix.md` (what each release supports; component versions per
release; V7–V11 legacy matrix) and `references/release-notes/<release>.md` for 2023 R2 → 2026 R1 (what's new,
behaviour changes, **tables / local menus whose dictionary definition changed**, entry points). Read the two `INDEX.md`
files first.

1. **Pin source and target**: release and patch (`YYYY Rn` = `12.0.xx` - "patch 39" is 2026 R1), database (SQL
   Server / Oracle, version), OS, whether Syracuse web, classic web services, X3 Services / GraphQL, Mobile
   Automation or the Office add-in are in use, and which SQL views / integrations exist. If either version is
   missing, ask - the answer differs materially by jump size. "Latest" → confirm the current release on Sage's
   release-information post before answering.
2. **Read** `upgrade-guide.md` § 1 (lifecycle - a V12 release gets 24 months: 6 Current, 12 Standard, 6 Extended),
   § 3–6 for the path, method and procedure, and `platform-matrix.md` whenever Windows Server / SQL Server / Oracle /
   MongoDB / Java / browsers are in play (the "since release" boundaries decide). For what changed, read
   `release-notes/<release>.md` for the target **and every skipped release**.
3. **Check dates.** Anything newer than a reference's verified date (a release after 2026 R1, a re-issued
   prerequisites page): fetch Sage's page first (URLs in the guide § 2); if it can't be fetched, mark the claim
   "confirm on online-help.sagex3.com / the Sage Community release-information post".
4. **Assess integration and SQL impact concretely.** For each named table: the readme-derived "tables touched" lists
   in the skipped releases' notes, then `python scripts/diff_table_versions.py TABLE` (V11 ↔ V12 help pages) or
   the dictionary (§ 3). The honest default for core tables is "additive - existing columns unchanged"; what usually
   bites: local-menu values behind decoded statuses, dimension growth, web-service / Syracuse build pinning, platform
   retirements on the integration host, entry points the customizations hook.
5. **Answer in the standard shape** (guide § 9): path → blockers → integration & SQL impact → gotchas for target
   *and skipped* releases → plan in order of operations → verification SQL (include it) → sources with dates.
   Scale it to the question - a narrow one gets a direct answer, the evidence and a one-line pointer.
6. **Offer follow-ups**: the verification script tailored to their tables, the table diff for their views, a
   checklist file.

## 5. Gotchas (things a careful engineer still gets wrong)

- **Tables are in the folder's schema** (`SEED.SORDER`, not `dbo.SORDER`); the same tables exist once per
  folder. Always qualify, and ask which folder.
- **Every column has a `_0` suffix in SQL** - dictionary `ITMREF` is column `ITMREF_0`, dimensioned or not;
  `ROWID` is the only exception. Without it every reference fails with `Msg 207 Invalid column name`.
- **Dimensioned columns**: `BPCADDLIG A*30(3)` is three SQL columns `BPCADDLIG_0..2`, not one. When the
  dimension comes from an activity code, the real column count on the client's folder is the activity code's
  value, not the dictionary maximum.
- **No SQL NULLs.** X3 writes every column: empty strings are `''`, numbers `0`, and the empty date is
  **`1753-01-01` on SQL Server** (`1599-12-31` only on Oracle - comparing a SQL Server `DATETIME` to it raises
  `Msg 242 out-of-range`). `IS NULL` never matches; filter on `<> ''`, `<> 0` and `> '1753-01-01'`; confirm a
  folder's sentinel with `SELECT MIN(<DATE>_0) FROM <FOLDER>.<TABLE>`.
- **Booleans are 1/2** (local menu 1: 1=No, 2=Yes). `WHERE FLAG = 1` means *No*.
- **Local menus are numbers** in the database; the text differs by language and can be customized per
  folder. Decode with CASE from `local-menus.md`, and confirm customized menus on site.
- **Header/line tables and keys**: lines join to headers on the document number (`SOHNUM`) plus the line
  (`SOPLIN`) and sequence (`SOQSEQ`) where the key says so - join on the full key expression in `Keys`.
- **`ROWID`** exists on every X3 table (unique numeric row id) but is not in the dictionary. It is safe for
  joins to your own reporting tables; it is not a business key.
- **Activity codes**: a table or column with an activity code only exists in folders where that code is
  active (localization and add-on tables especially). Check before you query it.
- **Decimal scale is not fixed** for amount types (`MD1 =GDEVFMT` formats by currency); read the actual
  `NUMERIC(p,s)` from the database when precision matters.
- **V11 dictionary, other versions differ**: Sage marks tables that changed in V9/V10 with `*` in
  `table-index.md` and publishes the diff at `AT3_<TABLE>.htm` / `ATD_<TABLE>.htm`; V12 table pages are at
  `erp/12/en-us/Content/MCD/<TABLE>.htm` (`scripts/diff_table_versions.py` compares them - e.g. V12 `SORDER` adds
  `DRAFTSTATUS`, `DRAFTREJ`, `DRAFTREJREN`). Confirm columns on the client's version before shipping a view.

**Versions & upgrades (§ 4):**
- **A V12 release is maintained 24 months from GA** (6 Current + 12 Standard + 6 Extended); only the Current release
  gets compliance service packs. V11 ended maintenance **1 April 2024**; U9 1 July 2021; V6/V7/U8 1 July 2020.
- **Names**: 2026 R1 = 12.0.39 = "patch 39"; releases are cumulative and bi-annual (May / November) since 2022 R4.
- **Syracuse builds are pinned to the patch since February 2026** - a Syracuse upgrade is no longer independent of
  the X3 patch; follow Sage's component matrix for the exact patch.
- **2026 R1 drops Windows Server 2016, SQL Server 2016 and Oracle 12c**; since 2025 R1 Windows Server 2012/2016
  sites must move to 2019/2022/2025; MongoDB 8 is mandatory from 2025 R2 (and 7/8 are not certified on Windows
  Server 2025 as of April 2025 - host MongoDB on 2022); JDK 11 since 2024 R2; PowerShell 7.2+ since 2022 R4; Apache
  deprecated since 2022 R2; Windows 10 clients unsupported since October 2025.
- **Revalidation takes hours** and needs every folder saved first; an in-place upgrade's only rollback is a restore;
  a migrated folder cannot carry the TEST flag; the SEED folder is reinstalled, not overwritten.
- **`ROWID` survives an in-place upgrade but not an export/import folder upgrade** - never key an integration on it
  across a migration.
- Reseller "what's new" blogs and Community posts needing a login are pointers, not sources - cite Sage's help,
  the release-notes API or the Lifecycle Policy, with dates.

## 6. Layout

```
references/dictionary/    INDEX.md, conventions.md, V11/table-index.md, V11/dict/<Module>.md, V11/local-menus.md, V11/data-types.md
references/upgrades/      INDEX.md, upgrade-guide.md, platform-matrix.md
references/release-notes/ INDEX.md, <release-id>.md (2023-r2-34 … 2026-r1-39)
scripts/                  maintenance only (rebuild the dictionary and release notes from Sage's sites, package the skill) - except
                          diff_table_versions.py, which the agent may run to compare a table between V11 and V12
evals/evals.json          test prompts per capability
MAINTENANCE.md            how to rebuild the dictionary and release notes, add a version, add a capability, package
```

Every `references/` folder has an `INDEX.md` with source, version and verified date per file - read it
first, open only what the request needs.

Files in this skill

  • MAINTENANCE.md7.5 KB
  • SKILL.md15.3 KB
  • evals/evals.json7.9 KB
  • references/dictionary/INDEX.md3.7 KB
  • references/dictionary/V11/data-types.md26.7 KB
  • references/dictionary/V11/dict/CRM.md40.2 KB
  • references/dictionary/V11/dict/Development.md4.9 KB
  • references/dictionary/V11/dict/HCM.md9.3 KB
  • references/dictionary/V11/dict/HR-administration.md43.1 KB
  • references/dictionary/V11/dict/Help-Desk.md19.2 KB
  • references/dictionary/V11/dict/Manufacturing.md98.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.