# najhelybs/vacunacioncard architecture

> Architecture diagram of the GitHub repository najhelybs/vacunacioncard, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/najhelybs/vacunacioncard
- Repository: https://github.com/najhelybs/vacunacioncard

## Overview

1. **Overall shape**
   - This is a **Java Spring Boot / Maven** application for a **digital vaccination card system**.
   - The code is organized as a classic **layered architecture**: domain models, repositories, services, and a very thin or not-yet-populated controller/config layer.

2. **Entry point and runtime**
   - `VacunacioncardApplication` is the Spring Boot bootstrap class.
   - Build and execution are managed with **Maven Wrapper** (`mvnw`, `.mvn/`) and configuration lives in `src/main/resources/application.properties`.

3. **Core architectural boundary**
   - The most important boundary is between:
     - **model/**: business entities and value objects
     - **repository/**: persistence access
     - **service/**: business rules and orchestration
   - The repository tree strongly suggests **Spring Data-style repositories**, with services depending on repository interfaces rather than concrete storage details.

4. **Domain subsystems**
   - The model layer is split into business domains:
     - **auth**: `CuentaUsuario`, `Rol`, `Permiso`, `SesionUsuario`
     - **usuario**: `Usuario`, `Paciente`, `Enfermero`, `Administrador`, `SeguroMedico`
     - **vacunacion**: `CartillaVacunacion`, `EsquemaVacunacion`, `Vacuna`, `RegistroVacuna`, `Laboratorio`, `UbicacionAplicacion`
     - **cita**: `CitaVacunacion`, `Horario`, `DiaSemana`
     - **campania**: `CampaniaVacunacion`, `CentroVacunacion`
     - **salud**: `Alergia`, `CondicionMedica`, `Contraindicacion`
     - **notificacion**: `Notificacion`, `NotificacionRecordatorio`, `NotificacionSistema`
     - **comun**: shared concepts such as `Calendario`, `Contacto`, `Direccion`, `RegistroAuditoria`

5. **Business service layer**
   - Each domain has its own service interface and implementation package.
   - This layer contains the application rules for:
     - user/auth management
     - vaccination card and vaccine records
     - appointments and schedules
     - vaccination campaigns and centers
     - health restrictions and contraindications
     - notifications
     - auditing and calendar logic
   - The pattern here is clear: **interfaces define contracts, `impl` classes implement behavior**.

6. **Repository layer and persistence responsibility**
   - Repositories exist for each major aggregate/domain, such as `PacienteRepository`, `CitaVacunacionRepository`, `VacunaRepository`, `NotificacionRepository`, and others.
   - This layer isolates persistence concerns from business logic and acts as the data access boundary for the services.
   - There is no separate DAO layer; repositories are the persistence abstraction.

7. **Notification subsystem**
   - Notification handling is a distinct subsystem:
     - domain types distinguish **system notifications** from **reminder notifications**
     - `NotificacionServiceImpl` orchestrates notification behavior
     - `INotificacionFactory` plus concrete factories (`RecordatorioNotificacionFactory`, `SistemaNotificacionFactory`) implement **Factory Method**
   - This subsystem likely creates the right notification type depending on the event or use case.

8. **Shared cross-cutting concerns**
   - `RegistroAuditoria` and its service/repository provide an **audit trail** for system actions.
   - `Calendario` and related services provide shared date/scheduling functionality reused by appointments and campaigns.
   - `ServiceException` is the explicit application-level error type, indicating service-layer validation or business-rule failures.

9. **Design patterns used intentionally**
   - The repository is a course project on design patterns, and the structure reflects that:
     - **Factory Method** in the notification creation flow
     - **Singleton** in `ConfiguracionSistema`
   - These patterns are not just incidental; they are modeled as first-class parts of the service layer.

10. **Data flow through the system**
   - The usual request path is:
     - an upper layer would call a **service**
     - the service applies business rules and coordinates domain objects
     - the service delegates persistence to a **repository**
     - domain objects such as patients, vaccines, appointments, or notifications are returned/updated
   - Because controllers are not present in the tree, the top-most presentation boundary is currently absent or unfinished.

11. **Testing and verification**
   - The test tree focuses on:
     - the main application bootstrap
     - notification model behavior
     - notification factory behavior
     - singleton configuration
     - selected service implementations such as session, notification, and patient services
   - This shows the project verifies both **business logic** and **pattern behavior**, not just persistence wiring.

12. **What to diagram**
   - A good architecture diagram should center on:
     - the **Spring Boot application**
     - the **service layer as the orchestration hub**
     - the **repository layer as persistence boundary**
     - the major domain clusters: auth, usuario, vacunacion, cita, campania, salud, notificacion, comun
     - the **pattern subcomponents** for notifications and system configuration

Main entry points: [`src/main/java/pe/edu/utp/vacunacioncard/VacunacioncardApplication.java`](https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/VacunacioncardApplication.java) (Spring Boot App), [`src/main/java/pe/edu/utp/vacunacioncard/service/notificacion/impl/NotificacionServiceImpl.java`](https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/service/notificacion/impl/NotificacionServiceImpl.java) (Notificación Service), [`src/main/java/pe/edu/utp/vacunacioncard/service/usuario`](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/usuario) (Usuario Services), [`src/main/java/pe/edu/utp/vacunacioncard/service/cita`](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/cita) (Cita Services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app_main["Spring Boot App<br/>bootstrap"]
end

subgraph group_model["Domain Model"]
  node_model_auth["Auth Model<br/>domain model"]
  node_model_usuario["Usuario Model<br/>domain model"]
  node_model_vacunacion["Vacunación Model<br/>domain model"]
  node_model_cita["Cita Model<br/>domain model"]
  node_model_campania["Campaña Model<br/>domain model"]
  node_model_salud["Salud Model<br/>domain model"]
  node_model_notificacion["Notificación Model<br/>domain model"]
  node_model_comun["Común Model<br/>shared model"]
end

subgraph group_service["Services"]
  node_svc_auth["Auth Services<br/>service facade"]
  node_svc_usuario["Usuario Services<br/>service facade"]
  node_svc_vacunacion["Vacunación Services<br/>service facade"]
  node_svc_cita["Cita Services<br/>service facade"]
  node_svc_campania["Campaña Services<br/>service facade"]
  node_svc_salud["Salud Services<br/>service facade"]
  node_svc_notificacion["Notificación Service<br/>orchestration service"]
  node_svc_comun["Común Services<br/>cross-cutting service"]
end

subgraph group_repository["Repositories"]
  node_repo_auth[("Auth Repos<br/>persistence boundary")]
  node_repo_usuario[("Usuario Repos<br/>persistence boundary")]
  node_repo_vacunacion[("Vacunación Repos<br/>persistence boundary")]
  node_repo_cita[("Cita Repos<br/>persistence boundary")]
  node_repo_campania[("Campaña Repos<br/>persistence boundary")]
  node_repo_salud[("Salud Repos<br/>persistence boundary")]
  node_repo_notificacion[("Notificación Repo<br/>persistence boundary")]
  node_repo_comun[("Común Repos<br/>persistence boundary")]
end

subgraph group_patterns["Patterns"]
  node_pattern_factory{{"Notification Factory<br/>factory method"}}
  node_pattern_singleton{{"Sistema Config<br/>singleton"}}
  node_error_service(("Service Error<br/>application exception"))
end

node_app_main -->|"starts"| node_svc_auth
node_app_main -->|"starts"| node_svc_usuario
node_app_main -->|"starts"| node_svc_vacunacion
node_app_main -->|"starts"| node_svc_cita
node_app_main -->|"starts"| node_svc_campania
node_app_main -->|"starts"| node_svc_salud
node_app_main -->|"starts"| node_svc_notificacion
node_app_main -->|"starts"| node_svc_comun
node_svc_auth -->|"uses"| node_model_auth
node_svc_auth -->|"persists via"| node_repo_auth
node_svc_usuario -->|"uses"| node_model_usuario
node_svc_usuario -->|"persists via"| node_repo_usuario
node_svc_vacunacion -->|"uses"| node_model_vacunacion
node_svc_vacunacion -->|"persists via"| node_repo_vacunacion
node_svc_cita -->|"uses"| node_model_cita
node_svc_cita -->|"persists via"| node_repo_cita
node_svc_campania -->|"uses"| node_model_campania
node_svc_campania -->|"persists via"| node_repo_campania
node_svc_salud -->|"uses"| node_model_salud
node_svc_salud -->|"persists via"| node_repo_salud
node_svc_notificacion -->|"uses"| node_model_notificacion
node_svc_notificacion -->|"persists via"| node_repo_notificacion
node_svc_notificacion -->|"creates"| node_pattern_factory
node_svc_comun -->|"uses"| node_model_comun
node_svc_comun -->|"persists via"| node_repo_comun
node_svc_comun -->|"configures"| node_pattern_singleton
node_svc_notificacion -.->|"raises"| node_error_service
node_svc_usuario -.->|"raises"| node_error_service
node_svc_cita -.->|"raises"| node_error_service

click node_app_main "https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/VacunacioncardApplication.java"
click node_model_auth "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/auth"
click node_model_usuario "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/usuario"
click node_model_vacunacion "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/vacunacion"
click node_model_cita "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/cita"
click node_model_campania "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/campania"
click node_model_salud "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/salud"
click node_model_notificacion "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/notificacion"
click node_model_comun "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/comun"
click node_svc_auth "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/auth"
click node_svc_usuario "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/usuario"
click node_svc_vacunacion "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/vacunacion"
click node_svc_cita "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/cita"
click node_svc_campania "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/campania"
click node_svc_salud "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/salud"
click node_svc_notificacion "https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/service/notificacion/impl/NotificacionServiceImpl.java"
click node_svc_comun "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/comun"
click node_repo_auth "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/auth"
click node_repo_usuario "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/usuario"
click node_repo_vacunacion "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/vacunacion"
click node_repo_cita "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/cita"
click node_repo_campania "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/campania"
click node_repo_salud "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/salud"
click node_repo_notificacion "https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/repository/notificacion/NotificacionRepository.java"
click node_repo_comun "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/comun"
click node_pattern_factory "https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/patron/creacional/factorymethod"
click node_pattern_singleton "https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/service/patron/singleton/ConfiguracionSistema.java"
click node_error_service "https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/exception/ServiceException.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app_main toneBlue
class node_model_auth,node_model_usuario,node_model_vacunacion,node_model_cita,node_model_campania,node_model_salud,node_model_notificacion,node_model_comun toneAmber
class node_svc_auth,node_svc_usuario,node_svc_vacunacion,node_svc_cita,node_svc_campania,node_svc_salud,node_svc_notificacion,node_svc_comun toneMint
class node_repo_auth,node_repo_usuario,node_repo_vacunacion,node_repo_cita,node_repo_campania,node_repo_salud,node_repo_notificacion,node_repo_comun toneRose
class node_pattern_factory,node_pattern_singleton,node_error_service toneIndigo
```

## Components

### Application

Spring Boot bootstrap and runtime entrypoint

- [Spring Boot App](https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/VacunacioncardApplication.java): bootstrap · Application entrypoint and startup wiring · `src/main/java/pe/edu/utp/vacunacioncard/VacunacioncardApplication.java`

### Domain Model

Business entities organized by domain

- [Auth Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/auth): domain model · Accounts, roles, permissions, and sessions · `src/main/java/pe/edu/utp/vacunacioncard/model/auth`
- [Usuario Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/usuario): domain model · Patient, nurse, admin, insurance, and user profiles · `src/main/java/pe/edu/utp/vacunacioncard/model/usuario`
- [Vacunación Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/vacunacion): domain model · Vaccination card, vaccine, records, labs, and application context · `src/main/java/pe/edu/utp/vacunacioncard/model/vacunacion`
- [Cita Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/cita): domain model · Appointments and scheduling primitives · `src/main/java/pe/edu/utp/vacunacioncard/model/cita`
- [Campaña Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/campania): domain model · Campaigns and vaccination centers · `src/main/java/pe/edu/utp/vacunacioncard/model/campania`
- [Salud Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/salud): domain model · Allergies, medical conditions, and contraindications · `src/main/java/pe/edu/utp/vacunacioncard/model/salud`
- [Notificación Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/notificacion): domain model · System and reminder notifications · `src/main/java/pe/edu/utp/vacunacioncard/model/notificacion`
- [Común Model](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/model/comun): shared model · Shared calendar, contact, address, and audit concepts · `src/main/java/pe/edu/utp/vacunacioncard/model/comun`

### Services

Business rules and orchestration layer

- [Auth Services](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/auth): service facade · User accounts, roles, permissions, and sessions · `src/main/java/pe/edu/utp/vacunacioncard/service/auth`
- [Usuario Services](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/usuario): service facade · User profile and patient-facing workflows · `src/main/java/pe/edu/utp/vacunacioncard/service/usuario`
- [Vacunación Services](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/vacunacion): service facade · Vaccines, cards, lab, and registry workflows · `src/main/java/pe/edu/utp/vacunacioncard/service/vacunacion`
- [Cita Services](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/cita): service facade · Appointment and schedule orchestration · `src/main/java/pe/edu/utp/vacunacioncard/service/cita`
- [Campaña Services](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/campania): service facade · Campaign and center management · `src/main/java/pe/edu/utp/vacunacioncard/service/campania`
- [Salud Services](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/salud): service facade · Health restrictions and contraindications · `src/main/java/pe/edu/utp/vacunacioncard/service/salud`
- [Notificación Service](https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/service/notificacion/impl/NotificacionServiceImpl.java): orchestration service · Notification creation and dispatch orchestration · `src/main/java/pe/edu/utp/vacunacioncard/service/notificacion/impl/NotificacionServiceImpl.java`
- [Común Services](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/comun): cross-cutting service · Calendar and audit trail coordination · `src/main/java/pe/edu/utp/vacunacioncard/service/comun`

### Repositories

Persistence abstraction layer

- [Auth Repos](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/auth): persistence boundary · Account, role, permission, and session storage abstractions · `src/main/java/pe/edu/utp/vacunacioncard/repository/auth`
- [Usuario Repos](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/usuario): persistence boundary · User, patient, nurse, admin, and insurance repositories · `src/main/java/pe/edu/utp/vacunacioncard/repository/usuario`
- [Vacunación Repos](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/vacunacion): persistence boundary · Vaccination aggregates and lookup data repositories · `src/main/java/pe/edu/utp/vacunacioncard/repository/vacunacion`
- [Cita Repos](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/cita): persistence boundary · Appointment and schedule repositories · `src/main/java/pe/edu/utp/vacunacioncard/repository/cita`
- [Campaña Repos](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/campania): persistence boundary · Campaign and center repositories · `src/main/java/pe/edu/utp/vacunacioncard/repository/campania`
- [Salud Repos](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/salud): persistence boundary · Health restriction repositories · `src/main/java/pe/edu/utp/vacunacioncard/repository/salud`
- [Notificación Repo](https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/repository/notificacion/NotificacionRepository.java): persistence boundary · Notification persistence abstraction · `src/main/java/pe/edu/utp/vacunacioncard/repository/notificacion/NotificacionRepository.java`
- [Común Repos](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/repository/comun): persistence boundary · Calendar and audit persistence abstractions · `src/main/java/pe/edu/utp/vacunacioncard/repository/comun`

### Patterns

Explicit design-pattern components

- [Notification Factory](https://github.com/najhelybs/vacunacioncard/tree/main/src/main/java/pe/edu/utp/vacunacioncard/service/patron/creacional/factorymethod): factory method · Creates reminder or system notifications · `src/main/java/pe/edu/utp/vacunacioncard/service/patron/creacional/factorymethod`
- [Sistema Config](https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/service/patron/singleton/ConfiguracionSistema.java): singleton · Centralized system configuration instance · `src/main/java/pe/edu/utp/vacunacioncard/service/patron/singleton/ConfiguracionSistema.java`
- [Service Error](https://github.com/najhelybs/vacunacioncard/blob/main/src/main/java/pe/edu/utp/vacunacioncard/exception/ServiceException.java): application exception · Shared service-layer business rule exception · `src/main/java/pe/edu/utp/vacunacioncard/exception/ServiceException.java`

## Connections

- Spring Boot App → Auth Services: starts · Bootstraps the application services
- Spring Boot App → Usuario Services: starts · Bootstraps the application services
- Spring Boot App → Vacunación Services: starts · Bootstraps the application services
- Spring Boot App → Cita Services: starts · Bootstraps the application services
- Spring Boot App → Campaña Services: starts · Bootstraps the application services
- Spring Boot App → Salud Services: starts · Bootstraps the application services
- Spring Boot App → Notificación Service: starts · Bootstraps the application services
- Spring Boot App → Común Services: starts · Bootstraps the application services
- Auth Services → Auth Model: uses · Business logic over auth domain objects
- Auth Services → Auth Repos: persists via · Reads and writes auth data through repositories
- Usuario Services → Usuario Model: uses · Business logic over user domain objects
- Usuario Services → Usuario Repos: persists via · Reads and writes user data through repositories
- Vacunación Services → Vacunación Model: uses · Business logic over vaccination domain objects
- Vacunación Services → Vacunación Repos: persists via · Reads and writes vaccination data through repositories
- Cita Services → Cita Model: uses · Business logic over appointment domain objects
- Cita Services → Cita Repos: persists via · Reads and writes appointment data through repositories
- Campaña Services → Campaña Model: uses · Business logic over campaign domain objects
- Campaña Services → Campaña Repos: persists via · Reads and writes campaign data through repositories
- Salud Services → Salud Model: uses · Business logic over health restriction domain objects
- Salud Services → Salud Repos: persists via · Reads and writes health data through repositories
- Notificación Service → Notificación Model: uses · Notification orchestration over notification types
- Notificación Service → Notificación Repo: persists via · Stores and retrieves notifications
- Notificación Service → Notification Factory: creates · Chooses reminder or system notification creation path
- Común Services → Común Model: uses · Shared calendar and audit domain objects
- Común Services → Común Repos: persists via · Stores shared audit and calendar data
- Común Services → Sistema Config: configures · Uses central system configuration
- Notificación Service → Service Error: raises · Signals service-level validation and business-rule failures
- Usuario Services → Service Error: raises · Signals service-level validation and business-rule failures
- Cita Services → Service Error: raises · Signals service-level validation and business-rule failures
