> ## Documentation Index
> Fetch the complete documentation index at: https://memberpulseptyltd.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UJ-M-011: Check-in to Event

> Member checks in to an event using their QR code ticket

## Journey Overview

| Attribute      | Value                                                   |
| -------------- | ------------------------------------------------------- |
| **Journey ID** | UJ-M-011                                                |
| **Actor**      | Event attendee                                          |
| **Goal**       | Confirm attendance at event via check-in                |
| **Trigger**    | Attendee arrives at event venue or joins online         |
| **Outcome**    | Attendance recorded, CPD points awarded (if applicable) |

## Preconditions

* Attendee has valid ticket for the event
* Event is on the scheduled date
* Check-in window is open
* Ticket has not already been used

## Journey Flow

```mermaid theme={null}
flowchart TD
    A[Attendee arrives at event] --> B[Present QR code]
    B --> C[Staff scans QR code]
    C --> D{Valid ticket?}
    D -->|Yes| E[Check-in recorded]
    D -->|No| F[Show error]
    E --> G[Welcome message displayed]
    G --> H{CPD enabled?}
    H -->|Yes| I[CPD points queued]
    H -->|No| J[Check-in complete]
    I --> J
    F --> K[Manual resolution]
    K --> L{Resolved?}
    L -->|Yes| E
    L -->|No| M[Denied entry]
```

## Check-in Methods

### QR Code Scan (Primary)

<Steps>
  <Step title="Present QR Code">
    Attendee shows QR code to event staff:

    * From mobile phone (email or portal)
    * From mobile wallet (Apple/Google)
    * Printed PDF ticket
  </Step>

  <Step title="Staff Scans Code">
    Staff uses scanning device:

    * Dedicated scanner hardware
    * Tablet/phone with camera app
    * Client portal check-in interface
  </Step>

  <Step title="Validation">
    System validates ticket:

    | Check           | Pass | Fail                 |
    | --------------- | ---- | -------------------- |
    | Ticket exists   | ✅    | "Ticket not found"   |
    | Correct event   | ✅    | "Wrong event"        |
    | Not used        | ✅    | "Already checked in" |
    | Not voided      | ✅    | "Ticket cancelled"   |
    | Check-in window | ✅    | "Check-in not open"  |
  </Step>

  <Step title="Confirmation">
    On successful scan:

    **Staff Device Shows:**

    * Green checkmark
    * Attendee name
    * Ticket type
    * Photo (if on file)
    * "Welcome!" message

    **Attendee Receives:**

    * Confirmation on their phone (if app)
    * SMS confirmation (optional)
    * Email confirmation (optional)
  </Step>
</Steps>

### Manual Check-in (Backup)

If QR code unavailable:

1. Staff searches by name or email
2. Verifies attendee identity
3. Manually marks as checked in
4. Notes reason for manual entry

### Self Check-in Kiosk (Optional)

For large events:

1. Attendee approaches kiosk
2. Scans QR code on screen
3. Confirms identity
4. Prints name badge (if configured)
5. Proceeds to event

## Check-in for Online Events

### Zoom Integration

<Steps>
  <Step title="Join Online Event">
    Attendee clicks meeting link from ticket
  </Step>

  <Step title="Zoom Tracking">
    System tracks attendance via Zoom API:

    * Join time recorded
    * Duration tracked
    * Email matched to registration
  </Step>

  <Step title="Post-Event Import">
    After event, staff imports Zoom attendance:

    * Participant list retrieved
    * Matched to registrations
    * Attendance marked automatically
    * Unmatched attendees flagged
  </Step>
</Steps>

### Manual Online Check-in

For non-Zoom events:

* Attendee clicks "I'm attending" in portal
* Staff takes manual roll call
* Post-event survey with attendance confirmation

## Check-in Statuses

| Status     | Description              | CPD Eligible |
| ---------- | ------------------------ | ------------ |
| Registered | Has ticket, not attended | No           |
| Checked In | Attended, verified       | Yes          |
| Partial    | Left early / joined late | Configurable |
| No Show    | Did not attend           | No           |
| Cancelled  | Registration cancelled   | No           |

## CPD Auto-Award on Check-in

If event has CPD points and auto-award enabled:

1. Check-in recorded
2. System queues CPD award job
3. After event ends (or grace period):
   * CPD record created
   * Points added to member's total
   * Certificate generated (if configured)
   * Notification sent to member

**Partial Attendance:**

* Minimum duration may be required
* Prorated points (e.g., 50% attendance = 50% points)
* Configurable by organization

## Multi-Session Events

For events with multiple sessions:

* Check-in per session available
* Overall event check-in option
* Session-specific CPD tracking
* Agenda shows check-in status per session

## Attendee Experience

### Mobile View

```
┌─────────────────────────────────────────┐
│         ✅ CHECKED IN                   │
│                                         │
│    Annual Conference 2025               │
│    March 15, 2025 • 9:15 AM            │
│                                         │
│    Welcome, John!                       │
│                                         │
│    You've been checked in to:           │
│    • Main Conference                    │
│                                         │
│    CPD Points: 6 points pending         │
│    (Awarded after event completion)     │
│                                         │
│    [View Agenda]  [Event Info]          │
└─────────────────────────────────────────┘
```

## Related Entities

* [`Event Ticket`](/entities/core/event-ticket)
* [`Event`](/entities/core/event)
* [`CPD Record`](/entities/core/cpd-record)

## Related Journeys

* [UJ-M-009](/member/journeys/receive-qr-ticket)
* [UJ-M-012](/member/journeys/join-online-event)
* [UJ-M-015](/member/journeys/track-cpd)

## Acceptance Criteria

### Frontend

* [ ] QR scanner interface (camera-based)
* [ ] Manual search by name/email
* [ ] Check-in confirmation display
* [ ] Attendee photo display (if available)
* [ ] Bulk check-in for walk-ins
* [ ] Check-in counter/statistics
* [ ] Check-in status in My Tickets
* [ ] Post check-in confirmation message
* [ ] CPD pending notification

### Backend

* [ ] `POST /api/events/{id}/checkin` - Process check-in
* [ ] `POST /api/events/{id}/checkin/scan` - QR scan endpoint
* [ ] `GET /api/events/{id}/attendees` - Attendee list with status
* [ ] `POST /api/events/{id}/import-zoom` - Zoom attendance import
* [ ] CPD auto-award job

### Permissions

* [ ] Event staff can check in attendees
* [ ] Attendees can view their own status

### Business Rules

* [ ] Single check-in per ticket (no duplicates)
* [ ] Check-in window configurable (start/end)
* [ ] CPD awarded only after minimum attendance
* [ ] No-show marking after event ends

### Error Handling

* [ ] Invalid QR code error message
* [ ] Already checked in notification
* [ ] Offline mode for scanner (sync later)
* [ ] Manual override for edge cases
