Skip to main content

Accountant Workflow

Moonlight is a financial control system. Data arrives from external sources (SDK, Telegram bots, Ingest API). The accountant does not create entries. They verify, categorise, reconcile and clear operational exceptions.

The accountant's work spans two sections of the application: Entries (data verification) and Accounting (categorisation, exception handling and sync to an external accounting system).

Active development

This workflow describes how Moonlight is operated by the accountants in pilot setups today. Moonlight is in active development, so some buttons and screens are being polished, and a few labels in your build may differ slightly from the screenshots and step names below.

Overview

Stage 1: Entries — Data Verification

The accountant opens the Entries section and works through incoming records.

Daily routine

  1. Filter entries — by date range (current month), status, type (Income/Expense), "Not Reconciled" to see what still needs attention.

  2. Check documents — each entry needs supporting documents:

    • Basis (invoice, contract, purchase order)
    • Payment Proof (bank transfer confirmation, receipt)
    • If documents are missing, use Request Document to ask the responsible person to upload them.
    • When uploaded, Approve or Reject each document.
    • The completeness indicator shows whether all required documents are present.
  3. Verify data — check that description, amount, date, and parties are correct.

    • If wrong, use Edit to fix the entry.
    • If the entry is a duplicate or the operation was cancelled, use Void.
    • Use the Activity Timeline in the entry detail page to understand document actions, review events, sync problems, notes, and related entries in one place.
  4. Add notes — leave comments for yourself or colleagues: "verified against bank statement 2026-03-15", "waiting for vendor confirmation".

  5. Mark Reconciled — after verifying the entry against a bank statement or external records, mark it as reconciled. Use the "Not Reconciled" filter to track what still needs verification.

  6. Send to Accounting Review — once the entry is verified and reconciled, send it to the accounting review queue. Select a Connection (QuickBooks, another provider, or Manual).

Exceptions

ActionWhen to use
VoidEntry is a duplicate, data error that cannot be fixed, or the operation was cancelled. Permanently marks the entry as VOIDED. If synced, void propagates to the external system.
RefundA customer returned money. Creates a new reverse entry and voids the original. The refund entry goes through the same review cycle.
ReimburseAn employee paid from personal funds. Creates a new reimbursement entry linked to the original expense. Also goes through the full cycle.

Export

Use Export CSV to download entries with current filters applied — for your own spreadsheets, audits, or management reports.

Stage 2: Accounting — Categorization and Sync

The accountant switches to the Accounting section to process the review queue, exception queues, and synchronization. The section has eight tabs: Dashboard, Reviews, Exceptions, Operations, Chart of Accounts, Connections, Mappings, and Periods.

Dashboard

The Dashboard tab provides a high-level overview of the current accounting state. It is read-only — no actions are performed here, only monitoring.

Review Queue summary — shows the number of reviews in each status:

CounterWhat it means
QueuedEntries waiting to be picked up by an accountant
In ReviewCurrently being reviewed (assigned to someone)
ApprovedReviews that have been approved and are ready for sync
RejectedEntries rejected during review
Changes RequestedEntries sent back for corrections

Sync Status summary — shows the number of sync records in each status:

CounterWhat it means
PendingSync initiated but not yet completed
SyncedSuccessfully pushed to the external system
FailedPush failed — check error details, will auto-retry
StaleEntry was modified after sync — needs re-push
ConflictData conflict between systems — requires manual resolution

Connections list — shows all configured connections with their provider type, sync mode, active/inactive status, and last sync date. If no connections are set up, a prompt directs the user to the Connections tab.

Use the Dashboard to quickly assess workload (how many reviews are queued), spot problems (failed syncs, conflicts), and verify that connections are active.

The dashboard also includes an Operational Exceptions section with counts for failed syncs, stale syncs, conflicts, requested documents, unreconciled entries, rejected reviews, and change requests.

Review queue

The Reviews tab shows all entries awaiting accounting review.

ActionWhat it does
TakeAssign the review to yourself. Status changes from QUEUED to IN_REVIEW.
ApproveApprove the entry and assign an accounting category from the Chart of Accounts (e.g., "Office Supplies" under Expenses). This determines which account the entry maps to in the external system.
RejectReject with a note explaining what's wrong. The entry returns to the Entries section for rework.
Request ChangesAsk for specific changes with a note. The entry returns to Entries.
Batch Approve / RejectSelect multiple reviews and approve or reject them at once.

