---
id: CAP-ACC-BKS-017
title: Set accounting policy shared by the workspace
feature: FEAT-ACC-BKS-06
product_area: accounting
module: books
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: partially-observed
supersedes:
  - CAP-ACC-CFG-014
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-accounting:docs/milestones/plans/ACCT-M1-plan.md#2. Scope'
  - 'services-accounting:docs/architecture/accounting-2.0/02-decisions.md#A-9'
  - 'services-accounting:docs/architecture/accounting-2.0/02-decisions.md#M5-2'
purpose: >-
  Controllers configure policies that apply across the customer’s business
  units.
outcomes:
  - Default policy applies before settings are first saved.
  - Versioned workspace policy applies across business units.
concepts:
  - CON-ACC-BKS-006
  - CON-ACC-BKS-004
actors:
  - ACT-ACC-001
  - ACT-ACC-002
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: accounting.settings.read
    where_checked: api
    scope: tenant
  - key: accounting.settings.update
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-ACC-BKS-017-01
    proved_by: [ATS-ACC-BKS-017-01, ATS-ACC-BKS-017-06, TST-ACC-BKS-052, TST-ACC-BKS-098, TST-ACC-BKS-099]
    statement: >-
      Unsaved settings read at version zero with built-in statements, unapplied
      overpayments, no refund approval, period-based deferral truncation and no
      required service period; a first version-zero save creates them.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/settings.integration.spec.js#refuses
      a first save that is not at version 0
    origin: none
  - id: BR-CAP-ACC-BKS-017-02
    proved_by: []
    statement: >-
      Overpayment handling defaults settlement’s unallocated remainder to
      unapplied payment money or an immediate credit when the request makes no
      choice.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: 'services-accounting:docs/architecture/accounting-2.0/02-decisions.md#A-9'
    origin: 'services-accounting:docs/architecture/accounting-2.0/02-decisions.md#A-9'
  - id: BR-CAP-ACC-BKS-017-03
    proved_by: [ATS-ACC-BKS-017-02, TST-ACC-BKS-027]
    statement: >-
      Enabling refund approval holds a refund until a different person approves
      it; approval is disabled by default.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0047.spec.ts#ACT-ACC-0047
    origin: none
  - id: BR-CAP-ACC-BKS-017-04
    proved_by: []
    statement: >-
      Deferral truncation selects remaining-schedule reduction by whole period
      by default or by days after the credit memo’s effective date.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: 'services-accounting:docs/architecture/accounting-2.0/02-decisions.md#M5-2'
    origin: 'services-accounting:docs/architecture/accounting-2.0/02-decisions.md#M5-2'
  - id: BR-CAP-ACC-BKS-017-05
    proved_by: [ATS-ACC-BKS-015-11, ATS-ACC-BKS-017-03, TST-ACC-BKS-021, TST-ACC-BKS-098]
    statement: >-
      Requiring service periods refuses issuance of deferred lines without one;
      omitted service-period and truncation settings retain saved values, while
      an omitted statement choice restores the built-in.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/settings.integration.spec.js#keeps
      both when a later save leaves them out, and puts them back to their
      defaults when sent
    origin: none
  - id: BR-CAP-ACC-BKS-017-06
    proved_by: [ATS-ACC-BKS-017-04, TST-ACC-BKS-069]
    statement: >-
      Reconciliation approval defaults on and close bank-verification defaults
      off; both are stored with settings but belong to their consuming modules’
      change paths.
    kind: policy
    enforced_at:
      - database
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/db/reconciliation-configuration.table.integration.spec.js#requires
      a second person to finalize a reconciliation when the settings do not say
    origin: none
  - id: BR-CAP-ACC-BKS-017-07
    proved_by: [ATS-ACC-BKS-017-05, ATS-ACC-BKS-017-08, TST-ACC-BKS-021, TST-ACC-BKS-051, TST-ACC-BKS-052, TST-ACC-BKS-098]
    statement: >-
      Settings reads require read permission, replacements require update
      permission, and stale versions are refused.
    kind: permission
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-accounting:modules/books/tests/e2e/document-templates-security.e2e.spec.js#is
      refused the settings’ save 403 permission_missing
    origin: none
scenarios:
  - id: SC-CAP-ACC-BKS-017-01
    given: Refund approval is enabled for the workspace.
    when: A clerk submits a refund request.
    then: The refund remains pending until another person approves it.
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0047.spec.ts#ACT-ACC-0047
edge_cases: []
constraints: []
depends_on: []
related:
  - CAP-ACC-BKS-015
journeys: []
open_questions: []
evidence:
  - >-
    Verified source file:
    react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0047.spec.ts
  - 'Verified source file: services-accounting:aws/accounting.service.ts'
  - >-
    Verified source file:
    services-accounting:docs/architecture/accounting-2.0/02-decisions.md
  - >-
    Verified source file:
    services-accounting:docs/milestones/plans/ACCT-M1-plan.md
  - 'Verified source file: services-accounting:modules/books/db/settings.table.ts'
  - >-
    Verified source file:
    services-accounting:modules/books/tests/e2e/document-templates-security.e2e.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/e2e/document-templates.e2e.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/db/reconciliation-configuration.table.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/settings.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/settings.queries.integration.spec.js
controls: [TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-DAT-001, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005, TC-AI-005]
exercised_by: [FAS-ACC-BKS-05-02, FAS-ACC-BKS-06-02]
suites: [TST-ACC-BKS-021, TST-ACC-BKS-027, TST-ACC-BKS-051, TST-ACC-BKS-052, TST-ACC-BKS-069, TST-ACC-BKS-098, TST-ACC-BKS-099]
---

# Set accounting policy shared by the workspace

## Purpose

Controllers configure policies that apply across the customer’s business units.

## How It Works

The controller reviews the workspace’s accounting settings. These choices apply consistently across units rather than requiring separate configuration for each one. The initial read presents defaults before a settings record exists. Saving establishes or changes policy at the retrieved version. Transactions and posting use the choices in their own workflows. Reconciliation and close have related switches stored alongside them. Staff resolve a stale save before another replacement can proceed.

## Relationships

Transactions, posting, reconciliation and close implement the behaviour selected by these settings.
