IMPACT ERP LITE - full program files (final version, 18-Oct-2026)

INSTALL
1. Stop Apache in XAMPP.
2. Rename your old folder C:\xampp\htdocs\ERPLITE to ERPLITE_OLD (keep it as a backup).
3. Copy this ERPLITE folder to C:\xampp\htdocs\ERPLITE
4. Start Apache + MySQL, open http://localhost/ERPLITE/  and press Ctrl+F5 once.

Your data is in the MySQL database (impact_erp), not in these files - it is not touched.
If your MySQL user / password is not root / blank, change the 4 lines at the top of db.php.
The lib folder (PDF maker) must stay inside ERPLITE.

NEW IN THIS VERSION - Features > Vch Numbering
  Create        : new number series for any entry (Sales, Purchase, Receipt, Payment, Contra, Journal,
                  Cr / Dr Note, Memo, Sales Return, Purchase Return, Quotation) - prefix, suffix, width,
                  prefill zero, start no, restart yearly / monthly / never, manual numbering,
                  allow duplicate, separate numbers for cash / credit, print layout.
  Display       : list of all series with the next number.  Enter = alter, Alt+C = create, Del = delete.
  Print Design  : design your own bill / voucher / note print - A4, A5, 3" and 4" thermal, 6" laser,
                  any custom size. Add any field anywhere (click or drag), text, logo, watermark,
                  UPI QR (with bill amount), terms, lines, boxes, tax summary; choose font, size,
                  bold, colour, items-table columns. Save, tick Default or give it to a series.
                  Bills then print with that design; "Classic Format" button still gives the old print.
  Settings > Sales : new "UPI ID (for QR on bill)".

NEW IN THIS VERSION (18-Oct-2026, evening)
  Series list   : Sales / Purchase / Returns / Quotation / Voucher / Cr-Dr Note screens show a "Select Series" list when
                  opened (only if that entry has 2 or more series). The chosen series stays for all next bills; change it
                  only by hand in the Series box.
  Dashboard     : menu by keyboard - cursor starts on Entry. Down / Up move, Right or Enter open, Left closes,
                  Esc closes the open menu (Esc with no menu open = Quit). Daily Sales week now moves with Ctrl+Left / Ctrl+Right.
  Menus         : Features > User  and  Company > Backup (names swapped).
  Master > Item : Multi Item (type many items in one sheet) and Item Import (from Excel .xlsx / .csv, with template).
  HSN code      : 4, 6 or 8 digits are accepted.

UPDATED: Master > Item
  Multi Item    : Create AND Alter. Filter (Group, Brand, Code, Item Name, Rack, Code From-To, Advanced Filter) + Load (Alt+L)
                  brings items into the sheet; change any cell and Save (Ctrl+S). Empty rows at the end create new items.
                  Validation tick, Entry / Code / Name / Barcode wise order, Prefix / Suffix + Copy / Paste into selected rows,
                  Carry Item Details, Ctrl+V paste from Excel, Columns button, Total Items + Editing / Creation Mode.
  Item Import   : Item Importer - Browse file (.xlsx / .csv / .txt), Delimiter (Auto, Fixed Width, Comma, Tab, Semi Colon,
                  Space, Other), Set Format (Particulars + Position, save named formats), Import To (Group, Brand, Model,
                  Rack), Item Name / Print Name = Brand + Model + Item Name ..., Clear Duplicate Item code,
                  Check (F5), Add (new items), Update (existing items by Item Code / Item Name; Item New Code changes the code).

NEW: USERS, COMPANY, FINANCIAL YEAR, BACKUP
  Login         : login.php - Company / Year, User, Password. (One company + ADMIN without password = opens straight away, as before.)
  Features>User : User Creation / Alteration - user type, password, rights tree (Entry / Master / Report / Features / Company,
                  with Create, Alter, Delete, Print, Change Date, Change Rate, Show Profit ...), fixed series per entry,
                  Max Discount %, Back Date Days, User Limit (number of active users). Set a password for ADMIN first.
  Company       : Company Create / Alter (every company = its own MySQL database), Security Control password,
                  Financial Year (Alt+F2 on the dashboard = change company / year), Split Financial Year
                  (new database for the new year, OR same database: remove old entries, closing stock & balances = opening),
                  Backup / Restore.
  Backup        : database only (.sql.gz). Backup path, automatic backup on Open / Close / Every N hours, Every Time or Daily Once,
                  Auto Delete after N days, e-mail (SMTP, Gmail App Password), FTP to cPanel folder, or a web link:
                  copy bk_receive.php to your cPanel File Manager folder, change its KEY, give the link in Backup settings.
  Folder "data" (company list) and "backup" are made automatically inside ERPLITE - keep them when you copy new files.

NEW: ACCOUNTS MENU (From date - To date)
  Ledger, Day Book, Cash Book, Bank Book, Trial Balance, Profit & Loss A/c, Balance Sheet (As on), Export to Tally.
  Every bill now also posts to its Sales / Purchase ledger, GST ledgers, bill sundry and round off ledgers (from Tax Type / Bill Sundry masters).
  Export to Tally: TallyPrime or Tally.ERP 9 XML - 1. Masters (groups, ledgers + opening, units, stock items) 2. Vouchers,
  "Item Details" (invoice with stock items) or "Accounts Only". Import in Tally: Alt+O > Masters, then Transactions.

NEW: SERIES / FILTERS / OPTIONS (19-Oct-2026)
  Displays : Sales, Purchase, Sales Return, Purchase Return, Quotation display -> Advanced: Series, Group, Brand, Barcode, Model, HSN, Batch, Rack
             (Detailed view shows only the matching item lines; Series / Group / Brand / Barcode columns can be unhidden).
             Voucher display -> Series.  Credit / Debit Note display -> Series.  Stock Journal / Checking display -> Group, Brand, Barcode.
  Entries  : "Options" button next to Save (Alt+O) with ticks, kept for each user and screen:
             Ask "Save?", Ask Received Amount, Ask "Print?", Print at once, keep same date, keep same party, Show Profit columns (Sales),
             keep narration / GST nature (Voucher), keep reason (Cr / Dr Note).

