.reveal{opacity:1!important;transform:none!important}

Rental, from collection to return

Rental staff run daily operations — from issuing equipment to closing a shift — in one system.

Staff need to issue available equipment, collect payment and handle returns — including extensions and equipment changes.

Orders connect equipment to payments. QR codes support collection and return, with a separate view for payment discrepancies.

  • An item cannot have two active rentals

  • Card, instant bank payment and cash support

  • Returns, repairs and shift closing in one system

Order creation screen with synthetic dataOpen full image ↗
Rental checkout: equipment selection and payment method (screen reconstruction, synthetic data)Mobile view shows an enlarged detail. The full image opens in a new tab.
More product screens
Anonymized equipment status screenOpen full image ↗
Equipment status: availability, repair, and battery charge (screen reconstruction, synthetic data)Mobile view shows an enlarged detail. The full image opens in a new tab.
Anonymized payment attention queueOpen full image ↗
Attention queue for unresolved payment results (screen reconstruction, synthetic data)Mobile view shows an enlarged detail. The full image opens in a new tab.
Shift screen with synthetic staff namesOpen full image ↗
Shift and staff view (screen reconstruction, names are synthetic)Mobile view shows an enlarged detail. The full image opens in a new tab.
  1. Verification & order creation

    Staff scan the equipment QR code and create an order with one or more equipment items and optional merchandise.

  2. Payment

    A payment operation is created with an external payment provider; the result may arrive immediately or through a delayed status update.

  3. Unresolved result

    If the payment status is not confirmed right away, the operation goes into an attention queue instead of being treated as automatically successful or failed.

  4. Service

    An active order can be extended, edited, or completed, and equipment can be replaced if needed.

  5. Daily close

    Daily background jobs close shifts, update battery state, and export reports exactly once per day.

For your technical team: inside the solution

A web application serves the rental points and connects to an external payment provider and a database; a separate scheduler process closes shifts, updates battery state, and exports reports once a day.

  • Web application for rental points
  • External payment provider
  • Daily background-job scheduler
Database for orders, equipment, and shifts

Reliability

  • Access roles are scoped to a specific location; the root level sees all locations.
  • Equipment maintenance and repair history is preserved as part of its lifecycle.
  • Daily jobs do not stop entirely because one of them fails.
  • A refund is full and single-use per operation: the system will not allow refunding more than was originally received.

Decisions and trade-offs

An unresolved result moves the operation into a separate attention queue instead of being treated as an automatic success or failure.

The result of a remote payment operation is not always known immediately.

A network error does not serve a customer without confirmed payment and does not block the location without reason.

A refund is calculated from the original operation and the amount already refunded, not as an independent action.

A refund has to account for what was already refunded earlier on the same order.

A repeated refund cannot double the amount paid to a customer.

Each job is protected by a process-level lock and a unique record of that day's run.

Daily jobs must run exactly once per day even after a service restart.

Shifts are not closed twice and reports are not duplicated after a restart.

A fallback issuance flow exists for situations when the main payment path is unavailable.

A payment terminal or provider can be temporarily unavailable, and a rental point should not stop serving customers because of it.

An external service outage does not block service at the rental point.

A new sale on a device is blocked while an operation on that device is still in progress.

The same payment terminal should not start a new sale while a previous operation on it is still processing.

Two payments on the same terminal cannot overlap or confuse the cash totals.

Technologies

  • Python
  • Flask
  • PostgreSQL
  • APScheduler
  • Gunicorn

Working through something similar?

What gets in the way?

A few words are enough. You do not need a technical brief or a final budget to start a conversation.

Andrei will read your message and ask about the task. If we can help, we will suggest a next step.

By submitting the form, you accept the data processing terms.