> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hitaji360.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Journal Entries

> A journal entry is the most fundamental record in accounting: a dated set of debit and credit lines that, taken together, must balance to zero.

A journal entry is the most fundamental record in accounting: a dated set of
debit and credit lines that, taken together, must balance to zero. Hitaji 360
uses journal entries both for the postings it generates automatically (from
invoices, bills, payroll, payments and so on) and for the **manual** entries you
record by hand — opening balances, accruals, reclassifications, corrections and
adjustments that don't originate from another document.

This page covers creating, previewing, posting, reversing and submitting manual
journal entries.

**You'll find this at:** `/accounting/journal-entries`

> 📷 *Screenshot: Journal Entries list with filters, bulk-action bar and the "New entry" button — to be added.*

***

## Who can do what

Access is controlled by these permission slugs. If a button is missing, your
role is probably lacking the matching permission.

| Action                                     | Permission slug              |
| ------------------------------------------ | ---------------------------- |
| See the list / open an entry               | `accounting-journal:read`    |
| Create a new entry / new-from-template     | `accounting-journal:create`  |
| Edit a draft / submit a draft for approval | `accounting-journal:update`  |
| Delete a draft                             | `accounting-journal:delete`  |
| Post a draft to the ledger                 | `accounting-journal:post`    |
| Reverse a posted entry                     | `accounting-journal:reverse` |

A **multi-business note:** journal entries belong to one accounting book (the
"workspace" in the URL/API). When you switch the active business, you are
switching books — entries you create are scoped to the book that is active at
the time, and the list only shows that book's entries.

***

## The lifecycle of an entry

Every journal entry carries a **status**. There are exactly three:

| Status       | Meaning                                                                                                                                        |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| **Draft**    | Recorded but not yet in the ledger. Editable and deletable. Has no effect on your balances.                                                    |
| **Posted**   | Written to the general ledger. It now affects your trial balance and financial statements. Can no longer be edited or deleted — only reversed. |
| **Reversed** | A previously posted entry whose effect has been cancelled by an automatically created mirror entry.                                            |

The normal path is **Draft → Posted**. If your organisation requires sign-off,
the path becomes **Draft → (submitted for approval) → Posted** once an approver
approves it. A wrong posting is corrected by **reversing** it, never by editing.

***

## Voucher types

Each entry has a **voucher type** that classifies why the entry exists. When you
create an entry manually it defaults to **Manual**. You can choose another type,
with two exceptions reserved for the system.

| Voucher type               | Use it for                                                                                 | Manually selectable?         |
| -------------------------- | ------------------------------------------------------------------------------------------ | ---------------------------- |
| **Manual**                 | General hand-keyed entries (the default).                                                  | Yes                          |
| **Opening**                | Opening-balance entries. Selecting this automatically flags the entry as an opening entry. | Yes                          |
| **Bank**                   | Bank-related entries (transfers, charges).                                                 | Yes                          |
| **Contra**                 | Contra entries (e.g. cash ↔ bank movements).                                               | Yes                          |
| **Adjustment**             | Period-end adjustments and reclassifications.                                              | Yes                          |
| **Reversal**               | Created automatically when you reverse a posted entry — you never pick this yourself.      | No (auto)                    |
| **Closing**                | Year-end closing entries produced by the year-end-close process.                           | No — reserved for the system |
| **Payment reconciliation** | Produced by the payment-reconciliation tool.                                               | No — reserved for the system |

If you try to create or update an entry with **Closing** or **Payment
reconciliation**, the system refuses with a message that the voucher type "is
reserved for system use and cannot be created manually."

You can filter the list by voucher type using the **All voucher types** dropdown
at the top of the page.

***

## Creating a manual journal entry

1. Go to **`/accounting/journal-entries`**.

2. Click **New entry** (top right). You can also press **N** as a keyboard
   shortcut. The **New Journal Entry** modal opens.

3. Fill in the header:

   | Field                       | Notes                                                                                                               |
   | --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
   | **Entry Date** *(required)* | The date the entry takes effect. The entry must fall in an **open** accounting period — see "Closed periods" below. |
   | **Source Type**             | The reason category. The modal offers **Manual**, **Opening Balance** and **Adjustment**.                           |
   | **Memo**                    | A free-text description of the whole entry. Optional but strongly recommended.                                      |

4. Add your **Journal Lines**. Every entry needs **at least two lines**. For
   each line:

   | Field                  | Rule                                                                                                                                                                                        |
   | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
   | **Account**            | Pick from the chart of accounts. Only **active**, **non-group**, postable accounts are accepted (you cannot post to a heading/group account).                                               |
   | **Description**        | Optional line-level note.                                                                                                                                                                   |
   | **Debit** / **Credit** | Enter an amount in **one** of the two columns. A line may have a debit **or** a credit, never both, and never zero on both. Typing a debit clears the credit automatically, and vice-versa. |

   Use **Add Line** (or **+ Add Another Line**) to add rows, and the **✕** at the
   end of a row to remove one. You can't drop below two lines.

5. Watch the **balance indicator**. It shows running **Debits** and **Credits**
   totals and turns green ("Entry is balanced") only when the two are equal and
   greater than zero. Debits must equal credits within a one-cent tolerance.

6. Save using the split **Save** button:

   * **Save Draft** — stores it as a draft; no ledger effect yet.
   * **Save Draft & Add New** — saves and immediately reopens a blank form.
   * **Submit for Approval** — saves it and sends it down the approval route (see
     "Submitting for approval").
   * **Submit & Add New** — same, then reopens a blank form.

   The **Save** button stays disabled until the entry balances.

> 📷 *Screenshot: New Journal Entry modal with two balanced lines and the green balance indicator — to be added.*

### What the system checks before it accepts an entry

