DEV Community

Tali Adler
Tali Adler

Posted on

The Month-End Close Is a Dependency Graph, Not a Checklist

The Month-End Close Is a Dependency Graph, Not a Checklist

Month-end close is often managed as a list of tasks: reconcile the bank, post accruals, review accounts receivable, run the trial balance, and sign off. Checklists are useful, but they hide the thing that makes close difficult: most tasks are not independent.

A bank reconciliation can change the cash balance. That change can affect an accrual review, a covenant calculation, or the explanation attached to a management report. An unresolved invoice mismatch can block revenue recognition. A late payroll file can make an otherwise complete close provisional.

The practical improvement is to model close as a dependency graph. Each work item has inputs, evidence, a decision, and downstream consumers. That sounds more technical than a checklist, but it makes the close easier to operate and easier to explain.

Start with a close item contract

For each close item, define a small contract instead of only assigning an owner. A useful contract contains:

  • Purpose: what accounting question is being answered?
  • Inputs: which ledger accounts, statements, exports, or schedules are required?
  • Evidence: which source files or system events support the result?
  • Decision: what did the reviewer conclude?
  • Downstream impact: which reports or tasks depend on the result?
  • Exception rule: what prevents automatic completion?

For example, “reconcile operating bank account” is too vague to be a reliable unit of work. A stronger item says: compare the general-ledger cash balance with the bank statement for the period, link each reconciling item to evidence, classify timing differences separately from errors, and route unexplained differences above a threshold to review.

This structure gives an engineer enough information to build a workflow and gives an accountant enough information to review the result.

Represent dependencies explicitly

A close system does not need a complicated graph database to get started. A relational model can represent dependencies with a few tables:

close_period
  id, entity_id, period_end, status

close_item
  id, period_id, code, owner, state, materiality_threshold

close_evidence
  id, close_item_id, source_type, source_ref, content_hash, captured_at

close_dependency
  upstream_item_id, downstream_item_id, dependency_type

close_decision
  id, close_item_id, reviewer, outcome, rationale, decided_at
Enter fullscreen mode Exit fullscreen mode

The important detail is that evidence and decisions are first-class records. A status such as complete is not enough. Someone reviewing the close later should be able to see what was compared, which source supported it, and why an exception was accepted or cleared.

A dependency should also carry meaning. “Blocks” is different from “informs.” A payroll accrual may block final payroll expense reporting, while a cash forecast update may only inform the management pack. Treating every relationship as a hard block creates unnecessary delays.

Use states that reflect accounting reality

Binary states encourage bad automation. A close item is rarely just open or done. Consider a state machine such as:

not_started -> waiting_for_input -> ready_for_review
ready_for_review -> approved
ready_for_review -> exception
exception -> waiting_for_input
exception -> approved_with_rationale
Enter fullscreen mode Exit fullscreen mode

The approved_with_rationale state matters. It distinguishes a reviewed judgment from an accidentally ignored issue. An immaterial variance might be acceptable, but the system should preserve who made that decision, when they made it, and the rationale they recorded.

Automation can safely move an item from not_started to waiting_for_input when a period opens, or from waiting_for_input to ready_for_review when all required evidence arrives. It should be much more cautious about moving an accounting item to approved.

Make evidence idempotent

Close data often arrives more than once. A bank export may be re-uploaded, an integration may replay an event, or an operator may correct a file and submit it again. If the workflow blindly creates a new evidence record every time, reviewers get duplicate amounts and confusing histories.

Give each source event an idempotency key. Depending on the source, that key could combine the provider name, account, statement period, source document identifier, and content hash. On ingestion:

  1. Calculate the key.
  2. Check whether it already exists.
  3. Store the original event if it does not.
  4. Record a revision if the content changed.
  5. Never silently overwrite the evidence used for an earlier decision.

This is a familiar pattern in payment systems, but it is just as valuable in accounting operations. A close workflow should be repeatable without changing its answer merely because a connector delivered the same event twice.

Turn the dashboard into a review queue

The most useful close dashboard is not the one with the most charts. It is the one that helps a reviewer answer, “What needs my judgment today?”

Prioritize items by blocked dependents, materiality, age, and exception type. Show the source evidence next to the proposed result. Let the reviewer accept, reject, request more information, or approve with rationale. Keep automated matches visible, but do not bury unresolved exceptions beneath a percentage that says the account is “98% reconciled.”

This is also where a tool such as Portali can fit naturally into an accounting workflow: not as another place to copy a checklist, but as a workspace for connecting evidence, proposed accounting work, and explicit review decisions. The implementation details will vary by team, but the principle is stable: the system should preserve the path from source to conclusion.

A practical rollout plan

Start with one high-volume, low-judgment process, such as bank reconciliation or accounts payable matching. Map its inputs and downstream consumers. Add evidence links and explicit exception states before attempting sophisticated automation.

Next, measure three things: time waiting for inputs, time spent investigating exceptions, and the number of post-close adjustments. Those measures tell you whether the workflow is improving the close, rather than simply moving work into a new interface.

Finally, add dependencies one at a time. A good dependency graph is not a reason to prevent progress everywhere. It is a way to show exactly which unresolved question matters, who can answer it, and what becomes trustworthy once it is answered.

Month-end close becomes more predictable when the process reflects how accounting decisions actually work. Checklists tell you what to remember. Dependency-aware workflows tell you what is ready, what is blocked, and why the final numbers can be trusted.

Top comments (0)