logo

NJP

Extending Finance Case Management: Adding a General Accounting Case Table in ServiceNow

New article articles in ServiceNow Community · Sep 24, 2026 · article

 

Audience: ServiceNow Developers & Technical Consultants  

Product: Finance Case Management (FCM) | sn_fin_ops framework

 

Why Extend FCM for General Accounting?

Out of the box, ServiceNow Finance Case Management ships with a shared Finance Case table (sn_fin_ops_finance_case) that covers common workstreams — AP, AR, Treasury, and Procurement. In larger GBS or shared services deployments, General Accounting teams often have distinct requirements:

  • Dedicated case numbering (e.g. GA prefix)
  • Role separation between GL specialists, requesters, and task owners
  • Custom case types such as GL Coding Review, Journal Entry Query, or Period-End Adjustment
  • Controlled visibility — an accountant should not see a Treasury case

 

The cleanest way to solve this is a scoped child table that extends the Finance Case table, with its own roles, ACLs, catalog item, and Employee Center wiring. This post walks through exactly that.

 

What You're Building

Artefact

|

Detail

|
|

Scoped App

|

GA Case Management (scope: x_snc_ga_case_m_0)

|
|

Case table

|

x_snc_ga_case_m_0_ga_case → extends Finance Case

|
|

Task table

|

x_snc_ga_case_m_0_ga_task → extends Finance Task

|
|

Roles

|

admin, specialist, requester, task_owner

|
|

Case type

|

GA Inquiry (value: ga_inquiry)

|
|

Catalog item

|

Copied from Finance inquiry, pointed at GA Case table

|
|

ACLs

|

Allow-If + Deny-Unless pattern, 11 on case / 9 on task

|
|

Employee Center

|

Request filter + open/completed to-do lists

|
|

Cross-scope

|

Write access granted from Finance Case Management scope

|

 

Licensing Considerations

Finance Case Management (sn_fin_ops) is a separately entitled ServiceNow Store application — it is not a capability unlocked purely by assigning roles. Before installation, your instance must carry valid entitlements for the application and its associated Store applications. The Store listing is the authoritative source for subscription requirements and release compatibility.

 

⚠  Important: Licensing metrics, package inclusions, and what is or is not bundled vary by contract, product tier, and ServiceNow release. Nothing in this section should be treated as a definitive licensing model. Always validate with your ServiceNow account team and your order form before activating in production.

 

What sn_fin_ops Installs

Installing Finance Case Management (sn_fin_ops) also installs or depends on the following applications. Confirm all are covered by your entitlement before activating in production:

  • Finance Operations Workspace (sn_fin_ops_ws): The agent-facing workspace where specialists route, update, and resolve cases.
  • Common Service Delivery (sn_spend_sdc): Shared platform services underpinning FCM case and task handling. Several ACL scripts in this guide call sn_spend_sdc.ServiceTaskUtil — this dependency must be present for those scripts to work.

 

Role-to-Access Mapping

The sn_fin_ops roles below describe access levels within the application. They do not define or determine license consumption — that is governed by the commercial metric in your order form.

 

Role

|

Access granted

|

Typical user

|
|

sn_fin_ops.requester

|

Creates finance cases via Employee Center

|

Employee submitting a finance request

|
|

sn_fin_ops.specialist

|

Views and updates finance cases; includes Finance Operations Workspace access

|

GL analyst, finance ops team member

|
|

sn_fin_ops.task_owner

|

Works tasks associated with finance cases

|

Accountant assigned to a task

|
|

sn_fin_ops.admin

|

Administrative access including Finance Operations Workspace

|

FCM application administrator

|

 

ℹ  Note: Your scoped GA roles (x_snc_ga_case_m_0.*) each inherit one of the above sn_fin_ops roles via the Contains Roles configuration. The access boundaries above therefore apply equally to your GA extension.

 

Questions to Ask Your Account Team

Before activating sn_fin_ops or your GA extension in production, get written answers to the following from your ServiceNow account team:

 

Area

|

Question to ask

|
|

Entitlement package

|

Which SKU or subscription covers Finance Case Management on our order form, and does it include a GA extension?

|
|

Subscription metric

|

How is consumption measured — by employee headcount, named Fulfiller users, case volume, or another metric?

|
|

Dependent applications

|

