# POS System Client User Guide

This guide explains how business owners, managers, cashiers, inventory staff, and purchasing staff use the POS System during daily store operations.

The guide is based on the current implementation of the PHP/MySQL/Bootstrap POS System in this project.

## 1. Introduction

### Purpose of the POS System

The POS System helps a store record sales, manage products, track inventory, issue quotations, receive purchased stock, manage cash drawer shifts, process returns, approve sale voids, and review reports.

### Supported Business Operations

The system currently supports:

- Branch-based login and access control
- Product and category management
- Customer and supplier records
- POS checkout with barcode/product search
- Cash, GCash, and Card payment recording
- Customer tracking with optional required customer selection
- Manual, Senior, and PWD discounts
- Thermal receipt printing
- Sales history, receipts, returns, refunds, and void workflow
- Inventory stock-in, manual adjustments, movement history, and reversal adjustments
- Purchase orders and supplier receiving
- Quotations and conversion to POS sale
- Expenses tracking
- Cash drawer opening, cash movements, and shift closing
- Daily Sales Closing / Z-Read
- Dashboard charts and reports
- User, role, permission, and branch management
- Audit logs, backup/restore, and system health checks

### User Roles Overview

Admin:
- System owner or superuser.
- Can access all branches.
- Can switch branches after login.
- Has full access to all menus and actions.

Area Manager:
- Optional multi-branch manager role.
- Can access only assigned branches.
- Can switch between assigned branches when more than one branch is assigned.
- Usually has access to management, reports, purchases, quotations, audit, cash drawer, and closing functions depending on permissions.

Manager:
- Assigned to one branch.
- Cannot switch branches.
- Usually handles products, categories, inventory, POS, sales, void approvals, purchases, settings, reports, cash drawer, and Z-Read depending on permissions.

Cashier:
- Assigned to one branch.
- Cannot switch branches.
- Usually handles POS checkout, sales history, receipts, return requests, void requests, quotations view, products view, inventory view, and customers view depending on permissions.

Inventory Clerk:
- Assigned to one branch.
- Cannot switch branches.
- Usually handles product/category viewing, inventory stock-in, adjustments, reversals, and reports.
- Does not normally use POS checkout.

Purchasing Staff:
- Assigned to one branch.
- Cannot switch branches.
- Usually handles suppliers, purchase orders, receiving, inventory viewing, and reports.
- Does not normally use POS checkout.

Note: Menus and pages depend on permissions. If a menu does not appear, the user may not have permission for that module.

## 2. Logging In

### How to Log In

1. Open the POS System in a browser.
2. Go to the login page.
3. Enter your username.
4. Enter your password.
5. Click **Login**.

Expected Result:
- You are taken to the dashboard for your assigned branch.

Notes:
- The login page does not ask you to select a branch.
- Branch access is assigned by the administrator.

### Branch Assignment Behavior

Admin:
- Can access all branches.
- The system selects the first available branch after login.
- A branch switch dropdown appears in the top navigation when multiple branches are available.

Area Manager:
- Can access only branches assigned in the user account.
- If one branch is assigned, that branch is selected automatically.
- If multiple branches are assigned, the first assigned branch is selected automatically.
- A branch switch dropdown appears when more than one assigned branch is available.

Manager, Cashier, Inventory Clerk, and Purchasing Staff:
- Use the single branch assigned to their user account.
- Cannot switch branches.
- Login is denied if no valid branch is assigned.

### Logging Out

1. Click **Logout** in the top-right navigation.
2. Wait for the login page to appear.

Expected Result:
- Your session is closed and your logout is recorded in the audit log.

## 3. Dashboard

The dashboard gives a quick overview of the active branch.

### Reading Dashboard Cards

Dashboard cards show:

- **Today's Sales**: Total non-voided sales for the current day.
- **Orders**: Number of non-voided sales for the current day.
- **Low Stock**: Number of products at or below their low stock threshold.
- **Today's Expenses**: Expenses recorded for the current day.

### Charts