==== SALES ENTRY OPTIONS (Options button / Alt+O) ====
Carry: Item, Item Group, Brand, Model, Disc Per, Disc Amt, CD Per, Rate, PriceList
Columns: Skip Disc %, Lock Disc Columns, Skip Rate, Allow Zero Rate, Skip Batch No
Load: Group, Brand, Model, Rack (show the column), Sales through (party's last agent)
Item entry: Big Item List, Item Code First, '1' As Default Qty
Barcode / Qty: Normal-Barcode, Get Qty-Barcode, Get Qty 3 decimal item, Get Qty-Normal,
               Get Rate 3 decimal, Add Qty-Barcode, Add Qty to Existing item
Others: Credit As Default
Rounding: Amount, Tax amt Rounded to N Paise / Totamt Rounded to N Paise (0 = normal)
Same options in Purchase, Sales Return, Purchase Return, Quotation. Saved per user.

==== VCH NUMBERING - SERIES RULES (Features > Vch Numbering > Alter) ====
Allowed item - tax / Allowed Item Group : only those items in this series (blank = all)
Allowed Ledger Group : party / ledger list limited to those groups (+ sub-groups); vouchers keep cash/bank
A/c Head for tax - Discount After : less sundries after tax (DISCOUNT) posted to this ledger
Rate Format : 0 / 0.00 / 0.000 decimals of the Rate column
Split Tax From Rate : ticked = master sale rate less tax goes in Rate, a typed rate is taken with tax
                      not ticked = master sale rate comes in Rate as it is

==== BATCH (Features > Settings > Item > Batch) ====
Enable Batch = Yes  -> Item Create/Alter: "Batch Item" Yes/No (also Multi Item / Item Import column "Batch (Y/N)")
                    -> Batch No column shown in Sales, Purchase, Returns, Quotation; mandatory for batch items
Sales / Purchase Return: picking a batch item opens the batch list (batch, exp, MRP, stock) - Enter takes it
Auto Batch No + Prefix (+ Prefix Series wise): blank batch in Purchase / Sales Return gets the next number
MRP wise Batch No: blank batch = MRP (MRP 120 -> batch 120)
Batch No as Barcode no: scan a batch no in any bill -> that item with that batch
Qty Wise Barcode no: Purchase Bill > Sticker (Alt+K) gives one label per qty
Show Last Rates list of the party (Sales tab): after an item, last rates to that party - Enter takes the rate
Reports: Sales / Purchase Summary -> "Batch Wise" and "Item vs Batch", Batch filter; Stock > Batch Wise Stock

==== TAMIL BILLING + RATE LISTS (Features > Settings > Sales) ====
Tamil Billing = Yes : Item Create/Alter "Tamil Name" (type with Windows Tamil keyboard, Win+Space), also Multi Item / Import column
                      Item list in bills shows Tamil name (search by Tamil too); Tamil Name column in the bill grid
Print Item Name in Tamil = Yes : printed bill uses the Tamil name (English if blank)
Show Rate list of old,new stocks : after an item, stock lots by MRP (OLD / NEW) with sale rate, purchase rate, date, stock
Show Last Rates list of the party : last rates to the party with MRP
Show Master Rates at Rate column : cursor in Rate -> bold bar on top: Sale Rate, MRP, Special 1/2, Purchase, Cost

==== SERIES IN ALL ENTRIES ====
Series box is shown in every entry: Sales, Purchase, Sales Return, Purchase Return, Quotation, Receipt, Payment,
Contra, Journal, Credit Note, Debit Note, Stock Journal, Stock Check.
Stock Journal / Stock Check now have their own series in Vch Numbering (prefix, width, manual, restart ...)
and a Series filter in their Display. When an entry type has 2 or more series, the Select Series list opens
when the entry opens; next entries keep it until changed in the Series box.
User creation: series per user also for Stock Journal / Stock Check.

==== BILL KEYBOARD FLOW + BANK FOR CARD / UPI ====
Series list -> Enter -> Date -> Enter -> Cash / Credit (Space or <- -> changes) -> Enter -> Party Name
Grid: Group / Brand / Model columns (when shown) come before the item: type / pick from the list (blank = all),
      Enter = next; the item list then shows only that group / brand / model.
Options: Load Group / Brand / Model = column shown and a new row starts with the value of the row above;
         Skip Group / Brand / Model Column = cursor jumps over it.
Received box: + (button or + key) at Card / UPI = choose the Bank A/c that gets the money
              (CARD / UPI COLLECTION = settle later in Card / UPI Settlement). Last bank is remembered.

==== POS BILLING + MEMBERSHIP POINTS ====
Series box: Enter -> Date (all entries).
Settings > Sales > Enable POS = Yes -> Entry > Sales > "Sales Bill - POS" (pos.php)
  Series -> Date -> Cash/Credit -> Cell No: known cell = name, area, points load; new cell = type Customer, Area
  New customer saved as ledger under POS CUSTOMER (sub group of SUNDRY DEBTORS) with Membership = Yes.
Ledger master: Membership Yes/No.
Master > Membership Points: on/off, 1 point = Rs N, whole / decimal points, point value,
  Calculate on All items / ticked Groups only / ticked Brands only. Points saved on every Sales Bill / Return of a member.
Report > POS Report: POS Sales Details, Membership Points (per customer: bills, sales, points, value).

==== POS SCREEN (simple) ====
Sales Bill - POS shows only: Cell No, Customer, Area (+ Bill No / date), the item grid and Net Amount.
Series (kept / default), date (today), Cash, tax, sundry boxes are hidden. Grid columns and Options are the same as
the normal Sales Bill (right-click heading / Options button change both).
Last empty row Enter -> Received Amount box -> Enter = Save (no "Save?" question) -> Print? Y / N -> next bill.

POS totals: shiny light tiles 3" x 2" - Items, Total Qty, You Save (MRP value - bill), Net Amount.

==== OPEN FORMS (task bar) + DIRECT PRINT ====
Every screen opened from the Dashboard stays open as a form; task bar at the bottom shows them.
  Sales / POS / Purchase / Returns / Quotation / Voucher / Notes / Stock entries open as a NEW form every time
  (Sales Bill 1, Sales Bill 2 ...) - several bills at once. Bill No is given when saved: first saved = first number.
  Shift+Tab = next open form (like Alt+Tab)   Alt+M = minimise -> Dashboard   Alt+1..9 = form number
  Esc in a form = Quit box, closes only that form.  x on the task bar closes a form (asks if not saved).
  Dashboard Customize is now Alt+D.
Print Yes after save / Print buttons print directly with the set design - no print page opens.
  For printing without the browser print box: start Chrome / Edge with  --kiosk-printing
  e.g. shortcut target:  "C:\Program Files\Google\Chrome\Application\chrome.exe" --kiosk-printing --app=http://localhost/ERPLITE/

==== CURSOR AT SERIES + BILL TABS ====
Every entry opens with the cursor in Series (no pop-up list): Up/Down = change series, Enter = Date.
Sales Bill and Sales Bill - POS: bill tabs on the top bar (hold a bill, bill the next customer):
  F8 = new bill tab · F9 = next tab · click a tab = go · x = close tab
  Saving a tab's bill closes that tab and goes back to the bill on hold. Bill No = order of saving.

==== PURCHASE BILL - AI IMPORT (photo / PDF of the supplier's bill) ====
Setup once: Features > Settings > Purchase > AI API Key (Anthropic, console.anthropic.com) and AI Model (Opus 5.5 = most accurate).
  Needs internet + PHP curl (XAMPP: extension=curl in php.ini). Big PDFs: raise upload_max_filesize / post_max_size in php.ini.
Purchase Bill > AI Import (Alt+I): choose / drop the JPG / PNG (several pages = several photos) or PDF > Enter.
  The AI reads supplier, invoice no / date and every line (qty, free, rate, disc, GST, MRP, batch, expiry).
  Review box: every line shows Our Item and how it was found:
    SUPPLIER NAME (learnt name of this supplier), OTHER SUPPLIER NAME, BARCODE, SAME NAME, NEAREST xx% (check it), NEW.
    Enter in Our Item = search / pick · Alt+C = create the new item (details from the bill come in the Alt+C screen)
    Supplier not in ledgers: Alt+C creates it (name, GSTIN, address from the bill).
    A red line ⚠ = qty x rate - disc does not match the bill's amount - check it.
  Alt+F = Fill Purchase: supplier, invoice no / date and rows are filled - check and Save.
  "Learn" tick: the supplier's name of the item is remembered (Master > Item > Supplier Item Names), next bill matches it at once.

==== EXCEL IMPORT - Sales / Purchase / Returns / Quotation ====
Button "Excel Import" (Alt+X) in every bill screen: choose an Excel (.xlsx) or CSV file.
  The heading row is found by itself (first 25 lines). Usable headings (any order, others are ignored):
  Item Name / Item / Product / Description, Item Code / Part No, Barcode, HSN, Qty, Free, Unit,
  Rate / Price, Rate+Tax, Disc %, Disc Amt, GST %, MRP, Batch, Exp,
  Party / Supplier / Customer, GSTIN, Inv No / Bill No, Date  (party, inv no, date: first filled row)
  Rate blank = item master rate.  TOTAL rows are skipped.  Sample: samples\bill_import_sample.xlsx
  Same review box as AI Import: item found by Code / Supplier name / Barcode / Same name / Nearest,
  Enter = pick another item, Alt+C = create new item (details from the file), Alt+F = fill the bill.
Master rates in the import file: Sale Rate, Special 1 (Wholesale / Dealer Rate), Special 2, Cost, (Sales bill: Purchase Rate)
  are shown in the review box (green = differs from master, "now" = master today), filled into Alt+C new item,
  and with "Update item master rates" (Alt+U, ticked) the item master is updated on Fill. Purchase: Sale Rate -> new sale rate column.

==== BILL BY BILL (references) ====
Ledger: Bill By Bill = Yes -> Enter (or Alt+R / "Old Refs") opens Old References of the Opening Balance:
  Ref No, Bill Date, Due Days, Amount, Dr/Cr. What is not given stays On Account.
Sales / Purchase (credit) for a Bill By Bill party: the bill is saved as a New Reference (purchase = supplier inv no);
  money taken with a credit sales bill is adjusted against it; Sales / Purchase Return = Against that bill.
Receipt / Payment / Journal: after the amount of a Bill By Bill party, the Bill-wise box opens:
  pending bills (old refs + bills) with due date - Enter = adjust (pending or what is left), Alt+A = oldest first,
  New Ref / Advance line, rest = On Account, Ctrl+Enter = OK, Esc = all On Account. Shift+Enter skips the box.
Entries before Bill By Bill was set, and money without a reference, show as On Account.
Report: Outstanding > Bill-wise Outstanding (pending bills, due date, overdue days, On Account per party).
Bill-wise box: the amount is spread on the pending bills by itself (oldest first). Change one bill's amount
  (e.g. bill 1150 -> 1000) and the balance moves to the next bills by itself. Money stays On Account only when
  typed in the "On Account" box (or Esc = all On Account).

==== LEDGER VIEW OPTIONS (Accounts > Ledger) ====
Filter screen: Ledger Name, Area Name, Ledger Group, Cell No (Ledger Name blank = every matching ledger one after another),
Voucher Type, Remarks (contains), Amt Filter All / DR Only / CR Only.
Ticks: Monthly Total, Day total lines, Without Open Bal., Load items, With Item details, Rate,Qty at Vch No col, Rate + Tax,
Cancelled only, Company Address (print), Line Space, Particulars length.
Narration: With Narration, Narration in Remarks Column (untick = narration printed under the entry), Remarks in Bold, Remarks Length.
Running balance always counts every entry, even when a filter hides some lines.

==== FIX: Sales bill Options - Totamt Rounded to (Paise) ====
Net amount changes at once when the option is changed (no need to edit a row).
Values above 100 allowed now: 50 = 50 paise, 100 = Rs 1, 500 = Rs 5, 1000 = Rs 10 (max 10000 = Rs 100). 0 = as per Settings.
Totamt Rounded to now also rounds every row's Tot Amt (e.g. 55.01 -> 55.00 with 100); the taxable amount and tax are worked back from it.

==== CURSOR IN FIRST BOX + FASTER ITEM LIST ====
Alt+C / Alt+A pop-ups (new item, new customer / supplier, new ledger in vouchers) and every master screen: cursor blinks in the first box.
Item list in entries: all items are loaded once into the browser - typing filters at once (no server trip per key). Reloads after save / new item / every 3 minutes.
db.php: DB_HOST is now 127.0.0.1 (much faster than 'localhost' on Windows; falls back to localhost by itself),
one connection per page, and table columns are checked with ONE query instead of one per column -> every page and search is quicker.

==== ITEM IMPORT: items already there are UPDATED, not skipped ====
Tick next to Add (Alt+W): "Already there items: Write (update) - don't skip" (on by default, remembered).
Add = new items are created + item names already in the master get the file's details (rates, MRP, tax ...). Untick = old way (skip).

==== SALES: ITEM STOCK + AGE WISE PURCHASE DETAILS ====
Item row: a green STOCK chip above the Qty box (stock now + stock after this bill; red when it goes below zero).
Qty column + Space: age wise purchases of the item - Inv No, Date, Age (days), Supplier, P Rate, Disc %, Net Rate, Net + Tax, MRP, Qty,
Balance (stock still left from that purchase, FIFO - green rows), Sale Rate given in that purchase. Enter = take that Sale Rate + MRP (purchase: P Rate). Esc = close.
Same in Purchase, Returns, Quotation and POS.

==== FIX: Allow Duplicate Item Name / Code (Settings > Item) now really works ====
The database had Item Name and Item Code as UNIQUE, so duplicates could never be saved (import / item create). Removed once automatically
(normal index kept for speed). Item Import with "Allow Duplicate Item Name = Yes": a same-name row is a NEW item unless it is the same item -
same Item Code, or (no code in the row) same Name + MRP + Sale Rate + Unit -> then updated / skipped. Importing the same file again adds nothing twice.
"Allow Duplicate Item Code = Yes": a used code no longer stops the row. Big imports: auto code worked out once per batch (faster).

==== SALES ORDER / PURCHASE ORDER / PENDING REPORTS / LOAD BUTTONS ====
Entry > Sales Order (Create / Display / Pending Report) and Entry > Purchase Order (Create / Display / Pending Report).
Same screen as the bill, own numbering (Vch Numbering: Sales Order / Purchase Order series), no stock, no accounts. Alt+L in an order = Close / Re-open by hand.
Sales Bill buttons (yellow):  Quot (Alt+Q) = load a quotation · Order (Alt+R) = load a PENDING sales order (qty = still pending)
                              Purchase (Alt+P) = load a purchase entry (items, qty, batch; rates = sale rates)
Purchase Bill button: Order (Alt+R) = load a pending purchase order.   Sales Order button: Quot (Alt+Q).
The party's documents are listed when a party is chosen (else all). Customer is filled from the quotation / order when empty.
Report > Orders Pending (also Report > Outstanding menu): Sales / Purchase Order Pending - tabs Order wise, Item details, Customer / Supplier wise, Item wise;
Show Pending / Part billed / Completed-closed / All; Older than N days. Pending = order qty - qty billed from it.
Rights: Features > User > Entry > Sales Order / Purchase Order.

==== ORDER VALIDITY / EXPIRY REMINDER / PURCHASE ORDER FROM SALES ORDERS ====
Sales / Purchase Order: Valid Days box under Date (default: Settings > Sales > Order Valid Days = 30; 0 = never expires) - shows "till dd-mm-yyyy" / EXPIRED.
After the valid date the order expires: no longer pending, not loaded into bills. Alt+E (Extend button) on a saved order = extend by N days
(an expired order: N days from today). Re-open works again at once.
Reminder: Dashboard (Daily Reminder box + a pop-up once a day) lists pending orders expiring within Settings > Sales > Order Expiry Reminder days (3) and expired ones with balance.
Pending report: Valid Till, Days Left columns; Show = Expiring soon / Expired with balance.
Purchase Order: button From Sales Orders (Alt+R) = all pending sales orders ITEM WISE (SO pending, stock, already on PO, Qty to order = pending - stock - on PO);
tick items (Space, A = all, N = none), change Qty, Enter = loaded into this new PO at purchase rates.

==== STOCK LEVELS: MIN / MAX / RE-ORDER / MIN ORDER QTY ====
Item Create / Alter > Unit & Stock: Minimum Qty, Maximum Qty, Re-order Level, Min Order Qty (0 = not used). Also columns in Multi Item and Item Import.
Purchase Order > Auto Order (Alt+W): items at / below Re-order Level (else Minimum, else below Maximum) - Stock, On PO, Min, Re-order, Max, Min Ord Qty,
Last Supplier. Qty = Max (else Re-order / Min) - stock - already on pending POs, at least Min Order Qty and in its multiples.
Supplier picked first: only items last bought from that supplier are ticked. Space / A / N tick, type Qty, Enter = load.
Reports > Stock: Below Re-order Level, Below Minimum, Below Maximum (stock_levels.php): Stock, On PO, levels, Short by, Order Qty, Order Value; As On date; group / brand / item filters.

==== REGISTRATION / LICENCE ====
Company > Registration (register.php): shows the Machine Code (XXXX-XXXX). Customer sends Machine Code + Registered Name + users needed.
Key format: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX (25 letters/digits, 0-9 A-Z without I L O U) = licence users (1-127), valid till (or lifetime),
edition, serial + a check tied to the Registered Name and Machine Code. Make keys with IMPACT_KEYGEN (separate zip - never give it to customers).
Trial: 30 days, 1 system; a badge on the dashboard shows the days left. After the trial / expiry every screen goes to Registration.
Licence users = computers (IP) working at the same time. 2nd computer when all seats are used: "You have 1 user licence. Already user X is working on
computer Y (since hh:mm). Please logout there and continue - thank you! Otherwise please purchase one more licence." Logout frees the seat;
a computer idle 10 minutes is freed automatically. Any number of user names can be created.
Company Create / Alter: hidden Ctrl+L = licence box (registered to, licence users, software user names, valid till, machine code, systems in use now).
IMPORTANT: change the secret text in lic_inc.php (licSecret) in BOTH ERPLITE and IMPACT_KEYGEN before selling.

==== TEMPORARY EXTEND KEY (after the licence / trial ends) ====
Registration screen: Ctrl+C (hidden) = Extend Period box. Key for TODAY only:
  value 1 = dd + mm + first two digits of the year;  value 2 = dd + mm + last two digits of the year
  each value: even -> every digit x 2, odd -> every digit x 3, written one after another;  key = part 1 + part 2
  e.g. 20/10/2026: 20+10+20 = 50 (even) -> 5x2, 0x2 = "100";  20+10+26 = 56 (even) -> 5x2, 6x2 = "1012"  ->  key 1001012
  21/10/2026: 51 (odd) -> "153", 57 (odd) -> "1521" -> 1531521
Key alone = 1 day (today), key + L (1001012L) = 5 days. Once a day. IMPACT_KEYGEN shows the key for any date.

==== CONTINUOUS FINANCIAL YEARS (like Tally) ====
All years stay in ONE company database. Financial year = 01-04 to 31-03 (bill numbers restart every year as per Vch Numbering).
Alt+F2 (dashboard or any open form) = Change Period: From / To + quick buttons This Year, Last Year, Last 2 Years, Last 3 Years, Next Year.
Reports open on this period (one, two or three years). New entries take today's date, or the period's last date when today is outside it.
Balance Sheet: Profit & Loss A/c = opening (with earlier years' profit) + Current Period profit of the working period.
Alt+F3 = Change Company (was Alt+F2). Company > Financial Year Dates sets the company's year dates.
Company > Split Financial Year: Split Upto date, Update Stock Opening Balance, Update Ledger Opening Balance, Split -
default = Same database: entries up to the date are removed and closing stock / balances become the opening (backup taken first).

==== LAST ENTRY WARNING / CANCEL BILLS / SALES LIST OPTIONS ====
Every bill screen (Sales, POS, Purchase, Returns, Quotation, Orders): under Date "Last No 31 · 10-10-2026" = last entry of the series.
A new entry dated BEFORE it turns red, and Save asks: "Last Sales Bill No 31 was made on 10-10-2026. This bill date 05-05-2026 is BEFORE it - is the date wrong?"
Cancel button on a saved bill: number stays, items / stock / amounts / bill-wise refs removed (kept for Undo Cancel). Shows CANCELLED. Rights: Features > User > ... > Cancel.
Sales / Purchase / Return / Quotation / Order Display (list) options: Bill No from-to, Bill Time from-to, Series, User, Party/Cell, Party Group, Region/Area,
Tax Type, Rcpt Mode (Cash / Card / UPI / Bank / Credit not received), Through, Detail, Batch No, Remarks, Item, Code, Barcode, Group, Brand, Model, HSN, Rack,
Cash/Credit, Cancel / Not (Not Cancelled default, Cancelled only, All), Printed / Not, Against Order, B2B bills only. New columns: User, Status (Cancelled / Printed).
Vouchers already have Cancel and the Cancel Type filter.

==== COMPANY PASSWORD / BACKUP & RESTORE MESSAGES / QUICK CHANGE COMPANY ====
Company Alter > Security Control: no separate password - the company password is the ADMIN user's password of that company (change it in Features > User).
Backup Now: big green box "BACKUP TAKEN SUCCESSFULLY" (file, size, tables, rows) - Enter = OK. Restore: big green box "RESTORE SUCCESSFULLY" - Enter goes to the Dashboard.
Alt+F3 (or Company > Change Company) = quick logout, login screen opens with the company list (cursor in the list).
Logout is quick: the auto backup "when software Close" now runs after the login screen is shown.

==== GST PORTAL EXPORT / E-INVOICE / E-WAY BILL ====
Settings > Company: Place / City, PIN Code, E-Invoice (IRN JSON) Yes/No, E-Way Bill (JSON) Yes/No, E-Way Bill from Rs.
Report > GST > Portal Export (gst_export.php):
  GSTR-1  : one JSON for the portal (Returns > GSTR-1 > Prepare Offline > Upload) - b2b, b2cl, b2cs, cdnr, cdnur, hsn (B2B / B2C), doc_issue;
            Excel with Offline Tool sheets (b2b, b2cl, b2cs, cdnr, cdnur, hsn(b2b), hsn(b2c), docs); CSV per section or all CSV in a zip.
  GSTR-3B : summary (3.1, 4A5 ITC, 5, tax payable) Excel / CSV - the portal has no 3B upload, type the figures.
  E-Invoice: IRN JSON (NIC schema 1.1) of all B2B bills / sales returns of the period or one bill (Sales Bill button IRN JSON).
  E-Way Bill: bulk JSON for ewaybillgst.gov.in > Generate Bulk - vehicle no, distance, transporter typed per bill (Sales Bill button E-Way JSON).
Checks before upload: company GSTIN, party GSTIN, party PIN code (Ledger > Pincode), item HSN 4/6/8 digits. Cancelled bills are left out (counted in Documents Issued).

==== ONLINE SERVER (cPanel) ====
MySQL user root cannot be used on hosting. cPanel > MySQL Databases: make a database + user, add the user to the database (ALL PRIVILEGES).
Open https://yoursite/ERPLITE/setup_db.php (the "Database connection failed" page has the button), type host (localhost), database, user, password
-> it tests and writes db_config.php (an update never overwrites it). Setup locks itself once connected.
Each company is its own database: on hosting make the database in cPanel first, then Company Create with "use existing database".
Needs PHP 8.0 or newer (cPanel > Select PHP Version) with pdo_mysql, zip, mbstring.
Licence on a server: the Machine Code is the server's - make the key for it, or a key with "Any system".

==== AUTO SCREEN SIZE (every resolution) ====
Screens are made for 1440 x 860 and now scale by themselves to the screen: 1024x768, 1280x720/768/800/1024, 1366x768, 1440x900, 1600x900, 1680x1050, 1920x1080 ...
(small screens smaller, big screens bigger; the browser window size counts). Changes at once when the window is resized.
Ctrl+Alt+Plus = a bit bigger, Ctrl+Alt+Minus = a bit smaller (kept for this computer), Ctrl+Alt+0 = auto again. Printouts keep their real size.

==================== ADD-ON (Settings > Ctrl+C) ====================
Settings: press Ctrl+C (nothing selected) -> an "Add - On" button shows. Click it (or Enter):
  1. Delivery Challan (DC)   2. Order Processing   3. Cr / Dr Notes   4. Sticker Print   5. Membership Point
  Each has Yes / No (Space / Y / N, Enter = next, Alt+S = Save). ALL ADD-ONS ARE OFF (No) until you turn them on.
  No = its menus, reports and screens are hidden / blocked ("This Add-On is off"). Saved data is kept.
  - Order Processing No: Sales Order, Purchase Order, order pending reports, Order button in bills, order reminder.
  - Cr / Dr Notes No: Credit Note, Debit Note menus and history reports.
  - Sticker Print No: Item Sticker menu and the Sticker button in bills.
  - Membership Point No: Membership Point menu.
DELIVERY CHALLAN (DC) - Entry > Delivery Challan > Create / Display / Pending
  - Like a sales bill, own numbering (Voucher Numbering > Delivery Challan). Can load a Quotation or Sales Order.
  - No stock and no accounts effect. Stock goes out when the Sales Bill made from the DC is saved.
  - Sales Bill > DC button (Alt+Y) loads a pending DC (full or part). DC Pending report = Reports > Orders Pending.

==================== NEW SYSTEM : CREATE COMPANY / RESTORE / ATTACH ====================
First start on a new system (no company yet) -> "IMPACT ERP - New System" screen opens by itself:
  - Create Company (Ctrl+S): a new database is made, named it_erp_<year>_001; the next companies get 002, 003 ...
    (year = start of the financial year). First login: user ADMIN, no password.
  - Restore Backup (Alt+R): choose a .sql / .sql.gz backup -> choose the database to restore into.
  - Attach Data Folder (Alt+A): choose the old backup folder (ERPLITE\backup) - the latest backup of every company is listed; tick and restore.
  - Attach Database (Alt+D): a database already on this MySQL server (copied MySQL data folder / cPanel / phpMyAdmin import).
  The same three buttons are also in Company > Company Creation (ADMIN only).
If the database is already in this system: red warning "IT_ERP_2026_001 (NAME) ALREADY EXISTS - DO YOU WANT TO RESTORE?
  ALL ITS PRESENT DATA WILL BE PERMANENTLY DELETED". No = nothing changes. Yes = an automatic backup is taken first
  (green box "BACKUP TAKEN SUCCESSFULLY" + file name, folder ERPLITE\backup), then green box "RESTORE SUCCESSFULLY".
Online server (cPanel): make the database in cPanel > MySQL Databases first and TYPE its full name (cpaneluser_xxx) - it is not made automatically.

Settings screen: new light sky-blue design (pill tabs, white boxes with sky-blue focus ring, Yes = sky-blue / No = grey).

==================== COMPANY DELETE ====================
Company > Company Creation > choose a company > Delete Company (ADMIN only; not the company open now - Alt+F3 to another first).
  Green box "BACKUP WILL BE TAKEN FIRST" - Yes: a full backup is saved (ERPLITE\backup ..._before_delete.sql.gz),
  green box "BACKUP TAKEN SUCCESSFULLY", then the database is deleted ("COMPANY DELETED"). It can be brought back with Restore.
  "Remove from List" (old button) only hides the company - its database is kept.
FIX: "Unknown column 'recv_cash'" when saving a bill in a NEW company - the columns are now made automatically
  (an affected company is repaired by itself the next time any screen is opened).

==================== LATEST CHANGES ====================
- Delete Company now also for the company that is open: backup first (green box), delete, then the login company list opens.
- Settings and Backup screens: new light sky-blue layout (white cards, small Yes / No, Close (Esc) + Save (F10)). File: ui_light.css.
- Backup: Auto Backup / Local Path / Mail Config / cPanel (FTP) cards, Download Backup, Backup Now; Restore from a file or from the backup folder list.
- Dashboard menu: the cursor starts on Entry. Right = open, Left = close, Up / Down move only inside the menu you are in
  (a sub menu's lines go round inside it and do not jump to the next main menu).

==================== PRODUCTION (Add-On 6) ====================
Settings > Ctrl+C > Add-On > 6. Production = Yes  ->  Entry > Production > Create / Display (rights: Features > User > Production).
  Finished Goods (made, stock ADD) + Raw Materials (used, stock LESS, Rate = item Cost or Purchase rate) + Expenses (Amt, or % of raw value).
  Total production cost = raw material value + expenses.
  Cost % = share of the cost for each finished item (blank = shared by qty). Unit Cost = cost share / qty.
  Production % = finished qty / raw qty x 100, Wastage % = 100 - Production %.
  Update item Cost rate = Yes: the finished item's Cost in Item master becomes the unit cost.
  Alt+L Last Recipe: raw materials + expenses of the last production of that item, worked out for the new qty.
  Own numbering: Features > Vch Numbering > Production. Stock reports include production (like Stock Journal).
GRID DEFAULT COLUMNS (Show/Hide Columns > Default):
  Sales / Sales Return: Sno, Code, Item Name, Unit, Rate+Tax, Rate, Qty, Amount, Taxation, Tot Amt
  Purchase / Purchase Return: Sno, Code, Item Name, Unit, Qty, Rate+Tax, Rate, Disc %, Disc Amt, MRP, Sales, Amount, Taxation, Tot Amt

==================== PRICE LIST FOR A CUSTOMER ====================
Master > Price List > New (Customer) (Alt+N): the customer list opens - pick the customer - Cash bills / Credit bills / Both
  (optional: copy the rates from another list). A new price list "<CUSTOMER> CASH / CREDIT" is made and linked to that customer
  (Party Wise). Sales Bill uses it when that customer is picked: Cash bill = Cash list, Credit bill = Credit list
  (no list for that type = Sale Rate).
View Disc In Bill: the DISCOUNTED rate is loaded and the % is shown in the new "PL Disc %" column (not as bill discount).
Load Tax In Bill: the list (discounted) price = Rate + Tax; Rate is worked back without tax.
  e.g. MRP 45, 10% -> Rate+Tax 40.50, Rate 34.32 (18% GST), PL Disc % 10.

==================== E-INVOICE + E-WAY BILL THROUGH API (GSTZen) ====================
Settings > Company:
  E-Invoice API = Yes · API Token (GSTZen) · Auto IRN on Save = Yes / No · E-Way Bill with IRN = Yes · E-Way Bill from (Rs)
  Test first with the GSTZen sandbox token de3a3a01-273a-4a81-8b75-13fe37f14dc6 and a GSTZen demo seller GSTIN.
  Live: GSTZen account + your GSTIN added + e-invoice API user made on einvoice1.gst.gov.in with GSTZen as the GSP.
Sales Bill / Sales Return (B2B = party has GSTIN): button E-Invoice (Alt+I).
  Generate IRN: the bill (NIC schema 1.1) goes to GSTZen -> IRN, Ack No, Ack Date, Signed QR are kept with the bill.
  E-Way Bill too: tick it, give Vehicle No (or Transporter ID), Distance (0 = by PIN code) -> EWB No + valid till in the same call.
  Auto IRN on Save: after Save the IRN is taken at once; bills of E-Way Bill value and more ask the vehicle once (last one is filled).
  Errors from the GST system are shown and kept (Last try: ...). Needs internet and PHP curl (php.ini: extension=curl).
After the IRN: the bill cannot be altered or deleted. To correct: Cancel IRN (on the portal within 24 hours, or Cancel IRN URL in
  Settings) -> Cancel the bill (number kept) -> make a new bill.
Print: Classic format shows IRN, Ack No, Ack Date, E-Way Bill No and the E-Invoice QR code.
  Designed prints: Edit Design > "E-Invoice QR" button + fields E-Invoice IRN / Ack No / Ack Date / E-Way Bill No.
Before checking IRN: Settings > Company GSTIN, PIN code, Place; party GSTIN + PIN code (Ledger); item HSN 4/6/8 digits.

==================== E-WAY BILL API + GSTIN CHECK / AUTO FILL (GSTZen) ====================
Settings > Company: E-Way Bill API = Yes, E-Way Bill API URL, (Cancel E-Way Bill URL), GSTIN Details URL ({gstin} = the number). Same API Token.
Sales Bill > E-Way Bill button (Alt+W): Vehicle No (or Transporter ID), Distance (0 = by PIN), Mode, Transporter, LR No ->
  E-Way Bill No + Valid till kept with the bill (printed). B2B bills with E-Invoice API get the E-Way Bill with the IRN instead.
  After Save: bills of E-Way Bill value and more ask the vehicle at once (E-Way Bill with IRN = Yes).
  Cancel E-Way Bill: Cancel URL, or cancel on the portal (24 hours) and mark it here.
GSTIN check (always, no internet): 15 letters, state code and the CHECK DIGIT - a typing mistake is caught at once.
GSTIN auto fill (GSTIN Details URL set): Ledger > GSTIN -> Name (trade name), Print Name (legal name), Address, Area, PIN,
  State, PAN, Regn Type + status (Active / Cancelled / E-Way Bill blocked). Empty boxes are filled; Alt+G = fetch again and fill all.
  Sales Bill (new customer): GSTIN fills the name and address. Answers are kept 30 days (each API call is paid).

==================== GODOWN (Add-On 7) ====================
Settings > Ctrl+C > Add-On > Godown = Yes.
Master > Godown: godown name, short name, address, Primary (one only: opening stock and old entries are in it), Active.
Sales / Purchase / Returns / DC: new Godown column (after Item Name) - filled with the godown of the row above, else the Primary godown.
  Type the name or short name, or Space = godown list with the item's stock in each godown.
  Same item from two godowns = two rows. The stock chip shows the stock of each godown (the row's godown in bold).
  Negative Stock = Warning / Not Allow also checks each godown.
Entry > Godown Transfer: From godown -> To godown, items + qty (stock of the From godown shown). Total stock does not change.
Report > Stock > Godown Wise Stock: every godown in a column + Total, as on a date, filter godown / group / brand / item,
  value at Cost / Purchase / Sale / MRP, Excel (CSV), Print.

==================== SERIES VIEW: DIRECT / ONLINE / ALL (Ctrl+F12) ====================
Features > Vch Numbering > a series > Online = Yes / No (any entry type: Sales, Purchase, Returns, Vouchers, Notes, Stock ...).
Ctrl+F12 (ADMIN users, any screen): small box DIRECT / ONLINE / ALL - Space / arrows change, Enter = OK, Esc = close.
  DIRECT = only entries of series with Online = No · ONLINE = only Online series · ALL = everything.
  Stock, outstanding, ledger balances, accounts (Day Book, Trial Balance, P&L, Balance Sheet), sales / purchase / stock / profit
  reports, the dashboard and the entry lists (and PgUp / PgDn) use only that view's entries. New entries can use only that view's series.
  A small "DIRECT VIEW" / "ONLINE VIEW" tag shows at the bottom-left while it is not ALL.
  Every login (software open) starts in DIRECT. Ctrl+F12 order: DIRECT -> ONLINE -> ALL.
  Entry screens list ONLY the view's series names (other series are not shown). If an entry type has no series of the view,
  one is made automatically (e.g. PURCHASE ONLINE, prefix ON/ - change it in Vch Numbering). Vch Numbering / Users always show all series.
  Opening stock / opening balances count in every view - enter purchases in an Online purchase series for the online stock.
  GST reports follow the view too: GSTR-1, GSTR-2, GSTR-3B, GSTR-9, GST Summary, HSN, Bill Wise and the Portal Export
  (GSTR-1 JSON / Excel / CSV, GSTR-3B, E-Invoice / E-Way lists, Documents Issued). File names end with _DIRECT / _ONLINE.
  If Direct and Online use the SAME GSTIN, file ONE return with the ALL view (DIRECT + ONLINE = ALL).
  Features > User > Online View = Yes / No: a user with Yes can use Ctrl+F12 (ADMIN always can). No = always DIRECT.
  Split Financial Year: the closing of ALL becomes the opening, and the ONLINE part is kept apart, so each view opens right
  in the new year (DIRECT + ONLINE = ALL). Item master "Online Opn Stk" and Ledger "Online Opening" show / change that part
  (shown only when some series is Online).

==================== SALES BILL SCREEN (26-10-2026) ====================
One theme: light sky-navy (made 50% lighter again) - no switch.
Under the Net Amount: this user's previous bill - Bill No · Amount · Received · Return (change) / Due. Changes after every save. Item / party list boxes open and move smoothly.
Enter goes through every row properly: a new empty row is always ready below, the cursor stays in its box when columns change,
and the current row is kept in view.
Profit and Profit % are the LAST columns of every item row (green = profit, red = loss, "no cost" = item has no cost / purchase rate),
with totals in the footer. Needs Settings > Show Profit When Billing = Yes, the user's Show Profit right and Options > Show Profit columns.
Price list with "View Disc In Bill" ticked: the discounted rate is loaded and PL Disc % + PL Disc Amt columns are shown
(PL Disc Amt = rate before discount - rate, x qty; total in the footer). The % is saved with the bill.

Features screens (Settings, Vch Numbering, User, Company, Register, Financial Year, Split FY, Backup): all fonts bold.
Sales Bill Enter order: Type -> Customer Name -> Adr 1 -> Adr 2 -> Adr 3 -> Code (item grid). Address is 3 boxes (one line each, printed as 3 lines).
Cell / GSTIN / Through: mouse or Tab. Sales Bill: all fonts bold and black.

==================== READY-MADE BILL FORMATS: A4 LOCAL / A5 LOCAL (27-10-2026) ====================
Features > Print Design: two bill layouts are added on first run - "A4 LOCAL" and "A5 LOCAL" - in Courier New, like the dot-matrix bill:
GSTIN + MOB, (ORIGINAL), Logo box, Company name / address, INVOICE, To. party + address + GSTIN, Payment Terms / Bill No / Date,
S.No | Code | Description | HSN/SAC | Qty (with unit) | Rate | Tax% | Amount, Total, HSN wise tax summary (CGST/SGST or IGST, NET%),
Total Tax Amount, E. & O.E., Net Amount, amount in words, Bank Details, UPI QR (with bill amount), Terms & Conditions,
For <company> / Authorised Signatory, E-Invoice QR (prints only when the bill has an IRN).
Everything can be moved / changed / removed in Print Design (click the Logo box > Upload to put your logo; Save).
A4 LOCAL is made the default bill print only when no default bill layout was set. To use A5 LOCAL: open it, tick "Default for all bills"
or give it to a series in Vch Numbering. Bank Details, Terms, UPI ID, Phone come from Settings > Company / Sales.
New > "A4 / A5 Local - Courier New" makes a fresh copy; Tax Summary element can be "GST rate wise" or "HSN Code wise".

==================== MORE BILL FORMATS + SERIES PRINT SETTINGS + CHOOSE FORMAT (27-10-2026) ====================
New ready-made bill layouts (added on first run, all editable in Features > Print Design; New menu makes fresh copies):
  TALLY A4        - Tally Prime style Tax Invoice: seller / Consignee / Buyer boxes, Invoice No / Dated / Delivery Note ... grid,
                    items with serial (Detail) under the name, CGST / SGST / Round Off lines inside the table, Total = Net (₹),
                    Amount in words, Tally tax table (HSN, Taxable, CGST / SGST Rate + Amount, Total Tax), Tax Amount in words,
                    Declaration (Terms), Company's Bank Details, for <company> / Authorised Signatory.
  ECOM 3IN        - supermarket 3" thermal: Bill No / Counter (series) / User, Date / Time, Item MRP Rate Qty Amt, Tot Qty / Items,
                    Gross, TOTAL, You Have Saved, Cash Received / Balance, GST% Goods CGST SGST TAX, Thank you, Customer ID, Points.
  DOUBLE LINE 3IN - 3" thermal: item name on line 1, Qty / MRP / Rate / Value on line 2 (Tamil name prints with Tamil print),
                    Sub Total, Add/less, Total, Items / Units, Tendered / Balance, You have Saved.
Vch Numbering (every series): Bank Details, Terms & Conditions (blank = Settings), Logo 1 and Logo 2 (Upload / Remove).
  In Print Design a Logo / Image box can show "Series Logo 1" or "Series Logo 2" (Picture). Lines can be dashed.
  Print Format 1 .. 5: give a series up to 5 print layouts. When a bill / voucher / note of that series is printed,
  a box asks: 1 TALLY A4, 2 ECOM 3IN ... - Enter = Format 1, type 2 = Format 2 (3, 4, 5 ...), Esc = no print.
  Several bills marked in a list print with the format chosen once.
Vch Numbering series screen: two columns - left General / Number / Use, right Rules / Print (Enter goes down the left, then the right).

==================== MOBILE BILLING APP (28-10-2026) ====================
Phone: open  http://<your server>/ERPLITE/mobile.php  (or mobile_login.php). Add it to the home screen (browser menu > Add to Home screen).
Mobile user: Features > User > Mobile Login = No / Yes (PC + Mobile) / Mobile only. ADMIN can always use the mobile app.
  Or in the app: Authorize > Users & Rights > + New Mobile User (name, password, Mobile only / PC + Mobile, menus on / off).
Bottom menus: Home (dashboard) · Entry · Receipt · Reports · Authorize;  gear (top right) = Settings.
  Home    - today's sales / purchase / received / paid, cash in hand, bank, you'll receive / pay, recent bills.
  Entry   - Sales Bill, Sales Return, Purchase, Purchase Return, Stock Journal, Voucher (Receipt / Payment / Contra / Journal);
            Masters: + Item, + Customer, + Supplier. Inside a bill: "+ Add New Party" and "+ Add New Item" (only the needed boxes).
  Bill    - Credit / Cash switch, Invoice No, Date, Customer (balance shown), Phone, Add Items (search shows price + stock),
            Qty, Rate With / Without Tax, Discount % / Rs, item cards, Total, Received (Cash / UPI / Card), Balance Due,
            State of Supply, GSTIN, Address, Description, Terms. Save & New / Save. Bill view: Print / PDF, WhatsApp, Edit, Delete.
            Returns: type the Against Bill No > Load bill.
  Receipt - money received from a party into Cash / Bank (shows the party balance).
  Reports - Sales / Purchase / Return registers, Day Book, Stock Report, Receivables, Payables, Ledger statement, all PC reports.
  Authorize - Users & Rights (ADMIN), Change My Password, Settings, Logout.
  Settings - company name / phone / address / GSTIN / UPI ID, Sale Rate includes GST, Round Off, Negative Stock, Terms, Bank Details;
             this phone: new Sale opens as Cash bill.
The app saves through the same screens as the PC, so GST, stock, bill numbers, series, rights, negative stock / credit limit
warnings and the Series View (DIRECT / ONLINE) are exactly the same.
Mobile fix (28-10-2026): + New Party / + New Item inside a bill now save with their own Save button (the bill Save bar was on top).
Mobile app (28-10-2026, 2):
  Purchase - each item has New Sale Price and MRP; "Update item rates" switch (on) puts Purchase rate / Sale price / MRP into the
             Item master (as set in Settings > Item: Update Pur Rate / Sale Rate / MRP when Purchase).
  Sales    - Below cost warning: the item screen and the item card show "Below cost" when the rate after discount (without tax) is
             less than the item Cost (or Purchase) rate. Settings > Allow Sales Below Cost: Allow = note only, Warning = asks, Not Allow = stops.
  Series   - every entry (Sales, Returns, Purchase, Receipt, Vouchers, Stock Journal): one series = its number; two or more = choose
             the series (next number shown). A Manual numbering series asks the number when saving.
  Users    - Authorize > Users & Rights > a user > "Series of this user": fix a series for each entry type (blank = he chooses).
Mobile app (28-10-2026, 3):
  Item screen - price buttons: Purc, Cost (sales: only users with Sales > Show Profit right), Sale, MRP, Special 1, Special 2 -
                tap one = that rate (Purc / Cost without tax, MRP with tax). Also "Last to this customer" / "Last from this supplier"
                and the last rate of the item from anyone - tap = use that rate.
  Bill Sundry - all Sales / Sales Return / Purchase / Purchase Return: + Add Bill Sundry (Freight, Packing, Discount, Add/Less ...),
                % or Rs, Add / Less as set in Master > Bill Sundry; Total shows Items + Bill Sundry; saved with the bill (Round Off automatic).
Print fix (29-10-2026): a phone / computer without the Courier New font printed the A4 / A5 LOCAL bill in Arial (normal style).
  Now every print font has look-alike fall-backs (Courier New -> Courier Prime / Cousine / Liberation Mono ..., Times -> Tinos ...,
  Arial -> Arimo ...), loaded from Google Fonts, so the bill keeps the same style on every device.
  A4 / A5 LOCAL: wider Code column (long item codes stay on one line) - changed automatically if you had not changed those widths.
  To print with A4 LOCAL: Print Design > open A4 LOCAL > tick "Default for all bills" > Save, or Vch Numbering > series > Print Format 1.

== WHATSAPP = SAME PRINT FORMAT (2026-10-29) ==
* Bill > WhatsApp (PC or Mobile app) now sends the DESIGNED print format (A4 LOCAL / TALLY A4 / ECOM 3IN ...), not the old classic page.
* If the series has 2 or more print formats, it first asks 1 / 2 / 3 ... (Enter = format 1), then opens "Send on WhatsApp".
* Phone: the PDF opens the share sheet - choose WhatsApp. PC: the PDF is saved and the customer's WhatsApp chat opens - attach (clip) and Send.
* "WhatsApp PDF" and "PDF" buttons are also on every designed print page.
* The PDF maker loads from the internet. For offline XAMPP, copy html2pdf.bundle.min.js (html2pdf.js 0.10.1) into the ERPLITE folder.
  With no internet and no local copy: "Save as PDF + WhatsApp" opens Print (choose Save as PDF) and the WhatsApp chat.
* Changed files: sales_print.php, print_render.php

== W/A - SMS : WHATSAPP API + SMS + MESSAGE FORMATS (2026-10-29) ==
* Menu: Features > W/A - SMS  (also Settings > tab "W/A - SMS").
* WhatsApp Sending:  Manual = WhatsApp app / web opens with message + PDF (free).  API = the software sends it.
  - API Provider "Any WhatsApp API panel": paste the panel URL with {mobile} {message} {pdf_url} {file_name} {token} {instance}. GET or POST (JSON body).
  - API Provider "Meta Cloud API (official)": Phone Number ID + permanent token; optional approved template (header Document, body {{1}}).
  - PDF for "Any panel" is kept 7 days in ERPLITE/wa_pdf/ (random names) - the server must be online (not localhost) for the panel to download it.
* SMS: SMS API URL with {mobile} {mobile10} {message} {token} {sender} {template_id}, Sender ID, DLT Template ID for Sales / Receipt / Ledger.
* Message formats (editable): Sales Bill, Receipt, Ledger Statement - for WhatsApp and for SMS.
  Words: {party} {doc} {no} {date} {amount} {balance} {company} {phone} {from} {to}. {balance} = party balance today (cash bill = 0).
* Test box at the bottom: Save, then Send Test.
* Where to send:
  - Sales: Sales Display > WhatsApp (Alt+W) / bill print > WhatsApp PDF / Mobile app Share.
  - Receipt: Voucher Display > WhatsApp / SMS (Alt+W).
  - Ledger: Ledger Statement > WhatsApp / SMS (Alt+W) - A4 statement PDF.
  The box shows the mobile no and the message (edit if needed): API Send / WhatsApp Manual / SMS.
* New files: wa_inc.php, wa_send.php, wa.js, ledger_wa.php

== SALES BILL: SAME ITEM AGAIN -> "ITEM ALREADY ENTERED - GO THERE?" (2026-10-29) ==
* Picking an item that is already in the bill asks: Item already entered - go there?  (shows Row and Qty)
  Y / Enter = cursor goes to the Qty of the first row of that item (the new row is cleared).  N / Esc = the item is added again in the new row.
* Not asked for barcode scans, batch items, AI import, or when "Add Qty to Existing item" option is ticked (that adds the qty itself).
* Always on (default) - no setting.
* Changed: sales_bill.php, settings.php

== A4 / A5 LOCAL PRINT = SAME AS ORIGINAL (2026-10-29) ==
* Lines (under address, under INVOICE, party / bill-no divider, Net Amount, Rupees, Bank rows) were missing on some PCs:
  they were drawn as background colour, which Chrome drops when "Background graphics" is off. Now drawn as borders - always print.
* A4 LOCAL / A5 LOCAL: all text bold (Courier New Bold) like the original bill. Your saved A4 / A5 LOCAL layouts are updated once automatically.
* Print Design > Page: new tick "All text Bold" for any layout.
* GSTIN / MOB at the top print from Settings > Company (GSTIN, Phone) - fill them if blank.
* Changed: print_layout.js, print_design.php, print_render.php, db.php

== PRINT: COMPANY DETAILS FROM COMPANY CREATE + SIGNATURE AREA IN EVERY FORMAT (2026-10-29) ==
* All prints take the company details from Company > Company Create / Alter (the open company):
  Name (Print Name if given), Address + PIN Code, Phone 1 / 2, Email, GSTIN, PAN, State, Website. Blank there -> Settings > Company.
* Settings > Company tab Save also updates Company Create - both stay the same.
* New print fields (Print Design): Company PIN Code, Company Website, Company Ph + Email (one line), Company Ph + Email + GSTIN (one line).
  Empty parts are left out (no bare "Ph :" / "Email :").
* Every ready-made format now has company details + "For <Company> / Authorised Signatory":
  A4 / A5 normal (bill, voucher, note), A4 / A5 LOCAL (+ Email under address), TALLY A4 (Ph + Email), ECOM 3IN, DOUBLE LINE 3IN, normal 3" / 4" thermal.
* Your saved layouts are updated once automatically (v5): old "Ph : .. GSTIN : .." line -> one-line company details, Email added in LOCAL,
  signature area added at the foot of any layout that had none.
* Long company name: font shrinks by itself to fit one line (all formats).
* Changed: print_inc.php, print_layout.js, db.php, settings.php, print_render.php, print_design.php

== SALES BILL SCREEN: FONT SIZE +1 (2026-10-29) ==
* Every text on the Sales Bill screen is 1 size bigger (body 14 -> 15 px; boxes, list, totals, pop-ups too).
  Same screen = Sales, Sales Return, Purchase, Purchase Return, Quotation, Orders, DC.
* Changed: sales_bill.php

== SALES BILL: FONT +1 MORE, CODE / PROFIT COLUMNS OPTIONAL (2026-10-29) ==
* Sales Bill screen text 1 more size bigger (body 16 px).
* Code, Profit, Profit % columns are no longer fixed: right-click the heading > Hide Columns, or UnHide Columns... list (untick).
  Then right-click > Save Settings to keep it. Code hidden = cursor starts at Item Name. Bill Profit stays in the totals box.
* Changed: sales_bill.php

== SALES BILL: SMALLER HEADER, MORE ROOM FOR ITEMS (2026-10-29) ==
* Header about 1 inch shorter (242 -> 136 px): every box has 4 rows of 28 px, less space between rows.
  - Billing box: blue title strip removed; < > previous / next bill buttons sit beside the bill no; "Last No" beside the date.
  - 2nd column: State + Sales Type in one row, Through, GSTIN, Price list (moved here from the Billing box).
  - Party box: Name (+ Ledger linked / Cash customer note), Adr 1, Adr 2, Adr 3 + Cell in one row.
* Bottom bar: help text kept to 3 short lines (full text on mouse over), buttons a little narrower - all buttons fit.
* Enter order unchanged: Name > Adr 1 > Adr 2 > Adr 3 > items. PgUp / PgDn unchanged.
* Changed: sales_bill.php

== SALES BILL: AUTO SCROLL - TYPING ROW ALWAYS VISIBLE (2026-10-29) ==
* After 10+ items the row being typed went under the Total row / below the list. Now the item list scrolls up by itself
  so the current row is always fully visible, clear of the column headings and the Total row (Enter, Tab, arrows, new row, find).
* Changed: sales_bill.php

== GSTR-1 / GSTR-3B EXCEL: WORKS WITHOUT THE PHP "zip" EXTENSION (2026-10-29) ==
* Error "Class ZipArchive not found" (XAMPP with extension=zip switched off in php.ini) is fixed:
  new zip_inc.php writes the .xlsx / .zip itself when ZipArchive is missing (uses zlib, always on in XAMPP).
* GSTR-1 Excel (Offline Tool sheets), GSTR-1 CSV zip, GSTR-3B Excel - all tested with the zip extension OFF.
* Optional: in C:\xampp\php\php.ini remove the ; before  extension=zip  and restart Apache (not needed any more).
* Changed: gst_export.php   New: zip_inc.php

== SALES BILL: BILL PROFIT IN THE TOTAL ROW (UNIT COLUMN) + RATE LETTERS (2026-10-29) ==
* Total row: the bill's total profit shows under the Unit column (green; red when loss) - seen even when Profit columns are hidden.
* Rate letters (Settings > Caption > Hide by Letters, with Purchase or Cost rate ticked): profit is shown in letters
  everywhere on the bill screen - Unit total, Profit column (rows + total), Profit in the totals box. Eg 44.02 -> EE.AC.
* Changed: sales_bill.php

== SALES BILL: NO PROFIT UNDER NET AMOUNT  +  BLANK CAPTION = FIELD NOT USED (2026-10-29) ==
* Sales Bill totals box: the Profit line under Net Amount is removed (bill profit stays in the Total row under Unit).
* Settings > Caption: leave a caption EMPTY and Save = that field is not used anywhere:
  - Item Create / Alter: the box is hidden (Enter skips it).
  - Sales / Purchase / Return / Order bills: its column is removed (also from the UnHide Columns list).
  - Item list box (Space list) in bills and Stock Journal, master-rates bar, Stock Journal columns.
  - Item Display: filter box and list column removed.
  - Mobile app: price chips (Purc, Cost, MRP, Spl 1, Spl 2) left out.
  Fields: Barcode, Code, Alias, Group, Brand, Model, Rack, Purc Rate, Cost, MRP, Special 1 / 2, Batch, Exp, Mfg.
  Item Name and Sales Rate are always used (blank = default name). Type the caption again to bring the field back.
* Changed: sales_bill.php, settings.php, db.php, item_create.php, item_display.php, stock_journal.php, mobile.php, mobile_api.php

== CTRL+F12 SERIES VIEW: NO "DIRECT" SERIES IS CREATED (2026-10-29) ==
* DIRECT view = the default series (and any series not marked Online) - Ctrl+F12 never makes a "<TYPE> DIRECT" (DR/) series now.
  If a type's only series was marked Online, its default series becomes the Direct series.
* ONLINE view: only here a "<TYPE> ONLINE" series (prefix ON/) is made, when that entry type has no online series yet.
* Old auto-made "... DIRECT" (DR/) series that have no entries are removed once; ones with entries are kept (rename / deactivate in Vch Numbering if wanted).
* Changed: db.php


== LOCAL PC: DATA IN D:\Impact\data (2026-10-29) ==
* On the local PC (Windows / XAMPP) the software keeps its data in D:\Impact\data by default:
  - company list, licence  -> D:\Impact\data
  - backups (Backup Folder left blank) -> D:\Impact\data\Backup
  First run copies the old ERPLITE\data there (the old folder is kept). No D: drive / online server = ERPLITE\data as before.
  Another folder: make ERPLITE\data_path.txt with the path in it (e.g. E:\Impact\data).
* The databases (bills, masters, accounts) are MySQL's - to keep them on D: too:
  run ERPLITE\Move_MySQL_to_D.bat once (right-click > Run as administrator):
  stops MySQL, COPIES xampp\mysql\data to D:\Impact\data\mysql, saves my.ini.before_impact, sets my.ini datadir to D:/Impact/data/mysql.
  Then start MySQL in XAMPP Control Panel. Undo_MySQL_D.bat puts everything back.
* Changed: sys_inc.php, backup.php   New: Move_MySQL_to_D.bat, Undo_MySQL_D.bat


== AFTER LOGOUT ALWAYS ASK LOGIN (2026-10-29) ==
* Logout = the login screen every time:
  - Back button / Backspace after Logout -> login screen (screens are not kept in the browser memory any more).
  - One company + only ADMIN without password (no login screen normally): after Logout it asks login, also after the browser
    is closed and opened again, until someone logs in once by hand.
* Changed: auth_inc.php, logout.php, quit.js (+ all screens: quit.js?v=20261029a so the browser takes the new one)

== SETUP FILE: IMPACT_ERP_Setup.exe (2026-10-29) ==
* One file installs or updates the software on a Windows PC with XAMPP:
  1. finds XAMPP (C:\xampp, C:\xampp1, D:\xampp ...; asks if more than one / types the folder if not found)
  2. puts ERPLITE in xampp\htdocs\ERPLITE
     Update: old program files copied to htdocs\ERPLITE_old_<date>; NEVER touched: db_config.php, data_path.txt, data\, uploads\, backup\
  3. makes D:\Impact\data (company list, licence, backups)
  4. desktop + Start menu icon "IMPACT ERP" (opens http://localhost/ERPLITE/)
  5. starts Apache + MySQL (or opens XAMPP Control Panel), then opens the software
* Windows may say "Windows protected your PC" (setup is not signed): click More info > Run anyway.
* XAMPP itself is not inside (150 MB) - install it first from www.apachefriends.org.
* To rebuild after changes: setup_source\main.go + payload.zip (= ERPLITE_FULL_FINAL.zip), GOOS=windows go build.

== ONLINE SHOP (E-COMMERCE) CONNECTED TO THE ERP (2026-10-29) ==
* Customer site: http://<your server>/ERPLITE/shop/   (phone + PC; no login for customers)
  Products with photo, price, MRP / % off, stock; search, categories; cart; checkout (name, mobile, address, PIN, state);
  Cash on delivery and / or UPI (QR + "Pay with UPI app" after the order); order number; Track order (order no + mobile).
* Every order = a SALES ORDER in the ERP, made by the ERP's own save (GST, round off, series numbering):
  - customer ledger found by mobile, else made under SUNDRY DEBTORS
  - Through = ONLINE SHOP, Remarks = order no / payment / customer note, delivery charge = FREIGHT CHARGES sundry
  - then make the Sales Bill from the order as usual (pending orders).
* ERP > Features > Online Shop (shop_admin.php) - right: Sales Order
  - Orders: New / Confirmed / Packed / Shipped / Delivered / Cancelled (customer sees it in Track order), WhatsApp the status,
    link to the ERP Sales Order, "Make Sales Order" again if it failed. Cancelled = ERP order closed.
  - Products: Show in shop on / off (one by one or all listed), shop price (blank = Sale Rate), photo, description, New tag, sort.
  - Settings: shop open, SHOP COMPANY (tick "Use this company for the shop"), shop link, name, tagline, banner, colour,
    minimum order, delivery charge, free delivery above, PIN codes, COD / UPI, stock show, out-of-stock show / hide,
    Sales Order series, phone, WhatsApp, e-mail, terms.
* Safety: shop pages have their own session - a shop visitor can never open the ERP; prices always from the ERP; spam guard.
* New: shop/index.php, shop/api.php, shop_inc.php, shop_admin.php   Changed: sys_inc.php, auth_inc.php, sales_bill.php, index.php

== MATCH ITEM (SUBSTITUTE ITEMS) (2026-10-29) ==
* Switch on: Features > Settings > Item > "Match Item (substitute items)" = Yes.
* Item Create / Alter: button "Match Items" (Alt+M): type code or name, Enter = add; list with remove; Save.
  Matches work both ways (A matched to B = B matched to A).
* Sales Bill (and Sales Return / Quotation / Order / DC): after an item with matches is entered and its stock is
  nil / less than the qty / at or below Minimum / Re-order level -> message "NO stock - Ctrl+M = n matched items".
  Ctrl+M (any item row): matched items with Stock, Sales Rate, MRP (in-stock first); Enter = that item replaces the row, qty kept.
* Changed: db.php, settings.php, item_create.php, sales_bill.php

== MATCH ITEM LIST = ITEM LIST + STOCK STATUS REPORT (2026-10-29) ==
* Sales Bill Ctrl+M: the matched items now open in the SAME item list box as typing / Space (same columns, stock, rates,
  arrows, Page Up / Down, Enter, mouse), with an orange line on top "Matched items for <item> · its stock".
  Enter = the row's item replaced, qty kept (no "already entered" question).
* Report > Stock > Item Wise Stock (no separate menu): Filter > Stock = All / Not zero / Positive / Negative / Zero / Moved in period /
  Below Re-order level / Below Minimum qty / Above Maximum qty / Moving (sold in period) / Non-moving (stock, no sale) / No transaction in period.
  Filter > Match Item: type an item -> that item first + its matched items (item wise stock).
  With one of the level / movement types (or Match Item) the columns Minimum, Re-order, Maximum, To Order, Status, Days since sale are shown
  (else hidden - right-click heading > Unhide). Tiles: Below Re-order, Above Maximum, Non-moving, No transaction.
* Changed: sales_bill.php, report_stock.php, index.php
* Stock menu (side menu + Reports page): "Below Re-order Level", "Below Minimum", "Below Maximum" removed - use
  Item Wise Stock > Filter > Stock = Below Re-order / Below Minimum / Above Maximum. Changed: index.php, reports.php

== ADD-ONS: PRICE + PASSWORD, ONLINE SHOP IS AN ADD-ON (2026-10-29) ==
* Settings > Ctrl+C > Add-On: each add-on shows its price - Rs. 1,000 each, Production Rs. 3,000, Online Shop Rs. 5,000.
* Turning an add-on ON needs the "Add-On password" = today's Temporary Extend (demo) key from IMPACT_KEYGEN\keygen.php
  (changes every day). Wrong / no password = not turned on (message, box stays open). Turning OFF needs no password.
* Online Shop is now add-on no. 8: off = ERP > Online Shop screen locked + menu hidden + the customer shop shows "closed".
  (Existing customers using the shop: turn the add-on on once with the password.)
* Changed: db.php, settings.php, shop/api.php    Key generator (NOT for customers): IMPACT_KEYGEN\keygen.php (note text)

==== ENTRY SCREENS: ITEM ROWS WHITE, ITEM LIST LIGHT SKY-BLUE (2026-10-29) ====
Sales / Purchase / Returns / Quotation / Orders / DC / POS, Stock Journal, Cr/Dr Note,
Voucher, Production, Godown Transfer:
 - item entry rows (item room) = WHITE, current row = very faint blue
 - item list box (Space / search list) = very light sky-blue, header a little darker
Works with every theme (light / dark). Files: sales_bill.php stock_journal.php crdr_note.php
voucher.php production.php godown_transfer.php

==== SALES BILL: BACKSPACE ON AN ENTERED ITEM (2026-10-30) ====
 - Clear an entered item's name with Backspace, go back (Backspace in empty box), then Enter:
   the cursor now comes back to THAT row's Item Name (before it jumped to the next empty row).
 - Code + Enter on that row also goes to the cleared Item Name.
 - Enter in the cleared Item Name opens the item list to pick the new item.
 - Clicking into a box with the mouse = editing: Backspace deletes text (before, the first
   Backspace jumped back to the previous box).
 File: sales_bill.php (Sales / Purchase / Returns / Quotation / Orders / DC / POS)

==== ENTRY SCREENS: FONT +1, SELECTED ITEM LIGHT BLUE (2026-10-30) ====
 - Sales/Purchase/... bill, Stock Journal, Cr/Dr Note, Voucher, Production, Godown Transfer:
   every font size on the screen is 1 size bigger (one small script, all screens alike).
 - Item list: the selected (highlighted) item is LIGHT BLUE with dark text (was dark blue).
 - Sales bill Profit % column a little wider (drag the heading edge if you saved a width).
 Files: sales_bill.php stock_journal.php crdr_note.php voucher.php production.php godown_transfer.php

==== ENTRY SCREENS: ITEM ROWS 3 mm TALLER + BOLD OPTION (2026-10-30) ====
 - Item room rows are 3 mm (11 px) taller on all entry screens (bills, Stock Journal,
   Cr/Dr Note, Voucher, Production, Godown Transfer).
 - Settings > Sales > "Entry Item Rows Bold": Yes = item rows text bold (default), No = normal.
 Files: settings.php sales_bill.php stock_journal.php crdr_note.php voucher.php production.php godown_transfer.php

==== ITEM ROWS BLACK TEXT + "ITEM ALREADY ENTERED" RETURNS (2026-10-30) ====
 - Entry screens: item row text is BLACK (bold per Settings > Sales > Entry Item Rows Bold).
   Profit green / negative red colours are kept.
 - Sales bill: same item again -> "Item already entered - go there?" Y -> Qty of the first row;
   Enter in that Qty now comes BACK to the row you were entering (before it went to the next row).
 Files: sales_bill.php stock_journal.php crdr_note.php voucher.php production.php godown_transfer.php

==== ITEM ROW LINES DARKER (2026-10-30) ====
 - Entry screens: the item row lines (between rows and columns) are about 50% darker.
 Files: sales_bill.php stock_journal.php crdr_note.php voucher.php production.php godown_transfer.php

==== MOBILE APP: PDF / EXCEL WITH OPTIONS, RECEIVABLES, GST, SALES PROFIT, ITEM RATES (2026-10-30) ====
 Every mobile report (Sales / Purchase registers, Day Book, Stock, Receivables, Payables, Ledger, Profit, GST):
  - top bar  Pdf / xls  -> "What to display on PDF / Excel?": tick the columns, Date & Time, Edit Name -> Apply
  - PDF Options: Open PDF · Print PDF · Share PDF (WhatsApp, mail ...) · Save PDF to Phone. Excel = .xlsx saved to the phone.
  - the ticked columns are remembered (this phone).
 Stock Report: Sale Price, Purchase Price, MRP, Special 1/2, Stock Qty, Stock Value, Code, Unit.
 Receivables / Payables: Party Summary · Party wise Bills · Bill Wise, Order (Amount / Days / Date / Bill No),
   Area, Party, Bill No, Days more than. Receipts / returns / notes taken off the oldest bills first (FIFO).
 Sales Profit (new): by Bill / Item / Brand / Group / Customer / Day / Month; Before Tax or After Tax;
   cost from Last Purchase / Average Purchase / Item Cost / Item Purc Rate.
 GST Reports (new): GSTR-1 JSON, GSTR-1 Excel, GSTR-3B Excel, GSTR-1 CSV zip; reports GST Bill Wise (Sales,
   Sales Return, Purchase, Purchase Return, Cr/Dr Notes, All), GSTR-1, GSTR-3B, HSN Summary, Tax Summary.
 Settings > Item Rates: Use Special Rate 1 / 2 / Cost Rate + caption. Switched on:
   - New Item asks them; Purchase item asks the new Cost / Special 1 / Special 2 (with New Sale Price, MRP)
     and updates the item master when "Update item rates" is on.
   - Purchase item shows the NET RATE in this bill (after discount, without tax and with tax) - in the item and the card.
 Files: mobile.php mobile_api.php report_inc.php (reports as data for the app) out.js (export used by the app)

==== MOBILE: EVERY ENTRY + EVERY REPORT -> PDF / EXCEL / WHATSAPP (2026-10-30) ====
 Entries (Sales, Sales Return, Purchase, Purchase Return bill view; Receipt / Payment / Contra / Journal
 voucher view; Stock Journal view) have 4 buttons:  PDF · Excel · W/A · Print
  - PDF = the designed print format (Print Design, same as PC). Series with 2+ formats: choose the format first.
    Then PDF Options: Open · Print · Share · Save to Phone · Send on WhatsApp.
  - W/A = the WhatsApp box of the PC (message from Settings > W/A - SMS, PDF attached; API / SMS too).
  - Excel = the entry as an .xlsx (items / ledgers, totals).
  - Stock Journal (no print design): PDF / Excel / Print as a table, W/A = PDF shared to WhatsApp.
 After saving a Receipt / Voucher / Stock Journal on the mobile its view opens (PDF / Excel / W/A at once).
 Day Book: vouchers open their view too.
 Every report: top bar  Pdf · xls · W/A  (W/A = choose the columns -> PDF -> WhatsApp share).
 Note: the designed PDF uses html2pdf from the internet (as on the PC); without internet PDF opens the
 print page - choose "Save as PDF" there.
 Files: mobile.php mobile_api.php print_render.php (+ report_inc.php out.js of the last update)

==== MOBILE: MODERN LIGHT ICONS + HOME-SCREEN APP ICON (2026-10-30) ====
 - All menu icons (Entry, Masters, Reports, entry PDF / Excel / W/A / Print, PDF Options, Authorization)
   are thin-line modern icons on very light tinted tiles (no emoji) - smooth and clear on every phone.
 - App icon for the phone home screen: Chrome menu > "Add to Home screen" (Android) or Share > "Add to
   Home Screen" (iPhone) - light icon, opens full screen like an app (mobile.webmanifest).
 - Bill view: PDF / Excel / W/A / Print no longer hidden under the Delete / Edit bar.
 Files: mobile.php mobile_login.php mobile.webmanifest mobile_icon.svg mobile_icon_180.png mobile_icon_192.png mobile_icon_512.png

==== MOBILE: MULTI-COLOUR SMOOTH ICON BUTTONS (2026-10-31) ====
 - Every icon button has its own colour: soft light gradient tile, deeper icon of the same colour,
   gentle shadow, small press effect (Entry, Masters, Reports, PDF / Excel / W/A / Print, PDF Options,
   Authorization list).
 File: mobile.php

==== MOBILE: MODERN DASHBOARD (HOME) (2026-10-31) ====
 - Greeting (Good morning / afternoon / evening) + date.
 - Gradient card: Today's Sales, bills, returns + 7-day sales bar chart (today highlighted) + 7-day total.
 - Quick actions: Sale · Purchase · Receipt · Stock (round colour icons, by user rights).
 - KPI cards with icons: Purchase, Received, Paid, Sales Return (today).
 - Cash in Hand | Bank Balance card.  You'll Receive vs You'll Pay with a progress bar.
 - Recent Transactions with coloured initials, Due / Paid, link to Day Book.
 Files: mobile.php mobile_api.php

==== MOBILE: SKY BLUE SALES CARD, SOFTER ORANGE, NO "OPEN ALL REPORTS" (2026-10-31) ====
 - Dashboard Today's Sales card = sky blue gradient.
 - App orange 30% lighter (top bar, buttons); text colours stay readable.
 - Reports menu: "Open all reports (full screen)" removed from the mobile app.
 File: mobile.php

==== MOBILE: OLD ORANGE BACK, DARKER SKY BLUE, ICONS 40% DARKER (2026-10-31) ====
 - Orange back to the original (#f97316 / #ea580c).
 - Today's Sales card sky blue 30% darker.
 - All icons 40% darker (menu tiles, quick actions, KPI cards, avatars, PDF Options, Authorization).
 File: mobile.php

==== MOBILE: TODAY'S SALES CARD = LIGHT WHATSAPP GREEN (2026-10-31) ====
 File: mobile.php

==== OUTSTANDING REPORT: PARTY + OUTSTANDING AMOUNT, AREA / LEDGER GROUP FILTERS (2026-10-31) ====
 Mobile > Reports > Outstanding (new):
  - Receivable / Payable / Both, Area, Ledger Group, As on date.
  - Party name + outstanding amount (Dr / Cr), area and group under the name, biggest first; tap = Ledger.
  - Totals: Receive / Pay.  Pdf / xls / W/A: Party Name, Outstanding Amount (+ Area, Group, Phone to tick).
 PC > Outstanding: Area and Ledger Group filters added (kept with View / zero / date).
 Balance = opening + bills + vouchers + notes up to the date (same as Ledger Statement).
 Files: outstanding.php mobile.php
