# Epic 4: Case Timeline System

## Epic Goal

Implement a case tracking system where admin can create and update timelines for each client's legal matters, providing clients with read-only visibility into their case progress.

## Epic Description

### Business Context

Each client can have multiple legal cases/matters tracked through separate timelines. The admin adds text-based updates to keep clients informed of progress. This is strictly one-way communication - clients can view but cannot interact or respond.

### Technical Context

- **Timelines:** Multiple per client allowed
- **Updates:** Text-only (no document attachments)
- **Communication:** One-way (admin to client)
- **Status:** Active or Archived
- **Notifications:** Email on each update

### Success Criteria

- [ ] Admin can create unlimited timelines per client
- [ ] Admin can add text updates to timelines
- [ ] Admin can edit existing updates
- [ ] Admin can archive/unarchive timelines
- [ ] Clients can view their timelines (read-only)
- [ ] Clients notified via email on updates
- [ ] Update history with timestamps preserved
- [ ] Clear visual distinction between active/archived

---

## Stories

### Story 4.1: Timeline Creation

**Description:** Allow admin to create new case timelines for any client.

**Acceptance Criteria:**
- [ ] Create timeline form with:
  - Select client (search by name/email)
  - Case name/title (required)
  - Case reference number (optional, unique if provided)
  - Initial notes (optional)
- [ ] Timeline assigned to selected client
- [ ] Creation date automatically recorded
- [ ] Status defaults to 'active'
- [ ] Can create multiple timelines per client
- [ ] Confirmation on successful creation
- [ ] Timeline immediately visible to client

**Technical Notes:**
- Store in timelines table
- Fields: user_id, case_name, case_reference, status, created_at
- Validate case_reference uniqueness if provided

---

### Story 4.2: Timeline Updates Management

**Description:** Allow admin to add, edit, and manage updates within a timeline.

**Acceptance Criteria:**
- [ ] Add new update to timeline:
  - Update text content (required, rich text supported)
  - Timestamp automatically recorded
  - Admin name automatically recorded
- [ ] Edit existing updates:
  - Modify update text
  - Edit history preserved (updated_at changes)
- [ ] Updates displayed in chronological order
- [ ] Each update shows:
  - Date/timestamp
  - Admin name
  - Update content
- [ ] Visual timeline representation (optional enhancement)
- [ ] Client notified via email on new update

**Technical Notes:**
- Store in timeline_updates table
- Fields: timeline_id, admin_id, update_text, created_at, updated_at
- Track edit history via updated_at

---

### Story 4.3: Timeline Archiving

**Description:** Allow admin to archive completed cases and unarchive if needed.

**Acceptance Criteria:**
- [ ] Archive timeline:
  - Status changes to 'archived'
  - Timeline remains visible to client
  - No further updates can be added (until unarchived)
  - Visual indicator shows archived status
- [ ] Unarchive timeline:
  - Status returns to 'active'
  - Updates can be added again
- [ ] Filter timelines by status (active/archived)
- [ ] Bulk archive option for multiple timelines
- [ ] Archived timelines sorted separately in client view

**Technical Notes:**
- Use status field: 'active' or 'archived'
- Soft archive (no data deletion)

---

### Story 4.4: Admin Timeline Dashboard

**Description:** Central view for admin to manage all timelines across all clients.

**Acceptance Criteria:**
- [ ] List all timelines with:
  - Case name
  - Client name
  - Status (active/archived)
  - Last update date
  - Update count
- [ ] Filter by:
  - Client (search/select)
  - Status (active/archived/all)
  - Date range
- [ ] Sort by:
  - Client name
  - Case name
  - Last updated
  - Created date
- [ ] Quick actions:
  - View timeline details
  - Add update
  - Archive/unarchive
- [ ] Search by case name or reference
- [ ] Pagination for large lists

**Technical Notes:**
- Use Livewire for real-time filtering
- Eager load relationships to prevent N+1

---

### Story 4.5: Client Timeline View

**Description:** Read-only timeline view for clients to track their case progress.

**Acceptance Criteria:**
- [ ] List all client's timelines:
  - Active timelines prominently displayed
  - Archived timelines clearly separated
  - Visual distinction (color/icon) for status
- [ ] View individual timeline:
  - Case name and reference
  - Status indicator
  - All updates in chronological order
  - Each update with date and content
- [ ] No edit/comment capabilities
- [ ] No ability to archive/delete
- [ ] Responsive design for mobile viewing
- [ ] Recent updates indicator (new since last view)
- [ ] Bilingual labels and dates

**Technical Notes:**
- Filter by authenticated user's ID
- Track last_viewed timestamp per timeline (optional)
- Read-only Volt component

---

### Story 4.6: Timeline Update Notifications

**Description:** Email clients when admin adds updates to their timelines.

**Acceptance Criteria:**
- [ ] Email sent when new update added
- [ ] Email includes:
  - Case name/reference
  - Update summary or full text
  - Link to view timeline
  - Date of update
- [ ] Email in client's preferred language
- [ ] Sender: no-reply@libra.ps
- [ ] Professional template with branding
- [ ] No email for archived timeline reactivation
- [ ] Queue emails for performance

**Technical Notes:**
- Use Laravel notifications
- Trigger on timeline_updates creation
- Depends on Epic 8 for full email infrastructure

---

## Dependencies

| Epic | Dependency |
|------|------------|
| Epic 1 | Authentication, database schema |
| Epic 2 | User accounts (timelines assigned to users) |
| Epic 8 | Email notifications |

## Risks & Mitigations

| Risk | Impact | Mitigation |
|------|--------|------------|
| Large update content performance | Low | Paginate updates, lazy load |
| Email notification failures | Medium | Queue with retry, log failures |
| Accidental archive of active case | Low | Confirmation dialog, unarchive option |

## Definition of Done

- [ ] All stories completed with acceptance criteria met
- [ ] Tests for timeline CRUD operations
- [ ] Tests for update management
- [ ] Tests for archive/unarchive
- [ ] Client view properly scoped to their timelines only
- [ ] Email notifications working
- [ ] Bilingual support verified
- [ ] Code formatted with Pint
