Skip to main content

🧠 Parking Space Allocation System in Hybo

Assign your parking spaces fairly and reward good usage.

Updated over 3 weeks ago

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

🔧 How it works


When the system needs to automatically allocate a parking space, it applies the following rules progressively:

  1. 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.

  2. 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.

  3. 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.

  4. 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

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

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

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

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

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

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

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

  • 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

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

⚙️ 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

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

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

To improve data analysis and the behavior of the algorithm, two new configuration fields have been added to the Parking module:

🆕 New fields

  1. 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.

  2. 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

  1. Automatic date reset


    Once the configured number of weeks has passed, the system automatically resets the start date, updating the analysis period.

  2. 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

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

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

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:

  1. Reduced mobility

  2. Eco

  3. Carpool

  4. Electric

  5. 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

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 sendAfterAlgorithmExecutionEnabled is active.

✔️ Reports are sent to emails predefined by the office and to Hybo internal administrators.

⚙️ 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].

Did this answer your question?