The dashboard includes:

- **Sales Trend**: Sales for the last 7 days.
- **Payment Methods**: Breakdown by payment method.
- **Top Selling Products**: Products with the highest quantity sold.

Notes:
- Voided sales are excluded from dashboard sales totals and recent transactions.
- If there is no data, charts show safe empty or zero values.

### Low Stock Alerts

The **Low Stock Items** section shows products where current stock is less than or equal to the product's low stock threshold.

Tip:
- Review this section before opening or during the day so stock can be replenished early.

### Recent Transactions

The **Recent Transactions** table shows recent non-voided sales for the active branch.

Use **View Sales** to open the full Sales History page.

## 4. Products

Use **Products** to create and maintain product records for the active branch.

### Add Product

1. Open **Products**.
2. In **Add Product**, enter the product name.
3. Enter barcode if available.
4. Enter SKU if used by the business.
5. Select a category or leave it as **None**.
6. Enter cost and selling price.
7. Enter initial stock.
8. Enter low stock threshold.
9. Click **Save Product**.

Expected Result:
- The product appears in the Product List for the active branch.

Notes:
- Product name is required.
- Cost, price, stock, and low stock threshold must be valid numbers.
- Barcode should be unique within the branch.

### Edit Product

1. Open **Products**.
2. Find the product in the Product List.
3. Click the pencil/edit button.
4. Update the product name, category, barcode, SKU, cost, price, or low stock threshold.
5. Click **Update Product**.

Expected Result:
- Product details are updated.

Notes:
- Current stock is displayed but cannot be edited on the product edit page.
- Stock is managed through inventory stock-in, adjustments, receiving, sales, returns, and voids.

### Delete Product

1. Open **Products**.
2. Find the product.
3. Click the trash/delete button.
4. Confirm deletion.

Expected Result:
- The product is removed if the database allows it.

Notes:
- Avoid deleting products that already have sales, returns, inventory movements, or purchase history.
- For products already used in transactions, edit the product details instead of deleting.

### Categories

Categories group products for easier management.

1. Open **Categories**.
2. Enter a category name.
3. Click **Add**.

To edit a category:

1. Click the pencil/edit button beside the category.
2. Change the name.
3. Click **Update Category**.

To delete a category:

1. Click the trash/delete button.
2. Confirm deletion.

Notes:
- Category names are required.
- Category names must be unique per branch.
- Avoid deleting categories that are used by products.

### Barcode

Products can store a barcode. In POS Checkout, the barcode/search field can be used to find matching products.

Tip:
- Use the physical scanner in the POS search field. Most scanners act like keyboard input.

### Stock Threshold

The low stock threshold controls dashboard and report alerts.

Example:
- If a product has stock of 5 and threshold of 5, it appears as low stock.

## 5. Customers

Use **Customers** to store customer contact details and review purchase history.

### Add Customer

1. Open **Customers**.
2. Click **Add Customer**.
3. Enter customer name.
4. Enter phone and email if available.
5. Click **Save Customer**.

Expected Result:
- The customer appears in the Customer List for the active branch.

Notes:
- Customer name is required.
- Email must be valid if entered.

### Edit Customer

1. Open **Customers**.
2. Find the customer.
3. Click the pencil/edit button.
4. Update name, phone, or email.
5. Click **Save Changes**.

### Customer Tracking

Customer tracking is controlled in **Settings**.

When **Enable Customer Tracking** is ON:
- POS shows a customer selection field.
- The cashier can select an existing customer.
- If allowed, the cashier can use **Quick Add Customer** from POS.

When **Enable Customer Tracking** is OFF:
- POS hides the customer selector.
- Sales are treated as walk-in customer sales.

### Customer Purchase History

1. Open **Customers**.
2. Click **View** beside a customer.

The Customer History page shows:

- Customer contact details
- Sales count
- Gross sales
- Net amount after refunds
- Purchase history with receipt and print buttons

### Walk-in Customer

