This section outlines the analytical process that was carried out in order to understand the problem domain, define the system requirements and structure the domain model in accordance with the principles of Domain-Driven Design (DDD).
Students at the University of Bologna often need places to study as the libraries are often full. They also need spaces where they can work in groups without having to be silent. Currently, there is no centralised, real-time method of verifying whether a classroom, laboratory or lecture hall is free and available for individual or group study during these periods.
The current ecosystem raises several critical issues:
AlmaSpot is a system that aggregates official data and provides students with an intuitive interface to find free rooms and receive proactive push notifications. It also enables administrators to manage external activity manually.
The system recognises two distinct roles:
| User | Role | Goals |
|---|---|---|
| Student | Passive | Wants to find an immediate study spot based on location and time. Needs to be notified when a room becomes occupied or an unscheduled activity occurs. |
| Admin | Active | Responsible for ensuring the accuracy of availability data. They need to be able to add and manage external activities. |

This section defines the conceptual model of the business domain, establishing the ubiquitous language shared between developers and domain experts.
| Term | Definition | Context |
|---|---|---|
| Assistant | The conversational component of the system that interprets natural language queries to discover (compound) Solutions when a direct search fails. | Search |
| Request | A natural language input provided by the Student describing their study needs. | Search |
| Suggestion | The answer generated by the Assistant, containing a proposed Plan when possible, otherwise requests a refinement of the search parameters. | Search |
| User | A person that uses the system. 1. Student. 2. Administrator. |
Core, Authentication, Notification |
| Room | A physical spatial unit identified by a name and a Site. Can be: 1. Laboratory. 2. Class. |
Core, Search, Notification |
| Period | A specific start-time and end-time interval. | Core, Search, Notification |
| Activity | It occupies a Period in a specific Room. Can be: 1. Internal Activity: a planned academic activity imported from the official schedule, such as lectures and exams. 2. External Activity (or Unofficial Activity): a non-academic activity, such as seminars. |
Core, Notification |
| Slot | A Period available for use in a Room. | Search, Notification |
| Plan | The result provided to the Student in response to a request. It can be a simple solution (a single Slot) or, if unavailable, a compound solution generated by a Assistant (multiple Slots). | Search, Notification |
| Notification | A proactive message sent to a Student with an active interest in a Room. It is triggered by an unexpected Activity that invalidates the studentās current Plan. | Notification |
| Subscription | The link between a Student and a specific Plan that authorizes the delivery of Notifications. | Notification |
| Campus | A macro geographical area of the university (e.g., Cesena, Bologna). It is made up of multiple Site. May also be called City or Location. | Core |
| Site | A specific building within a Campus, identified by its address. | Core |
| Schedule | The aggregate collection of all Internal Activities imported and normalized from university sources. It represents the official timeline before any Exception is applied. | Core |
The domain is divided into specific contexts.
There is a shared kernel among the bounded contexts that contains the definitions of spatial concepts (campus and site), plan, slot and period. This decision was made because these concepts are crucial, and any change to their definitions must be reflected in all contexts that handle them.
