๐Ÿ“– Introduction

B+ Accounting ERP is a cloud-based accounting software designed for Indian businesses. It supports double-entry bookkeeping, GST compliance, inventory management, multi-company/multi-financial-year operations, and role-based access for teams.

Unlike traditional desktop-only accounting software, B+ Accounting ERP runs entirely in your browser โ€” on any device, any operating system, from anywhere. Your data lives securely in a managed database with automatic backups, full audit logs, and hardened security against CSRF, XSS, and SQL injection.

๐Ÿ› ๏ธ Installation & Setup

When you first deploy the application, visit /install.php to run the database schema installer. This will create all tables and seed them with sample data:

  • 25 ledgers (Cash, Bank, Customers, Suppliers, Expenses, Tax, Capital)
  • 6 stock items (Laptop, Mouse, Keyboard, Monitor, Chair, Printer)
  • 33 sample vouchers across FY 2024-25
  • 1 demo company and financial year
Default login: Username admin / Password password. Change this immediately after first login.

Database credentials are stored as environment variables (DB_HOST, DB_USER, DB_NAME, DB_PASSWORD). There is no need to edit config files directly.

๐Ÿ” Login & Users

Navigate to /login.php and enter your username and password. The system checks your credentials against a bcrypt-hashed password. On successful login, your session is established with company, financial year, and role context.

After login, the Dashboard shows a summary of your companyโ€™s financial health. The sidebar on the left provides navigation to all modules. The top bar on the right lets you toggle light/dark mode and access your account menu.

Rate Limit: After 5 failed login attempts, your IP or username is locked out for 15 minutes. This prevents brute-force attacks.

๐Ÿ‘ฅ User Roles & Permissions

There are four roles, each with escalating permissions:

RoleCan create vouchersEdit/cancelManage mastersAdmin
Adminโœ“โœ“โœ“โœ“
Accountantโœ“โœ“โœ“โœ—
Staffโœ“โœ—โœ—โœ—
Viewerโœ—โœ—โœ—โœ—

Only Admins can create new users, change company settings, run the database backup, and view the full audit log. Accountants can edit and cancel existing vouchers. Staff can only create new vouchers. Viewers can only view reports.

Users are created under Admin โ†’ Users. Each user belongs to a single company and sees only that companyโ€™s data.

๐Ÿ“’ Ledgers & Groups

Before you record any transaction, you need a Chart of Accounts โ€” this is the backbone of your accounting system. It consists of Groups (categories) and Ledgers (individual accounts).

Groups

Go to Masters โ†’ Groups to view or create groups. Common groups include: Assets, Liabilities, Income, Expenses, Direct Income, Indirect Expenses, Cash-in-Hand, Bank Accounts, Sundry Debtors, Sundry Creditors.

Ledgers

Go to Masters โ†’ Ledgers to create individual accounts. Each ledger belongs to one group. For example: โ€œHDFC Bankโ€ belongs to โ€œBank Accountsโ€, โ€œABC Customerโ€ belongs to โ€œSundry Debtorsโ€.

Opening Balance: You can set an opening Dr/Cr balance when creating a ledger. These balances are automatically included in all reports and dashboard totals.

Ledgers can be set as Active or Inactive โ€” inactive ledgers no longer appear in voucher entry dropdowns but remain in reports for historical data.

๐Ÿ“‹ Vouchers (A-Z)

Every financial transaction is recorded as a voucher. B+ Accounting ERP supports all standard voucher types:

Payment Voucher

Records an outgoing payment. Typical use: paying rent, salaries, or bills to suppliers.
Menu: Accounting โ†’ Payment

Enter the bank/cash ledger (Cr), the expense/liability ledger (Dr), the amount, and narration. The system automatically validates that total Dr equals total Cr.

Receipt Voucher

Records an incoming receipt. Typical use: receiving money from customers or cash deposits.
Menu: Accounting โ†’ Receipt

Enter the bank/cash ledger (Dr), the income/asset ledger (Cr), the amount, and narration.

Journal Voucher

General journal entries for non-cash transactions. Typical use: year-end adjustments, depreciation, provision entries, inter-ledger transfers.
Menu: Accounting โ†’ Journal

Contra Voucher

Transfers between bank and cash accounts. Typical use: cash deposit to bank, cash withdrawal from bank, bank-to-bank transfer.
Menu: Accounting โ†’ Contra

Both ledgers must belong to Cash-in-Hand or Bank Accounts groups.

Sales Invoice

Records a sale of goods or services.
Menu: Sales & Purchase โ†’ Sales Invoice