If no customer is selected, the sale is treated as **Walk-in Customer** when customer tracking is enabled but customer selection is not required.

### Customer Settings

In **Settings**:

- **Enable Customer Tracking** controls whether POS shows customer selection.
- **Require Customer On Sale** requires a real customer before checkout, but only when customer tracking is enabled.

## 6. Suppliers

Use **Suppliers** to store supplier contact details for purchases.

### Add Supplier

1. Open **Suppliers**.
2. Click **Add Supplier**.
3. Enter supplier name.
4. Enter phone and email if available.
5. Click **Save Supplier**.

Expected Result:
- Supplier appears in the Supplier List.

### Edit Supplier

1. Open **Suppliers**.
2. Click the pencil/edit button beside the supplier.
3. Update name, phone, or email.
4. Click **Save Changes**.

### Delete Supplier

1. Open **Suppliers**.
2. Click the trash/delete button.
3. Confirm deletion.

Notes:
- Avoid deleting suppliers that are already used in purchase orders.

## 7. Inventory

Use **Inventory** to review stock movement history and manage stock changes.

### Stock In

Use Stock In for simple stock additions that are not tied to a purchase order.

1. Open **Inventory**.
2. Click **Stock In**.
3. Search and select a product.
4. Enter quantity.
5. Enter reason or reference, such as supplier delivery or invoice number.
6. Click **Save Stock In**.

Expected Result:
- Product stock increases.
- A `stock_in` inventory movement is recorded.

### Inventory Adjustment

Use Adjust Stock for manual count corrections.

1. Open **Inventory**.
2. Click **Adjust Stock**.
3. Search and select a product.
4. Choose **Increase stock** or **Decrease stock**.
5. Enter quantity.
6. Enter reference if available.
7. Enter required reason.
8. Click **Save Adjustment**.

Expected Result:
- Stock is updated.
- An `adjustment_in` or `adjustment_out` movement is recorded.

Notes:
- Quantity must be greater than zero.
- The system prevents adjustments that would make stock negative.

### Inventory Reversal

Use reversal when a previous stock-in or manual adjustment was wrong.

1. Open **Inventory**.
2. Find a reversible movement.
3. Click **Reverse**.
4. Review current stock, reversal quantity, and projected stock.
5. Enter the required reason.
6. Click **Save Reversal**.

Expected Result:
- The system creates an opposite `reversal` movement.
- Original movement history remains unchanged.

Notes:
- Reversal is available only for safe movement types such as `stock_in`, `adjustment_in`, and `adjustment_out`.
- The same movement cannot be reversed twice.
- The system prevents reversals that would make stock negative.

### Inventory History

The Inventory page lists stock movements with:

- Product
- SKU/barcode
- Movement type
- Quantity
- Remarks
- User
- Date

You can filter by movement type and search by product, SKU, barcode, or remarks.

## 8. Purchase Orders

Use **Purchases** to prepare supplier orders and receive stock.

### Create Purchase Order

1. Open **Purchases**.
2. Click **Create Purchase Order**.
3. Enter or confirm the PO number.
4. Select a supplier.
5. Select PO date.
6. Add item rows.
7. Select product, quantity, and cost for each row.
8. Add notes if needed.
9. Click **Save Purchase Order**.

Expected Result:
- A purchase order is created with `pending` status.

Notes:
- At least one supplier and one product must exist in the branch before creating a PO.
- PO number must be unique per branch.

### Receive Products

1. Open **Purchases**.
2. Open the purchase order.
3. Click **Receive Stock**.
4. Enter quantities in **Receive Now**.
5. Click **Save Receiving**.

Expected Result:
- Product stock increases.
- Inventory movements are recorded.
- The purchase order status updates.

### Partial Receiving

Partial receiving is supported.

Example:
- Ordered quantity is 10.
- You receive 4 today.
- The PO becomes `partial`.
- You can receive the remaining 6 later.

### Purchase Status

Purchase order statuses:

- `pending`: No stock has been fully received yet.
- `partial`: Some stock has been received, but not all ordered quantities.
- `received`: All ordered quantities have been received.

