# ictudevs/attendance architecture

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

- Interactive diagram: https://gitdiagram.com/ictudevs/attendance
- Repository: https://github.com/ictudevs/attendance

## Overview

This Laravel application manages employee and student attendance alongside organizational administration. The main workflow is a staff member’s attendance action, handled by the attendance controller and persisted as an attendance record; the controller also uses attendee, geofence, and face-matching logic. Administrators use a separate system controller for users, roles, campuses, units, and attendees. The graph preserves the central models and audit/authorization layers. The README is empty, and routes and most UI sources were not inspected, so browser entry points and some feature connections remain unverified.

Main entry points: [`app/Http/Controllers/SystemController.php`](https://github.com/ictudevs/attendance/blob/master/app/Http/Controllers/SystemController.php) (System controller), [`app/Http/Controllers/AttendanceController.php`](https://github.com/ictudevs/attendance/blob/master/app/Http/Controllers/AttendanceController.php) (Attendance controller), [`app/Models/Attendee.php`](https://github.com/ictudevs/attendance/blob/master/app/Models/Attendee.php) (Attendee), [`app/Models/Concerns/Auditable.php`](https://github.com/ictudevs/attendance/blob/master/app/Models/Concerns/Auditable.php) (Audit behavior)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_attendance["Attendance"]
  node_attendance_controller["Attendance controller"]
  node_attendance_record[("Attendance record<br/>[attendance.php]")]
  node_face_match["Face matching<br/>[FaceMatch.php]"]
  node_geofence_check["Geofence check<br/>[GeofenceCheck.php]"]
end

subgraph group_administration["Administration"]
  node_system_controller["System controller"]
end

subgraph group_domain["Domain Models"]
  node_attendee[("Attendee<br/>[Attendee.php]")]
  node_user[("User<br/>[User.php]")]
  node_campus[("Campus<br/>[Campus.php]")]
  node_unit[("Unit<br/>[Unit.php]")]
  node_role[("Role<br/>[Role.php]")]
  node_geofence[("Geofence<br/>[Geofence.php]")]
  node_unbind_request[("Device unbind request")]
  node_notification[("Notification<br/>[Notification.php]")]
  node_attendee_type["Attendee types<br/>[AttendeeType.php]"]
end

subgraph group_shared["Shared Services"]
  node_admin_roles["Role authorization<br/>[AdminRoles.php]"]
  node_audit_log_query["Audit visibility<br/>[AuditLogQuery.php]"]
  node_auditable["Audit behavior<br/>[Auditable.php]"]
  node_user_access["DTR access check"]
end

node_staff(("Staff user"))
node_admin(("Administrator"))

node_staff -.->|"submits attendance"| node_attendance_controller
node_attendance_controller -->|"reads and writes"| node_attendance_record
node_attendance_controller -->|"loads attendee"| node_attendee
node_attendance_controller -->|"uses matching"| node_face_match
node_attendance_controller -->|"checks location"| node_geofence_check
node_attendance_controller -->|"reads zones"| node_geofence
node_attendance_controller -->|"loads campuses"| node_campus
node_attendance_controller -->|"uses notifications"| node_notification
node_attendance_controller -->|"handles unbinds"| node_unbind_request
node_attendance_controller -->|"checks capabilities"| node_admin_roles
node_system_controller -->|"manages attendees"| node_attendee
node_system_controller -->|"manages users"| node_user
node_system_controller -->|"manages roles"| node_role
node_system_controller -->|"manages campuses"| node_campus
node_system_controller -->|"manages units"| node_unit
node_system_controller -->|"manages geofences"| node_geofence
node_system_controller -->|"reviews requests"| node_unbind_request
node_system_controller -->|"uses notifications"| node_notification
node_system_controller -->|"checks capabilities"| node_admin_roles
node_system_controller -->|"queries audit logs"| node_audit_log_query
node_admin -.->|"manages records"| node_system_controller
node_user_access -->|"checks permission"| node_admin_roles
node_audit_log_query -->|"filters by role"| node_admin_roles
node_audit_log_query -->|"scopes by user"| node_user
node_attendee -->|"uses type"| node_attendee_type
node_attendee -->|"relates to user"| node_user
node_attendee -->|"belongs to unit"| node_unit
node_attendee -->|"has attendance"| node_attendance_record
node_campus -->|"has units"| node_unit
node_campus -->|"has geofence"| node_geofence
node_unit -->|"has attendees"| node_attendee
node_unit -->|"relates to managers"| node_user
node_geofence -->|"belongs to campus"| node_campus
node_unbind_request -->|"belongs to attendee"| node_attendee
node_unbind_request -->|"references reviewer"| node_user
node_auditable -->|"scopes audit"| node_attendee
node_auditable -->|"scopes audit"| node_campus
node_auditable -->|"scopes audit"| node_unbind_request
node_auditable -->|"scopes audit"| node_geofence
node_auditable -->|"scopes audit"| node_unit
node_auditable -->|"scopes audit"| node_user
node_auditable -->|"scopes audit"| node_attendance_record

click node_attendance_controller "https://github.com/ictudevs/attendance/blob/master/app/Http/Controllers/AttendanceController.php"
click node_attendance_record "https://github.com/ictudevs/attendance/blob/master/app/Models/attendance.php"
click node_attendee "https://github.com/ictudevs/attendance/blob/master/app/Models/Attendee.php"
click node_face_match "https://github.com/ictudevs/attendance/blob/master/app/Services/FaceMatch.php"
click node_geofence_check "https://github.com/ictudevs/attendance/blob/master/app/Services/GeofenceCheck.php"
click node_system_controller "https://github.com/ictudevs/attendance/blob/master/app/Http/Controllers/SystemController.php"
click node_user "https://github.com/ictudevs/attendance/blob/master/app/Models/User.php"
click node_campus "https://github.com/ictudevs/attendance/blob/master/app/Models/Campus.php"
click node_unit "https://github.com/ictudevs/attendance/blob/master/app/Models/Unit.php"
click node_role "https://github.com/ictudevs/attendance/blob/master/app/Models/Role.php"
click node_geofence "https://github.com/ictudevs/attendance/blob/master/app/Models/Geofence.php"
click node_unbind_request "https://github.com/ictudevs/attendance/blob/master/app/Models/DeviceUnbindRequest.php"
click node_notification "https://github.com/ictudevs/attendance/blob/master/app/Models/Notification.php"
click node_attendee_type "https://github.com/ictudevs/attendance/blob/master/app/Enums/AttendeeType.php"
click node_admin_roles "https://github.com/ictudevs/attendance/blob/master/app/Support/AdminRoles.php"
click node_audit_log_query "https://github.com/ictudevs/attendance/blob/master/app/Support/AuditLogQuery.php"
click node_auditable "https://github.com/ictudevs/attendance/blob/master/app/Models/Concerns/Auditable.php"
click node_user_access "https://github.com/ictudevs/attendance/blob/master/app/Http/Middleware/CanGenerateDtrMiddleware.php"

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_attendance_controller,node_attendance_record,node_face_match,node_geofence_check,node_staff toneBlue
class node_system_controller toneAmber
class node_attendee,node_user,node_campus,node_unit,node_role,node_geofence,node_unbind_request,node_notification,node_attendee_type toneMint
class node_admin_roles,node_audit_log_query,node_auditable,node_user_access toneRose
class node_admin toneIndigo
```

## Components

### Attendance

- [Attendance controller](https://github.com/ictudevs/attendance/blob/master/app/Http/Controllers/AttendanceController.php): `app/Http/Controllers/AttendanceController.php`
- [Attendance record](https://github.com/ictudevs/attendance/blob/master/app/Models/attendance.php): `app/Models/attendance.php`
- [Face matching](https://github.com/ictudevs/attendance/blob/master/app/Services/FaceMatch.php): `app/Services/FaceMatch.php`
- [Geofence check](https://github.com/ictudevs/attendance/blob/master/app/Services/GeofenceCheck.php): `app/Services/GeofenceCheck.php`

### Administration

- [System controller](https://github.com/ictudevs/attendance/blob/master/app/Http/Controllers/SystemController.php): `app/Http/Controllers/SystemController.php`

### Domain Models

- [Attendee](https://github.com/ictudevs/attendance/blob/master/app/Models/Attendee.php): `app/Models/Attendee.php`
- [User](https://github.com/ictudevs/attendance/blob/master/app/Models/User.php): `app/Models/User.php`
- [Campus](https://github.com/ictudevs/attendance/blob/master/app/Models/Campus.php): `app/Models/Campus.php`
- [Unit](https://github.com/ictudevs/attendance/blob/master/app/Models/Unit.php): `app/Models/Unit.php`
- [Role](https://github.com/ictudevs/attendance/blob/master/app/Models/Role.php): `app/Models/Role.php`
- [Geofence](https://github.com/ictudevs/attendance/blob/master/app/Models/Geofence.php): `app/Models/Geofence.php`
- [Device unbind request](https://github.com/ictudevs/attendance/blob/master/app/Models/DeviceUnbindRequest.php): `app/Models/DeviceUnbindRequest.php`
- [Notification](https://github.com/ictudevs/attendance/blob/master/app/Models/Notification.php): `app/Models/Notification.php`
- [Attendee types](https://github.com/ictudevs/attendance/blob/master/app/Enums/AttendeeType.php): `app/Enums/AttendeeType.php`

### Shared Services

- [Role authorization](https://github.com/ictudevs/attendance/blob/master/app/Support/AdminRoles.php): `app/Support/AdminRoles.php`
- [Audit visibility](https://github.com/ictudevs/attendance/blob/master/app/Support/AuditLogQuery.php): `app/Support/AuditLogQuery.php`
- [Audit behavior](https://github.com/ictudevs/attendance/blob/master/app/Models/Concerns/Auditable.php): `app/Models/Concerns/Auditable.php`
- [DTR access check](https://github.com/ictudevs/attendance/blob/master/app/Http/Middleware/CanGenerateDtrMiddleware.php): `app/Http/Middleware/CanGenerateDtrMiddleware.php`

### Other components

- **Staff user**
- **Administrator**

## Connections

- Staff user → Attendance controller: submits attendance
- Attendance controller → Attendance record: reads and writes (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Attendee: loads attendee (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Face matching: uses matching (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Geofence check: checks location (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Geofence: reads zones (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Campus: loads campuses (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Notification: uses notifications (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Device unbind request: handles unbinds (evidence: `app/Http/Controllers/AttendanceController.php`)
- Attendance controller → Role authorization: checks capabilities (evidence: `app/Http/Controllers/AttendanceController.php`)
- System controller → Attendee: manages attendees (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → User: manages users (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Role: manages roles (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Campus: manages campuses (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Unit: manages units (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Geofence: manages geofences (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Device unbind request: reviews requests (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Notification: uses notifications (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Role authorization: checks capabilities (evidence: `app/Http/Controllers/SystemController.php`)
- System controller → Audit visibility: queries audit logs (evidence: `app/Http/Controllers/SystemController.php`)
- Administrator → System controller: manages records
- DTR access check → Role authorization: checks permission (evidence: `app/Http/Middleware/CanGenerateDtrMiddleware.php`)
- Audit visibility → Role authorization: filters by role (evidence: `app/Support/AuditLogQuery.php`)
- Audit visibility → User: scopes by user (evidence: `app/Support/AuditLogQuery.php`)
- Attendee → Attendee types: uses type (evidence: `app/Models/Attendee.php`)
- Attendee → User: relates to user (evidence: `app/Models/Attendee.php`)
- Attendee → Unit: belongs to unit (evidence: `app/Models/Attendee.php`)
- Attendee → Attendance record: has attendance (evidence: `app/Models/Attendee.php`)
- Campus → Unit: has units (evidence: `app/Models/Campus.php`)
- Campus → Geofence: has geofence (evidence: `app/Models/Campus.php`)
- Unit → Attendee: has attendees (evidence: `app/Models/Unit.php`)
- Unit → User: relates to managers (evidence: `app/Models/Unit.php`)
- Geofence → Campus: belongs to campus (evidence: `app/Models/Geofence.php`)
- Device unbind request → Attendee: belongs to attendee (evidence: `app/Models/DeviceUnbindRequest.php`)
- Device unbind request → User: references reviewer (evidence: `app/Models/DeviceUnbindRequest.php`)
- Audit behavior → Attendee: scopes audit (evidence: `app/Models/Concerns/Auditable.php`)
- Audit behavior → Campus: scopes audit (evidence: `app/Models/Concerns/Auditable.php`)
- Audit behavior → Device unbind request: scopes audit (evidence: `app/Models/Concerns/Auditable.php`)
- Audit behavior → Geofence: scopes audit (evidence: `app/Models/Concerns/Auditable.php`)
- Audit behavior → Unit: scopes audit (evidence: `app/Models/Concerns/Auditable.php`)
- Audit behavior → User: scopes audit (evidence: `app/Models/Concerns/Auditable.php`)
- Audit behavior → Attendance record: scopes audit (evidence: `app/Models/Concerns/Auditable.php`)
