Ledger for partner debts / 2025
FTPC: an installment ledger with the history of every payment
Case study: a ledger that replaced a notebook and Excel. Every charge and payment with a date and note, balances in dinars and euros, and a change log.

- Client
- FTPC
- Year
- 2025
- Build time
- about 20 days
- Role
- Full development: partner records, bookkeeping, two currencies, reports and a change log
- Technologies
- PHP, MySQL, JavaScript, HTML
2
currencies: every amount in dinars and euros
1
exchange rate for the whole system, set in one place
12
months of turnover on the dashboard
This is a case study of the ledger I built for FTPC, a company that sells and installs video surveillance and alarm systems. The ledger tracks partner debts: every charge and every payment, with a date and a note, in dinars and in euros.
Client and context
FTPC sells and installs video surveillance and alarm systems. In that trade many customers pay in installments: they take the equipment and installation and pay it off in parts. So the company has to know, for each partner separately, what was charged and when, what was paid and when, and how much is still owed. I built the ledger in early 2025, in about 20 days. One person uses it, online.
Problem
Debts were kept partly in a notebook and partly in Excel. Two places for the same data mean the data gets mixed up: one installment written in the notebook, the next in the spreadsheet, and notebook pages get lost. The client described it as a big problem, and it is easy to see why: when a customer says they paid and the notebook has no record of it, there is nothing to go back to.
The third part of the problem was currency. Deals and equipment are often priced in euros while payments come in dinars, so every amount was converted by hand, at a rate nobody wrote down.
Constraints
The hardest part was the database change log. The ledger holds sensitive data, money and the debts of real people, so the owner has to be able to see at any moment exactly what was done: what was entered, changed or deleted, and when. The log does not show up in day to day work, but it is the reason the numbers in the ledger can be trusted.
The second constraint was simplicity. One person uses the ledger, so every action has to be one click away from the dashboard.
Solution
A ledger, not a balance
A notebook stores a balance: a number crossed out and replaced with a new one. The ledger stores changes: every charge and every payment is a record with a date, an amount and a note, and the balance is calculated from them. On the partner's ledger card, each entry shows the balance after it, so you can see how the debt built up, installment by installment. When numbers disagree, you go through the card and find the date where things went apart.
Payments and charges with a note
Booking a payment and charging a partner are separate pages with the same layout. You pick the partner and immediately see their current balance in dinars and euros. Then you choose the currency, enter the amount and date, and add a note on what the charge is for ("monthly installment, invoice no."). Without a note, nobody knows a year later what an entry referred to. Next to the form is a quick calculator for converting euros to dinars and back.
Two currencies, one rate
The euro to dinar rate is set in one place and applies to the whole system, with the date of the change and a note. When an amount is entered in euros, the system converts it to dinars at the current rate and stores both: the dinar amount, for an accurate balance, and the original amount with its currency. The balance is always shown in both currencies. In the screenshot the rate is 117.00, so a 100 EUR charge is booked as 11,700.00 RSD.
A change log and deleted partners
Every change in the database is recorded, with the time and a description of what was done. When a partner is deleted, their history does not go with them: they move to the list of deleted partners, and their charges and payments stay. The account can go; the debt does not.
Dashboard and reports
The dashboard shows payments, charges and the balance for the selected period, in dinars and euros, plus shortcuts to the four most common actions: new partner, payment, charge and ledger card. Below that are turnover by month for the last 12 months and a list of debtors sorted by amount owed, which can be exported to CSV.
The ledger card as a PDF
A partner's ledger card can be printed as a PDF, with entries in date order and a clean layout. A customer who asks how much is left to pay can be sent the whole history, not just one number.
What one installment looks like
A customer takes equipment and installation, and the deal is in euros:
- Charge: the amount is entered in euros, with a date and a note, for example "cameras and installation, installment 1 of 3". The system converts it to dinars at the rate from the settings.
- Payment: when the customer pays in dinars, the payment is booked with a date, and the balance on the card drops at once, in both currencies.
- Check: the card shows every installment and the balance after it. When the customer asks how much is left, the answer and the history are on one page.
- Dispute: if the customer disagrees, you go through the card and the change log and see when each entry was made or changed.
Technologies and why
The ledger is built in PHP, MySQL, JavaScript and HTML. It runs online, so nothing has to be installed on a computer. For one user and records of this size nothing more complex was needed: what mattered was that no change is ever lost and that the balance is always calculated from the records.
Result
The notebook and the spreadsheet were replaced by one place for every partner. The question "how much does this partner owe today" gets an answer at once, with the history that explains it, installment by installment. Disagreements are settled by going through the card and the change log, not by arguing over who remembers what. Deleting a partner does not delete what happened with them (as of October 2026).
Inside the application


Services used on this project
- Custom web applications for work that has outgrown spreadsheets
- Website maintenance after launch
- Web design that starts on the phone
Questions about the project
What is FTPC?
A company that sells and installs video surveillance and alarm systems, with many customers paying in installments. This is a case study of the ledger it uses for partner debts; there is no public link.
What is a partner ledger card?
A list of every charge and payment for one partner, in date order, with a note and the balance after each entry. It shows how a debt came about, not only how large it is, and it can be printed as a PDF.
Can a charge be in euros and the payment in dinars?
Yes. The amount is entered in the currency it was agreed in, the system converts it at the rate from the settings, and it stores both the dinar amount and the original currency. The balance is always shown in both currencies.
What happens when a partner is deleted?
The partner moves to the list of deleted partners, and their history stays. The account goes, the debt and the records do not.
What would a ledger like this cost?
Web applications start at 300 EUR, and the price comes from the specification, screen by screen. A build usually takes 7 to 20 days; this one took about 20. Details are on the pricing page.
Similar projects
Case study
Royal Plast: window quotes with price and sketch, no manual math
Case study: a portal that prices custom windows from their dimensions, adds per square meter surcharges, draws a sketch and creates a PDF quote with VAT.
Case study
BKC Soft: licenses and daily register reports in one portal
Case study: BKC Soft issued licenses by hand and owners added up revenue by phone. The portal now handles 500+ licenses and reports from 20+ users.
Got a similar job?
Describe what you need in a few sentences. Messages sent before 5 pm CET get a same day reply with an estimate of price and timeline.