Notes:
- Fully received purchase orders cannot be received again.
- The current implementation does not provide a separate PO edit or cancel screen.

## 9. Quotations

Use **Quotations** to prepare customer quotes and convert them to POS sales without retyping items.

### Create Quotation

1. Open **Quotations**.
2. Click **Create Quotation**.
3. Confirm or enter the quotation number.
4. Select a customer or leave as **Walk-in Customer**.
5. Set **Valid Until** if needed.
6. Select status: **Draft** or **Issued**.
7. Add notes if needed.
8. Add product rows and quantities.
9. Select discount if applicable.
10. Click **Save Quotation**.

Expected Result:
- The quotation is saved and can be viewed, printed, edited, cancelled, or converted if its status allows it.

Notes:
- Quotation stock is checked when converted to a sale, not when the quote is created.
- Senior/PWD quotation discounts require a selected customer.

### Edit Quotation

1. Open **Quotations**.
2. Click the pencil/edit button, or open a quotation and click **Edit**.
3. Update customer, date, status, notes, items, or discount.
4. Click **Update Quotation**.

Notes:
- Only `draft` and `issued` quotations can be edited.
- Converted or cancelled quotations cannot be edited.

### Print Quotation

1. Open a quotation.
2. Click **Print**.
3. Choose the printer in the browser print dialog.

Expected Result:
- A print-friendly quotation is printed.

### Cancel Quotation

1. Open a quotation.
2. Click **Cancel Quotation**.
3. Confirm cancellation.

Expected Result:
- The quotation status becomes `cancelled`.

Notes:
- Only `draft` and `issued` quotations can be cancelled.
- Converted quotations cannot be cancelled.

### Convert Quotation to Sale

1. Open **Quotations**.
2. Open a `draft` or `issued` quotation.
3. Click **Convert to POS Sale**.
4. Review the loaded cart in POS.
5. Enter amount tendered and payment method.
6. Click **Convert Quotation to Sale**.

Expected Result:
- A normal POS sale is created.
- Stock is deducted.
- The quotation status becomes `converted`.
- The quotation links to the created sale receipt.

Notes:
- Items and discount from the quotation are locked during conversion.
- Checkout stops if stock is insufficient.
- If customer is required in Settings, the quotation must have a customer before conversion.

### Quotation Statuses

- `draft`: Editable and convertible.
- `issued`: Editable and convertible.
- `converted`: Already converted to a POS sale.
- `cancelled`: Cancelled and no longer convertible.

## 10. Sales (POS)

Use **POS Checkout** to sell products.

### Search Products

1. Open **POS Checkout**.
2. Use the **Scan barcode or search product name/SKU** field.
3. Select a product card to add it to the cart.

Expected Result:
- The item appears in the cart.

### Barcode Scanning

1. Click inside the POS search field.
2. Scan the barcode.
3. Select the matching product if needed.

Tip:
- Most barcode scanners type into the active field automatically.

### Customer Selection

If customer tracking is enabled:

1. Select a customer from the Customer dropdown.
2. Leave as **Walk-in Customer** if allowed.
3. Use **Quick Add Customer** if the customer is not yet saved and your role can manage customers.

Notes:
- If **Require Customer On Sale** is ON, checkout is blocked until a real customer is selected.
- If customer tracking is OFF, POS does not show the customer selector.

### Discounts

Available discount types:

- No discount
- Percentage
- Fixed Amount
- Senior
- PWD

To apply a manual discount:

1. Select **Percentage** or **Fixed Amount**.
2. Enter discount value.
3. Review subtotal, discount, and total.

Notes:
- Discount cannot exceed subtotal.
- Total cannot become negative.

### Senior/PWD Discounts

1. Make sure customer tracking is enabled.
2. Select a real customer.
3. Select **Senior (20%)** or **PWD (20%)**.
4. Complete checkout.

