Photo Management (per specs/photo-management.md): - Sharp integration for 3-size compression (thumb/medium/full) - WebP output with 80-90% quality - Client-side compression with browser-image-compression - PhotoUpload component with camera/drag-drop support - Upload API with bulk support and stats endpoint Testing: - Backend: Jest tests for all major API endpoints - Frontend: Vitest tests for utilities and API clients - CI: Updated Forgejo workflow for test execution Specs (100% coverage): - visitor-management.md (Phase 8) - messaging.md (Phase 9) - audit-and-documents.md (Phase 10) - accessibility-i18n.md (Phase 11) - hardware-integration.md (Phase 12) - advanced-features.md (Phase 13) Documentation: - OpenAPI 3.0 spec (docs/openapi.yaml) - All endpoints documented with schemas
2.1 KiB
2.1 KiB
Feature Spec: Visitor Management & Access Control
Priority: 🔴 Critical (Compliance)
Phase: 8
Status: ✅ Implemented
Overview
Track all visitors, contractors, and inspectors entering/exiting the facility. Generate badges with QR codes. Maintain audit trail for California DCC compliance.
Models
Visitor
id: UUIDname: string (required)email: string (optional)phone: string (optional)company: string (optional)type: enum (VISITOR, CONTRACTOR, INSPECTOR, VENDOR)status: enum (PENDING, CHECKED_IN, CHECKED_OUT)photo: string (optional, URL)ndaSigned: booleanbadgeNumber: string (optional)
VisitorLog
id: UUIDvisitorId: FK to VisitorentryTime: datetimeexitTime: datetime (optional)escortId: FK to User (optional)approvedById: FK to Userpurpose: stringareasAccessed: string[]
AccessZone
id: UUIDname: stringrequiresEscort: booleanrequiresNDA: booleanmaxOccupancy: number (optional)
API Endpoints
Visitors
GET /api/visitors- List all visitorsPOST /api/visitors- Create new visitorGET /api/visitors/:id- Get visitor detailsPUT /api/visitors/:id- Update visitorPOST /api/visitors/:id/check-in- Check in visitorPOST /api/visitors/:id/check-out- Check out visitorGET /api/visitors/active- Get currently checked-in visitors
Access Zones
GET /api/zones- List zonesPOST /api/zones- Create zoneGET /api/zones/:id/occupancy- Get zone occupancyPOST /api/zones/:id/enter- Log zone entry
Frontend Pages
Visitor Kiosk (/kiosk)
- Tablet-friendly check-in interface
- New visitor registration
- Returning visitor search
- NDA acknowledgement
- Badge number display
Visitor Management (/visitors)
- Active visitors dashboard
- All visitors list with search/filter
- Zone management
- Compliance reports
Compliance Notes
- All visitor entries logged with timestamps
- NDA acknowledgement tracked
- Escort requirements enforced
- Badge numbers unique per day
- 7-year retention for audit purposes