PharmaDesk
User Guide — Version 2.1.0
Contents
- The Idea in One Minute
- Setting Up the Server
- First Run — What to Do in Order
- The Four Roles
- Dashboards — Everyday Tasks
- Raising a Bill
- Collecting Payment
- Medicines, Batches & Expiry
- Purchases & Suppliers
- Returns & Stock Adjustments
- The Nine Reports
- Settings
- Databases on the Server
- Automatic Backup to Google Drive
- Editing & Deletion Rules
- Troubleshooting & FAQs
1. The Idea in One Minute
PharmaDesk runs a single pharmacy. One Windows machine in the shop holds the database and serves every screen; everyone else — a second till, a stock tablet, the owner’s laptop — opens a browser, goes to that machine’s address and signs in. Nothing is installed on those devices, and nothing is hosted by us.
The shape of a day looks like this:
- A bill is raised unpaid by whoever is at the counter, and stock comes off the batch nearest to expiry.
- A cashier settles it from the Pending Bills queue, by cash, card, bank transfer or other.
- Goods received from a supplier create the batches, with batch number, expiry and cost.
- What sold, what it earned, what is owed and what is about to expire are reports, not a guess.
2. Setting Up the Server
Install PharmaDesk on the shop machine and open it. What you get is the server window — not the counter. It has three tabs.
Service
Start and stop the service, and see the addresses to hand to staff once it is running. It also shows the active database, its file, the addresses being listened on, the ports, the version, and how much of the machine it is using. The result of the last automatic backup is reported here too, in red if it failed.
Configuration
The web port and the secure (SSL) port; which of the machine’s network addresses to listen on, or simply all of them; a certificate and key file for HTTPS, with a Generate self-signed certificate link if you do not have your own; and firewall rules that allow or refuse particular addresses against a default policy. Press Save configuration, then restart the service for the change to take.
Database
Create a database, import one, choose which is active, and set up backups. See Databases on the Server.
3. First Run — What to Do in Order
- Create a database on the Database tab. Give it an alias, a file name, and the administrator username and password that staff will first sign in with.
- Start the service on the Service tab and note the address it gives you.
- Sign in from a browser as that administrator. You will be asked to change the password on first sign-in.
- Settings — pharmacy name, address, phone and email (these print on receipts), the currency symbol and whether it goes before or after the amount, the low-stock threshold, and how many days ahead counts as “expiring soon”.
- Create staff logins and give each one a role. Set the forced-password-change flag so each person picks their own password on first sign-in.
- Add suppliers, then add medicines — name, generic name, form, strength, base unit, shelf location, and one or more pack sizes with prices.
- Record a purchase for each medicine you already hold. This is what creates the batches with their batch numbers and expiry dates; there is no separate “opening stock” screen.
- Run one sale end to end before you go live, and print the slip.
- Set up the Google Drive backup and press Back up now once, so you find out today that it works rather than during an emergency. See Automatic Backup.
4. The Four Roles
Roles are enforced by the server, not by which buttons a screen happens to show.
| Role | What it is for |
|---|---|
| Admin | The owner or whoever runs the machine. Included in every permission below, plus user management, settings, the audit log, and every deletion. A single-staff pharmacy runs on this login. |
| Pharmacist | The licensed role, with authority over the shelf: the medicine catalogue, suppliers, purchases and purchase payments, purchase returns, stock adjustments, sales returns, and every report. May also dispense — that is, raise a bill. |
| Salesman | The sales counter and nothing more: build a bill and hand over the medicines. Bills are always saved unpaid. |
| Cashier | Collecting payment, and nothing else — the Pending Bills queue and the receipts that come out of it. |
| Function | Admin | Pharmacist | Salesman | Cashier |
|---|---|---|---|---|
| Raise a bill (dispense) | ✓ | ✓ | ✓ | ✗ |
| Collect payment | ✓ | ✗ | ✗ | ✓ |
| Correct an unpaid bill | ✓ | ✓ | ✓ | ✓ |
| Delete a bill | ✓ | ✗ | ✗ | ✗ |
| Sales returns | ✓ | ✓ | ✗ | ✗ |
| Medicines & suppliers | ✓ | ✓ | ✗ | ✗ |
| Purchases & purchase returns | ✓ | ✓ | ✗ | ✗ |
| Stock adjustments | ✓ | ✓ | ✗ | ✗ |
| Reports | ✓ | ✓ | ✗ | ✗ |
| Users, settings, audit log | ✓ | ✗ | ✗ | ✗ |
5. Dashboards — Everyday Tasks
Each role opens on its own dashboard: a row of Everyday tasks tiles named after what the person came to do, the two or three numbers that role is judged on, and the list they will act on.
| Role | Tiles | Numbers and lists |
|---|---|---|
| Salesman | Start a Bill · Find a Medicine · Reprint a Slip | Bills today, bills awaiting payment, and the bills you raised that are still unpaid. |
| Cashier | Collect Payment · Find a Receipt · Today’s Takings | Bills waiting, the amount still to collect, today’s takings — over the payment queue, with a Collect button on every row. |
| Pharmacist | Dispense Medicines · Receive Stock · Pull Expiring Stock | Expiring soon, already expired, low stock — over a list of short-dated batches with batch number, expiry date, days left and quantity. |
| Admin | Add a Staff Login · Business Settings · Sales & Profit Reports | Bills today, today’s takings, low stock, expiring soon, staff logins — with the staff list and the low-stock list below. |
Today’s Takings opens into a per-bill list split by payment mode, with a total. That is the view to use when the cash drawer disagrees with the screen.
The full menu is always there as well. The tiles are a shortcut, not a simplified mode you can get stranded in.
6. Raising a Bill
- New Sale. Optionally type a customer name; leaving it blank makes it a walk-in.
- Search the medicine by name or generic name. Search is not case-sensitive —
panadolfindsPanadol. - The batch is chosen for you — the earliest-expiring batch that is still valid. You can switch batches from the dropdown; already-expired batches stay listed for stock-correction purposes but are never picked automatically.
- Enter the quantity. The price fills in from the selected batch and pack. Apply an item discount here if the sale warrants one.
- Repeat for each medicine, then Save Sale. The bill is saved unpaid.
- Print Slip to hand over with the medicines. The slip states plainly that the bill has not been paid, so a hand-over docket cannot be mistaken for a receipt.
- Send the customer to the till.
Made a mistake? An unpaid bill can be corrected by anyone at the counter — open it from Sales or Pending Bills and edit it. Once it is settled, only a sales return can change it.
7. Collecting Payment
- Open Pending Bills, or press Collect on a row of the cashier dashboard.
- The dialog shows the receipt number, the customer, the item count, the subtotal, any discount the counter already gave, and the total due.
- Optionally add a cashier discount, as an amount or a percentage. The dialog states the maximum allowed and a reason is required for any discount. The final total updates as you type.
- Choose the payment mode — cash, card, bank transfer, or other — and Confirm Payment.
Finding a past bill
The Sales screen has a search box — type a receipt number or a customer name. There are date filters and a pending-only toggle alongside it. Opening a bill shows every line with quantity, price, discount and total, who served it, whether it was paid and how, and a Print button that reprints that bill’s slip.
8. Medicines, Batches & Expiry
The medicine record
- Name, generic name, form, strength, base unit — what it is.
- Shelf location, e.g. “Shelf A2”, so a new member of staff can find it.
- Pack sizes — several per medicine, each with its own price.
- Active / inactive — take something out of circulation without erasing its history.
Batches
You never create a batch by hand. Receiving a purchase creates it, carrying the batch number, expiry date, cost and quantity from the supplier’s invoice. From then on the batch is the unit of stock: quantity is tracked per batch, and a sale, return or adjustment moves a specific batch.
FEFO — first expiry, first out
Adding a medicine to a bill selects the earliest-expiring batch that has not already expired. This is what keeps short-dated stock moving instead of quietly ageing behind a newer delivery. Expired batches remain visible so they can be adjusted off the shelf, but they are never auto-selected.
Watching expiry
The Stock page’s Expiring tab, and the pharmacist dashboard, list what is short-dated with the days remaining. How far ahead “expiring soon” looks is a setting; so is the low-stock threshold behind the low-stock list.
9. Purchases & Suppliers
- Purchase Entry. Choose the supplier and enter the invoice details.
- Add a line per medicine with its batch number, expiry date, cost and quantity. This is the entry that creates the batch.
- Save. Stock goes up and the amount owed to that supplier goes up with it.
- Record payments against the purchase as you make them, so what you owe each supplier stays a number rather than a pile of invoices. The Payables Aging report buckets those balances by how overdue they are.
Suppliers are maintained under Management → Suppliers with contact details and credit terms.
10. Returns & Stock Adjustments
Sales return — the customer brings something back
- Sales Returns, then find the original bill by receipt number or customer name.
- Enter the quantity coming back per line, up to what was sold. Partial returns are fine.
- Set the date (today by default) and a reason.
- Save. The units go back onto the batch they came from and the customer’s balance is reduced. No manual stock entry is needed.
A return cannot be edited in place — delete it and record it again if a correction is needed. Deleting one reverses it: the stock comes back off, as though the return never happened. Only an administrator may delete one.
Purchase return — goods going back to a supplier
Find the purchase, enter the quantities per batch, give a date and reason, and save. Stock is reduced and a refund is recorded against the purchase, lowering what you owe that supplier. Returns are allowed whether or not the purchase has been paid. Like a sales return, a purchase return is deleted and re-created rather than edited.
Stock adjustment — everything else
For damage, theft, expired units pulled off the shelf, or a count correction. Search the medicine, choose the batch — the list shows batch number, expiry and quantity available — then set the type, whether stock is going up or down, the quantity, and a reason. It applies immediately and appears in the session log.
11. The Nine Reports
Reports are available to the administrator and the pharmacist. Each one prints from the browser and exports to CSV for a spreadsheet, and each shows its own summary totals at the top.
| Report | What it answers | Filters |
|---|---|---|
| Sales Summary | Transactions, gross total, total paid and outstanding, broken down per day. | Date range |
| Profit & Margin | Per medicine: quantity sold net of returns, revenue, cost, profit and margin percentage. | Date range |
| Stock Valuation | What the shelf is worth right now, at cost and at retail. | — |
| Purchase Summary | Purchase counts and totals per supplier. | Date range |
| Payables Aging | What you owe suppliers, bucketed 0–30 / 31–60 / 61–90 / 91+ days as of a chosen date. | As-of date |
| Customer Debtors | Outstanding balances by customer name; walk-in sales grouped together. | — |
| Sales by Salesman | Transaction counts and totals per member of staff. | Date range |
| Stock Movement | Per batch: quantity in, quantity out, quantity now — optionally for one medicine. | Medicine |
| Discounts Given | What was discounted, by whom, and why — counter discounts and cashier discounts kept apart. | Date range |
Returns are deducted wherever it makes sense to deduct them — sales returns come out of revenue and profit rather than sitting alongside as a separate line.
12. Settings
Administrator only, from the browser. Changes take effect immediately — nothing needs restarting.
- Pharmacy details — name, address, phone, email. These print on receipts and appear across the interface.
- Currency — the symbol, and whether it goes before the amount or after it. Every amount in the product follows.
- Alerts — the low-stock threshold, and how many days ahead counts as expiring soon.
Change password is available to every role, including the administrator. Passwords are at least eight characters, and a new or reset account is asked to set its own on first sign-in.
13. Databases on the Server
Databases are handled in the server window on the shop machine, not from the browser. Browser users always see whichever database is currently active.
- Create — an alias, a folder, a file name, and the administrator username and password to seed it with.
- Import — bring in a database file from elsewhere. The import takes a proper consistent copy rather than a plain file copy, and refuses a database written by a newer version of PharmaDesk instead of opening it and misbehaving.
- Activate — double-click a database, or select it and press Activate, then restart the service.
- Back up — a manual copy on demand, and the scheduled Google Drive backup below.
14. Automatic Backup to Google Drive
PharmaDesk can keep a copy of the active database in the pharmacy’s own Google Drive, on a schedule, so protection no longer depends on someone remembering. Set it up in the server window: Database tab → Automatic backup to Google Drive → Auto Backup…
Setting it up
- Connect a Google account. A browser window opens to sign in and allow access. Use the pharmacy’s account, not a personal one.
- Choose how often — hourly, daily, weekly or monthly, at a time you pick. Daily at a quiet hour suits most pharmacies. Monthly on the 31st still runs in February; the date is moved to the last day rather than skipped.
- Choose how many to keep. Older copies are deleted after each successful upload, so the Drive does not slowly fill up and start failing at the moment you believe you are protected. There is a “never delete a backup” option if you would rather manage it yourself.
- Save, then Back up now — run one immediately to confirm the whole path works, rather than waiting to find out overnight.
Restoring
The window lists every backup in your Drive, whichever database it came from, so you can bring back a database this computer no longer has. Select one, check the name it will be restored under, and press Restore.
If a backup fails
The result of the last automatic backup is shown on the Service tab, in red if it failed. Check it occasionally. The usual causes are the Google account needing to be signed in again (the window says so, and the account row shows the problem), a full Drive, or no internet connection at the scheduled time.
15. Editing & Deletion Rules
PharmaDesk will not let history be quietly rewritten, because past reports have to keep adding up.
| Situation | What happens |
|---|---|
| Deleting a medicine or supplier never used in a transaction | Removed outright, along with its pack sizes. Not recoverable. |
| Deleting a medicine or supplier used at least once | Deactivated instead. It disappears from the pickers for new transactions, and every past record and report is preserved. |
| A bill that has been paid | Frozen for everyone, the administrator included. Correct it with a sales return. |
| A bill that is unpaid | Any counter role may correct it. Every edit is written to the audit log. |
| Sales returns and purchase returns | Cannot be edited in place. Delete and re-create. Deleting reverses the stock effect. |
Always editable, whatever the history: a medicine’s name, generic name, form, strength and shelf location; pack sizes and prices; and a supplier’s contact details, address and credit terms.
16. Troubleshooting & FAQs
“I cannot sign in”
Check the username and password, which are case-sensitive. Check the account has not been deactivated — an administrator can see this on the Users page, and a deactivated user is signed out on their next action. Repeated failed attempts from one device are refused for a cool-down period, so wait a few minutes before trying again.
“It is asking me to change my password”
Normal for a new account or one whose password was reset. Enter the temporary password, then set your own, at least eight characters.
“Access denied” on something I expected to use
Your role does not include it. Compare against the table in The Four Roles — note in particular that a salesman raises bills but does not take money, and a cashier takes money but does not raise bills.
“The medicine is not in the search”
Check that it exists and is still active. Search itself is not case-sensitive and matches on generic name as well as brand name.
“Staff cannot reach the server from their device”
Check the service is running on the Service tab, that the device is on the same network, and that the Configuration tab is listening on an address that device can reach — and that no firewall rule refuses it.
Can I undo a transaction?
Not directly. A saved bill is permanent; reverse it with a sales return, or send stock back with a purchase return.
Can two people use the same login?
It works, but do not. Every transaction records who did it, and shared logins make that record meaningless.
Can I adjust stock down by more than is on hand?
Yes — normally only for a count correction where the physical count is lower than the system count. Be careful with the quantity.
Can I get the data out?
Every report has an Export CSV button, and the database file itself is on your own machine, with backups in your own Drive.