Notes:
- Senior and PWD discounts require customer tracking and customer selection.
- Senior/PWD options can be enabled or disabled in Settings.

### Payment Methods

POS supports these payment method labels:

- Cash
- GCash
- Card

Notes:
- Cash payments require the cashier to have an open cash drawer shift.
- Amount tendered must cover the final total.

### Checkout

1. Add products to the cart.
2. Select customer if needed.
3. Apply discount if needed.
4. Select payment method.
5. Enter amount tendered.
6. Click **Complete Sale**.

Expected Result:
- The sale is saved as `completed`.
- Stock is deducted.
- Inventory movement records are created.
- Cash sale is recorded in the cash drawer if payment is Cash and an open shift exists.
- Receipt page opens with auto-print mode.

### Receipt Printing

1. Open the receipt after checkout or from Sales History.
2. Click **Print Receipt** or **Auto Print**.
3. Confirm printer and paper size in the browser print dialog.

Notes:
- Receipt uses store name, logo, address, phone, branch, cashier, payment, customer, discount, returns, void status, and footer when available.
- Thermal paper width is controlled in Settings: 58mm or 80mm.

## 11. Sales Returns

Use returns for actual customer returns or refunds. Returns are different from voids.

### Process Returns

1. Open **Sales**.
2. Find the sale.
3. Click **Return**.
4. Enter return reason.
5. Enter return quantity for each item being returned.
6. Click **Process Return**.

Expected Result:
- Return/refund record is created.
- Product stock is restored.
- Inventory movement type `return` is logged.
- The sale shows returned or partial return status in Sales History.

Notes:
- Voided or pending-void sales cannot be returned.
- Returned quantity cannot exceed sold quantity minus already returned quantity.

### Partial Returns

Partial returns are supported.

Example:
- Customer bought 5 units.
- Customer returns 2 units.
- The sale remains in history with partial return status.
- The remaining 3 units can still be returned later if needed.

### Stock Restoration

Returned items are added back to product stock.

Note:
- If cash is physically paid from the drawer for a refund, record the cash movement in Cash Drawer as needed.

## 12. Void Sale Workflow

Use voids for cashier mistake correction. Voids are not the same as returns/refunds.

### Request Void

1. Open **Sales**.
2. Find a completed sale with no returns.
3. Click **Request Void**.
4. Enter a void reason.
5. Submit the request.

Expected Result:
- Sale status becomes `void_requested`.
- Stock is not restored yet.
- The request appears in Void History.
- The action is recorded in Audit Logs.

### Approve Void

1. Log in as a user with void approval permission, such as Manager or Admin.
2. Open **Sales** or **Void History**.
3. Open the pending void request.
4. Review sale details and items to restore.
5. Enter or confirm the void reason.
6. Click **Approve Void**.

Expected Result:
- Sale status becomes `voided`.
- Product stock is restored.
- Inventory movement type `sale_void` is logged.
- For cash sales with an open cash drawer session, a drawer refund movement is recorded.
- Reports and Z-Read exclude voided sales from sales totals.
- The approval is recorded in Audit Logs.

### Restrictions

The system blocks voiding when:

- The sale is already voided.
- The sale has return/refund records.
- The sale is already included in a finalized Z-Read window.
- A cash sale's linked cash drawer session is already closed.
- The sale is not in the correct status for the requested step.

Notes:
- Completed sales must first become `void_requested`.
- Approval is allowed only for `void_requested` sales.

### Audit Trail

Void request and approval actions are logged in Audit Logs with user, branch, action, details, and timestamp.

## 13. Cash Drawer

Use **Cash Drawer** to manage cashier shifts and cash movements.

### Open Shift

1. Open **Cash Drawer**.
2. Enter opening amount.
3. Enter notes if needed.
4. Click **Open Shift**.

Expected Result:
- Your cash drawer shift is open.
- Cash payments can now be accepted in POS.

Notes:
- A user can have only one open shift at a time in the branch.

### Closing Shift

