
Parking Foundation - Pricing Module
At the end of 2020, we won the tender launched by the Parking Foundation for a new digital project. This initiative is part of a comprehensive digital transformation strategy aimed at modernising internal management tools and streamlining interactions between the various stakeholders involved in parking management. The main challenge was to centralise the calculation of parking costs while providing increased configuration flexibility to better meet the evolving needs of users and partners. It is in this context that we designed and developed the “Pricing Module.”

Dashboard configurator for parking foundations.
MobileThinking has been commissioned to support and develop the “Pricing Module” project, which enables the configuration of parking fees and the calculation of parking costs across various infrastructures managed by the Parking Foundation, as well as on public roads. The Pricing Module allows for the centralisation and standardisation of cost calculations that previously had different implementations across various systems. It also extends its capabilities in terms of configuration, thus enhancing the offerings available to its clients.
For example, when you pay for your parking using one of the mobile applications from our partners (see a selection at https://www.gepark.ch/), their server contacts the common calculation engine we have developed for the Parking Foundation. Previously, each partner had its own calculation engine and needed to independently update its pricing configurations, leading to additional communications and significant risk of errors.
The aim of the module is to utilise different calculations and contexts (e.g. the possibility of receiving a discount or one hour of free parking) to determine parking tariffs. Its purpose is to cater to various requests from different sources, such as payment applications or a simulation from a website (e.g. to simulate the costs of any parking with parking meters or toll collectors in any car park managed by the Parking Foundation). This calculation can be complex depending on the context(s) and must comply with various rules configured in the system.
For instance, some car parks offer one or more hours free per day to each car owner. With the new calculator, it is ensured that the free time is only granted once every 24 hours and that there is no ability to bypass the system and utilise more free time than allowed.
With the help of a simulation tool that we have developed in the configurator, it is possible to test and simulate the various rules and pricing calculation functions.
A significant point of complexity lies in the fact that all parking pricing configurations are versioned. The objective is to be able to recalculate a tariff from the past despite a modification to the target tariff.
👉 See a selection of partner applications at https://www.gepark.ch/

Our Contribution
From an architectural perspective
We have decided to divide the project into three services: the tariff calculation service, the tariff configurator (back office management), and the context module.
The tariff calculation service is responsible for providing an API that selected partners can contact to calculate the costs of parking based on a start and end time (and other possible parameters). This service is extremely critical; it must be available at all times, and the architecture allows for the creation of multiple instances to ensure redundancy and scalability.
The configurator (back office management) includes several services: tariff configuration, user management and access rights, as well as context configuration, etc.
The context module allows for the synchronisation of different data sources (e.g. receiving data from other systems that the Parking Foundation integrates into its IT infrastructure). The calculator can then use this data to determine the context of parking users and provide them with the most appropriate pricing (for example, for subscriptions).
From a technology and programming language perspective
The programming language for the entire system is PHP version 8.0+. All modules use the Laravel framework (https://laravel.com/). The configurator (back office management) uses the Vue.js framework (https://vuejs.org/) for its frontend. The contextual module uses Kafka queues (https://kafka.apache.org/) and Redis (https://redis.io/) to manage data synchronisation via events and Laravel Horizon jobs (https://laravel.com/docs/9.x/horizon). The OpenAPI specification (Swagger - https://swagger.io/specification/) is used for the description of all available APIs. We only work with widespread open-source technologies that have been maintained for many years, which allows us to avoid dependency on proprietary solutions or libraries. These technologies will ensure the longevity of the system in the long term.
Each module has its own set of unit and functional tests. We run these tests during development and the deployment phase via the GitLab CI/CD system. The system has three environments: testing, staging, and production, all based on their own Kubernetes namespace. This separation allows the Parking Foundation to have total control over system updates. They can test the system and decide when to deploy a new feature or modification.
From a project management perspective
As part of this "Tariff Module" project, we began by conducting design workshops with the Parking Foundation team during the initial phases.
These workshops enabled us to analyse and design the architecture needed to manage the various rules and use cases for tariff calculation.
Based on these workshops, we developed the Tariff Module using an iterative approach and maintained weekly contact with the team to present project progress and clarify the next features to be developed.
This way, we remained aligned throughout the project to deliver a quality solution despite the considerable complexity of the business requirements for this project.
And what next?
The Parking Foundation is undergoing a digital transformation, and we are delighted to continue supporting them in this endeavour.




