# AccountingReports Module - Complete Code Reference

**Module Version:** 2.0.0  
**Last Updated:** 2025-01-XX  
**Status:** Production Ready

---

## Table of Contents

1. [Module Overview](#module-overview)
2. [Architecture & Structure](#architecture--structure)
3. [Database Schema](#database-schema)
4. [Entities (Models)](#entities-models)
5. [Services](#services)
6. [Controllers](#controllers)
7. [Event Listeners](#event-listeners)
8. [Routes](#routes)
9. [Views](#views)
10. [Configuration](#configuration)
11. [Permissions](#permissions)
12. [Integration Points](#integration-points)

---

## Module Overview

The **AccountingReports** module is a comprehensive double-entry bookkeeping system for UltimatePOS, providing:

- **13+ Financial Reports** (Trial Balance, Balance Sheet, P&L, Cash Flow, etc.)
- **Complete Double-Entry System** with automatic journal posting
- **FIFO Inventory Costing** for accurate COGS calculation
- **Bank Reconciliation** system
- **Multi-location Support** with location-scoped reports
- **Audit Trail** with complete change tracking
- **Period Locking** to prevent edits to closed periods
- **POS-Specific Features** (Cash Register Reconciliation, Payment Method Books, Location-wise P&L, etc.)

---

## Architecture & Structure

### Directory Structure

```
Modules/AccountingReports/
├── Config/
│   └── config.php                    # Module configuration
├── Database/
│   ├── Migrations/                   # 30 migration files
│   └── Seeders/
│       └── AccountingReportsDatabaseSeeder.php
├── Entities/                         # 27 Eloquent models
│   ├── ChartOfAccount.php
│   ├── JournalEntryHeader.php
│   ├── JournalEntryLine.php
│   ├── LedgerRollup.php
│   ├── FifoLayer.php
│   ├── ReceivablePayable.php
│   ├── BankReconciliation.php
│   ├── PeriodLock.php
│   ├── AuditLog.php
│   ├── DirectExpense.php
│   ├── DirectIncome.php
│   ├── FixedAsset.php
│   ├── Loan.php
│   ├── Investment.php
│   ├── CapitalAccount.php
│   ├── BankAccount.php
│   ├── ChequeBook.php
│   ├── ChequeBookEntry.php
│   ├── Budget.php
│   └── ... (8 more)
├── Services/                         # 24 service classes
│   ├── PostingRulesService.php       # Core double-entry posting
│   ├── FifoCostingService.php       # FIFO inventory costing
│   ├── TrialBalanceService.php
│   ├── BalanceSheetService.php
│   ├── ProfitLossService.php
│   ├── CashFlowStatementService.php
│   ├── FundsFlowService.php
│   ├── RatioAnalysisService.php
│   ├── BankReconciliationService.php
│   ├── CashRegisterReconciliationService.php
│   ├── PaymentMethodBooksService.php
│   ├── CreditCustomerManagementService.php
│   ├── ExpenseAllocationService.php
│   ├── KPIDashboardService.php
│   ├── GSTFilingService.php
│   ├── TaxReconciliationService.php
│   ├── BudgetVsActualService.php
│   ├── DaybookQuery.php
│   ├── CashbookQuery.php
│   ├── BankbookQuery.php
│   └── ... (4 more)
├── Http/
│   ├── Controllers/                  # 46 controller classes
│   │   ├── AccountingReportsController.php
│   │   ├── TrialBalanceController.php
│   │   ├── BalanceSheetController.php
│   │   ├── ProfitLossController.php
│   │   ├── CashFlowController.php
│   │   ├── FundsFlowController.php
│   │   ├── ReceivablesController.php
│   │   ├── PayablesController.php
│   │   ├── DayBookController.php
│   │   ├── CashBookController.php
│   │   ├── BankBookController.php
│   │   ├── RatioAnalysisController.php
│   │   ├── StatisticsController.php
│   │   ├── BatchPrintController.php
│   │   ├── IntegrityController.php
│   │   ├── ChartOfAccountController.php
│   │   ├── JournalEntryManagementController.php
│   │   ├── ManualJournalEntryController.php
│   │   ├── GeneralLedgerController.php
│   │   ├── DirectExpenseController.php
│   │   ├── DirectIncomeController.php
│   │   ├── FixedAssetController.php
│   │   ├── LoanController.php
│   │   ├── InvestmentController.php
│   │   ├── CapitalAccountController.php
│   │   ├── BankAccountController.php
│   │   ├── BankManagementController.php
│   │   ├── BankReconciliationController.php
│   │   ├── ChequeBookController.php
│   │   ├── ChequeBookEntryController.php
│   │   ├── BudgetVsActualController.php
│   │   ├── CashRegisterReconciliationController.php
│   │   ├── PaymentMethodBooksController.php
│   │   ├── LocationWisePLController.php
│   │   ├── CreditManagementController.php
│   │   ├── KPIDashboardController.php
│   │   ├── GSTFilingController.php
│   │   └── ... (10 more)
│   └── Requests/                     # Form request validators
│       ├── StoreBankAccountRequest.php
│       ├── UpdateBankAccountRequest.php
│       ├── StoreChequeEntryRequest.php
│       └── ReconcileTransactionRequest.php
├── Listeners/                        # 5 event listeners
│   ├── PostSaleJournalListener.php
│   ├── PostPurchaseJournalListener.php
│   ├── PostPaymentJournalListener.php
│   ├── PostExpenseJournalListener.php
│   └── PostStockTransferListener.php
├── Providers/
│   ├── AccountingReportsServiceProvider.php
│   └── RouteServiceProvider.php
├── Routes/
│   ├── web.php                       # 100+ web routes
│   └── api.php                       # API routes
├── Resources/
│   ├── lang/
│   │   └── en/
│   │       └── lang.php
│   └── views/                        # 94 Blade templates
│       ├── index.blade.php
│       ├── trial-balance/
│       ├── balance-sheet/
│       ├── profit-loss/
│       ├── cash-flow/
│       ├── funds-flow/
│       ├── receivables/
│       ├── payables/
│       ├── day-book/
│       ├── cash-book/
│       ├── bank-book/
│       ├── ratio-analysis/
│       ├── statistics/
│       ├── batch-print/
│       ├── integrity/
│       ├── chart-of-accounts/
│       ├── journal-entry-management/
│       ├── manual-journal-entry/
│       ├── general-ledger/
│       ├── direct-expenses/
│       ├── direct-incomes/
│       ├── fixed-assets/
│       ├── loans/
│       ├── investments/
│       ├── capital-accounts/
│       ├── bank-accounts/
│       ├── bank-reconciliation/
│       ├── cheque-books/
│       ├── budget-vs-actual/
│       ├── cash_register/
│       ├── payment_methods/
│       ├── reports/
│       ├── credit/
│       ├── kpi/
│       └── gst/
├── Exports/
│   └── TrialBalanceExport.php
├── Helpers/
│   └── general_helper.php
├── module.json
├── composer.json
└── README.md
```

---

## Database Schema

### Core Tables (30 Migrations)

#### 1. Chart of Accounts
- **Table:** `ar_chart_of_accounts`
- **Purpose:** Hierarchical account structure
- **Key Fields:**
  - `account_code` (string, unique)
  - `account_name` (string)
  - `account_group` (enum: assets_current, liabilities_current, equity, income, expenses, etc.)
  - `account_type` (enum: asset, liability, equity, income, expense)
  - `parent_id` (nullable, for hierarchy)
  - `is_control_account` (boolean)
  - `is_active` (boolean)
  - `opening_balance` (decimal)
  - `opening_balance_type` (enum: debit, credit)

#### 2. Journal Entries
- **Table:** `ar_journal_entry_headers`
- **Purpose:** Journal entry vouchers
- **Key Fields:**
  - `voucher_no` (string, unique)
  - `voucher_date` (date)
  - `source_module` (string: sale, purchase, payment, expense, etc.)
  - `source_transaction_id` (nullable, FK to transactions)
  - `location_id` (nullable, FK to business_locations)
  - `total_debit` (decimal)
  - `total_credit` (decimal)
  - `balance_diff` (decimal, should be 0)
  - `is_balanced` (boolean)
  - `status` (enum: draft, posted, reversed)
  - `narration` (text)
  - `reference` (string)

- **Table:** `ar_journal_entry_lines`
- **Purpose:** Individual journal entry lines
- **Key Fields:**
  - `journal_entry_id` (FK to headers)
  - `account_id` (FK to chart_of_accounts)
  - `debit` (decimal)
  - `credit` (decimal)
  - `narration` (text)
  - `contact_id` (nullable, for AR/AP subledger)

#### 3. FIFO Layers
- **Table:** `ar_fifo_layers`
- **Purpose:** FIFO inventory costing layers
- **Key Fields:**
  - `variation_id` (FK to variations)
  - `location_id` (FK to business_locations)
  - `purchase_line_id` (FK to purchase_lines)
  - `quantity` (decimal)
  - `unit_cost` (decimal)
  - `remaining_quantity` (decimal)
  - `layer_date` (date)

#### 4. Ledger Rollups
- **Table:** `ar_ledger_rollups`
- **Purpose:** Materialized view for fast balance queries
- **Key Fields:**
  - `account_id` (FK)
  - `location_id` (nullable)
  - `as_of_date` (date)
  - `opening_balance` (decimal)
  - `period_debit` (decimal)
  - `period_credit` (decimal)
  - `closing_balance` (decimal)

#### 5. Receivables/Payables
- **Table:** `ar_receivables_payables`
- **Purpose:** AR/AP subledger
- **Key Fields:**
  - `contact_id` (FK to contacts)
  - `transaction_id` (FK to transactions)
  - `journal_entry_line_id` (FK)
  - `type` (enum: receivable, payable)
  - `amount` (decimal)
  - `balance` (decimal)
  - `due_date` (date)

#### 6. Bank Reconciliation
- **Table:** `ar_bank_reconciliation`
- **Purpose:** Track bank statement reconciliation
- **Key Fields:**
  - `bank_account_id` (FK to bank_accounts)
  - `account_transaction_id` (FK to account_transactions)
  - `journal_entry_line_id` (FK)
  - `statement_date` (date)
  - `statement_balance` (decimal)
  - `is_reconciled` (boolean)
  - `reconciled_at` (datetime)

#### 7. Period Locks
- **Table:** `ar_period_locks`
- **Purpose:** Prevent edits to closed periods
- **Key Fields:**
  - `business_id` (FK)
  - `period_start` (date)
  - `period_end` (date)
  - `locked_by` (FK to users)
  - `locked_at` (datetime)

#### 8. Audit Log
- **Table:** `ar_audit_log`
- **Purpose:** Complete audit trail
- **Key Fields:**
  - `action` (string: created, updated, deleted, posted, reversed)
  - `entity_type` (string)
  - `entity_id` (integer)
  - `old_values` (json)
  - `new_values` (json)
  - `user_id` (FK)
  - `ip_address` (string)

#### 9. Direct Expenses/Incomes
- **Tables:** `ar_direct_expenses`, `ar_direct_incomes`
- **Purpose:** Track direct expenses and incomes
- **Key Fields:**
  - `name_id` (FK to direct_expense_names/direct_income_names)
  - `amount` (decimal)
  - `expense_date` / `income_date` (date)
  - `category_id` (nullable, FK to expense_categories)
  - `location_id` (nullable)

#### 10. Fixed Assets
- **Table:** `ar_fixed_assets`
- **Purpose:** Track fixed assets and depreciation
- **Key Fields:**
  - `asset_name` (string)
  - `asset_code` (string)
  - `purchase_date` (date)
  - `purchase_cost` (decimal)
  - `depreciation_method` (enum: straight_line, declining_balance)
  - `useful_life_years` (integer)
  - `current_book_value` (decimal)
  - `accumulated_depreciation` (decimal)

#### 11. Loans
- **Table:** `ar_loans`
- **Purpose:** Track loans (borrowing/lending)
- **Key Fields:**
  - `loan_type` (enum: borrowing, lending)
  - `contact_id` (FK, lender/borrower)
  - `principal_amount` (decimal)
  - `interest_rate` (decimal)
  - `tenure_months` (integer)
  - `outstanding_principal` (decimal)

- **Table:** `ar_loan_transactions`
- **Purpose:** Track loan transactions (disbursements, repayments, interest)
- **Key Fields:**
  - `loan_id` (FK)
  - `transaction_type` (enum: disbursement, repayment, interest)
  - `amount` (decimal)
  - `transaction_date` (date)

#### 12. Investments
- **Table:** `ar_investments`
- **Purpose:** Track investments
- **Key Fields:**
  - `investment_name` (string)
  - `investment_type` (enum: fixed_deposit, mutual_fund, stocks, bonds)
  - `principal_amount` (decimal)
  - `interest_rate` (decimal)
  - `maturity_date` (date)
  - `current_value` (decimal)

#### 13. Capital Accounts
- **Table:** `ar_capital_accounts`
- **Purpose:** Track capital contributions and withdrawals
- **Key Fields:**
  - `contact_id` (FK, partner/owner)
  - `capital_type` (enum: contribution, withdrawal)
  - `amount` (decimal)
  - `transaction_date` (date)

#### 14. Bank Accounts
- **Table:** `ar_bank_accounts`
- **Purpose:** Manage bank accounts
- **Key Fields:**
  - `account_name` (string)
  - `account_number` (string)
  - `bank_name` (string)
  - `account_type` (enum: savings, current, fixed_deposit)
  - `opening_balance` (decimal)
  - `opening_balance_date` (date)
  - `chart_of_account_id` (FK, linked COA account)

#### 15. Cheque Books
- **Table:** `ar_cheque_books`
- **Purpose:** Physical cheque book management
- **Key Fields:**
  - `bank_account_id` (FK)
  - `cheque_book_number` (string)
  - `start_cheque_no` (string)
  - `end_cheque_no` (string)
  - `issued_date` (date)

- **Table:** `ar_cheque_book_entries`
- **Purpose:** Individual cheque entries
- **Key Fields:**
  - `cheque_book_id` (FK)
  - `bank_account_id` (FK)
  - `cheque_number` (string)
  - `cheque_date` (date)
  - `payee_name` (string)
  - `amount` (decimal)
  - `status` (enum: unused, issued, cleared, bounced, cancelled)
  - `cleared_date` (nullable)

#### 16. Budgets
- **Table:** `ar_budgets`
- **Purpose:** Budget vs Actual reporting
- **Key Fields:**
  - `account_id` (FK)
  - `budget_period` (enum: monthly, quarterly, yearly)
  - `period_start` (date)
  - `period_end` (date)
  - `budgeted_amount` (decimal)

#### 17. Ratio Snapshots
- **Table:** `ar_ratio_snapshots`
- **Purpose:** Store calculated financial ratios
- **Key Fields:**
  - `snapshot_date` (date)
  - `current_ratio` (decimal)
  - `quick_ratio` (decimal)
  - `debt_to_equity` (decimal)
  - `gross_margin` (decimal)
  - `net_margin` (decimal)
  - `roa` (decimal)
  - `roe` (decimal)

---

## Entities (Models)

### Core Entities

#### ChartOfAccount
**File:** `Entities/ChartOfAccount.php`

**Relationships:**
- `business()` → Business
- `parent()` → ChartOfAccount (self-referential)
- `children()` → ChartOfAccount[] (self-referential)
- `account()` → Account (UltimatePOS account)
- `journalEntryLines()` → JournalEntryLine[]

**Key Methods:**
- `getBalance($asOfDate, $locationId)` - Get account balance as of date
- `getOpeningBalance($asOfDate, $locationId)` - Get opening balance
- `getPeriodBalance($fromDate, $toDate, $locationId)` - Get period balance
- `isControlAccount()` - Check if control account
- `getSubAccounts()` - Get all child accounts recursively

**Scopes:**
- `active()` - Active accounts only
- `notClosed()` - Not closed accounts
- `byGroup($group)` - Filter by account group
- `byType($type)` - Filter by account type
- `controlAccounts()` - Control accounts only

#### JournalEntryHeader
**File:** `Entities/JournalEntryHeader.php`

**Relationships:**
- `business()` → Business
- `location()` → BusinessLocation
- `sourceTransaction()` → Transaction
- `journalEntryLines()` → JournalEntryLine[]
- `reversedBy()` → JournalEntryHeader (self-referential)
- `createdBy()` → User
- `postedBy()` → User

**Key Methods:**
- `validateBalance()` - Ensure Dr = Cr
- `post()` - Post the journal entry
- `reverse()` - Create reversing entry
- `getTotalDebit()` - Sum of all debit lines
- `getTotalCredit()` - Sum of all credit lines

**Scopes:**
- `posted()` - Posted entries only
- `draft()` - Draft entries only
- `byDateRange($fromDate, $toDate)` - Filter by date range
- `bySourceModule($module)` - Filter by source module

#### JournalEntryLine
**File:** `Entities/JournalEntryLine.php`

**Relationships:**
- `journalEntry()` → JournalEntryHeader
- `account()` → ChartOfAccount
- `contact()` → Contact (for AR/AP)

**Key Methods:**
- `getBalance()` - Get line balance (Dr - Cr)

#### FifoLayer
**File:** `Entities/FifoLayer.php`

**Purpose:** Track FIFO inventory layers for accurate COGS

**Relationships:**
- `variation()` → Variation
- `location()` → BusinessLocation
- `purchaseLine()` → PurchaseLine

**Key Methods:**
- `consume($quantity)` - Consume quantity from layer
- `getRemainingQuantity()` - Get remaining quantity
- `getTotalCost()` - Get total cost of layer

#### LedgerRollup
**File:** `Entities/LedgerRollup.php`

**Purpose:** Materialized view for fast balance queries

**Key Methods:**
- `rebuild($accountId, $asOfDate, $locationId)` - Rebuild rollup
- `getBalance($accountId, $asOfDate, $locationId)` - Get balance from rollup

#### ReceivablePayable
**File:** `Entities/ReceivablePayable.php`

**Purpose:** AR/AP subledger tracking

**Relationships:**
- `contact()` → Contact
- `transaction()` → Transaction
- `journalEntryLine()` → JournalEntryLine

**Key Methods:**
- `getAgingBuckets()` - Get aging analysis
- `getOutstandingBalance()` - Get outstanding balance

#### BankReconciliation
**File:** `Entities/BankReconciliation.php`

**Relationships:**
- `bankAccount()` → BankAccount
- `accountTransaction()` → AccountTransaction
- `journalEntryLine()` → JournalEntryLine

**Key Methods:**
- `markReconciled($statementDate, $statementBalance)` - Mark as reconciled
- `markUnreconciled()` - Mark as unreconciled

#### PeriodLock
**File:** `Entities/PeriodLock.php`

**Key Methods:**
- `isDateLocked($businessId, $date)` - Check if date is locked
- `lockPeriod($businessId, $startDate, $endDate, $userId)` - Lock a period
- `unlockPeriod($businessId, $startDate, $endDate)` - Unlock a period

#### AuditLog
**File:** `Entities/AuditLog.php`

**Purpose:** Complete audit trail of all changes

**Key Methods:**
- `log($action, $entityType, $entityId, $oldValues, $newValues, $userId)` - Log an action

---

## Services

### Core Services

#### PostingRulesService
**File:** `Services/PostingRulesService.php`

**Purpose:** Core double-entry bookkeeping service. Handles automatic journal entry posting for all UltimatePOS transactions.

**Key Methods:**

1. **`postSale(Transaction $transaction)`**
   - Posts sale transaction to journal entries
   - Debits: AR/Cash, COGS
   - Credits: Revenue, Output Tax, Sales Discounts (contra revenue)
   - Automatically calculates COGS using FIFO

2. **`postPurchase(Transaction $transaction)`**
   - Posts purchase transaction to journal entries
   - Debits: Inventory, Input Tax
   - Credits: AP/Cash

3. **`postPayment(TransactionPayment $payment)`**
   - Posts payment transaction
   - Debits: Cash/Bank
   - Credits: AR (for customer payments) or AP (for supplier payments)

4. **`postExpense(Expense $expense)`**
   - Posts expense transaction
   - Debits: Expense Account
   - Credits: Cash/Bank/AP

5. **`postStockTransfer(StockTransfer $transfer)`**
   - Posts stock transfer between locations
   - Debits: Inventory (destination location)
   - Credits: Inventory (source location)

6. **`postPettyCashReplenishment($amount, $locationId)`**
   - Posts petty cash replenishment
   - Debits: Petty Cash
   - Credits: Cash/Bank

7. **`postSalesCommission($saleId, $commissionAmount, $salespersonId)`**
   - Posts sales commission
   - Debits: Commission Expense
   - Credits: Commission Payable

8. **`postPayroll($employeeId, $salaryAmount, $deductions, $netPay)`**
   - Posts payroll entry
   - Debits: Salary Expense, Deductions (various)
   - Credits: Salary Payable, Statutory Payables

9. **`createJournalEntry(array $data)`**
   - Creates a journal entry header
   - Validates balance (Dr = Cr)
   - Logs audit trail

10. **`addJournalLine($journalId, $accountId, $debit, $credit, $narration, $contactId = null)`**
    - Adds a line to journal entry
    - Validates account exists and is active

**Helper Methods:**
- `getControlAccount($businessId, $controlType)` - Get control account (AR, AP, Cash, etc.)
- `getAccountByGroup($businessId, $group)` - Get account by group (income, expenses, etc.)
- `validatePeriodLock($businessId, $date)` - Check if period is locked

#### FifoCostingService
**File:** `Services/FifoCostingService.php`

**Purpose:** Calculate COGS using FIFO (First-In-First-Out) method

**Key Methods:**

1. **`calculateCogs($variationId, $locationId, $quantity, $saleDate)`**
   - Calculates COGS for a sale using FIFO
   - Consumes oldest layers first
   - Returns total COGS amount

2. **`createFifoLayer($purchaseLineId, $variationId, $locationId, $quantity, $unitCost, $purchaseDate)`**
   - Creates a new FIFO layer from purchase

3. **`consumeFifoLayer($layerId, $quantity)`**
   - Consumes quantity from a FIFO layer
   - Updates remaining quantity

4. **`rebuildFifoLayers($businessId, $fromDate = null, $toDate = null)`**
   - Rebuilds all FIFO layers from purchase history
   - Used for data integrity

5. **`getInventoryValuation($businessId, $asOfDate, $locationId = null)`**
   - Gets inventory valuation using FIFO layers

#### TrialBalanceService
**File:** `Services/TrialBalanceService.php`

**Purpose:** Generate trial balance report

**Key Methods:**

1. **`generate($businessId, $fromDate, $toDate, $locationId = null)`**
   - Generates trial balance for date range
   - Returns array with:
     - Opening balances
     - Period debits
     - Period credits
     - Closing balances
   - Groups by account group

2. **`getAccountBalance($accountId, $asOfDate, $locationId = null)`**
   - Gets account balance as of date

3. **`getOpeningBalance($accountId, $asOfDate, $locationId = null)`**
   - Gets opening balance

#### BalanceSheetService
**File:** `Services/BalanceSheetService.php`

**Purpose:** Generate balance sheet report

**Key Methods:**

1. **`generate($businessId, $asOfDate, $locationId = null)`**
   - Generates balance sheet as of date
   - Returns:
     - Assets (Current & Non-Current)
     - Liabilities (Current & Non-Current)
     - Equity
   - Validates: Assets = Liabilities + Equity

2. **`getAssets($businessId, $asOfDate, $locationId = null)`**
   - Gets all assets grouped by type

3. **`getLiabilities($businessId, $asOfDate, $locationId = null)`**
   - Gets all liabilities grouped by type

4. **`getEquity($businessId, $asOfDate, $locationId = null)`**
   - Gets equity accounts

#### ProfitLossService
**File:** `Services/ProfitLossService.php`

**Purpose:** Generate profit & loss statement

**Key Methods:**

1. **`generate($businessId, $fromDate, $toDate, $locationId = null, $compareWithPrevious = false)`**
   - Generates P&L for date range
   - Returns:
     - Revenue (with Sales Returns & Discounts)
     - COGS
     - Gross Profit
     - Operating Expenses
     - Other Income/Expenses
     - Net Profit
   - Optionally compares with previous period

2. **`getRevenue($businessId, $fromDate, $toDate, $locationId = null)`**
   - Gets revenue accounts

3. **`getCogs($businessId, $fromDate, $toDate, $locationId = null)`**
   - Gets COGS

4. **`getExpenses($businessId, $fromDate, $toDate, $locationId = null)`**
   - Gets expense accounts grouped by category

#### CashFlowStatementService
**File:** `Services/CashFlowStatementService.php`

**Purpose:** Generate cash flow statement (indirect method)

**Key Methods:**

1. **`generate($businessId, $fromDate, $toDate, $locationId = null)`**
   - Generates cash flow statement
   - Returns:
     - Operating Activities
     - Investing Activities
     - Financing Activities
     - Net Cash Flow

#### FundsFlowService
**File:** `Services/FundsFlowService.php`

**Purpose:** Generate funds flow statement (working capital analysis)

**Key Methods:**

1. **`generate($businessId, $fromDate, $toDate, $locationId = null)`**
   - Generates funds flow statement
   - Shows sources and uses of funds

#### RatioAnalysisService
**File:** `Services/RatioAnalysisService.php`

**Purpose:** Calculate financial ratios

**Key Methods:**

1. **`calculateRatios($businessId, $asOfDate, $locationId = null)`**
   - Calculates all financial ratios:
     - Liquidity: Current Ratio, Quick Ratio
     - Leverage: Debt-to-Equity, Interest Coverage
     - Profitability: Gross Margin, Operating Margin, Net Margin, ROA, ROE
     - Efficiency: Asset Turnover, Inventory Turnover

2. **`saveSnapshot($businessId, $asOfDate, $ratios)`**
   - Saves ratio snapshot for historical comparison

#### BankReconciliationService
**File:** `Services/BankReconciliationService.php`

**Purpose:** Bank reconciliation functionality

**Key Methods:**

1. **`reconcile($bankAccountId, $statementDate, $statementBalance, $transactionIds)`**
   - Reconciles bank account with statement
   - Marks transactions as reconciled

2. **`getUnreconciledTransactions($bankAccountId, $asOfDate)`**
   - Gets all unreconciled transactions

3. **`getReconciliationStatement($bankAccountId, $fromDate, $toDate)`**
   - Generates reconciliation statement

#### CashRegisterReconciliationService
**File:** `Services/CashRegisterReconciliationService.php`

**Purpose:** Cash register reconciliation for POS

**Key Methods:**

1. **`reconcile($registerId, $closingDate, $actualCash, $notes)`**
   - Reconciles cash register
   - Posts cash over/short if any

2. **`getRegisterSummary($registerId, $fromDate, $toDate)`**
   - Gets cash register summary

#### PaymentMethodBooksService
**File:** `Services/PaymentMethodBooksService.php`

**Purpose:** Payment method-wise day books

**Key Methods:**

1. **`getDayBook($businessId, $fromDate, $toDate, $paymentMethod, $locationId = null)`**
   - Gets day book filtered by payment method

2. **`getCardSettlement($businessId, $fromDate, $toDate, $locationId = null)`**
   - Gets card settlement report

3. **`getChequeClearance($businessId, $fromDate, $toDate, $locationId = null)`**
   - Gets cheque clearance report

#### CreditCustomerManagementService
**File:** `Services/CreditCustomerManagementService.php`

**Purpose:** Credit customer management

**Key Methods:**

1. **`getCustomerSummary($contactId, $asOfDate)`**
   - Gets customer credit summary

2. **`chargeInterest($contactId, $overdueAmount, $daysOverdue)`**
   - Charges interest on overdue amounts

3. **`sendReminder($contactId, $reminderType)`**
   - Sends payment reminder

#### ExpenseAllocationService
**File:** `Services/ExpenseAllocationService.php`

**Purpose:** Expense allocation to cost centers/locations

**Key Methods:**

1. **`allocate($expenseId, $allocationMethod, $allocationRules)`**
   - Allocates expense to multiple locations/cost centers
   - Methods: revenue_ratio, area_ratio, equal, custom

#### KPIDashboardService
**File:** `Services/KPIDashboardService.php`

**Purpose:** KPI dashboard calculations

**Key Methods:**

1. **`getDashboardData($businessId, $fromDate, $toDate, $locationId = null)`**
   - Gets all KPIs:
     - Revenue, COGS, Gross Profit, Net Profit
     - Inventory Valuation
     - AR/AP Outstanding
     - Cash Position
     - Financial Ratios

#### GSTFilingService
**File:** `Services/GSTFilingService.php`

**Purpose:** GST/VAT filing helper

**Key Methods:**

1. **`generateGSTR1($businessId, $fromDate, $toDate, $locationId = null)`**
   - Generates GSTR-1 format data

2. **`generateGSTR3B($businessId, $fromDate, $toDate, $locationId = null)`**
   - Generates GSTR-3B format data

3. **`getITCReconciliation($businessId, $fromDate, $toDate)`**
   - Gets Input Tax Credit reconciliation

4. **`getHSNSummary($businessId, $fromDate, $toDate, $locationId = null)`**
   - Gets HSN code summary

#### Query Classes

**DaybookQuery.php** - Complex query builder for day book  
**CashbookQuery.php** - Complex query builder for cash book  
**BankbookQuery.php** - Complex query builder for bank book

---

## Controllers

### Report Controllers

All report controllers follow a similar pattern:

1. **`index()`** - Display report page with filters
2. **`getData()`** - AJAX endpoint to fetch report data
3. **`export()`** - Export report (PDF/Excel/CSV)

#### TrialBalanceController
- Routes: `/accounting-reports/trial-balance`
- Methods: `index()`, `getData()`, `export()`

#### BalanceSheetController
- Routes: `/accounting-reports/balance-sheet`
- Methods: `index()`, `getData()`, `export()`

#### ProfitLossController
- Routes: `/accounting-reports/profit-loss`
- Methods: `index()`, `getData()`, `export()`

#### CashFlowController
- Routes: `/accounting-reports/cash-flow`
- Methods: `index()`, `getData()`, `export()`

#### FundsFlowController
- Routes: `/accounting-reports/funds-flow`
- Methods: `index()`, `getData()`, `export()`

#### ReceivablesController
- Routes: `/accounting-reports/receivables`
- Methods: `index()`, `getData()`, `aging()`, `statement($contactId)`, `export()`

#### PayablesController
- Routes: `/accounting-reports/payables`
- Methods: `index()`, `getData()`, `aging()`, `statement($contactId)`, `export()`

#### DayBookController
- Routes: `/accounting-reports/day-book`
- Methods: `index()`, `getData()`, `exportPdf()`, `exportCsv()`, `print()`

#### CashBookController
- Routes: `/accounting-reports/cash-book`
- Methods: `index()`, `getData()`, `export()`, `monthlyCashbook()`, `getMonthlyCashbookData()`

#### BankBookController
- Routes: `/accounting-reports/bank-book`
- Methods: `index()`, `getData()`, `export()`, `reconciliation($accountId)`, `getReconciliationData()`, `markReconciled()`

#### RatioAnalysisController
- Routes: `/accounting-reports/ratio-analysis`
- Methods: `index()`, `getData()`, `export()`

#### StatisticsController
- Routes: `/accounting-reports/statistics`
- Methods: `index()`, `getData()`

#### BatchPrintController
- Routes: `/accounting-reports/batch-print`
- Methods: `index()`, `process()`

#### IntegrityController
- Routes: `/accounting-reports/integrity`
- Methods: `index()`, `runValidation()`, `rebuild()`, `reconcileCogs()`, `postExistingExpenses()`

### Management Controllers

#### ChartOfAccountController
- Full CRUD for Chart of Accounts
- Routes: `/accounting-reports/chart-of-accounts`

#### JournalEntryManagementController
- View, edit, delete, reverse journal entries
- Routes: `/accounting-reports/journal-entry-management`

#### ManualJournalEntryController
- Create manual journal entries
- Routes: `/accounting-reports/manual-journal-entry`

#### GeneralLedgerController
- View general ledger for any account
- Routes: `/accounting-reports/general-ledger`

#### DirectExpenseController / DirectIncomeController
- Manage direct expenses and incomes
- Routes: `/accounting-reports/direct-expenses`, `/accounting-reports/direct-incomes`

#### FixedAssetController
- Manage fixed assets and depreciation
- Routes: `/accounting-reports/fixed-assets`

#### LoanController
- Manage loans (borrowing/lending)
- Routes: `/accounting-reports/loans`

#### InvestmentController
- Manage investments
- Routes: `/accounting-reports/investments`

#### CapitalAccountController
- Manage capital accounts
- Routes: `/accounting-reports/capital-accounts`

#### BankAccountController / BankManagementController
- Manage bank accounts
- Routes: `/accounting-reports/bank-accounts`, `/accounting-reports/bank-management`

#### BankReconciliationController
- Bank reconciliation interface
- Routes: `/accounting-reports/bank-reconciliation`

#### ChequeBookController / ChequeBookEntryController
- Manage cheque books and entries
- Routes: `/accounting-reports/cheque-books`, `/accounting-reports/cheque-book`

#### BudgetVsActualController
- Budget vs Actual reporting
- Routes: `/accounting-reports/budget-vs-actual`

### POS-Specific Controllers

#### CashRegisterReconciliationController
- Cash register reconciliation
- Routes: `/accounting-reports/cash-register/{registerId}/reconciliation`

#### PaymentMethodBooksController
- Payment method-wise books
- Routes: `/accounting-reports/payment-methods/*`

#### LocationWisePLController
- Location-wise profit & loss
- Routes: `/accounting-reports/location-pl`

#### CreditManagementController
- Credit customer management
- Routes: `/accounting-reports/credit-management/*`

#### KPIDashboardController
- KPI dashboard
- Routes: `/accounting-reports/kpi-dashboard`

#### GSTFilingController
- GST/VAT filing
- Routes: `/accounting-reports/gst/*`

---

## Event Listeners

### Automatic Journal Posting

The module automatically posts journal entries when UltimatePOS events fire:

#### PostSaleJournalListener
**File:** `Listeners/PostSaleJournalListener.php`

**Event:** `App\Events\SellCreatedOrModified`

**Action:** Calls `PostingRulesService::postSale()`

#### PostPurchaseJournalListener
**File:** `Listeners/PostPurchaseJournalListener.php`

**Event:** `App\Events\PurchaseCreatedOrModified`

**Action:** Calls `PostingRulesService::postPurchase()`

#### PostPaymentJournalListener
**File:** `Listeners/PostPaymentJournalListener.php`

**Event:** `App\Events\TransactionPaymentAdded`

**Action:** Calls `PostingRulesService::postPayment()`

#### PostExpenseJournalListener
**File:** `Listeners/PostExpenseJournalListener.php`

**Event:** `App\Events\ExpenseCreatedOrModified`

**Action:** Calls `PostingRulesService::postExpense()`

#### PostStockTransferListener
**File:** `Listeners/PostStockTransferListener.php`

**Event:** `App\Events\StockTransferCreatedOrModified`

**Action:** Calls `PostingRulesService::postStockTransfer()`

**Registration:** All listeners are registered in `AccountingReportsServiceProvider::registerEventListeners()`

---

## Routes

### Web Routes
**File:** `Routes/web.php`

**Total Routes:** 100+ routes

**Route Groups:**
1. **Installation Routes** (`/accounting-reports/install/*`)
2. **Main Reports Routes** (`/accounting-reports/*`)
3. **Bank Management Routes** (`/accounting-reports/bank-management/*`)
4. **Bank Accounts Routes** (`/accounting-reports/bank-accounts/*`)
5. **Bank Reconciliation Routes** (`/accounting-reports/bank-reconciliation/*`)
6. **POS-Specific Routes** (`/accounting-reports/cash-register/*`, `/accounting-reports/payment-methods/*`, etc.)

**Middleware:**
- `auth` - Authentication required
- `web` - Web session
- `SetSessionData` - UltimatePOS session data
- `language` - Language support
- `timezone` - Timezone support
- `AdminSidebarMenu` - Sidebar menu integration

### API Routes
**File:** `Routes/api.php`

**Routes:**
- `GET /api/accounting-reports/trial-balance`
- `GET /api/accounting-reports/balance-sheet`
- `GET /api/accounting-reports/profit-loss`

**Middleware:** `auth:api`

---

## Views

### View Structure

All views are Blade templates located in `Resources/views/`

**Main Views:**
- `index.blade.php` - Main dashboard with report cards
- `license/index.blade.php` - License management

**Report Views:**
- `trial-balance/index.blade.php`
- `balance-sheet/index.blade.php`
- `profit-loss/index.blade.php`
- `cash-flow/index.blade.php`
- `funds-flow/index.blade.php`
- `receivables/index.blade.php`
- `payables/index.blade.php`
- `day-book/index.blade.php`
- `cash-book/index.blade.php`, `cash-book/monthly.blade.php`
- `bank-book/index.blade.php`, `bank-book/reconciliation.blade.php`
- `ratio-analysis/index.blade.php`
- `statistics/index.blade.php`
- `batch-print/index.blade.php`, `batch-print/account-ledger.blade.php`
- `integrity/index.blade.php`
- `general-ledger/index.blade.php`

**Management Views:**
- `chart-of-accounts/*` - CRUD views
- `journal-entry-management/*` - Journal entry views
- `manual-journal-entry/*` - Manual journal entry views
- `direct-expenses/*`, `direct-incomes/*` - Direct expense/income views
- `fixed-assets/*`, `fixed-asset-revaluations/*` - Fixed asset views
- `loans/*` - Loan management views
- `investments/*` - Investment views
- `capital-accounts/*` - Capital account views
- `bank-accounts/*` - Bank account views
- `bank-reconciliation/*` - Bank reconciliation views
- `cheque-books/*`, `cheque-book/*` - Cheque book views
- `budget-vs-actual/index.blade.php` - Budget vs Actual view

**POS-Specific Views:**
- `cash_register/report.blade.php` - Cash register report
- `payment_methods/day_book.blade.php` - Payment method day book
- `reports/location_wise_pl.blade.php` - Location-wise P&L
- `reports/single_location_pl.blade.php` - Single location P&L
- `credit/reminders_due.blade.php` - Credit reminders
- `kpi/dashboard.blade.php` - KPI dashboard
- `gst/gstr1.blade.php` - GSTR-1 view

**Common Features:**
- Date range filters
- Location filters
- Export buttons (PDF/Excel/CSV)
- AJAX data loading
- Responsive design
- UltimatePOS theme integration

---

## Configuration

### Config File
**File:** `Config/config.php`

**Key Settings:**

```php
'module_version' => '2.0.0',
'pid' => 26, // Product ID for license validation
'lic1' => '...', // License validation endpoint (base64 encoded)
'lic2' => '...', // Backup license endpoint
'license_management_server' => 'https://wefnf.com',

// Aging buckets (days)
'aging_buckets' => [
    'current' => 0,
    'b0_7' => 7,
    'b8_30' => 30,
    'b31_60' => 60,
    'b61_90' => 90,
    'b90_plus' => 999999,
],

// Costing method
'costing_method' => env('ACCOUNTING_COSTING_METHOD', 'fifo'), // 'fifo' or 'average'

// Currency symbol
'currency_symbol' => env('ACCOUNTING_CURRENCY_SYMBOL', 'Rs'),

// Account groups
'account_groups' => [
    'assets_current' => 'Current Assets',
    'assets_non_current' => 'Non-Current Assets',
    'liabilities_current' => 'Current Liabilities',
    'liabilities_non_current' => 'Non-Current Liabilities',
    'equity' => 'Equity',
    'income' => 'Income',
    'sales_returns' => 'Sales Returns & Allowances',
    'sales_discounts' => 'Sales Discounts',
    'cogs' => 'Cost of Goods Sold',
    'expenses' => 'Expenses',
    // ... more groups
],

// Financial ratios formulas
'ratios' => [
    'current_ratio' => 'current_assets / current_liabilities',
    'quick_ratio' => '(current_assets - inventory) / current_liabilities',
    // ... more ratios
],

// Period locking
'enable_period_lock' => env('ACCOUNTING_ENABLE_PERIOD_LOCK', false),

// Performance settings
'chunk_size' => env('ACCOUNTING_CHUNK_SIZE', 1000),
'enable_materialized_ledgers' => env('ACCOUNTING_MATERIALIZED_LEDGERS', true),

// Payment method to account mapping
'payment_method_accounts' => [
    'cash' => ['account_group' => 'assets_current', 'control_type' => 'cash'],
    'card' => ['account_group' => 'assets_current', 'control_type' => 'card_settlement'],
    // ... more payment methods
],

// Expense allocation rules
'allocation_rules' => [
    'enabled' => env('ACCOUNTING_ENABLE_ALLOCATION', true),
    'default_method' => 'revenue_ratio', // revenue_ratio, area_ratio, equal, custom
],

// Credit customer settings
'credit_management' => [
    'enable_interest_on_overdue' => env('ACCOUNTING_INTEREST_ON_OVERDUE', false),
    'interest_rate_per_month' => env('ACCOUNTING_OVERDUE_INTEREST_RATE', 2), // 2% per month
    'days_before_interest' => env('ACCOUNTING_DAYS_BEFORE_INTEREST', 30),
    'enable_payment_reminders' => env('ACCOUNTING_PAYMENT_REMINDERS', true),
],

// Petty cash settings
'petty_cash' => [
    'enabled' => env('ACCOUNTING_PETTY_CASH_ENABLED', true),
    'imprest_amount' => env('ACCOUNTING_PETTY_CASH_IMPREST', 10000),
    'auto_replenish_threshold' => env('ACCOUNTING_PETTY_CASH_THRESHOLD', 2000),
],

// Commission settings
'commission' => [
    'auto_post_on_sale' => env('ACCOUNTING_AUTO_POST_COMMISSION', true),
    'payment_frequency' => env('ACCOUNTING_COMMISSION_PAYMENT_FREQUENCY', 'monthly'),
],

// Payroll settings
'payroll' => [
    'enabled' => env('ACCOUNTING_PAYROLL_ENABLED', true),
    'auto_post_monthly' => env('ACCOUNTING_PAYROLL_AUTO_POST', true),
],
```

---

## Permissions

### Required Permissions

The module uses UltimatePOS permission system. Required permissions:

**View Permissions:**
- `accounting.view_all` - View all reports
- `accounting.view_trial_balance` - View trial balance
- `accounting.view_balance_sheet` - View balance sheet
- `accounting.view_pl` - View profit & loss
- `accounting.view_cashflow` - View cash flow
- `accounting.view_fundsflow` - View funds flow
- `accounting.view_ar` - View receivables
- `accounting.view_ap` - View payables
- `accounting.view_daybook` - View day book
- `accounting.view_cashbook` - View cash book
- `accounting.view_bankbook` - View bank book
- `accounting.view_ratio_analysis` - View ratio analysis
- `accounting.view_statistics` - View statistics
- `accounting.view_general_ledger` - View general ledger

**Management Permissions:**
- `accounting.manage_chart_of_accounts` - Manage chart of accounts
- `accounting.manage_journal_entries` - Manage journal entries
- `accounting.create_manual_journal` - Create manual journal entries
- `accounting.reverse_journal` - Reverse journal entries
- `accounting.manage_direct_expenses` - Manage direct expenses
- `accounting.manage_direct_incomes` - Manage direct incomes
- `accounting.manage_fixed_assets` - Manage fixed assets
- `accounting.manage_loans` - Manage loans
- `accounting.manage_investments` - Manage investments
- `accounting.manage_capital_accounts` - Manage capital accounts
- `accounting.manage_bank_accounts` - Manage bank accounts
- `accounting.reconcile_bank` - Reconcile bank accounts
- `accounting.manage_cheque_books` - Manage cheque books
- `accounting.manage_budgets` - Manage budgets

**Action Permissions:**
- `accounting.export_reports` - Export reports
- `accounting.print_multi_account` - Batch print
- `accounting.rebuild_ledgers` - Rebuild ledgers
- `accounting.validate_integrity` - Run integrity checks
- `accounting.lock_periods` - Lock periods
- `accounting.post_existing_transactions` - Post existing transactions

**POS-Specific Permissions:**
- `accounting.reconcile_cash_register` - Reconcile cash registers
- `accounting.view_payment_method_books` - View payment method books
- `accounting.view_location_pl` - View location-wise P&L
- `accounting.manage_credit_customers` - Manage credit customers
- `accounting.view_kpi_dashboard` - View KPI dashboard
- `accounting.view_gst_filing` - View GST filing

---

## Integration Points

### UltimatePOS Integration

#### 1. Transaction Events
The module listens to UltimatePOS events:
- `SellCreatedOrModified` → Posts sale journal entries
- `PurchaseCreatedOrModified` → Posts purchase journal entries
- `TransactionPaymentAdded` → Posts payment journal entries
- `ExpenseCreatedOrModified` → Posts expense journal entries
- `StockTransferCreatedOrModified` → Posts stock transfer journal entries

#### 2. Account Integration
- Links to UltimatePOS `Account` model via `account_id` in `ChartOfAccount`
- Uses UltimatePOS payment accounts for bank/cash accounts

#### 3. Business Location Integration
- All reports support location filtering
- Journal entries track `location_id`
- FIFO layers are location-specific

#### 4. Contact Integration
- AR/AP subledger uses UltimatePOS `Contact` model
- Links customers and suppliers to receivables/payables

#### 5. Product/Variation Integration
- FIFO layers track `variation_id`
- COGS calculation uses purchase line data

#### 6. Tax Integration
- Uses UltimatePOS tax rates
- Separate Input Tax and Output Tax accounts

#### 7. Payment Method Integration
- Payment method-wise books use UltimatePOS payment methods
- Maps payment methods to control accounts

#### 8. Cash Register Integration
- Cash register reconciliation uses UltimatePOS `CashRegister` model
- Tracks cash over/short

#### 9. Expense Category Integration
- Direct expenses can be linked to expense categories
- Expense allocation uses location data

#### 10. Menu Integration
- Adds menu items to UltimatePOS sidebar
- Uses `AdminSidebarMenu` middleware

### Database Integration

#### Shared Tables
- `businesses` - Business information
- `business_locations` - Location information
- `contacts` - Customers and suppliers
- `transactions` - Sales and purchases
- `transaction_payments` - Payments
- `transaction_sell_lines` - Sale line items
- `purchase_lines` - Purchase line items
- `variations` - Product variations
- `variation_location_details` - Inventory by location
- `expense_categories` - Expense categories
- `accounts` - UltimatePOS accounts
- `account_transactions` - Account transactions
- `cash_registers` - Cash registers
- `cash_register_transactions` - Cash register transactions

#### Module-Specific Tables
All tables prefixed with `ar_` (Accounting Reports):
- `ar_chart_of_accounts`
- `ar_journal_entry_headers`
- `ar_journal_entry_lines`
- `ar_fifo_layers`
- `ar_ledger_rollups`
- `ar_receivables_payables`
- `ar_bank_reconciliation`
- `ar_period_locks`
- `ar_audit_log`
- `ar_direct_expenses`
- `ar_direct_incomes`
- `ar_fixed_assets`
- `ar_loans`
- `ar_investments`
- `ar_capital_accounts`
- `ar_bank_accounts`
- `ar_cheque_books`
- `ar_cheque_book_entries`
- `ar_budgets`
- `ar_ratio_snapshots`
- And more...

---

## Key Features Summary

### Financial Reports (13+)
1. Trial Balance
2. Balance Sheet
3. Profit & Loss
4. Cash Flow Statement
5. Funds Flow Statement
6. Receivables (with aging)
7. Payables (with aging)
8. Day Book
9. Cash Book
10. Bank Book
11. Sales Journal
12. Purchase Journal
13. Ratio Analysis
14. Statistics/Dashboard
15. General Ledger
16. Fixed Assets Report
17. Budget vs Actual

### POS-Specific Features
1. Cash Register Reconciliation
2. Payment Method-wise Books
3. Location-wise Profit & Loss
4. Credit Customer Management
5. Expense Allocation
6. Petty Cash Management
7. Sales Commission Accounting
8. Integrated Payroll
9. KPI Dashboard
10. GST/VAT Filing Helper

### Core Accounting Features
1. Double-Entry Bookkeeping
2. FIFO Inventory Costing
3. Bank Reconciliation
4. Period Locking
5. Audit Trail
6. Manual Journal Entries
7. Chart of Accounts Management
8. Multi-Currency Support
9. Multi-Location Support
10. Export (PDF/Excel/CSV)
11. Batch Printing
12. Integrity Tools

---

## Development Notes

### Service Layer Pattern
All business logic is in service classes, keeping controllers thin.

### Event-Driven Architecture
Automatic journal posting via event listeners ensures data consistency.

### Materialized Views
Ledger rollups provide fast balance queries for large datasets.

### FIFO Costing
Accurate COGS calculation using FIFO method with layer tracking.

### Audit Trail
Complete audit log of all changes for compliance.

### Period Locking
Prevents edits to closed periods for financial integrity.

### Multi-Location Support
All reports support location filtering and scoping.

### Export Capabilities
All reports support PDF, Excel, and CSV export.

### Responsive Design
All views are responsive and mobile-friendly.

---

## Version History

- **v2.0.0** - Added 9 POS-specific features (Cash Register Reconciliation, Payment Method Books, Location-wise P&L, Credit Management, Expense Allocation, Petty Cash, Commission, Payroll, KPI Dashboard, GST Filing)
- **v1.0.3** - Fixed long index name issues, improved migration handling
- **v1.0.1** - Fixed installation issues
- **v1.0.0** - Initial release with all 13 reports and core features

---

## Support & Documentation

- **README.md** - Installation and usage guide
- **MODULE_REVIEW.md** - Technical review
- **IMPLEMENTATION_GUIDE.md** - Implementation guide
- **FEATURES_QUICK_REFERENCE.md** - Quick reference
- **POS_FEATURES_IMPLEMENTED.md** - POS features documentation

---

**End of Module Code Reference**