Choose a party (Sundry Debtors), select stock items (with quantities), and the system auto-calculates GST based on the itemโ€™s configured rate. You can also add additional ledger entries (like shipping, discount) as separate lines.

GST Auto-calculation: For interstate sales, IGST is applied. For intrastate, CGST + SGST is applied. The system determines this based on the ledgerโ€™s GST type (unregistered / registered / composition).

Purchase Bill

Records a purchase of goods or services.
Menu: Sales & Purchase โ†’ Purchase Bill

Works exactly like Sales Invoice but with a party from Sundry Creditors. GST is calculated automatically.

Debit Note

Issued when you return goods to a supplier or receive a price reduction.
Menu: Sales & Purchase โ†’ Debit Note

Credit Note

Issued when a customer returns goods or you grant a price reduction.
Menu: Sales & Purchase โ†’ Credit Note

Reference Numbers

Every voucher gets an auto-generated number (e.g., PMT/2024/00012). You can also add a manual reference number (e.g., cheque number, invoice number) in the Ref No field.

โš–๏ธ Double-Entry Rules

Every voucher must have at least two entries โ€” one debit and one credit. The total of all debits must equal the total of all credits.

  • Assets: Increase = Dr, Decrease = Cr
  • Liabilities: Increase = Cr, Decrease = Dr
  • Income: Increase = Cr, Decrease = Dr
  • Expenses: Increase = Dr, Decrease = Cr

The system automatically checks this balance and refuses to save a voucher if Dr โ‰  Cr. If you see an error message, review your entries and amounts.

Remember: For every transaction, something always receives (Dr) and something always gives (Cr).

๐Ÿ—‘๏ธ Cancelling Vouchers

Cancelled vouchers are not deleted from the database. They are soft-cancelled โ€” marked with is_cancelled = 1 and their entries are excluded from all financial reports automatically.

To cancel a voucher: Go to Accounting โ†’ All Vouchers, open the voucher, click the red Cancel Voucher button. The action is logged in the audit log.

Important: Once a voucher is cancelled, it cannot be edited. Cancelled vouchers are not included in GST reports, trial balance, or any other financial statement. They remain visible in the full voucher list with a โ€œCANCELLEDโ€ tag.

Editing non-cancelled vouchers: Admin and Accountant users can edit Payment, Receipt, Journal, and Contra vouchers. Sales and Purchase invoices cannot be edited (you must cancel and re-create).

๐Ÿ” Recurring Vouchers

Recurring vouchers let you automate repetitive transactions like rent, EMIs, subscriptions, or salaries. You create a template once, and then post it when needed.

Menu: Accounting โ†’ Recurring

  • Create a template with a name, voucher type (Payment/Receipt/Journal/Contra), frequency (Monthly/Weekly/Quarterly/Yearly), and start date.
  • Add the accounting entries (Dr/Cr) the same way you would in a regular voucher.
  • Post Now โ€” creates one voucher immediately using the templateโ€™s next run date.
  • Run Due Now โ€” auto-catches up and creates all vouchers whose next run date has arrived (or is past due).
  • You can pause, resume, or delete templates at any time.
End dates: You can set an optional end date. The template will automatically deactivate once its next run date crosses the end date.

Posted vouchers are linked to the template via a REF- number. The template tracks a counter of how many times it has been posted.

๐Ÿ“ฆ Inventory

Inventory is managed under Masters with stock items, units, and groups.

Stock Items

Each item has a name, HSN code (for GST), purchase rate, selling rate, and opening quantity. When you create a Sales or Purchase voucher with item lines, the stock quantity is automatically updated.

Stock Summary

Go to Reports โ†’ Stock Summary to see current quantities, purchase value, and selling value. Use the Low Stock filter to see items that have dropped below their minimum threshold.

Stock Groups: Items are organized under Stock Groups (e.g., Electronics, Furniture). This helps with grouping in reports.

Units

Define units like "Pcs", "Kg", "Box", "Dozen" under Masters โ†’ Units. Each unit can have a decimal precision.

๐Ÿ‡ฎ๐Ÿ‡ณ GST

Indiaโ€™s GST system is fully integrated. GST rates are configured on each stock item (0%, 5%, 12%, 18%, 28%). When a Sales or Purchase voucher includes items, the system auto-calculates the tax split.

GST Calculation

  • Intra-state (same state): CGST + SGST โ€” equal split of the total GST rate.
  • Inter-state: IGST โ€” full GST rate applied as a single component.

The tax ledger IDs are determined by the companyโ€™s GST configuration (if GST is enabled). The company settings page lets you set your GSTIN, state, and whether GST is applicable.

GST-Enabled Items