When you save (and again when you post), the entry is validated server-side:

* at least 2 lines;
* no line has both a debit and a credit, and no line is zero on both;
* every account exists, is active, is not a group account, and allows direct
  posting;
* total debits equal total credits (within 0.01);
* the voucher type is not a reserved system type;
* the entry date is in an open period.

If any check fails you'll see a specific error (for example *"Journal entry must
balance. Debit: 100, Credit: 90"* or *"Account 4000 is a group account and
cannot be posted to directly"*).

***

## Previewing the postings before you commit

Before posting, you can ask the system to show you the **prospective general-
ledger rows** the entry would produce — without writing anything. This is the
**preview**, and it's only available while the entry is a **draft**.

The preview returns:

* the **GL rows** that would be written (account code, account name, debit,
  credit, line description);
* a **round-off row**, if rounding produces a tiny imbalance the system would
  auto-correct;
* any **issues** — *errors* block posting, *warnings* are informational;
* a **willPost** flag telling you whether the entry is currently postable.

You can also preview *unsaved* changes by previewing against a draft set of
lines, which is useful for "what would this look like?" checks before saving.

> 📷 *Screenshot: Preview panel listing prospective GL rows with debits and credits — to be added.*

***

## Posting an entry

Posting is what actually writes the entry to the general ledger and makes it
count toward your trial balance and financial statements.

1. Open the entry (click its **Entry #** in the list) to reach
   `/accounting/journal-entries/:id`, or select one or more drafts in the list.
2. From the detail page, use the **Post** action in the header. From the list,
   tick the checkboxes and use **Post** in the bulk-action bar.
3. The entry must balance and its date must be in an open period; the system
   re-validates both at this moment.

Once posted, the status becomes **Posted**, a posting timestamp and the posting
user are recorded, and the actual ledger rows become visible on the entry's
**Postings** tab.

### Behind the scenes (debits and credits in plain English)

Posting applies standard double-entry rules to each account:

* A **debit** *increases* assets and expenses, and *decreases* liabilities,
  equity and income.
* A **credit** does the opposite: it *increases* liabilities, equity and income,
  and *decreases* assets and expenses.

Because total debits equal total credits, the books stay in balance. For
example, to record a UGX 500,000 rent accrual you would **debit Rent Expense
500,000** (expense up) and **credit Accrued Liabilities 500,000** (liability up).

***

## Reversing a posted entry

You never edit or delete a posted entry. To undo it you **reverse** it, which
creates a brand-new, already-posted **Reversal** entry that mirrors the original
with the debits and credits swapped. The original is then marked **Reversed**.

1. Open the posted entry.
2. Use **Reverse** (header action), or **Create reversal** in the right-hand
   rail. You need the `accounting-journal:reverse` permission.
3. By default the reversal is dated **today**; the system can also take an
   explicit reversal date. The reversal date must itself be in an open period.

The reversal preserves the original's book, fund and matter references and its
analysis dimensions, and it carries the same invoice/bill sub-ledger tags so
that per-invoice and per-bill outstanding balances net back out cleanly. After
reversal you're taken to (or can open) the new reversal entry.

> 📷 *Screenshot: Posted entry detail page showing the Reverse action and the "Reversed" badge after reversal — to be added.*

***

## Submitting for approval

If manual entries in your organisation need a second pair of eyes, save the entry
with **Submit for Approval** instead of posting it directly. This is available
from the create modal and from the detail page (it requires
`accounting-journal:update`).

* Only a **draft** can be submitted.
* The entry's date is checked against open periods up front, so back-dated
  entries can't sit in the approval queue only to fail later.
* The entry then follows your configured approval workflow. When an approver
  **approves** it, the system **posts it automatically**. If it is **rejected**,
  it stays a draft so you can edit and resubmit.

***

## Editing and deleting drafts

* **Edit** — only **draft** entries can be edited. Open the entry and use the
  edit modal (the same modal as create, in "Edit Journal Entry" mode). The same
  balance and account rules apply.
* **Delete** — only **draft** entries can be deleted, from the trash icon next to
  a draft's status badge in the list (requires `accounting-journal:delete`).
  Posted and reversed entries cannot be deleted.

Attempting to edit or delete a non-draft entry returns *"Only DRAFT journal
entries can be updated/deleted."*

***

## Filtering and finding entries

The list has a filter bar with:

* a **status** filter (All / Draft / Posted / Reversed);
* a **voucher type** filter (All, or any specific voucher type);
* a **search** box that matches the **memo** or **entry number**.

Each row shows the entry number, date, memo, source, voucher type, total debit,
total credit and status, with column totals at the foot of the table. Click an
entry number — or anywhere on the row — to open its detail page.

***

## Closed and locked periods

You can only post (or reverse, or submit) into an accounting period that is
**open**. If the entry's date falls in a closed or locked period, the action is
refused with a stable, recognisable error and the entry's detail page shows a
period-lock chip. Move the date into an open period, or have the period reopened,
before trying again.

***

## The entry detail page

Opening an entry (`/accounting/journal-entries/:id`) gives you tabbed detail:

* **Overview** — the lines, with a link to drill into each account's ledger.
* **Postings** — the actual GL rows written when the entry was posted.
* **Source** — where the entry came from (for system-generated entries).
* **Linkages** — connections to related records.
* **History** — the workflow timeline (created, submitted, posted, reversed).

The header shows the status badge and the relevant primary action (**Post**,
**Submit for approval** or **Reverse**) based on the entry's current state and
your permissions.

***

## Related

* [Journal Entry Templates](/accounting/user/transactions/journal-templates) — reusable line layouts for entries you record repeatedly.
* [Recurring Transactions](/accounting/user/transactions/recurring-transactions) — schedule journal entries (and invoices/bills) to be generated automatically.
