After reading this guide you will be able to record a delivery of stock into the pharmacy: the supplier, what
arrived, in which batch and with what expiry — so that the goods are on the shelf and in the stock ledger, and
so that the pharmacy can show what it received and when.
Who does this? Recording a delivery requires the Responsible Pharmacist, the Dispensing Technician
or the Business Manager. The Goods-in history can be read by all four roles, including the Counter
Assistant. If you cannot see Stock in the top menu, your login does not hold a stock role — that is a
permission setting, not something you can change yourself.
Two separate things are true about stock arriving, and they explain why this screen exists.
The pharmacy has to be able to account for what it received. The professional guidance on the safe and secure
handling of medicines requires an audit trail where medicines are received from an external source (3.11),
and that all orders and dispatches are authorised and recorded with receipt of goods recorded (3.38). The
GPhC's standards put it as a requirement to keep the records needed for the safe provision of services (1.6),
and to obtain medicines from a reputable source (4.3).
Recording the delivery is what puts the stock on hand. Until a receipt is posted, the pharmacy's ledger does
not know the goods exist, so they are not counted in the stock figures — whatever is physically on the shelf.
Two further requirements shape what you are asked to record:
You can also reach it from the Goods-in history (Record goods-in at the foot of the page).

The goods-in form: the supplier and two optional boxes, then one row per batch delivered. The Item list is
the pharmacy's own stock list.
| Field | What to put in it |
|---|---|
| Supplier | The supplier the delivery came from, chosen from the pharmacy's active suppliers. This is the record of where the medicines were obtained. |
| If the supplier is not in the list, it has to be added to the pharmacy's supplier list first — the app has no supplier screen yet, so ask whoever looks after stock. | |
| Reference | The pharmacy's own reference for the receipt — leave it blank and the app generates one (for example GIN-20260919-4F1A2B). If you type one, use a reference that has not been used before. |
| Warehouse | The pool the stock belongs to. Leave it blank for the Dispensary warehouse; type a different one only if the pharmacy holds stock in another location. |
Add one row per batch. If the same medicine arrived in three batches, that is three rows — the batch is what
the stock is tracked by.
| Column | What to put in it |
|---|---|
| Item | The stock item, from the pharmacy's stock list. |
| Quantity | How much arrived, in the item's unit. It must be more than zero. |
| Batch | The batch or lot number from the packaging. Required. |
| Expiry | The expiry date on the packaging. Required, and it cannot be in the past — the app refuses a date that has already gone. |
Use Remove on a row to take it off before posting. A receipt needs at least one line: posting with none is
refused and nothing is recorded.
The app then:
If the posting to ERPNext fails, the receipt is saved but not posted and the history shows it as Failed —
the delivery has not reached the stock ledger. See If it doesn't work.

The goods-in history: every receipt the pharmacy has recorded, newest visible at the top, with its supplier, who
received it, its status and the ERPNext entry it produced.
| Column | What it tells you |
|---|---|
| Reference | The receipt's own reference. |
| Supplier | Where the delivery came from. |
| Received by | Who recorded the receipt (the name as it was at the time). |
| Status | Pending — created but not yet posted; Submitted — posted to ERPNext; Failed — see below. |
| ERPNext entry | The Stock Entry the receipt was posted as. It reads — until the posting has succeeded. |
| Received | When the receipt was recorded. |
Click a reference to open the receipt on its own page: the same details, every line with its batch and expiry,
and the full text of any ERPNext error.

One receipt in detail: header, then every line with its quantity, batch and expiry — the record of what the
pharmacy received.
| What you see | What it means |
|---|---|
| "Add at least one line to the receipt." | You pressed Post receipt with no lines. Nothing was recorded — add the lines and post again. |
| "The expiry date is in the past." | The expiry date on one of the rows has already gone. Check the packaging and correct the date. If the stock really has expired, do not receive it as usable stock — see below. |
| "The receipt was saved but the ERPNext posting failed." | The receipt exists but the stock ledger does not have it. Open the receipt from the history, read the error in full, and use Retry the ERPNext posting. |
| "The ERPNext posting failed again. The error has been updated." | The retry failed too. Read the error on the receipt page — it is normally a connection problem or an item ERPNext will not accept. Nothing is duplicated: retrying is safe. |
| "This receipt is already posted to ERPNext." | The receipt has already reached the ledger, so there is nothing to retry. |
| An error starting with a long technical message on the receipt page | That is ERPNext's own error, shown in full. Pass it on to whoever looks after the stock connection. |
Retrying is safe. The app adopts the Stock Entry if ERPNext already has one for that receipt, so a retry can
never post the same delivery twice.
The app records what was received. It has nowhere to record a problem with it, so a delivery that is short, has
damaged packs, has broken its cold chain, or contains something you doubt, is handled outside the system: