Billing 💰
Billing is a system for accounting financial relationships with a client, including various types of financial documents. This seemingly quirky set of terms and their relationships is absolutely necessary for your business's financial system to operate reliably and for the balance to always be reconcilable. The time spent understanding it is the best investment 😎.
Billing includes:
- Payments
- Invoices — an accounting document certifying the fact that services were provided and their cost
- Refunds — sometimes money has to be returned
- Transfers — sometimes someone asks to transfer the remaining balance to another client so it doesn't go to waste
- Charges
- Cash registers
- Prices
- Discounts
Balance 🔮
The billing system works very similarly to the billing of mobile operators. At the center of the system is the client's balance. We top it up with payments, which can be made in various ways (via bank, cash register, ERIP, other payment systems). Then funds are charged from the client's balance for various services: SMS, calls, internet. In the printout at the end of the month, we can see how many calls and SMS we made and how much each service cost. Each service separately charges the required amount from the balance.
In our system, based on the programs the client is enrolled in, invoices (bills) are issued and have open status. Later, if there are sufficient funds on the client's balance, funds are charged from the balance and the corresponding invoices are closed, while the balance decreases by the amount of the closed invoices.
The billing design covers all possible variants of financial interaction with the client while remaining fairly transparent and structured. No matter what happens, it can always be figured out.
An approximate billing scheme is shown in the figure below and includes:
Balance 🔮
The billing system works very similarly to the billing of mobile operators. At the center of the system is the client's balance. We top it up with payments, which can be made in various ways (via bank, cash register, ERIP, other payment systems). Then funds are charged from the client's balance for various services: SMS, calls, internet. In the printout at the end of the month, we can see how many calls and SMS we made and how much each service cost. Each service separately charges the required amount from the balance.
In our system, based on the programs the client is enrolled in, invoices (bills) are issued and have open status. Later, if there are sufficient funds on the client's balance, funds are charged from the balance and the corresponding invoices are closed, while the balance decreases by the amount of the closed invoices.
If there are not enough funds on the balance, it can be topped up by making payments or receiving a transfer from another client.
The balance can be increased by:
- Payments (cash, bank, ERIP, etc.). In theory, this could be one large payment, a thousand small ones, or a separate payment for each program the client attends. All payments increase the balance by the payment amount.
- A transfer from another client.
The balance can be decreased by:
- Charges from the client's balance to close an invoice;
- Refunding money to the client via the cash register;
- A transfer to another client;
Invoices 🎓
The second cornerstone of the system is Invoices.
The equivalent of a provided service (a program subscription, 4 individual lessons with a speech therapist, etc.) in our system is an invoice, or more precisely a closed invoice. An invoice must be issued for each program monthly. The system does this automatically on the 25th of each month for the next academic month. If an invoice is missing, it must be issued manually. Thus, a person attending 3 programs should be issued 3 invoices monthly at the prices of the corresponding programs (see the Invoices section). However, invoices are issued in open form.
Once a client has invoices, the system tries to close them daily. An invoice can only be closed if there are sufficient funds on the balance. If there is not enough money, this indicates that the client's balance needs to be increased with payment(s). Thus, the client's balance is a chest that the client must top up so that money can later be taken from it to receive services.
Prices
The invoice amount depends on the program price and the applied discounts. Therefore, prices and discounts are an important part of billing: they determine exactly what amount will go into the invoice and how much money will need to be charged from the client's balance.
Prices are set per program in the Settings → Finance → Prices section. A price can have a different unit of service measurement: period, lesson, or lesson package. If the price is per period, attendance does not affect the cost. If the price is per lesson, each attendance or unexcused absence reduces the purchased number of lessons. Lesson packages allow different prices per lesson depending on the number of lessons: for example, 1 lesson — 30 ₽, 4 lessons — 100 ₽, 8 lessons — 160 ₽.
A price always has a start date. Prices cannot be added retroactively. If a price has not yet taken effect, it can be edited or deleted. If a price has already taken effect, it cannot be edited or deleted, but a new price can be added with a new start date. You cannot change the price type from period to lesson or vice versa. This approach preserves systematicity, scalability, and controllability: you can always tell who issued an invoice, when, and at what price.
Discounts 💎
Discounts are configured in the Settings → Finance → Discounts section. They can be static or dynamic, temporary or permanent. Static discounts — personal or group — are applied without conditions. Dynamic discounts depend on a condition being met: for example, the client attends two or more programs or several members of the same family study in the system. If the condition is met, the discount works; if not, it is not applied.
A discount can be expressed as a percentage or an absolute amount. When creating a discount, you can choose the "percentage" or "absolute" option. A percentage discount sometimes produces an amount with kopecks, which is not very convenient for cash calculations, but it does not need to be changed when the price changes: if the price increases, the percentage automatically increases the discount amount. An absolute discount produces rounder amounts, but if the program price changes, such discounts need to be reviewed.
If a client has several discounts at once, the system selects one — the most advantageous one, with the maximum percentage — and applies it. Prices and discounts are applied at the moment the invoice is issued: the app checks all possible conditions and inserts the appropriate price and discount into the invoice. At the same time, the data can be adjusted manually: the user (administrator) can change the invoice amount or disable the application of discounts if they do not need to be applied.
A real-life example 🤦♂️
Ivanov Vasily attends chess and English. On the 25th, for the next month, he will automatically be issued 2 invoices at the prices of the monthly subscriptions for these programs. Approximately: invoice No. 1 for chess — 80 rubles, No. 2 for English — 100 rubles. Total 180 rubles. To close these invoices, he must top up his balance by 180 rubles. However, the top-up does not depend on us. He can top up by 500, which is more than necessary; all invoices will be closed and 320 rubles will remain on the balance for the next month. He can pay 180 rubles, all invoices will be closed, and the balance will be 0. Or he can pay 5 rubles daily for 32 payments (because that's what he wants) 🤪. In this case, the system will daily try to close the invoices for which there is enough money: first, when there is enough money, the cheapest one for 80 rubles will be closed, then the one for 100 rubles, etc. However, until an invoice is closed, the difference between the balance and the sum of issued invoices will be displayed for the client.
After all of Vasya's invoices are closed, our financial relationship for this month can be considered settled, and we can freely provide him with services and lessons. Any negative balance will indicate that Vasya has underpaid something and requires the administrator's attention.
💡 Important 📢
Regardless of which branches and which programs our client attends, they have a single balance.
Errors and how to resolve them
We all make mistakes 🐞 and that's normal. Such errors occur quite rarely, but they do happen... We have accounted for the possibility of human error at all stages, so the system includes mechanisms for resolving such problems.
- Incorrect payment — if the payment is less than required, add the missing amount with another payment; if the payment is more than required, issue a refund.
- Incorrect refund — if the refund is less than required, return the missing amount with another refund; if the refund is more than required, make a payment.
- Incorrect transfer — make a reverse transfer.
- Incorrect amount on an open invoice — cancel the invoice and issue a new invoice for the correct amount.
- Incorrect amount on a closed invoice. A closed invoice means that a charge has occurred, and therefore the client's balance has decreased by the invoice amount. Simply canceling the invoice in this case will not work, and the system will not allow it. However, it can still be canceled. This can be done by users with a high access level (director, admin). In this case, a new adjusting document called a correction is created, and the funds are returned to the client's balance in the amount of the invoice. After that, you need to issue a new invoice for the correct amount and close it from the balance.