Exceptions

The Exceptions tab is the accountant's operational workbench for degraded or blocked records.

Typical queues:

  • Failed Syncs — records that could not be pushed to the external accounting system
  • Stale Syncs — entries modified after a successful sync
  • Conflicts — sync records requiring manual resolution
  • Awaiting Documents — entries with requested but missing documentation
  • Unreconciled Entries — entries still waiting for external verification

Use this tab to work exception queues directly inside Moonlight instead of reconstructing them from generic lists.

Operations

The Operations tab is a lighter inbox for follow-up work:

  • requested documents
  • changes requested by reviewers
  • rejected reviews requiring correction

This is useful when accountants and operational staff share responsibility for fixing records.

What happens after Approve

Depends on the Connection's sync mode:

Sync ModeBehavior
MANUALNo external system. Entry is approved and stays in Moonlight. Accountant uses CSV export for their own records.
MANUAL_PUSHAccountant manually triggers push to the external system for each approved entry.
AUTO_PUSHEntry is automatically pushed to the external system immediately after approval.
BIDIRECTIONALAuto push + periodic pull from the external system.

Chart of Accounts

The Chart of Accounts tab manages accounting categories used during review approval:

  • Categories have types: ASSET, LIABILITY, EQUITY, REVENUE, EXPENSE
  • Hierarchical structure (parent/child)
  • Can be created manually or pulled from an external system (e.g., QuickBooks)
  • Each category can have external mappings per provider

Connections

The Connections tab manages links to external accounting systems:

  • QuickBooks (Intuit) — full push/pull with OAuth2
  • Manual — no external system, review-only workflow
  • Custom providers — implement the AccountingProvider interface for any system

Each connection is configured with:

SettingDescription
Sync ModeMANUAL, MANUAL_PUSH, AUTO_PUSH, or BIDIRECTIONAL
Require ReviewWhether entries must go through the review queue before sync
Require CompletenessWhether entries must have all documents approved before sync
Project RoutingWhich projects' entries sync through this connection

Available actions per connection:

ActionDescription
Pull Chart of AccountsImport categories from the external system
Queue Entries for ReviewBackfill — queue all existing entries that don't have a review yet
Activate / DeactivateEnable or disable the connection

Mappings

The Mappings tab links Moonlight data to external system entities:

  • Party Mappings — which Moonlight party corresponds to which Vendor/Customer in the external system. Select a connection, then create mappings between Moonlight parties and external IDs (Vendor/Customer type + external name).
note

Tax Mappings are planned but not yet available in the UI. Tax rate mappings can be configured via the API (/accounting/mappings/taxes).

Periods

The Periods tab manages accounting periods:

  • Create periods (e.g., "Q1 2026", "March 2026")
  • Close a period to prevent changes to entries within that date range
  • Reopen if corrections are needed

Connection between Entries and Accounting

Action in EntriesEffect in Accounting
Send to ReviewCreates a Review in QUEUED status in the review queue
Edit entry while in reviewReview is automatically invalidated (reset to QUEUED), needs re-review
Void entryVoid propagates to the external system if synced
Refund entryNew refund entry is created and goes through the full review cycle

Working without an external system

If no external accounting system is connected (MANUAL mode):

  1. Entries arrive from external sources
  2. Accountant verifies data and documents in the Entries section
  3. Marks entries as reconciled after checking against bank statements
  4. Sends to Review with a Manual connection
  5. Approves with a category for internal classification
  6. Uses Export CSV to transfer data to their own accounting system

The full review workflow still applies — the only difference is that no automatic sync happens.

Typical daily checklist

  1. Open Entries, filter by current month + "Not Reconciled"
  2. For each entry: check documents, verify data, add notes, mark reconciled
  3. Send verified entries to Accounting Review
  4. Switch to Accounting > Reviews tab
  5. Take reviews from the queue, approve with category (or reject/request changes)
  6. Check Dashboard for sync status — resolve any failed or conflicting syncs
  7. At month end: Export CSV for reporting, Close Period when finalized