The company had a platform customers could use to create and manage multi-currency IBAN accounts. Customers were charged per transaction, and the size of the fee varied depending on certain parameters. Calculating this fee and then invoicing was a mundane, time-consuming task that the company wanted to automate.
Developing the invoice automation system required more programmers than the company had in-house. It reached out to several developers, including Elinext. We responded quickly, had the relevant skills and could tackle the task without further ado, so we were picked for the job.
The client came to us with a broad idea for the invoice automation system. It was up to us to design the system, define requirements and narrow down the scope of work. We listened to the client’s description of the prospective product and rolled up our sleeves.
With projects such as this one, no methodology works better than Scrum, which we have long been using. Twice a week, we hopped onto a video call with the client to make sure we were on track. The client took an increasingly active part in defining the details of the product as the idea evolved.
In two weeks, we knew exactly what we needed to build.
We built the system as a set of asynchronous modules. To help the client save money at the beginning, we cross-compiled the code and placed it in Amazon’s DynamoDB Local. As a result, it is only executed when someone uses the system.
We used various methods to make sure the system works as expected. Those included continuous integration with Jenkins and testing, both automated and manual.
In terms of the system’s functional structure, the three main parts are events, contracts and a dashboard.
The client’s system records all transactions as events. Has a customer received funds? An event is recorded. Have they sent funds? Another event is recorded. For each event, the system charges the customer a fee. All events have four parameters: ID, timestamp, quantity and type.
We needed to automate the grouping of events, calculating fees based on their parameters and generating invoices accordingly. In order to do that, we created contracts.
Contracts work as digital agreements within the system, comprising business rules unique for each customer. These rules define how the system calculates each event’s fee based on the event type, time and amount of money processed (quantity).
System admins can use contracts to create invoices without gathering information and calculating fees manually. They only need to select a customer and billing range. The system will generate an invoice by matching the contract and the customer’s events.
Admins can create, edit, preview, issue, email and approve invoices from the dashboard.
Once an admin has issued an invoice, the customer can approve it and the invoice status will change to “Approved”. The admin will then be able to give the invoice final approval and email it to the customer. After that, the system will automatically extract funds from the customer’s account.
The status will change for each stage of the invoice’s lifecycle (approved, pending, paid, etc.).
It took us three months to build the automated invoicing system with very few initial specifications from the client. In the following three months, we improved the software based on user feedback.
The client is planning to allow users to charge their customers within the platform.