1. Open **Cash Drawer**.
2. Count the physical cash.
3. Enter **Actual Closing Cash**.
4. Enter close notes if needed.
5. Click **Close Shift**.
6. Confirm closing.

Expected Result:
- Shift status becomes closed.
- Expected cash, actual cash, and variance are stored.
- The closed shift becomes available for Z-Read finalization.

### Cash Movements

When a shift is open, you can record:

- Cash In
- Cash Out
- Adjustment
- Refund

Steps:

1. Select movement type.
2. Enter amount.
3. Enter remarks or reference.
4. Click **Save Movement**.

Expected Result:
- The movement appears in the current drawer transactions.
- Expected cash is updated.

## 14. Daily Closing (Z-Read)

Use **Z-Read Closing** after a cash drawer shift is closed.

### Finalize Closing

1. Open **Cash Drawer** and close the shift first.
2. Open **Z-Read Closing**.
3. Find the closed shift under **Closed Shifts Ready for Z-Read**.
4. Enter optional notes.
5. Click **Finalize**.
6. Confirm finalization.

Expected Result:
- A Z-Read closing report is created.
- The cash session cannot be finalized again.

### Print Report

1. Open **Z-Read Closing**.
2. Click **View** or **Print** beside a closing.
3. Click **Print** on the report page if needed.

Expected Result:
- A print-friendly Z-Read report is printed.

### Variance

Variance is the difference between actual counted cash and expected cash.

- Positive variance means actual cash is higher than expected.
- Negative variance means actual cash is lower than expected.

### Daily Totals

The Z-Read report includes:

- Opening cash
- Gross before discount
- Discounts
- Net sales after discount
- Cash sales
- Non-cash sales
- Returns/refunds
- Voids
- Expenses
- Cash in/adjustments
- Cash out/drawer refunds
- Expected cash
- Actual counted cash
- Variance
- Cashier and branch details

Notes:
- Voided sales are excluded from sales totals and shown separately.
- Returns/refunds are shown separately.

## 15. Reports

Use **Reports** to review branch performance for a selected date range.

### Sales Reports

The Reports page shows:

- Total sales
- Sale count
- Total discounts
- Return totals
- Void totals
- Expenses
- Net revenue
- Estimated gross and net profit where cost data exists

Voided sales are excluded from sales totals.

### Inventory Reports

The Reports page includes a **Low Stock Report** showing products at or below their low stock threshold.

Inventory movement details are reviewed in the **Inventory** module.

### Purchase Reports

The current Reports page does not have a separate purchase chart. Purchase information is reviewed in **Purchases**, where users can see PO number, supplier, status, ordered quantity, received quantity, remaining quantity, cost, and receiving progress.

### Customer Reports

Customer purchase information is reviewed from **Customers > View**. The customer history page shows sales count, gross sales, refunds, net amount after refunds, and receipt links.

### Dashboard Analytics

Dashboard and Reports provide analytics such as:

- Sales trend
- Payment method breakdown
- Top selling products
- Cashier performance
- Low stock items

Tip:
- Use the date range filters on Reports to review specific days, weeks, or months.

## 16. User Management

Use **Users** to create staff accounts and assign role/branch access.

### Create Users

1. Open **Users**.
2. Click **Add User**.
3. Enter full name.
4. Enter username.
5. Enter password with at least 6 characters.
6. Select role.
7. Assign branch access based on the role.
8. Keep **Active user** enabled if the user should be able to log in.
9. Save the user.

Expected Result:
- The user can log in according to role, branch assignment, and active status.

### Assign Roles

Available roles:

- Admin
- Area Manager
- Manager
- Cashier
- Inventory Clerk
- Purchasing Staff

Notes:
- Admin users do not need a branch assignment.
- Area Managers need at least one assigned branch.
- Manager, Cashier, Inventory Clerk, and Purchasing Staff need exactly one branch assignment.

### Assign Branches

For single-branch roles:

1. Select one branch in **Branch Assignment**.
2. Save the user.

Expected Result:
- User logs in directly to that branch.

### Area Manager Branch Assignments