Are Finance Operations Workspace (sn_fin_ops_ws) and Common Service Delivery (sn_spend_sdc) included, or separately entitled?

|
|

Requester access

|

How is access for employees submitting finance requests (sn_fin_ops.requester) licensed — is it included, a lower tier, or a separate SKU?

|
|

Integrations and Store apps

|

Are any integrations or dependent Store applications separately entitled under our contract?

|
|

Non-production instances

|

Are there any constraints on activating sn_fin_ops in development, test, or UAT instances?

|
|

Release compatibility

|

What ServiceNow release versions are supported under our current subscription, and are there upgrade constraints?

|

 

Before You Go Live — Three Steps

  1.   Verify the entitlement in the instance.

Check Application Manager or the Store application listing to confirm the entitlement is valid on the target instance before activation.

  1.   Separate requester and fulfiller access.

Do not assign sn_fin_ops.specialist (or x_snc_ga_case_m_0.specialist) to employees who only need to submit requests. Requester and fulfiller roles must be kept separate for both least-privilege security and licence hygiene.

  1.   Test with least-privilege roles in non-production.

Validate end-to-end access in a non-production instance before promoting to production. Do not assume an existing Employee Center, CSM, or HRSD subscription automatically includes sn_fin_ops — confirm explicitly.

Step 1 — Create the Scoped Application

Navigate to App Engine > ServiceNow Studio and create a new App.

  • Name: GA Case Management | Scope: Scoped
  • On the roles page, delete the two default roles — you'll create precise ones next.
  • Select Continue, then Go to app dashboard.

 

ℹ  Note: Verify the app scope x_snc_ga_case_m_0 is active in the top-right scope switcher before proceeding. Every table, role, and ACL must land in this scope.

 

Step 2 — Create Roles

Navigate to System Security > Users and Groups > Roles and create four roles with the following suffixes. The platform prepends the scope prefix automatically.

 

Suffix

|

Full Role Name

|

Contains Role

|
|

admin

|

x_snc_ga_case_m_0.admin

|

x_snc_ga_case_m_0.specialist + sn_fin_ops.admin

|
|

specialist

|

x_snc_ga_case_m_0.specialist

|

sn_fin_ops.specialist

|
|

requester

|

x_snc_ga_case_m_0.requester

|

sn_fin_ops.requester

|
|

task_owner

|

x_snc_ga_case_m_0.task_owner

|

sn_fin_ops.task_owner

|

 

For each role, open it, navigate to the Contains Roles tab and add the mapped sn_fin_ops role via Edit. This cascades the OOB FCM permissions correctly — your custom roles sit on top of the framework without duplicating logic.

 

Step 3 — Create Case and Task Tables

3.1 GA Case Table

In Studio, create a new Table file under GA Case Management:

 

Field

|

Value

|
|

Label

|

GA Case

|
|

Name

|

x_snc_ga_case_m_0_ga_case (auto-filled)

|
|

Extends table

|

Finance Case

|
|

Auto-number

|

Enabled

|
|

Prefix

|

GA

|
|

User role (Controls tab)

|

x_snc_ga_case_m_0.specialist

|
|

Accessible from

|

All application scopes

|
|

Can read / create / update

|

All selected

|

 

Extending Finance Case gives your table the full FCM data model — short description, priority, assignment group, state machine, work notes, and SLA fields — with no custom schema work.

 

3.2 GA Task Table

 

Field

|

Value

|
|

Label

|

GA Task

|
|

Name

|

x_snc_ga_case_m_0_ga_task (auto-filled)

|
|

Extends table

|

Finance Task

|
|

Prefix

|

GATSK

|
|

User role

|

x_snc_ga_case_m_0.specialist

|

 

3.3 Related List and New Action

  1.   Navigate to All > GA > GA Cases, open a new case form, right-click the title bar and go to Configure > Related Lists.
  2.   Remove Finance Task -> Related case from Selected. Add GA Task -> Related case to the top of Selected. Save.
  3.   Navigate to Now Experience Framework > Declarative Actions > Related List Actions and create a New action:
  • Implemented as: UXF Client Action
  • Specify client action: Create New Record
  • Table: GA Task [x_snc_ga_case_m_0_ga_task]

 

Step 4 — Create the GA Inquiry Case Type

  1.   In Studio, open the GA Case table and search fields for case_type.
  2.   Open the side panel gear icon → Choices > Edit > See all choice configurations.
  3.   On the Choices tab of the Dictionary Entry, select New and add:

 

