Setup Required

Supabase Key Missing

Your app file still has the placeholder anon key. Open index.html and replace:

PASTE_YOUR_SUPABASE_ANON_KEY_HERE

Use your Supabase anon public key. Do not use the service role key.

Pharmacy PMS Starter

Login

Use the admin user you created in Supabase Authentication.

This is your first Supabase-connected starter app. Use demo data only.
Username: Loading... Email: Loading...
🔑 Change Password
🚪 Logout

Unsaved Changes

You have unsaved changes. Are you sure you want to leave?

Attendance

Change Password

Dashboard

Welcome to Pharmacy PMS

Clean role-based workspace for sales, inventory, purchase, cash, HRM, and reports.

Sales Operations

🛒

POS / New Sale

🤝

Customers

🔙

Sales Return

💵

Due Collection

Purchase & Procurement

📝

Purchase Request

🚚

Purchase Order

📦

Receive GRN

🏭

Suppliers

🔗

Supplier-wise Medicines

Inventory Management

💊

Medicine List

➕

Add Medicine

⚖️

Stock Adjustment

⚠️

Alerts Center

Reports & Analytics

📈

Owner Dashboard

🧾

Sales History

📓

Due Ledgers

📥

Advanced Exports

📦

Stock / Expiry Reports

Cash & Accounting

🔒

Daily Closing

🏦

Cash Transactions

🧾

Expenses

Administration & HRM

👥

Human Resource Management

⚙️

Pharmacy Settings

🛡️

User Access Control

ℹ️

About / Roadmap

Products / Medicines

Product Name Generic Name Group Company Current Stock Reminder Stock Rack Action

Add Product / Medicine

Editing an existing medicine. Batch/price fields below are for new medicines only and are hidden while editing — use Stock Adjustment to change stock/batches. Cancel edit

Quick Add Category / Manufacturer

Stock Movement

Use this to test stock in/out. Later purchase and sales modules will create these movements automatically.

Add Supplier

Editing an existing supplier. Cancel edit

Supplier List

CodeNameContact PersonContact NumberPhoneAddressStatusAction

Supplier-wise Products

Bangladesh pharmacy workflow: first see supplier/company list, then view products supplied by that supplier.

Supplier Code Supplier Name Address Contact Person Contact Number Product Count Action

Products Under Supplier

Product Name Generic Name Group Company MRP (Tk) Last PP Current Stock Reminder Stock Rack

Link Product to Supplier

Use this when a supplier supplies an existing medicine/product.

Purchase Request Workflow

Pick a supplier, then either add items one by one or click Auto-fill Low Stock to instantly pull in every one of that supplier's medicines that is at/below its reminder stock level. No stock changes happen at request stage.

Adds every product below reminder stock, linked or defaulted to the selected supplier.

Add Request Item (manual / one at a time)

Purchase Request Cart (edit quantities directly, then save)

ProductGenericCurrent StockReminder StockRequested QtyEstimated PriceTotalNoteAction
Estimated total: 0.00
0Total Requests
0Submitted
0Approved
0Converted to PO

Purchase Request List

Request NoDateNeededSupplierPriorityStatusItemsEstimated TotalNoteActions

Purchase Order

Create Purchase Order (PO)

Add Purchase Item

Purchase Cart

ProductQtyEst. Purchase PriceEst. Sale PriceTotalAction
Cart total: 0.00
0Purchase Orders
0Total Purchase Value
0Total Paid
0Total Due

Purchase Order List

PO NumberDateSupplierStatusGrand TotalPaidDueNoteAction

Receive Purchase Order / GRN

Use this when goods physically arrive. This creates batches, expiry records, purchase receive records, and IN_PURCHASE stock movements.

PO Items to Receive

For converted purchase requests, batch is empty. Enter batch number and expiry date during receive.
ProductOrdered QtyReceive QtyBatch NoExpiry DatePurchase PriceMRP
0Pending/Ordered POs
0Received POs
0GRN Records
0Total Received Qty

Receive History

GRN NoDatePOItemsTotal QtyReceived ByNote

Pharmacy Alerts Center

Fast management view for low stock, expiry, pending purchase requests, and pending purchase orders.

0Low Stock
0Expired/Expiring
0Pending PR
0Pending PO Receive

Low Stock Alert

ProductGenericCurrent StockReminder StockDefault SupplierRack

Expiry Alert

ProductBatchExpiryMRPStatus

Pending Purchase Requests

Request NoNeeded DateSupplierPriorityStatusItems

Purchase Orders Waiting Receive

PO NoDateSupplierTotalStatus

POS Cart & Checkout

ProductQtyPriceTotalStock NowAction
0Items
0Total Qty
0Subtotal
0After Discount
Change Due
৳ 0.00
Cart total: 0.00

Find Medicine

Searches only when you press Enter — stays fast even with thousands of products.
ProductGroupAvailable Qty
Type a medicine name above and press Enter.
0 results

