PSA/docs/architecture/scheduling.md
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

176 lines
5.3 KiB
Markdown

# Scheduling System
## Overview
The scheduling system provides a comprehensive solution for managing appointments, technician dispatch, and recurring events. It supports multiple agent assignments per schedule entry while maintaining efficient storage and performance characteristics.
## Key Components
### Database Structure
* **schedule_entries table:**
- Core fields: entry_id, title, scheduled_start, scheduled_end, work_item_id, status
- Recurrence support: recurrence_pattern (JSONB), original_entry_id, is_recurring
- Multi-tenant: tenant field with RLS policies
- Work item integration: work_item_type, work_item_id for linking to tickets/tasks
* **schedule_entry_assignees table:**
- Many-to-many relationship for multiple agent assignments
- Fields: tenant, entry_id, user_id
- Cascading deletes for data consistency
- Foreign key constraints to both users and schedule_entries
### Core Files
* Models:
- `@`: Core scheduling logic
- `server/src/interfaces/schedule.interfaces.ts`: TypeScript interfaces
- `server/src/lib/schemas/scheduleSchemas.ts`: Zod validation schemas
* UI Components:
- `server/src/components/time-management/ScheduleCalendar.tsx`: Main calendar view
- `server/src/components/time-management/EntryPopup.tsx`: Entry creation/editing
- `server/src/components/ui/MultiUserPicker.tsx`: Agent selection component
* Actions:
- `server/src/lib/actions/scheduleActions.ts`: Server actions for CRUD operations
## Features
### Multiple Agent Assignment
* Support for assigning multiple technicians/agents to a single schedule entry
* Role-based access control for multi-agent assignment capability
* Backward compatibility with legacy single-user assignments
* Efficient querying through proper database indexing
### Recurrence Handling
* Efficient storage of recurring events:
- Only master entries stored in database
- Virtual instances generated on-demand
- No duplicate storage for recurring instances
- Supports infinite recurrence patterns
* Recurrence Patterns:
- Frequencies: daily, weekly, monthly, yearly
- Pattern options: interval, end date/count, exceptions
- Support for complex patterns (e.g., every 2 weeks on Monday and Wednesday)
* Exception Handling:
- Single instance modifications
- Future occurrence updates
- All occurrence updates
- Pattern-based exceptions
### Calendar Interface
* Interactive calendar with drag-and-drop support
* Multiple view options (day, week, month)
* Visual distinction between different work item types
* Real-time updates and conflict detection
* Responsive design for various screen sizes
### Performance Optimizations
* Efficient database queries using proper indexes
* On-demand calculation of recurring instances
* Minimal storage overhead for recurring entries
* Optimized user assignment queries
## Usage Examples
### Creating a Schedule Entry
```typescript
const entry = await ScheduleEntry.create({
title: "Site Visit",
scheduled_start: new Date("2024-01-15T10:00:00"),
scheduled_end: new Date("2024-01-15T12:00:00"),
work_item_id: "ticket_123",
work_item_type: "ticket",
status: "scheduled"
}, {
assignedUserIds: ["user1", "user2"] // Multiple agents
});
```
### Creating a Recurring Entry
```typescript
const recurringEntry = await ScheduleEntry.create({
// ... basic entry fields ...
recurrence_pattern: {
frequency: "weekly",
interval: 2,
daysOfWeek: [1, 3], // Monday and Wednesday
startDate: new Date("2024-01-15"),
endDate: new Date("2024-06-15")
}
});
```
### Updating Assignments
```typescript
await ScheduleEntry.update(entryId, {
assigned_user_ids: ["user1", "user2", "user3"]
}, "future"); // Updates this and future occurrences
```
## Best Practices
1. **Recurrence Patterns:**
- Use appropriate frequency for the use case
- Consider time zone implications
- Set reasonable end dates or occurrence counts
- Handle exceptions appropriately
2. **Multiple Assignments:**
- Verify agent availability before assignment
- Consider workload distribution
- Maintain clear assignment hierarchy
- Handle conflicts gracefully
3. **Performance:**
- Query within reasonable date ranges
- Use appropriate indexes
- Handle large result sets properly
- Cache frequently accessed data
4. **UI Considerations:**
- Provide clear visual feedback
- Handle loading states gracefully
- Implement proper error handling
- Ensure responsive design
## Security Considerations
1. **Access Control:**
- Role-based permissions for multi-agent assignment
- Tenant isolation through RLS
- Proper validation of user assignments
- Audit logging of changes
2. **Data Integrity:**
- Transaction handling for complex operations
- Validation of recurrence patterns
- Proper error handling and rollback
- Consistent state management
## Future Enhancements
1. **Advanced Scheduling:**
- Resource conflict detection
- Automated scheduling optimization
- Complex recurrence patterns
- Calendar sync integration
2. **Integration:**
- External calendar system sync
- Mobile app support
- Real-time updates
- API expansion
3. **Analytics:**
- Schedule optimization insights
- Resource utilization tracking
- Pattern analysis
- Performance metrics
4. **UI/UX:**
- Enhanced drag-and-drop
- Better visualization options
- Improved mobile experience
- Accessibility enhancements