Hybo features an advanced system for the automatic allocation of parking spaces, designed to be fair, transparent, and configurable according to the needs of each organization. Below, we explain how it works, which algorithms it includes, and how they are configured.
🧩 Types of algorithms and how they work
1. 📊 Priority-based allocation
1. 📊 Priority-based allocation
🔧 How it works
When the system needs to automatically allocate a parking space, it applies the following rules progressively:
Priority by employee type
The system prioritizes users who have an assigned employee category or type.
Example: If there are 10 requests for a parking space and only 5 users have an employee type defined, the allocation will be made among those users, applying the following rules in case of a tie.
Priority by zone type and vehicle type
If a user has an electric vehicle assigned, the system will first try to allocate a space in a zone with charging points. If no availability exists, a space in another zone will be assigned.Number of previous reservations
If a tie remains after applying the previous rules, the space will be assigned to the user with the lowest number of previous reservations.Random draw
If the tie still persists, the space will be assigned through a random draw among the users.
⚙️ Configuration
In the administration section of the Parking module, you will find two selectors:
Priority by employee type
Priority by zone type
You can enable one, both, or neither.
If both are disabled, the system will perform allocations randomly.
Users without an assigned category will receive parking spaces only if there are still available spots after applying the previous priorities.
⚠️ Important: Automatic allocation is applied only when there are more pre-reservations than available parking spaces for a specific day. Otherwise, pre-reservations are automatically confirmed with the status Reserved.
2. 🎲 Weekly Random Allocation
2. 🎲 Weekly Random Allocation
Another available feature is the weekly random allocation algorithm, designed to ensure a fair distribution of parking spaces when demand exceeds availability.
🎯 What does this algorithm do?
It allows you to define a day of the week on which a random draw is automatically executed among the pre-reservations accumulated during the week. This process can include cars, motorcycles, and bicycles.
⚙️ Configuration
This feature is enabled per office. To configure it:
Select the corresponding office.
Access the office settings.
Go to the Parking module.
Navigate to the “Allocation Algorithm” section.
Enable the option “Weekly random allocation algorithm.”
Choose the day on which the draw will be executed (for example, Thursday).
Select the vehicle types to include in the random allocation:
🚗 Car
🏍️ Motorcycle
🚲 Bicycle
📌 Reservation statuses
Reservations can be in three states:
Requested / Pre-reservation: The reservation has been requested, but no space has been assigned yet.
Reserved: The parking space has been successfully assigned.
Rejected: No space was assigned in the draw and there is no availability for the requested date.
💡 Note: A pre-reservation that remains in “Requested” status is not considered rejected as long as there is still a possibility of assigning it a space.
If a user cancels their reservation, the space is released and the algorithm is executed again to reassign it among the pending pre-reservations.
3. 🗓️ Biweekly Allocation
3. 🗓️ Biweekly Allocation
Parking space allocation using the algorithm is carried out on a biweekly basis, with scheduled executions on the 1st and 15th of each month.
🛠️ Pre-configuration
🛠️ Pre-configuration
The support team must configure the number of advance days during which users are allowed to request a space in the draw. These days define the period in which users can submit their requests.
Scheduled execution
Scheduled execution
The opening is executed at the time defined in the database (DB).
The administrator cannot modify either the execution time or the execution date.
Business days and weekends
Business days and weekends
If the office allows weekend reservations, the execution remains unchanged.
If weekend reservations are not allowed, the system automatically moves the opening to the next business day.
If the date falls on a public holiday, the opening is also postponed to the next available business day.
Opening dates
Opening dates
Openings take place on the 1st and 15th of each month.
If the office has multiple consecutive opening days, these are added starting from those dates.
For example:
If there are 3 opening days, they will be enabled on the 1st, 2nd, and 3rd, and then on the 15th, 16th, and 17th.
The 1st and 15th are not counted as opening days themselves, but rather as the starting point of the process.
Important: If you belong to a priority reservation group, the maximum number of priority days is 5.
⚙️ Algorithm Execution
⚙️ Algorithm Execution
Once the request period has ended, the algorithm runs on the following day.
During this execution:
Requests submitted within the allowed period are processed.
Available parking spaces are assigned according to the configured rules.
No further requests can be made for future days within that biweekly period.
Once the draw is completed, the system will only allow reservations for the current day, provided that there are free spaces available for immediate assignment (“on the fly”).
Requests that could not be assigned remain in “Requested” or “Pre-reservation” status.
If another user cancels their space, the algorithm runs again and automatically reassigns the space to pending users according to the defined priorities.
Space and shift selection
Space and shift selection
Users can request different types of spaces on different days (for example, a small space one day and a large one the next).
Each request must specify the desired shift (morning, afternoon, or full day for electric vehicles, and full day for combustion vehicles).
A user may be assigned an electric space in the morning, while that same space may become available in the afternoon if there are no additional requests.
If a user selects a full-day shift with an electric vehicle, one shift (morning or afternoon) will be assigned to an electric space, and the remaining shift required to complete the full-day reservation will be assigned to a combustion space.
The system always prioritizes electric spaces.
If there are more users than available electric spaces, the remaining users are assigned to combustion spaces.
Final priority is always given to users with electric vehicles, if availability allows.Spaces that are not assigned during the process remain vacant.
From the administration panel, it is possible to enable an option so that the algorithm takes into account each user’s configured space type preference when making assignments.
⚙️ Configuration from the Administration Page
⚙️ Configuration from the Administration Page
From the administration page, there is a new option called “Space Preference”, where you can choose the possible space types and assign them a priority. This priority determines that the allocation of spaces will start with the category that has the highest priority.
Within the Parking module configuration, inside the site settings, there is an option to enable preference by space type.
If you want to use this preference, you must first create the space types, as shown in the first image. After creating them, you must assign the space types to each individual space. By accessing the details of a space, you will be able to assign it a specific space type.
⚙️ Configuration of lottery groups for reduced mobility, ECO, and carpooling
⚙️ Configuration of lottery groups for reduced mobility, ECO, and carpooling
⚙️ Zone configurations
⚙️ Zone configurations
In each zone that we have created, we can assign a characteristic of reduced mobility, ECO, or carpooling.
Only one of these three characteristics can be assigned per zone. These characteristics can be found in the zone details.
In the example shown in the image: the zone “CW Coche Carburante” allows assignments ONLY for ECO vehicles.
⚙️ User configurations
⚙️ User configurations
Reduced mobility
How to assign users to this group?
Go to the user details and enable the “Reduced mobility” option.
ECO
How to assign users to this group?
Go to the user details, open the “Vehicles” tab, click the pencil icon to edit the vehicle, and enable the “ECO” option.
Important: This applies only to fuel-powered vehicles.
Carpooling
How to assign users to this group?
Go to the user details, open the “Vehicles” tab, click the pencil icon to edit the vehicle, and enable the “Carpooling” option.
📘 Practical example
📘 Practical example
Scenario:
An office has reservations enabled from Monday to Friday and 2 opening days configured.
The algorithm executes the opening on May 15th (Wednesday).
Result:
The days May 15th, 16th, and 17th are enabled.
If May 15th is a public holiday, the opening is automatically moved to May 16th, and users will be able to pre-book until May 18th.
Users with priority will be able to submit requests starting on the 13th or 14th (depending on their priority range). Priority reservations (see article).
Users without priority will be able to submit requests starting on the 15th.
On May 18th, the algorithm will run to assign parking spaces (as long as there are no public holidays and it does not fall on a weekend).
Example by lottery group:
Groups → Reduced Mobility, ECO, Carpooling, Electric, Fuel-powered
Assignments:
The algorithm will first assign spaces to users who requested a spot and belong to the Reduced Mobility group.
Once the spaces in this zone are filled, if there are still pending requests, they will be assigned to the fuel-powered vehicle zone.Next, it will assign requests from ECO and Carpooling users.
Once the spaces in this zone are filled, if there are still pending requests, they will enter a draw together with fuel-powered requests. Therefore, they must wait for the assignment of electric parking spaces.Then, electric parking spaces will be assigned.
Once the spaces in this zone are filled, assignments will continue in the fuel-powered zone.Finally, fuel-powered requests and any remaining ECO and Carpooling requests will be assigned.
🗓️ Historical date analysis
🗓️ Historical date analysis
To improve data analysis and the behavior of the algorithm, two new configuration fields have been added to the Parking module:
🆕 New fields
Number of weeks back
Defines how many weeks back the system should analyze.
Example: If you enter “4”, the system will consider data from the last 4 weeks to calculate priorities.Start date
Allows you to set the date from which the weeks back should start being counted.
If left blank, the start of the current week will be used as the reference.
🔄 Algorithm logic
Automatic date reset
Once the configured number of weeks has passed, the system automatically resets the start date, updating the analysis period.No start date configured
If only the number of weeks is defined and no date is specified, the system will automatically take the start of the current week as the reference. This date will be saved when the algorithm is executed.
🧩 Algorithm types and functional description
1. 📊 Prioritized Traditional Assignment
1. 📊 Prioritized Traditional Assignment
When is it executed?
Daily, at the time configured (hourPreBookings) for the office.
Also reactively, when a user releases a parking space.
How it works
Evaluates reservation requests in the queue (ParkingQueueReservation).
Reorders requests based on the following criteria, in this order:
Employee type priority (if enabled).
Zone type and vehicle type priority (if enabled).
Number of previous reservations (fewer reservations = higher priority).
Final randomization to break ties.
Considers the zone selected by the user if hideZone is disabled.
Assigns parking spaces respecting shifts (morning, afternoon, full day).
Penalizes users who did not check in on previous days (if enabled).
Rejects requests that exceed the number of available spaces.
Notifications
To users whose reservation has been assigned.
To users rejected due to lack of spaces or penalties.
To users who released a space, if it is reassigned (”lend” mode).
Reports
Can generate and send a report after execution, depending on configuration.
2. 🎲 Weekly Random Lottery Assignment
2. 🎲 Weekly Random Lottery Assignment
When is it executed?
On the configured day of the week (isLotteryDay).
Also reactively, when a user releases a parking space.
How it works
Retrieves reservation requests for the entire following week.
Assigns parking spaces using a simple random lottery, without considering employee or zone priorities.
Groups reservations by shifts (morning, afternoon, full day).
Rejects reservations that exceed the number of available spaces.
Removes transferred (“lent”) reservations from the previous day when applicable.
Notifications
To users whose reservation has been assigned.
To users rejected due to lack of available spaces.
To users who released their parking space, if it is reassigned.
Reports
Can generate and send a report after the assignment, depending on configuration.
3. 🗓️ Fortnightly Lottery with Spot Type Preference
3. 🗓️ Fortnightly Lottery with Spot Type Preference
When does it run?
On the first day after the request period, respecting weekends.
Also runs reactively if a user frees up a spot.
How it works
Processes requests via daily HTTP calls to
LotteryFortnightlyHttpTrigger.Assigns spots randomly, considering:
Preference for reduced mobility, eco, or carpool spots, if configured.
Preference for spot type (
SidesTypeToggle), if configured.Only spots compatible with the user’s preference are assigned, if configured.
If no compatible spot is available, the request is rejected.
If not configured, it is a random lottery as before.
Frees up ceded reservations before assignment.
The 1st and 15th do not count as advance days.
Assignment order according to priority groups:
Reduced mobility
Eco
Carpool
Electric
Fuel
If reduced mobility spots are full and requests of this type remain, fuel spots will be assigned.
If eco and carpool spots are full and requests of this type remain, they will be drawn together with fuel spots.
If availability is not found in priority order 1, the system moves to the next priority order (spot type).
Notifications
To users with an assigned reservation.
To users rejected due to lack of spots or incompatible spot type.
To users who freed up their spot if it is reassigned.
Reports
Can generate a report at the end of the fortnightly process.
🚨 Common Functional Add-ons
🚨 Common Functional Add-ons
Penalties and Infractions
✔️ Users who do not check in to their reservation can be automatically penalized if the office has the penaltiesEnabled option activated.
✔️ Alternatively, the infraction system (infrigmentsEnabled) can be applied, which follows this progression:
First infraction: Informational warning.
Second infraction: Temporary penalty according to configuration.
Third infraction: More severe penalty.
✔️ Penalties block the user from future lotteries or spot assignments.
✔️ Users are notified by email of penalties or infractions in their language.
✔️ Penalties may expire after a period without further infractions.
Automated Reports
✔️ The system can generate daily reports with assigned reservations.
✔️ Reports are sent in CSV format, including:
User, employee type, date, zone, spot, vehicle, shift, status, reservation origin.
✔️ Reports can be configured to:
Always be sent at a specific time (
ParkingTodayNotificationsReportsTime).Be sent only after the execution of the algorithms, if
sendAfterAlgorithmExecutionEnabledis active.
✔️ Reports are sent to emails predefined by the office and to Hybo internal administrators.
⚙️ Available Configurations by Office and Algorithm
⚙️ Available Configurations by Office and Algorithm
Configuration | Description | Applies to |
enabled | Activates or deactivates the pre-booking system. | All |
penaltiesEnabled | Activates automatic penalties for no check-in. | Traditional |
infrigmentsEnabled | Activates the progressive infraction system. | Traditional |
hideZone | Considers the user-selected zone when assigning a spot. | Traditional |
employeeTypeToggle | Prioritizes assignment by employee type. | Traditional |
zoneTypeToggle | Prioritizes assignment by zone type and electric vehicle. | Traditional |
lendEnabled | Notifies the user who freed their spot if it is reassigned. | All |
sendAfterAlgorithmExecutionEnabled | Sends automatic report after algorithm execution. | All |
blockAfterAlgorithmExecutionEnabled | Blocks new assignments after algorithm execution. | All |
hourPreBookings | Daily execution time of the traditional algorithm. | Traditional |
isLottery | Activates the weekly random lottery. | Lottery |
isLotteryDay | Day of the week the weekly lottery is executed. | Lottery |
isLotteryFortnightly | Activates the fortnightly lottery by spot type. | 15-Day Lottery |
daysToRequestFortnightly | Advance days required to request a spot in the fortnightly lottery. | 15-Day Lottery |
sideTypeToggle | Considers the requested spot type in the fortnightly lottery. | 15-Day Lottery |
previousBookingsInitialDate | Initial date from which previous reservations are analyzed. | Traditional |
weeksToLookBack | Number of weeks to look back to count previous reservations and define priorities. | Traditional |
ParkingTodayNotificationsReportsTime | Specific time for sending daily automatic reports. | All |
EnableParkingTodayNotifications | Activates the sending of daily reservation reports. | All |
NotifyFirstInfraction | Sends email notification for the first infraction committed. | Traditional |
💡 This flexible and configurable system ensures:
Fair and prioritized assignment in standard scenarios.
Transparent random lotteries to promote equity.
Effective enforcement of penalties for non-compliance.
Complete notification and traceability.
Compatibility with multiple cases and user types.
Office-specific configurations adaptable to particular needs.
For more information, contact us at 📧 [email protected].