Confirm Sale

Are you sure you want to confirm this sale?

Sale Invoice

Supplier Detail

Medicine Detail

Cash Management

Track manual cash in/out. Sales with paid amount automatically create SALE_COLLECTION transactions.

0Total Cash In
0Total Cash Out
0Cash Balance
0Transactions

Cash Transactions

DateTypeAmountReferenceNote

Daily Cash Closing

Close a cash account for a selected date. The system calculates opening, cash in, cash out, expected balance, counted cash, and difference.

0Closing Records
0Last Expected
0Last Counted
0Last Difference

Closing History

DateCash AccountOpeningCash InCash OutExpectedCountedDifferenceClosed ByNote

Expense Management

Create pharmacy expenses. Each expense automatically creates an EXPENSE cash transaction.

Quick Add Expense Category

0Expense Records
0Total Expenses
0Categories
0This Month

Expense List

DateCategoryCash AccountAmountNote

Customer List

Customer IDNamePhoneEmailAddressOpening BalanceStatusAction

Add Customer

Editing an existing customer. Cancel edit

Customer Detail

Sales / Purchase Return

Sales Return

Select the original invoice first — only medicines actually sold on that invoice can be returned, up to the quantity sold. Price and refund are calculated automatically (discount included) and cannot be edited.

0Sales Returns
0Sales Refunds

Sales Returns List

NoDateCustomerRefundNote

Purchase Return

Select the original purchase order first — only medicines actually received on that order can be returned, up to the quantity received. Price and refund are calculated automatically and cannot be edited.

0Purchase Returns
0Purchase Refunds

Purchase Returns List

NoDateSupplierRefundNote

Due Collection / Payments

Customer Payment Collection

0Customer Payments
0Collected

Customer Payments

DateCustomerAmountMethodNote

Supplier Payment

0Supplier Payments
0Paid to Suppliers

Supplier Payments

DateSupplierAmountMethodNote

Human Resource Management

Choose a section below. Each card is shown only if your account has that specific permission. Attendance and Leave each open their own sub-menu, matching the Master Development Plan's nested structure.

🧑‍🤝‍🧑 Co-workers Employee list & profiles 🕒 Attendance Duty roster & summary 🗓️ Leave Requests & adjustments 💰 Payroll Salary payments & slips

Attendance

Employees check in/out from anywhere via the "Attendance" button in the top bar. This hub is for managing the weekly roster and reviewing summaries.

📅 Duty Roster Weekly schedule & holiday 📊 Attendance Summary Monthly rollup & daily detail

Need the full check-in page with the recent event log (IP, location, late/early flags) instead of the quick topbar button?

Open Attendance Check-in & Events →

Leave

Choose a section below.

🗓️ Leave Requests Casual / Earned / Sick / Unpaid 🔄 Duty Adjustments Day-off swap

Leave

Casual/Earned/Sick are paid and capped at the annual allocation below — the system blocks a request that exceeds the remaining balance rather than falling back to Unpaid automatically. Unpaid Leave has no cap but deducts salary. Creating a request needs hrm.leave.create; approving/rejecting needs hrm.leave.edit; withdrawing a pending request needs hrm.leave.delete.

Leave Balance

Unused Casual/Earned/Sick leave expires at year-end and does not carry forward.

-Casual (Allocated / Taken / Remaining)
-Earned (Allocated / Taken / Remaining)
-Sick (Allocated / Taken / Remaining)
-Unpaid Taken (no cap, deducts salary)

Request Leave

Leave Requests

EmployeeTypeStartEndDaysReasonStatusAction

Adjustment

Employee works a normally-scheduled day off in exchange for a different day off later — the working day does not count as absent once approved, and it stays consistent with Duty Roster and Attendance Summary automatically. Creating a request needs hrm.adjustment.create; approving/rejecting needs hrm.adjustment.edit; withdrawing a pending request needs hrm.adjustment.delete.

Request Adjustment

Adjustment Requests

EmployeeWorking DayDay OffTimeReasonStatusAction

Duty Roster

Per-employee weekly schedule. Pick an employee, then set start/end time and Holiday Y/N for each day. One-click Save. Saving requires hrm.duty_roster.edit (or the legacy umbrella hrm.attendance).

Attendance — Check In / Check Out

Self-service attendance. Pick your action (Check In or Check Out), choose your location (In Office / Outside), add an optional note, then submit. You cannot check in twice without checking out first. Late / early flags are computed by the server against your Duty Roster.

Today's Status

Recent Attendance Events

DateEmployeeTypeTimeLocationLate?Early?IPNote

Attendance Summary

Monthly rollup computed server-side from attendance events and the duty roster. Click a row to drill into that employee's daily detail for the selected month.

Monthly Rollup

EmployeePresentLateEarly ExitHolidaysPay DaysAbsentAction

Daily Detail

DateDayRosterStatusEvents