Stock items are linked to HSN codes. When you create an invoice and add items, the HSN code is stored on the invoice line item.

Tax Invoice numbering: Sales and Purchase vouchers use their own auto-incrementing numbering series (e.g., SAL/2024/00001).

๐Ÿ“Š GST Reports

Go to Reports โ†’ GST Reports to access:

  • GSTR-1: Outward supply (sales) report with invoice-level detail, total taxable value, and tax breakdown per rate.
  • GSTR-3B: Summary of outward and inward supplies with tax payable and input tax credit (ITC).
  • HSN Summary: HSN-wise summary of goods sold with quantity, value, and tax rate.

All reports use date range filters. You can export any report to CSV for further processing in Excel. All GST reports respect cancelled vouchers and exclude them.

๐Ÿ“‘ Sales Orders

A Sales Order (SO) is a pre-invoice document โ€” a commitment from the customer to buy goods. It is not an accounting entry. It does not affect stock or GST until a Sales Invoice is raised against it.

Menu: Sales & Purchase โ†’ Sales Orders

  • Choose a customer ledger (Sundry Debtors).
  • Add item lines with quantities. The expected total and GST is computed.
  • Status: Open โ†’ Partial (partial invoice raised) โ†’ Closed (fully invoiced) โ†’ Cancelled (order cancelled).
  • Cancel an order at any time. Only open/partial orders can have invoices raised against them.
Auto-numbering: SOs are auto-numbered (e.g., SO/2024/00001). The next number is per-company, per-financial-year.

๐Ÿ“‹ Purchase Orders

A Purchase Order (PO) is a pre-bill commitment to a supplier. It works like a Sales Order but for your purchases. It does not affect stock or GST until a Purchase Bill is received.

Menu: Sales & Purchase โ†’ Purchase Orders

  • Choose a supplier ledger (Sundry Creditors).
  • Add item lines with quantities. The expected total is computed.
  • Status tracking: Open โ†’ Partial โ†’ Closed โ†’ Cancelled.

๐Ÿ“ˆ All Reports

B+ Accounting ERP generates the following financial reports, all available under the Reports section in the sidebar:

ReportWhat it showsKey filters
Trial BalanceAll ledgers with their closing Dr/Cr balancesDate range (from / to)
Profit & LossIncome vs expenses, net profit or lossDate range
Balance SheetAssets, liabilities, and equity as of a dateAs-of date
Ledger ReportFull transaction history for one ledgerLedger + date range
Cash FlowOpening/closing cash, receipts, paymentsDate range
Day BookAll vouchers for a single dayDate
Outstanding ReceivablesAmount owed by each customerAs-of date
Outstanding PayablesAmount owed to each supplierAs-of date
Aging AnalysisAR/AP split by 0-30/31-60/61-90/90+ daysType (receivables/payables)
Stock SummaryCurrent stock quantities and valuesLow-stock filter
Budget vs ActualBudget variance for income/expense headsPeriod (monthly/quarterly/yearly)
Bank ReconciliationBook vs bank balance with cleared statusBank ledger
GST ReportsGSTR-1, GSTR-3B, HSN SummaryDate range
Drill-down: In Trial Balance and Balance Sheet, every ledger name is clickable. Clicking it takes you directly to that ledgerโ€™s full statement with the same date range preserved.

All reports include a Print button that opens the browser print dialog. You can also use your browserโ€™s Save as PDF feature to download the report.

CSV Export

Most reports support CSV export via a csv=1 URL parameter. The file is generated with a UTF-8 BOM so Excel opens it correctly. Use the Export link on the report page.

๐Ÿฆ Bank Reconciliation

Bank Reconciliation helps you match the transactions in your books with your actual bank statement.
Menu: Reports โ†’ Bank Reconciliation

  • Select a bank ledger (e.g., HDFC Bank, ICICI Bank).
  • The system shows all voucher entries for that ledger, along with their current cleared status.
  • Tick the checkbox for each entry that appears on your bank statement.
  • As you tick, the Book Balance and Bank Balance update in real time. The Difference is highlighted in red if it is non-zero.
  • Save the reconciled list to update the cleared status.
Start and end dates: The reconciliation is scoped to a date range. You can reconcile month by month for clarity.

If you use Bank Import (vouchers/bank_import.php), you can also import the bank statement and auto-match vouchers before reconciliation.

๐Ÿ“… Aging Analysis

Aging breaks down your receivables or payables into time buckets: 0-30 days, 31-60 days, 61-90 days, and 90+ days. This helps you understand which invoices are overdue and by how much.