Field

|

Value

|
|

Label

|

GA Inquiry

|
|

Value

|

ga_inquiry

|
|

Table

|

GA Case [x_snc_ga_case_m_0_ga_case]

|

 

ℹ  Note: The value ga_inquiry must match exactly in both this Choice record and the catalog item script below. A mismatch creates cases with a blank case type.

 

Step 5 — Create the Catalog Item

  1.   Navigate to Service Catalog > Catalog Definitions > My Catalogs > Service Catalog.
  2.   Search for Finance inquiry in the Catalog Items tab and open it.
  3.   Select Copy and update the copy:

 

Field

|

Value

|
|

Name

|

GA Inquiry

|
|

Table name

|

GA Case [x_snc_ga_case_m_0_ga_case]

|
|

Short description

|

Raise a General Accounting inquiry

|

 

  1.   In the Scripts section, update lines 18–19:

//Setting case type as "GA Inquiry" current.case_type = "ga_inquiry";

 

 

  1.   Save, then scroll to Assigned Topics > Add and assign to the Finance topic under the Employee taxonomy.

 

Step 6 — Configure Access Controls

Elevate to security_admin first via Avatar > Elevate role.

 

The ACL Pattern

FCM uses a two-layer ACL model:

  • Allow-If ACLs — grant access based on role + data condition (e.g. requester can only read their own cases)
  • Deny-Unless ACLs — lock out anyone without a recognised role, even if an Allow-If somewhere else would have passed

Both layers are required. Skip the Deny-Unless ACLs and users with unrelated roles may still read GA cases through inherited Finance Case ACLs.

 

GA Case Table — Target: 11 ACL Records

 

Operation

|

Decision Type

|

Role(s)

|

Condition / Script

|
|

read

|

Allow If

|

requester

|

Opened by = Me (dynamic)

|
|

read

|

Allow If

|

task_owner

|

Script: task assigned to user or group

|
|

write

|

Allow If

|

requester

|

State not in: Closed Cancelled/Rejected/Completed

|
|

write

|

Allow If

|

task_owner

|

Script: task assigned to user + state not closed

|
|

create

|

Allow If

|

specialist

|

(no condition)

|
|

write

|

Allow If

|

specialist

|

Auto-created on table creation

|
|

read

|

Allow If

|

specialist

|

Auto-created on table creation

|
|

delete

|

Allow If

|

specialist

|

Auto-created on table creation

|
|

create

|

Deny Unless

|

specialist

|

(no condition)

|
|

read

|

Deny Unless

|

specialist + requester + task_owner

|

(no condition)

|
|

write

|

Deny Unless

|

specialist + requester + task_owner

|

(no condition)

|

 

Advanced Condition script for the task_owner read ACL:

 

var table_name = 'x_snc_ga_case_m_0_ga_task'; var isAnyTaskAssignedToTheUser = function(caseRecord) { var tasks = sn_spend_sdc.ServiceTaskUtil.getTasks( 'service_request=' + caseRecord.getUniqueValue() + 'assigned_to=' + gs.getUserID(), table_name); return tasks.hasNext(); }; var isAnyTaskAssignedToTheUserGroup = function(caseRecord) { var tasks = sn_spend_sdc.ServiceTaskUtil.getTasks( 'service_request=' + caseRecord.getUniqueValue() + 'assignment_groupDYNAMIC<YOUR_ONE_OF_MY_GROUPS_SYS_ID>', table_name); return tasks.hasNext(); }; answer = isAnyTaskAssignedToTheUser(current) || isAnyTaskAssignedToTheUserGroup(current);

 

ℹ  Note: Replace <YOUR_ONE_OF_MY_GROUPS_SYS_ID> with the sys_id of the "One of my groups" dynamic filter on your instance. Navigate to System Security > Dynamic Filter Options, search for "One of my groups", and copy the sys_id from that record.

 

GA Task Table — Target: 9 ACL Records

4 auto-created ACLs for specialist, plus:

 

Operation

|

Decision Type

|

Role

|

Condition

|
|

read

|

Allow If

|

task_owner

|

Assigned to = Me OR Assignment group = One of my groups

|
|

write

|

Allow If

|

task_owner

|

Assigned to = Me OR State not in closed states

|
|

create

|