Payroll

Live, computed fresh every time this page opens or refreshes -- nothing here is cached or pre-calculated. Approve any pending Leave/Adjustment requests for the month first, since Payroll reads directly from Attendance Summary's live numbers.

0Co-workers This Month
0Total Net (Before Bonus)
0Total Already Paid
0Paid / Partial / Unpaid

Salary Summary & Details Drill-down

EmployeeDays EmployedLateEarlyUnpaid LeaveAbsent Deduction DaysProrated BaseDeduction AmtNet (before bonus) Already PaidRemainingStatusAction

Pay Salary

0Salary Payments
0Total Salary Paid
0Total Bonus
0Total Deduction

Salary Payment List

DateMonthEmployeeBasicBonusDeductionNetNoteAction

Add Employee

Attendance Entry Deprecated

This manual entry form has been superseded by the new self-service Attendance system (Duty Roster + check-in/check-out, under the HRM Hub → Attendance). It's disabled to prevent two disconnected attendance histories from building up. The records already saved here remain visible below for historical reference.
0Employees
0Present Records
0Absent Records
0Attendance Records

Employee List

CodeNamePhoneDepartmentDesignationSalaryStatusEmployment Status

Attendance List

DateEmployeeStatusCheck InCheck OutNote

Customer & Supplier Ledgers

0Total Sales
0Total Paid
0Net Due
DateTypeReferenceDebit (Sale)Credit (Paid)Balance
0Total PO Value
0Total Paid
0Net Due
DateTypeReferenceCredit (PO)Debit (Paid)Balance

Owner Dashboard (Business Intelligence)

Real-time profitability, inventory valuation, and cash standing.

0Today's Profit (Est)
0Today's Revenue
0Total Inventory Value (Cost)
0Total Inventory Value (MRP)

Top 10 Fast Moving Items

ProductSold QtyRevenue Generated

Slow / Dead Stock Alert

ProductStock QtyCapital Tied Up

Sales Report / History

Moved here from POS so cashiers get a clean, distraction-free checkout screen. Edit is only available to Owner/Manager/Super Admin.

0Sales Invoices
0Total Sales
0Sales Paid
0Sales Due
InvoiceDate & TimeCustomerSold ByStatusTotalPaidDueMethodAction

Advanced Reports & Export Center

This report center calculates totals from your current Supabase data. Use it for demo/testing and management review.

0Net Sales
0Purchase Value
0Cash Balance
0Inventory Value

Management Summary

Export Data

Download CSV or JSON backup of your demo data. This is useful before making big AI-generated changes.

Inventory Valuation Report

ProductCurrent StockReorder LevelAvg Purchase PriceStock ValueStatus

Due Summary

TypeTotal AmountPaid/CollectedDue

Customer Due Report

CustomerPhoneOpeningSales DuePaymentsNet Due

Supplier Due Report

SupplierContactOpeningPurchase DuePaymentsNet Due

Fast / Slow Moving Medicines

ProductGenericSold QtySales ValueCurrent StockMovement

Profit Estimate Report

Estimated from sale price minus batch purchase price. Use as an estimate until accounting rules are finalized.

ProductSold QtySales ValueEstimated CostEstimated Profit

Pharmacy / Invoice Settings

These settings are used in sales invoice and purchase order printing.

Safety Checklist Before Real Use

This is still a demo/MVP. Before real use: strict permissions, backups, paid domain, reviewed RLS policies, and production testing are required.
  • Use fake data while testing.
  • Export JSON backup before every big update.
  • Never expose Supabase service role key in frontend.
  • Do not give all staff admin-level access in production.

Super Admin Permission Control

Only Super Admin can control user permissions. Select a user, tick the functions they are allowed to use, then save.

Super Admin always has full access. For other users, missing permission means not allowed.
0Users
0Functions
0Selected for User
0Super Admins

Link Staff Accounts to Employee Records

Master Plan foundational step: link each login account (profile) to its HR record (employee). This unlocks Attendance self-check-in and Payroll's attendance-based deductions. One-time setup — new hires only need this done once when their account is created.

Login AccountLinked EmployeeAction

Permission Matrix

Grouped by system module. Tick/check the allowed functions for the selected user.

User Permission Summary

UserRolesAllowed FunctionsStatus

Low Stock Report

ProductCurrent StockReorder LevelStatus

Expiry Report

Product IDBatchExpiry DateSale PriceStatus

Roadmap

This is only the first Supabase-connected starter version.

  • Current: login, products, suppliers, customers, stock movements, purchase orders, sales/POS, returns, payments, cash, payroll, HRM, attendance, reports.
  • Current upgrade: multi-item POS and purchase carts. Next: invoice print/PDF, strict role permissions, security hardening, better UI.
  • Later: HRM, attendance, payroll, role permissions, audit logs.
Use fake/demo data only until production security, backups, and paid domain/hosting are ready.