Mosce ERP · Help Center
Operations

Cash register

Opening, shifts, manual movements, and closing with cash reconciliation, including cash advance payments.

The cash register controls cash flows and other payment methods during a shift. Each session has an opening amount, records all sales and manual movements, and is closed with reconciliation against the physically counted cash.

Reading time: ~7 min

When to use this

Every sale collected in cash, card, transfer, or check from the POS or as payment for an order must go through a cash register. The cash register lets you:

  • Keep control of the cash in the drawer per shift.
  • Record manual inflows/outflows (minor expenses, withdrawals, additional funds).
  • Close with a cash count and detect differences (overages/shortages).
  • Generate a Z report (shift summary) in PDF.
  • Produce an accounting entry for the close if you have the Accounting module active.

A cash register can be a physical drawer, a virtual register (online transfers), or any collection point you want to keep separate for accounting purposes.

Before you start

  • Create at least one cash register in Operations → Cash register.
  • Check your role's permissions: cash-register:manage to create and edit registers, cash-register:read to see them, and cash-session:open, cash-session:close, cash-session:read and cash-session:record_payment to work the shift. To collect the documents that reach the register you also need invoices:pay.
  • The factory Cashier role already carries all of the above. A newly created cashier can open their shift, sell, collect, record movements and close, without you configuring anything. What it does not carry out of the box is voiding a booked payment (payments:void) or applying a credit note as a payment method (invoices:apply-credit-note). See Cash register and point-of-sale permissions.
  • There can only be one open session at a time per register. A register cannot be opened twice.
  • If you have the Accounting module, define the cash accounts in Accounting → Chart of accounts before closing your first session, and make sure you have an open accounting period: without one, the register cannot collect.

Create a cash register

  1. Go to Operations → Cash register.
  2. Press New register.
  3. Assign a descriptive name (for example "Main register", "Pharmacy register 2", "Online collections").
  4. Press Create.

To rename or delete a register, use the "..." menu on the card. You cannot delete a register with an open session.

Step by step: the shift cycle

1. Open a session

  1. On the register card press Open session, or go to the POS and choose the register in the opening dialog.
  2. Enter the opening amount (cash in the drawer at the start of the shift, in pesos).
  3. Add notes if you want to document something (e.g. "Morning shift, cashier Juan").
  4. Press Open session.

The session gets a unique code (SES-YYYYMMDDHHmm-N) and becomes Open. From here on, all sales and payments linked to this register accumulate in the session.

2. Operate during the shift

While the session is open, the following are recorded automatically:

  • Automatic payments: collections and refunds of orders/POS assigned to the register. They appear in the Automatic payments tab of the session detail.
  • Manual movements: inflows and outflows you record by hand (see step 3).

You can go to Cash register → [your register] → View active session at any time to see the summary and the detail.

3. Record manual inflows/outflows

For minor expenses, additional funds, or partial withdrawals, press Record movement in the session detail:

  1. Type: Inflow (money enters the register) or Outflow (money leaves).
  2. Method: Cash, Card, Transfer, Cheque or Credit Note. The "Other" method no longer exists: it described nothing and had no accounting treatment.
  3. Amount and description (required, e.g. "Purchase of thermal paper", "Partial withdrawal to the bank", "Fund reinforcement").
  4. Press Record.

The movement stays in the Manual movements tab, separate from the automatic payments to keep the trail clear.

4. Check the live summary

In the Summary tab you will see during the shift:

  • Opening: initial declared amount.
  • Total inflows / Total outflows per payment method.
  • Net per method.
  • Expected cash balance: opening + cash inflows − cash outflows.
  • Orders associated with the session.

What counts and what does not count in the reconciliation

  • Money counts under the method it was collected with. A cash-term sale collected by card does not add cash to the drawer: it adds card. Previously every cash-term sale was assumed to have been paid in cash and the count never matched.
  • A voided payment stops counting. Voiding a payment does not delete it: it stays visible and marked as voided, but its amount comes out of the shift reconciliation, the reports and the customer statement. Voiding a booked payment requires the payments:void permission, which the Cashier role does not carry out of the box.
  • A cash refund with the shift open counts as an outflow. It shows in the reconciliation, so the closing count matches what is in the drawer. See Returns and refunds.
  • A cash advance payment counts as an inflow. The money physically enters the drawer, so it adds to the shift reconciliation just like any other cash payment. An advance paid by transfer, card, or cheque does not ask for a register and does not go through this shift's reconciliation. See Register an advance payment.
  • A sale collected away from the register stops being pending. If somebody collected it from the back office, it drops off the cashier's pending list as soon as it is settled.

Collecting at the register

Besides counter sales, the register collects the outstanding documents that reach it. You can collect partial payments: you do not have to collect the whole invoice, you record whatever the customer hands over and the document reflects what is left. Methods, split payments and paying with a credit note are covered in Payments and payment methods.

