---
id: JNY-ACC-CLS-005
title: A controller recovers an interrupted close
feature: FEAT-ACC-CLS-04
product_area: accounting
module: close
revision: 1
status: draft
product_intent: proposed
implementation_evidence: inconsistent
supersedes:
  - ACT-ACC-0617 (react-console acceptance journey)
  - ACT-ACC-0618 (react-console acceptance journey)
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
actor: ACT-ACC-015
goal: Determine the permitted recovery action and finish a retained close.
capabilities:
  - CAP-ACC-CLS-013
  - CAP-ACC-CLS-012
  - CAP-ACC-CLS-003
  - CAP-ACC-CLS-008
screens:
  - '/console/{tenantId}/accounting/close/runs/{runId}'
steps:
  - 'n': 1
    surface: '/console/{tenantId}/accounting/close/runs/{runId}'
    action: Inspect a close that failed after recognizing revenue.
    capability: CAP-ACC-CLS-013
    expected: >-
      The failed step and retained closing state are visible with recovery
      controls.
    provenance: documented
    source: >-
      react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0618.json:steps
  - 'n': 2
    surface: closeFiscalPeriod
    action: >-
      Attempt an ordinary posting and another close while the period is
      retained.
    capability: CAP-ACC-CLS-003
    expected: Both are refused by the protected period or held-run boundary.
    provenance: documented
    source: >-
      react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0618.json:steps
  - 'n': 3
    surface: cancelFiscalCloseRun
    action: Request cancellation after reviewing its confirmation.
    capability: CAP-ACC-CLS-012
    expected: >-
      The service refuses because recognition committed and explains retry
      followed by reopen.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#refuses
      the cancel as run-not-cancellable, naming the way out
  - 'n': 4
    surface: retryFiscalCloseRun
    action: Resume the failed run after resolving its cause.
    capability: CAP-ACC-CLS-012
    expected: Execution completes without a duplicate revenue posting.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/revenue-recognition.integration.spec.js#retries
      the step in the same job and ends the run succeeded
  - 'n': 5
    surface: '/console/{tenantId}/accounting/close/runs/{runId}'
    action: Refresh the run page during resumed execution.
    capability: CAP-ACC-CLS-013
    expected: The selected run is restored and its progress remains available.
    provenance: observed
    source: 'react-console:components/accounting/close/close-run-view.tsx:CloseRunView'
alternates:
  - from_step: 1
    condition: Finalization failed without committed recognition.
    path: The failure releases the month and retry is refused.
    outcome: Staff can submit a new close after resolving the cause.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/close-job.integration.spec.js#fails
      the run on finalize, not retryable, saying the period was given back
      (DEF-ACT-0819)
  - from_step: 3
    condition: Cancellation is still eligible before recognition or reversal.
    path: The controller cancels the queued or failed request.
    outcome: The period is released and the cancellation remains in history.
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/reconciliation-close/ACT-ACC-0617.spec.ts#ACT-ACC-0617
failures:
  - from_step: 3
    condition: The confirmation promises reversal of finished work.
    path: >-
      The controller confirms, but the service rejects cancellation after
      recognition.
    outcome: The refusal supplies recovery guidance after the misleading confirmation.
    provenance: observed
    source: >-
      react-console:components/accounting/close/close-run-view.tsx:CancelCloseDialog
rules_in_play:
  - BR-CAP-ACC-CLS-012-01
  - BR-CAP-ACC-CLS-012-02
  - BR-CAP-ACC-CLS-012-04
  - BR-CAP-ACC-CLS-012-06
  - BR-CAP-ACC-CLS-012-10
  - BR-CAP-ACC-CLS-003-01
  - BR-CAP-ACC-CLS-008-05
  - BR-CAP-ACC-CLS-013-03
assertions:
  - id: AS-JNY-ACC-CLS-005-01
    statement: >-
      A failed close retaining its month prevents ordinary postings and
      competing closes.
    provenance: documented
    source: >-
      react-console:acceptance/accounting/journeys/reconciliation-close/ACT-ACC-0618.json
  - id: AS-JNY-ACC-CLS-005-02
    statement: Retry completes the retained close without duplicate recognition.
    provenance: test
    source: >-
      services-accounting:modules/fiscal-close/tests/integration/services/jobs/revenue-recognition.integration.spec.js#posts
      August's batch once, under the run's key: the failed attempt left nothing
  - id: AS-JNY-ACC-CLS-005-03
    statement: >-
      The service refuses cancellation after recognition while the confirmation
      still promises reversal.
    provenance: observed
    source: >-
      react-console:components/accounting/close/close-run-view.tsx:CancelCloseDialog
e2e_policy: optional
e2e_reason: >-
  Recovery depends on fault injection unavailable to the current browser
  journey; integration evidence covers the executable recovery paths.
proved_by: []
---

# A controller recovers an interrupted close

## Story

The controller reviews a failed run that still protects its month. Cancellation after recognized revenue is refused, so they resolve the cause and resume execution. The same run remains available across browser refresh. The product should explain the permitted recovery before confirmation rather than promising reversal that cancellation cannot perform.
