---
tags: [accounting, model]
module: Accounting
---

# JournalEntry

## Connections
[[_Accounting]] · [[[Model]JournalRecord]] · [[[Model]User]] · [[[Model]RecurringEntity]] · [[[Model]PayrollEntry]] · [[[Model]Account]] · [[[Model]Asset]] · [[[Model]BankStatement]] · [[[Model]EasyEntry]] · [[[Model]Reconciliation]] · [[[Repo]Repositories]] · [[[Observer]Observers]] · [[[Job]Jobs]] · [[[Controller]JournalEntryController]] · [[[Service]JournalEntryServices]] · [[[Service]IntegrationSyncServices]] · [[[DB]DatabaseTables]] · [[[Cross]CrossModuleDependencies]]

## Source
```
Modules/Accounting/Models/JournalEntry.php
Modules/Accounting/Models/JournalAttachment.php
```

## Responsibilities
- The central financial transaction record — every debit/credit event in the system creates a JournalEntry
- Holds N `JournalRecord` lines (the actual debit/credit splits)
- Acts as the FK target for invoices, bills, receipts, payroll, assets, easy entries, bank statement records
- Supports recurring entries via `HasRecurringEntity` + `GenerateRecurringJournalEntryTrait`
- `JournalAttachment` stores file uploads associated with a manual entry

## Key Relationships

| Relation | Type | Target |
|---|---|---|
| records | hasMany | [[[Model]JournalRecord]] |
| attachments | hasMany | JournalAttachment |
| fiscalYear | belongsTo | [[[Cross]CrossModuleDependencies#Settings]] FiscalYear |
| invoice | hasOne | [[[Cross]CrossModuleDependencies#Sales]] Invoice |
| invoiceReturn | hasOne | [[[Cross]CrossModuleDependencies#Sales]] InvoiceReturn |
| customerReceipt | hasOne | [[[Cross]CrossModuleDependencies#Sales]] CustomerPaymentReceipt |
| purchaseBill | hasOne | [[[Cross]CrossModuleDependencies#Purchases]] PurchaseBill |
| billReturn | hasOne | [[[Cross]CrossModuleDependencies#Purchases]] BillReturn |
| expense | hasOne | [[[Cross]CrossModuleDependencies#Purchases]] Expense |
| supplierReceipt | hasOne | [[[Cross]CrossModuleDependencies#Purchases]] SupplierPaymentReceipt |
| payrollEntry | hasOne | [[[Cross]CrossModuleDependencies#HR]] PayrollEntry |
| easyEntry | hasOne | [[[Model]EasyEntry]] |
| bankStatementRecords | hasMany | [[[Model]BankStatement]] BankStatementRecord |
| asset | hasOne (via buying JE) | [[[Model]Asset]] |
| successSyncedManualEntry | hasOne | [[[Model]IntegrationModels]] |

## Traits
`AuditableTrait` · `FormatDateAndTimeTrait` · `GenerateRecurringJournalEntryTrait` · `HasRecurringEntity` · `SoftDeletes` · `UsesTenantConnection`

## Observer
`JournalEntryObserver` — handles post-save side effects

## Creation Flow
```
ManualJournalEntryController::store
  → CreatingJournalEntryValidator
  → CreatingNewJournalEntryService
      → JournalEntriesRepository::create
      → JournalRecordsRepository::create (N records)
      → UpdateRecordCustomerSupplierBalance trait
      → FillOpeningClosingBalance job (async)
```
