# tazuna440/wdems architecture

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

- Interactive diagram: https://gitdiagram.com/tazuna440/wdems
- Repository: https://github.com/tazuna440/wdems

## Overview

WDEMS combines community-run event operations with church-event workflows. The principal path is organizer event setup, public registration and contact verification, identity resolution, then attendance and reporting; church extensions add service, fellowship, and discipleship management. Edges are limited to relationships documented in the README or visible in sampled source and the SOURCE INDEX; unsampled controller wiring is not inferred.

Main entry points: [`app/Services/RegistrationVerification/RegistrationVerificationService.php`](https://github.com/tazuna440/wdems/blob/main/app/Services/RegistrationVerification/RegistrationVerificationService.php) (Contact Verification), [`app/Services/Reporting/ReportService.php`](https://github.com/tazuna440/wdems/blob/main/app/Services/Reporting/ReportService.php) (Reports), [`app/Http/Controllers/DiscipleshipEnrollmentController.php`](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/DiscipleshipEnrollmentController.php) (Discipleship), [`app/Models/DiscipleshipEnrollment.php`](https://github.com/tazuna440/wdems/blob/main/app/Models/DiscipleshipEnrollment.php) (Enrollments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_run["Running Events"]
  node_event_admin["Event Setup"]
  node_event_record[("Event Lifecycle<br/>[Event.php]")]
  node_form_builder["Form Builder"]
  node_attendance["Run Attendance"]
  node_attendance_record[("Attendance Records<br/>[Attendance.php]")]
end

subgraph group_identity["Registration Identity"]
  node_public_registration["Public Registration"]
  node_verification["Contact Verification"]
  node_registration_record[("Registration Records<br/>[Registration.php]")]
  node_participant_identity[("Participant Identity<br/>[Participant.php]")]
  node_duplicate_review["Duplicate Review"]
end

subgraph group_church["Church Workstreams"]
  node_church_event["Church Events"]
  node_church_bridge["Registration Bridge"]
  node_service_ops["Services"]
  node_service_occurrence[("Service Occurrences")]
  node_fellowship_ops["Fellowship"]
  node_discipleship_ops["Discipleship"]
  node_discipleship_batch[("Program Batches")]
  node_discipleship_enrollment[("Enrollments")]
  node_progress["Progress Tracking"]
end

subgraph group_platform["Access and Insights"]
  node_reporting["Reports<br/>[ReportService.php]"]
  node_user_access[("Accounts and Roles<br/>[User.php]")]
  node_two_factor["Email Two-Factor"]
end

node_organizer(("Organizer"))
node_attendee(("Participant"))

node_organizer -->|"manages"| node_event_admin
node_event_admin -.->|"updates"| node_event_record
node_organizer -->|"configures"| node_form_builder
node_attendee -->|"submits"| node_public_registration
node_public_registration -.->|"starts verification"| node_verification
node_verification -->|"persists"| node_registration_record
node_verification -->|"resolves identity"| node_participant_identity
node_verification -->|"checks duplicates"| node_duplicate_review
node_registration_record -->|"references"| node_participant_identity
node_organizer -->|"records attendance"| node_attendance
node_attendance -.->|"stores marks"| node_attendance_record
node_organizer -->|"views reports"| node_reporting
node_reporting -->|"reads events"| node_event_record
node_reporting -->|"reads registrations"| node_registration_record
node_reporting -->|"reads attendance"| node_attendance_record
node_organizer -->|"manages"| node_church_event
node_church_event -.->|"bridges registrations"| node_church_bridge
node_organizer -->|"manages services"| node_service_ops
node_service_ops -.->|"creates occurrences"| node_service_occurrence
node_organizer -->|"manages groups"| node_fellowship_ops
node_organizer -->|"manages enrollment"| node_discipleship_ops
node_discipleship_ops -->|"creates enrollment"| node_discipleship_enrollment
node_discipleship_ops -->|"validates batch"| node_discipleship_batch
node_discipleship_enrollment -->|"points to batch"| node_discipleship_batch
node_discipleship_enrollment -->|"belongs to participant"| node_participant_identity
node_organizer -->|"signs in"| node_user_access
node_user_access -->|"uses email 2FA"| node_two_factor

click node_event_admin "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/EventController.php"
click node_event_record "https://github.com/tazuna440/wdems/blob/main/app/Models/Event.php"
click node_form_builder "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/RegistrationFormController.php"
click node_public_registration "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/PublicRegistrationController.php"
click node_verification "https://github.com/tazuna440/wdems/blob/main/app/Services/RegistrationVerification/RegistrationVerificationService.php"
click node_registration_record "https://github.com/tazuna440/wdems/blob/main/app/Models/Registration.php"
click node_participant_identity "https://github.com/tazuna440/wdems/blob/main/app/Models/Participant.php"
click node_duplicate_review "https://github.com/tazuna440/wdems/blob/main/app/Services/Participants/DuplicateReview.php"
click node_attendance "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/AttendanceController.php"
click node_attendance_record "https://github.com/tazuna440/wdems/blob/main/app/Models/Attendance.php"
click node_reporting "https://github.com/tazuna440/wdems/blob/main/app/Services/Reporting/ReportService.php"
click node_church_event "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/ChurchRegistrationController.php"
click node_church_bridge "https://github.com/tazuna440/wdems/blob/main/app/Services/Church/RegistrationBridge.php"
click node_service_ops "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/ServiceController.php"
click node_service_occurrence "https://github.com/tazuna440/wdems/blob/main/app/Models/ServiceOccurrence.php"
click node_fellowship_ops "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/FellowshipController.php"
click node_discipleship_ops "https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/DiscipleshipEnrollmentController.php"
click node_discipleship_batch "https://github.com/tazuna440/wdems/blob/main/app/Models/DiscipleshipBatch.php"
click node_discipleship_enrollment "https://github.com/tazuna440/wdems/blob/main/app/Models/DiscipleshipEnrollment.php"
click node_progress "https://github.com/tazuna440/wdems/blob/main/app/Services/Discipleship/DiscipleshipProgressService.php"
click node_user_access "https://github.com/tazuna440/wdems/blob/main/app/Models/User.php"
click node_two_factor "https://github.com/tazuna440/wdems/blob/main/app/Services/TwoFactor/EmailTwoFactorService.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_event_admin,node_event_record,node_form_builder,node_attendance,node_attendance_record toneBlue
class node_public_registration,node_verification,node_registration_record,node_participant_identity,node_duplicate_review toneAmber
class node_church_event,node_church_bridge,node_service_ops,node_service_occurrence,node_fellowship_ops,node_discipleship_ops,node_discipleship_batch,node_discipleship_enrollment,node_progress toneMint
class node_reporting,node_user_access,node_two_factor toneRose
class node_organizer,node_attendee toneIndigo
```

## Components

### Running Events

- [Event Setup](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/EventController.php): `app/Http/Controllers/EventController.php`
- [Event Lifecycle](https://github.com/tazuna440/wdems/blob/main/app/Models/Event.php): `app/Models/Event.php`
- [Form Builder](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/RegistrationFormController.php): `app/Http/Controllers/RegistrationFormController.php`
- [Run Attendance](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/AttendanceController.php): `app/Http/Controllers/AttendanceController.php`
- [Attendance Records](https://github.com/tazuna440/wdems/blob/main/app/Models/Attendance.php): `app/Models/Attendance.php`

### Registration Identity

- [Public Registration](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/PublicRegistrationController.php): `app/Http/Controllers/PublicRegistrationController.php`
- [Contact Verification](https://github.com/tazuna440/wdems/blob/main/app/Services/RegistrationVerification/RegistrationVerificationService.php): `app/Services/RegistrationVerification/RegistrationVerificationService.php`
- [Registration Records](https://github.com/tazuna440/wdems/blob/main/app/Models/Registration.php): `app/Models/Registration.php`
- [Participant Identity](https://github.com/tazuna440/wdems/blob/main/app/Models/Participant.php): `app/Models/Participant.php`
- [Duplicate Review](https://github.com/tazuna440/wdems/blob/main/app/Services/Participants/DuplicateReview.php): `app/Services/Participants/DuplicateReview.php`

### Church Workstreams

- [Church Events](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/ChurchRegistrationController.php): `app/Http/Controllers/ChurchRegistrationController.php`
- [Registration Bridge](https://github.com/tazuna440/wdems/blob/main/app/Services/Church/RegistrationBridge.php): `app/Services/Church/RegistrationBridge.php`
- [Services](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/ServiceController.php): `app/Http/Controllers/ServiceController.php`
- [Service Occurrences](https://github.com/tazuna440/wdems/blob/main/app/Models/ServiceOccurrence.php): `app/Models/ServiceOccurrence.php`
- [Fellowship](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/FellowshipController.php): `app/Http/Controllers/FellowshipController.php`
- [Discipleship](https://github.com/tazuna440/wdems/blob/main/app/Http/Controllers/DiscipleshipEnrollmentController.php): `app/Http/Controllers/DiscipleshipEnrollmentController.php`
- [Program Batches](https://github.com/tazuna440/wdems/blob/main/app/Models/DiscipleshipBatch.php): `app/Models/DiscipleshipBatch.php`
- [Enrollments](https://github.com/tazuna440/wdems/blob/main/app/Models/DiscipleshipEnrollment.php): `app/Models/DiscipleshipEnrollment.php`
- [Progress Tracking](https://github.com/tazuna440/wdems/blob/main/app/Services/Discipleship/DiscipleshipProgressService.php): `app/Services/Discipleship/DiscipleshipProgressService.php`

### Access and Insights

- [Reports](https://github.com/tazuna440/wdems/blob/main/app/Services/Reporting/ReportService.php): `app/Services/Reporting/ReportService.php`
- [Accounts and Roles](https://github.com/tazuna440/wdems/blob/main/app/Models/User.php): `app/Models/User.php`
- [Email Two-Factor](https://github.com/tazuna440/wdems/blob/main/app/Services/TwoFactor/EmailTwoFactorService.php): `app/Services/TwoFactor/EmailTwoFactorService.php`

### Other components

- **Organizer**
- **Participant**

## Connections

- Organizer → Event Setup: manages (evidence: `README.md`)
- Event Setup → Event Lifecycle: updates
- Organizer → Form Builder: configures (evidence: `README.md`)
- Participant → Public Registration: submits (evidence: `README.md`)
- Public Registration → Contact Verification: starts verification
- Contact Verification → Registration Records: persists (evidence: `app/Services/RegistrationVerification/RegistrationVerificationService.php`)
- Contact Verification → Participant Identity: resolves identity (evidence: `app/Services/RegistrationVerification/RegistrationVerificationService.php`)
- Contact Verification → Duplicate Review: checks duplicates (evidence: `app/Services/RegistrationVerification/RegistrationVerificationService.php`)
- Registration Records → Participant Identity: references (evidence: `app/Models/Registration.php`)
- Organizer → Run Attendance: records attendance (evidence: `README.md`)
- Run Attendance → Attendance Records: stores marks (evidence: `app/Http/Controllers/AttendanceController.php`)
- Organizer → Reports: views reports (evidence: `README.md`)
- Reports → Event Lifecycle: reads events (evidence: `app/Services/Reporting/ReportService.php`)
- Reports → Registration Records: reads registrations (evidence: `app/Services/Reporting/ReportService.php`)
- Reports → Attendance Records: reads attendance (evidence: `app/Services/Reporting/ReportService.php`)
- Organizer → Church Events: manages (evidence: `README.md`)
- Church Events → Registration Bridge: bridges registrations
- Organizer → Services: manages services (evidence: `README.md`)
- Services → Service Occurrences: creates occurrences
- Organizer → Fellowship: manages groups (evidence: `README.md`)
- Organizer → Discipleship: manages enrollment (evidence: `README.md`)
- Discipleship → Enrollments: creates enrollment (evidence: `app/Http/Controllers/DiscipleshipEnrollmentController.php`)
- Discipleship → Program Batches: validates batch (evidence: `app/Http/Controllers/DiscipleshipEnrollmentController.php`)
- Enrollments → Program Batches: points to batch (evidence: `app/Models/DiscipleshipEnrollment.php`)
- Enrollments → Participant Identity: belongs to participant (evidence: `app/Models/DiscipleshipEnrollment.php`)
- Organizer → Accounts and Roles: signs in (evidence: `README.md`)
- Accounts and Roles → Email Two-Factor: uses email 2FA (evidence: `app/Services/TwoFactor/EmailTwoFactorService.php`)