Deny Unless

|

specialist

|

—

|
|

read

|

Deny Unless

|

specialist + task_owner

|

—

|
|

write

|

Deny Unless

|

specialist + task_owner

|

—

|

 

De-elevate security_admin when done.

 

Step 7 — Configure Employee Center

Request Filter

Navigate to Service Catalog > Catalog Administration > My Request Filter and create a new filter:

 

Field

|

Value

|
|

Title

|

GA Cases

|
|

Table

|

GA Case [x_snc_ga_case_m_0_ga_case]

|
|

Applies to

|

Desktop/Service Portal

|
|

Filter condition

|

Opened by = Me OR Requested by = Me

|
|

Primary field

|

Short description

|
|

Secondary fields

|

Priority, Number

|

 

To-Do Lists

Navigate to Employee Center > Administration > To-dos Configuration and create two records:

 

GA Tasks — Open

  • Tab: Open
  • Conditions: State is one of Pending/Open/Work in Progress AND Assigned to = Me AND Task type = GA Task
  • Title row: Short description | Detail row: Number
  • Task Configuration: Name = GA Task | Common Info fields = Number, Priority, Due date, State
  • Primary Info title = Description | Action group = Finance Task Actions
  • Tab Configuration: Type = Activity Stream | Source = Task | Display name = Activity

 

GA Tasks — Completed

  • Tab: Completed
  • Conditions: State is one of Closed Complete/Incomplete/Skipped AND Assigned to = Me AND Task type = GA Task
  • Same Title row, Detail row, Task Configuration, and Tab Configuration as above

 

Step 8 — Cross-Scope Access

Switch scope to Finance Case Management, then navigate to System Applications > Application Cross-Scope Access and create:

 

Field

|

Value

|
|

Target Scope

|

GA Case Management

|
|

Target Name

|

x_snc_ga_case_m_0_ga_case

|
|

Target Type

|

Table

|
|

Operation

|

Write

|
|

Status

|

Allowed

|

 

This allows the Finance Case Management scope (where the catalog item script runs) to write to your scoped GA Case table. Without it the record producer fails silently on the current.case_type assignment.

 

Verification

Follow these steps to confirm the implementation end to end:

  • Assign x_snc_ga_case_m_0.requester to a test user.
  • Assign x_snc_ga_case_m_0.specialist to a specialist user.
  • As the requester, navigate to Employee Center > Finance and submit a GA Inquiry.
  • Confirm the case number carries a GA prefix.
  • As the specialist, open Finance Operations Workspace > All work > Cases, sort by Number descending — the GA case should appear with Case type = GA Inquiry.
  • Assign to the specialist, save, and confirm My assigned cases by type on the workspace home now shows the GA Inquiry slice.

 

Key Things to Get Right

 

Risk

|

What to check

|
|

Wrong scope on artefacts

|

Confirm x_snc_ga_case_m_0 is active in the scope switcher before creating tables, roles, or ACLs.

|
|

Entitlement not confirmed

|

Do not activate sn_fin_ops in production without written confirmation of your SKU and subscription metric from your account team.

|
|

Specialist role over-assigned

|

Do not assign sn_fin_ops.specialist (or the GA equivalent) to requesters. Requester and fulfiller access must be separated for least privilege and licence hygiene.

|
|

Missing Deny-Unless ACLs

|

Without them, users with unrelated roles may read GA cases through inherited Finance Case ACLs.

|
|

Cross-scope write missing

|

The catalog item script runs in the Finance Case Management scope — without the privilege, case_type won't populate.

|
|

ga_inquiry value mismatch

|

The Choice record value and the catalog item script must match exactly. A typo creates cases with a blank case type.

|
|

DYNAMIC GUID is instance-specific

|

The group filter GUID in the task_owner ACL script must be replaced with your instance's correct value.

|
|

Group role assignments are instance data

|

Script them or document as a post-deploy step — they are not captured in update sets.

|
|

sn_spend_sdc dependency

|

The ACL scripts call sn_spend_sdc.ServiceTaskUtil. Confirm Common Service Delivery is installed and entitled before deploying.

|

 

 

Licensing information is provided for guidance only. Always validate entitlements with your ServiceNow account team and order form before activating in production.

View original source

https://www.servicenow.com/community/s2p-articles/extending-finance-case-management-adding-a-general-accounting/ta-p/3601947