For Area Manager:

1. Select **Area Manager** role.
2. Check one or more branches under **Area Manager Branches**.
3. Save the user.

Expected Result:
- Area Manager can access only the checked branches.
- Branch switcher appears if more than one assigned branch is available.

## 17. Permissions

Permissions control menus and access.

### How Permissions Affect Menus and Access

- Admin always has full access.
- Other roles only see menus they are allowed to access.
- If a user opens a page without permission, the system shows Access Denied.
- Permission changes affect modules such as POS, sales, products, inventory, purchases, quotations, reports, users, settings, audit logs, cash drawer, and Z-Read.

Steps to update permissions:

1. Open **Permissions**.
2. Review the permission list.
3. Check or uncheck permissions for each role.
4. Click **Save Permissions**.

Notes:
- Be careful removing access from operational roles.
- Cashiers need POS access to process checkout.
- Managers/Admin need void approval permission to approve sale voids.

## 18. Audit Logs

Use **Audit Logs** to review important system actions.

### What Activities Are Recorded

Audit logs include actions such as:

- Successful login
- Failed login
- Logout
- Branch switch
- Denied branch switch
- Product, customer, supplier, branch, user, permission, and settings updates
- POS sale completion
- Returns/refunds
- Void requests and approvals
- Purchase order creation and receiving
- Z-Read creation
- Cash drawer actions

### How to Review Logs

1. Open **Audit Logs**.
2. Filter by date range, branch, user, action, or module.
3. Review the table.

Audit log columns include:

- Date/time
- User
- Branch
- Module
- Action
- Details
- IP address

Note:
- Area Managers and branch-restricted users only see logs for accessible branches.

## 19. Settings

Use **Settings** to control store profile, receipt layout, customer tracking, and discount options.

### Store Information

Settings include:

- Store Name
- Store Phone
- Store Address
- Store Logo URL / Path
- Currency Symbol
- Tax Rate
- Default Low Stock Threshold

### Receipt Settings

Receipt settings include:

- Receipt Footer
- Thermal Printer Width: 58mm or 80mm

Tip:
- After changing printer width, print a completed sale receipt to test browser printer settings.

### Customer Tracking

**Enable Customer Tracking**

- ON: POS shows customer selection.
- OFF: POS hides customer selection and treats sales as walk-in.

### Require Customer On Sale

**Require Customer On Sale**

- ON: Cashier must select a real customer before checkout.
- OFF: Customer is optional.

Note:
- This setting is treated as OFF when customer tracking is disabled.

### Senior/PWD Settings

Settings include:

- Enable Senior Discount
- Enable PWD Discount

When enabled, POS and quotations can use Senior/PWD discount options if a customer is selected.

## 20. Daily Operating Procedures

### Opening the Store

1. Log in with your username and password.
2. Confirm the active branch shown in the top bar.
3. Open **Cash Drawer**.
4. Enter opening cash and open the shift.
5. Open **Dashboard**.
6. Review low stock alerts.
7. Open **Inventory** or **Purchases** if stock needs attention.

Expected Result:
- Staff are ready to process sales and the cash drawer is ready for cash payments.

### During Business Hours

Sell products:

1. Open **POS Checkout**.
2. Search or scan products.
3. Select customer if needed.
4. Apply discount if needed.
5. Complete checkout.
6. Print receipt.

Process quotations:

1. Open **Quotations**.
2. Create or edit a quote.
3. Print the quotation if needed.
4. Convert it to POS sale when the customer accepts.

Receive inventory:

1. Open **Purchases**.
2. Open the PO.
3. Receive quantities delivered by the supplier.

Handle returns:

1. Open **Sales**.
2. Click **Return** for the sale.
3. Enter reason and item quantities.
4. Process return.

Request voids:

1. Open **Sales**.
2. Click **Request Void**.
3. Enter reason.
4. Wait for Manager/Admin approval.

### End of Day

