e-bon
e-bon.ro
Portal

New receipt

Issue a fiscal receipt from the e-bon Portal — pick a connected device, build the receipt in the browser, and watch the print status update live.

The New receipt page lets an operator compose and print a fiscal receipt straight from the back-office, without touching the Android app. Pick a connected device, add the items and payments, click Print receipt, and the receipt is sent to the printer over the cloud connection.

Use it when you do not have the phone in hand, when you need to cut several receipts in a row from a desk, or when you are testing your integration end to end.

Open the page

From the Receipts list, click + New in the top-right corner. The form opens at /portal/receipts/new.

You can also bookmark the URL — no parameters are required.

Pick a target device

The right-hand sidebar shows every printer claimed by your organization, with its live connection status.

A device can be selected only when it is online and assigned to a controller. Devices that fail either check still appear in the dropdown, but they are greyed out with a reason badge:

  • Offline — the printer is not reachable.
  • Disconnected from WebSocket — the controller lost its live link to the cloud.
  • Busy — another command is running on the device.
  • Error status — the printer reported a hardware or fiscal error.
  • No controller assigned — no controller has claimed this device yet.
No devices listed? Open Devices and pair a printer first. If every device is offline, wait for the controller to reconnect — the dropdown updates live.

Build the receipt

Choose the receipt type

Pick one of:

  • Sale — a normal sales receipt (default).
  • Refund — refund a previous sale.
  • Storno — cancel a previous sale.

The form layout stays the same; the cloud routes the three types differently to the AMEF.

Add items

Each row represents one line on the receipt:

FieldNotes
NameFree text, required.
QuantityMust be positive.
PricePer-unit price, VAT-inclusive (Romanian fiscal convention).
VAT ratePick one of the legal Romanian rates (0%, 5%, 9%, 19%).
DepartmentDepartment index on the printer.
DiscountOptional, applied per line.

Click + Add item to add another row, or the trash icon to remove one. There is always at least one row — you cannot delete the last one, only clear it.

VAT is extracted, not added. The total you type per line already includes VAT. The breakdown shown at the bottom of the form pulls the VAT amount out of each line at its declared rate. This matches how every Romanian fiscal printer expects the data.

Add payments

Each payment row sets a method and an amount:

  • Cash
  • Card
  • Voucher
  • Credit
  • Other

Split a receipt across several methods by adding more rows (for example, 50 RON cash + 30 RON card). The sum of all payment amounts must match the receipt total exactly — the form will not submit a mismatch.

Review the totals

The form shows the running total and a VAT breakdown by rate as you type. Both are recalculated by the cloud when the receipt is printed, so you do not have to round anything manually.

When the form is valid, click Print receipt.

Validation runs

The form checks that every item has a name, quantity, and valid VAT rate, and that the payments sum equals the total. If anything is off, the relevant field is highlighted and a toast explains what to fix.

The command is sent

The receipt is dispatched to the cloud, which forwards it to the controller for your selected device. While this happens, the form and the device picker are locked so you cannot fire a second receipt by accident.

The status badge appears

A status badge shows up under the device picker:

  • Pending — the receipt is on its way to the printer.
  • Completed — the printer confirmed the receipt was issued. The badge fades after a few seconds.
  • Failed — something went wrong. The error message is shown on the badge and in a toast.

The form unlocks

As soon as the printer acknowledges the receipt (success or failure), the form unlocks and you can issue the next one.

The form does not reset on success. Your items and payments stay in place, so you can tweak one field and reprint, or clear the rows manually. There is no "Reset" button.

Troubleshoot common errors

SymptomWhat to check
No device selected toastPick a device from the sidebar before clicking Print receipt.
Payments do not match total toastAdjust the payment amounts so they add up to the receipt total exactly.
The badge stays on Pending for more than a minuteThe printer probably went offline mid-job. Reload the page and check device status on Devices.
The badge shows Failed with a hardware messageRead the message on the printer (paper out, drawer open, end-of-day not closed, etc.) and retry.
Form is locked and you cannot editA previous command is still pending. Wait for the badge to clear, or reload the page.

Know the limits

  • One device per receipt. You cannot fan out the same receipt to several printers from the form.
  • Online only. The Portal needs a network connection to print. For offline sales, use the Android app — it queues receipts locally and syncs when the connection comes back.
  • No drafts. Closing the tab or reloading the page clears the form. Anything you have not printed is lost.
  • Anonymous receipts only. The Portal form does not expose customer name or CIF fields. If you need a named receipt with a CIF, call the API directly (see below).
  • Whole-receipt discounts are not supported from this form. Apply discounts per line instead.
  • No scheduled sends. Receipts print immediately when you click the button.

Send receipts from your own software

Everything the New receipt page does is also available over the e-bon HTTP API. To issue receipts from your POS, ERP, or scripts, send a print_receipt command to the device:

POST /api/v1/devices/{deviceId}/commands
Authorization: Bearer <api-token>
Idempotency-Key: <unique-key-per-receipt>
Content-Type: application/json

{
  "type": "print_receipt",
  "payload": {
    "type": "sale",
    "operatorId": "1",
    "items": [
      { "name": "Coffee", "quantity": 2, "price": 12.50, "vatRate": 19, "department": 0 }
    ],
    "payments": [
      { "method": "card", "amount": 25.00 }
    ]
  }
}

The cloud validates the payload, recomputes the totals and VAT breakdown server-side, and forwards the command to the controller. The same idempotency, validation, and status events apply whether the request comes from the Portal, the Android app, or your own integration.

See /api/receipts for the full payload reference, Idempotency for retry behaviour, and Events WebSocket for streaming command status into your own UI.

Continue exploring

  • Receipts — browse, filter, and inspect previous receipts.
  • Devices — pair printers and check their live status.
  • Fiscal operations — run X/Z reports, cash-in, and cash-out from the Portal.
  • /api/receipts — issue receipts programmatically from your own software.