Menu: Reports โ†’ Aging Analysis

  • The system uses FIFO payment allocation to reduce outstanding balances. Older vouchers are paid first.
  • Opening balances are aged from the financial year start date.
  • Each party row shows the total outstanding and the amount in each bucket.
Click a party row to drill down into the ledger statement for that party and see every transaction behind the aging numbers.

๐ŸŽฏ Budget vs Actual

Set budgets for income or expense heads and compare them to actual performance in real time.
Menu: Reports โ†’ Budget vs Actual

  • Choose a ledger (income or expense head).
  • Choose the period granularity: Monthly, Quarterly, or Yearly.
  • Enter the budget amount for each period.
  • The system computes the actual revenue/expense from vouchers during each period and shows the variance.
  • Over-budget periods are highlighted in red. Under-budget periods are highlighted in green.
Why this matters: Budgeting helps you control spending, set revenue targets, and identify financial trends before they become problems.

๐Ÿ“ฅ CSV Import

Bulk import lets you add hundreds of ledgers or stock items at once using a CSV file.
Menu: Masters โ†’ CSV Import

  • Download the sample template for either Ledgers or Stock Items.
  • Fill in the CSV with your data (name, group, GSTIN, opening balance, etc.).
  • Upload the CSV and preview the rows before committing.
  • The system validates each row. Invalid rows are flagged with an error message.
Ledger Import: Requires: Name, Group Name, GSTIN (optional), Dr/Cr opening balance. The system creates the group if it does not exist.
Stock Item Import: Requires: Name, Unit, Group Name, HSN Code, Purchase Rate, Selling Rate, Opening Qty.

๐Ÿฆ Bank Statement Import

Import your bank statement CSV directly and turn rows into accounting vouchers.
Menu: Accounting โ†’ Bank Import

  • Upload a CSV exported from your bank (supports Date, Description, Withdrawal/Deposit columns, or Amount + Type).
  • The system auto-detects headers, parses DD/MM/YYYY dates, and shows a preview.
  • Already-recorded vouchers are auto-matched and flagged. New rows need a contra ledger assigned.
  • Withdrawals become Payment vouchers; deposits become Receipt vouchers.
  • Click Commit to create the vouchers. Only selected rows are imported.
Re-import safety: If you re-import the same CSV, already matched rows are automatically skipped โ€” no duplicate entries.

Maximum 1000 rows per import. Only .csv and .txt files are accepted (2 MB limit).

๐Ÿ’พ Database Backup

Go to Admin โ†’ Backup to download a complete SQL dump of your companyโ€™s data. This includes all tables, all records, and all data โ€” a single-click export.

Admin only: Only Admin users can run the backup. The file is generated as a downloadable SQL file with all INSERT statements.

Back up before financial year lock, before major changes, or before month-end closing. Store the SQL file in a safe location.

๐Ÿ” Audit Log

Every create, edit, delete, cancel, and login action is logged with the user, timestamp, IP address, and a description of what happened.
Menu: Admin โ†’ Audit Log

The log shows the action type (e.g., CREATE, UPDATE, DELETE, LOGIN_FAILED), the table involved (e.g., vouchers, ledgers), the record ID, the user who performed it, and the exact IP address.

Why this matters: If a number looks wrong, you can trace exactly who changed it and when. This is critical for compliance and internal controls.

๐Ÿ”’ Security Features

B+ Accounting ERP is hardened against common web application vulnerabilities:

  • CSRF Protection: Every form has a unique token. Tampered or missing tokens are rejected (HTTP 419).
  • XSS Prevention: All output is escaped with htmlspecialchars() before rendering. No user input is rendered raw.
  • SQL Injection: All database queries use PDO prepared statements. No string concatenation into SQL.
  • IDOR Protection: Every query is scoped by the current user's company_id. Users cannot access data from other companies by changing IDs.
  • Password Hashing: Passwords are stored with bcrypt. They are never stored in plaintext.
  • Login Rate Limiting: 5 failed attempts per (username|IP) triggers a 15-minute lockout.
  • Session Management: Session ID is regenerated on login to prevent fixation. The session cookie is HTTP-only.

๐Ÿ›ก๏ธ CSRF & Rate Limit

CSRF (Cross-Site Request Forgery): An attacker cannot trick a logged-in user into performing an unwanted action. Every form submission requires a matching token from the session. The token is regenerated on login and rotation.

Rate Limiting: Failed login attempts are counted per username or IP address. Once the count reaches 5, the account is locked for 15 minutes. This prevents both brute-force attacks and credential-stuffing.

What to do if locked out: Wait 15 minutes and try again. If you still have issues, contact your Admin user.

Browser session: If you leave the page idle for a long time, your session may expire. Simply log in again. The CSRF token is new on every login.