1. Count physical cash.
2. Open **Cash Drawer**.
3. Enter actual closing cash.
4. Close the shift.
5. Open **Z-Read Closing**.
6. Finalize the closed cash session.
7. Print the Z-Read report.
8. Review Reports if needed.
9. Log out.

Expected Result:
- Cash is reconciled.
- Daily closing report is finalized.
- User session is closed.

## 21. Best Practices

### Inventory Management

- Use purchase orders for supplier deliveries when possible.
- Use Stock In only for simple stock additions.
- Use Adjust Stock for count corrections.
- Always enter clear reasons for adjustments and reversals.
- Review low stock items daily.

### Customer Data

- Use real customer records for Senior/PWD discounts.
- Keep phone and email updated when available.
- Use Walk-in Customer only when customer details are not needed.

### Password Security

- Change the default admin password before real use.
- Use unique usernames.
- Do not share accounts.
- Deactivate users who no longer work for the business.

### User Permissions

- Give each role only the access needed for their job.
- Cashiers should not approve their own void requests unless the business explicitly allows it through permissions.
- Review permissions after adding new staff roles.

### Daily Backups

- Use **Backup & Restore** to download a SQL backup.
- Back up after daily closing.
- Store backups outside the web server folder.
- Keep dated backup filenames.

### Avoiding Common Mistakes

- Do not delete products or categories that already have history.
- Do not close a cash drawer until cash is counted.
- Do not finalize Z-Read until the shift is truly finished.
- Use returns for customer refunds and voids for cashier mistakes.
- Check stock before converting large quotations.
- Record cash refund movements when money is taken from the drawer.

## 22. Frequently Asked Questions (FAQ)

### Cannot log in

Check:

- Username is correct.
- Password is correct.
- User account is active.
- User has valid branch assignment.
- Area Manager has at least one assigned branch.
- Branches exist in the system.

### Customer not appearing

Check:

- You are in the correct branch.
- Customer was created in the active branch.
- Customer tracking is enabled in Settings.
- Your role has customer view permission.

### Product out of stock

Use one of these:

- **Inventory > Stock In** for simple stock additions.
- **Inventory > Adjust Stock** for corrections.
- **Purchases > Receive Stock** for supplier deliveries.

### Cannot process checkout

Check:

- Cart is not empty.
- Product stock is sufficient.
- Amount tendered covers the final total.
- Customer is selected if required.
- Cash drawer shift is open for Cash payment.
- Discount is valid and does not exceed subtotal.

### Cannot approve void

Check:

- Your role has `sales.void.approve`.
- Sale status is `void_requested`.
- Sale has no returns/refunds.
- Sale is not already included in a finalized Z-Read.
- Linked cash drawer session is still open for cash sales.

### Receipt will not print

Try:

- Click **Print Receipt** on the receipt page.
- Check browser pop-up or print settings.
- Confirm printer is connected.
- Set paper width to 58mm or 80mm in Settings.
- Use browser print preview to confirm layout.

### Quotation cannot convert

Check:

- Quotation status is `draft` or `issued`.
- Product stock is sufficient.
- If customer is required, quotation has a selected customer.
- Your role has POS access.
- Your role has quotation view access.
- Payment amount covers the final total.

### Branch access issues

Check:

- Admin can access all branches.
- Area Manager must have assigned branches.
- Manager, Cashier, Inventory Clerk, and Purchasing Staff must have one valid branch in their user record.
- Branch switcher appears only for Admin or Area Manager with more than one accessible branch.

### Low stock still showing after receiving stock

Check:

- Receiving was saved successfully.
- Product belongs to the active branch.
- Product stock is still at or below the low stock threshold.
- Adjust the product threshold if the alert level is too high.

### Return button is disabled

Possible reasons:

- Sale is already fully returned.
- Sale is voided or pending void.
- Sale is not eligible for return.

### Cash payment is blocked

Open a cash drawer shift first:

1. Open **Cash Drawer**.
2. Enter opening amount.
3. Click **Open Shift**.
4. Return to POS and complete the cash sale.