With accounting active you need an open accounting period. If the period covering the date is closed, the register will not collect. This is not a system fault: money cannot move in the books with no open period. Open it in Accounting → Fiscal periods before starting the shift.

5. Close the session (cash count)

When the shift ends:

  1. Physically count the cash in the drawer.
  2. Press Close session in the active session.
  3. The dialog shows the Expected balance calculated by the system.
  4. Enter the Declared cash (what you counted).
  5. The system calculates the Estimated difference live:
    • Zero: perfect balance.
    • Positive (overage): there is more cash than expected.
    • Negative (shortage): cash is missing relative to what was expected.
  6. Add notes explaining the difference if there is one.
  7. Press Close session.

The session becomes Closed with closedAt, declaredClosingAmount, and varianceAmount recorded. You can no longer add movements.

6. Download the Z report (PDF)

From the detail of a closed (or open) session press Download PDF. The report includes:

  • Header with register, session code, opening/closing date, and responsible person.
  • Operations (automatic payments and manual movements) listed chronologically.
  • Summary per payment method.
  • Opening, declared, expected, and difference.

This report serves as the Z report for shift handover and auditing.

7. Automatic accounting entry

If the Accounting module is active, closing the session generates an entry that moves the cash from the register account to the corresponding account, recording the difference in an overages/shortages account. Check the mappings in Accounting → Settings before the first close.

Balancing the shift properly

Closing does not compare a single number. It balances all four methods: cash, card, transfer and cheque. Card and transfer are checked against the card-terminal batch and the bank, not just against the money in the drawer.

You count once per shift, not once per kind of sale. The drawer and the terminal batch are not split by kind of sale, so asking for a count per kind would be asking for something that cannot be done.

A method with no movements asks for no count. It shows as disabled and closes at zero, with nothing to type.

Breakdown by denomination

You can record how many notes of each value and how many coins there are, and the total is calculated for you. It is optional: anyone who prefers to declare the total without a breakdown still can.

It tells you where a discrepancy is, not just that there is one. A 2,000 shortfall is investigated differently if it is four 500 notes than if it is spread across coins.

Counting blind

Seeing the expected amount before counting is a separate permission (cash-register:view-close-amounts). Whoever lacks it counts blind: they declare what is there and do not see what the system expected.

This is what makes the count real. At first glance it looks like information is being hidden from the cashier, and it is worth being clear: what is hidden is what the system expects, never what the person counted. If the expected figure is on screen, nobody declares a number different from the one in front of them, and then the count always balances and measures nothing.

Second-user authorization

You turn it on in the company settings and it ships off. Once on, neither closing the shift nor a cash withdrawal completes without someone holding cash-register:authorize-close approving it. Who authorized and when is recorded.

Before turning it on, reckon with needing somebody available at closing time. A cashier alone in the shop will not be able to close until someone approves. That is exactly what the feature does, but you want to know it when you switch it on, not discover it at ten at night.

Nobody can authorize themselves, even holding the permission. If the same person could approve their own close, the authorization would not be a control, it would be one more click.

States and rules

StateAllowed actions
OpenSell in POS, record movements, close
ClosedRead-only; download PDF

Key rules:

  • A register can only have one open session at a time.
  • You cannot delete a register with an open session - close it first.
  • A closed session is immutable.
  • Any user with the cash-session:close permission can close the session, not only the one who opened it.
  • A voided payment stays visible in the history but adds up to nothing in the shift totals.

Common errors

ErrorCauseSolution
"There is already an open session for this register"Another user opened the session before youPress View active session and work on it.
"The session has already been closed"Someone closed the session while you tried to operateRefresh the page; open a new session if you are going to keep selling.
"This register has an open session" when deletingAn open session blocks deletionClose the session first, then delete the register.
Large difference with no explanationUnrecorded manual movements, human errorDocument it in notes; review automatic payments vs physical vouchers.
"You have reached your plan's register limit"The plan limits the number of cash registersUpgrade your plan in Settings → Subscription.
The accounting entry is not generated on closeIncomplete accounting mappingsConfigure cash and difference accounts in Accounting → Settings.
My cashier cannot open the registerTheir role does not include the cash shift permissionsThe factory Cashier role already carries them. If you use a custom role, grant them on the Roles screen and ask the user to sign in again.
I granted a permission and the user still cannot see itPermissions are applied when signing inAsk them to sign out and sign back in.
The register will not let me collectYou have accounting active and there is no open accounting periodOpen the period in Accounting → Fiscal periods.
The reconciliation shows cash that is not in the drawerYou are looking at a sale collected by card or transferCheck the summary per method: each payment lands where its method belongs.
I cannot void a paymentVoiding needs payments:void, separate from the permission to collectAsk for it to be granted on the Roles screen.