Internal
·
Updated Mar 27, 2026
Gaps, Risks, and Documentation Notes
2 min read
528 views
Gaps, Risks, and Documentation Notes
Internal use only — for engineering and implementation teams.
Implementation Ambiguities
| Issue | Details | File |
|---|---|---|
No AppointmentStatus enum |
Appointment statuses are string literals (booked, checked_in, cancelled, no_show), not a PHP enum — inconsistent with other models | app/Models/Appointment.php |
WorkflowBuilder component scope |
The workflow builder screen was not fully analyzed — its implementation depth is unclear | app/Livewire/Admin/Workflows/WorkflowBuilder.php |
| No Listener files | 7 broadcast events exist but no app/Listeners/ directory found — notification dispatch is inline in action classes, not event-driven |
app/Actions/Tickets/ |
| No Policy files | Authorization via hasRole() checks in components rather than formal Laravel Policies — inconsistent enforcement possible |
app/Livewire/ |
Inconsistent Validations
| Issue | Details | Risk |
|---|---|---|
visitor_type not enforced |
Services can be configured for student or visitor only, but identity is not verified |
Low — honor-based |
| Priority type self-declaration | Visitors declare PWD/Senior/VIP status without verification | Low — operational policy issue |
Incomplete UX Flows
| Flow | Gap |
|---|---|
| Appointment no-show | Appointments with status=booked never checked-in are not automatically marked no-show — they remain open indefinitely |
| Counter break reporting | Break time tracked per counter but no report surface shows break time analysis |
| Kiosk-issued tickets | Kiosk API supports ticket creation but admin UI does not separate kiosk-issued vs web-issued ticket analytics |
Missing Test Coverage (Support Risks)
| Area | Risk |
|---|---|
WorkflowBuilder |
No test for workflow configuration UI |
| Multi-stage workflow (3+ steps) | FlowSnapshotTest.php exists but complete multi-hop coverage uncertain |
| Subscription plan downgrade | No test found for counter/service deactivation on plan downgrade |
| Display SSE fallback | SseStreamTest.php exists; reliability under sustained load unknown |
Technical Debt Affecting Supportability
| Item | Impact | File |
|---|---|---|
renderCycle = now()->timestamp |
Forces Livewire to always diff DOM even if nothing changed — increases bandwidth on displays with many offices | app/Livewire/Display/QueueBoard.php:61 |
| Announcements cached 60s only | Announcement changes take up to 60 seconds to appear on displays | app/Livewire/Display/QueueBoard.php:139 |
| No SMS support | Module hints reference SMS but no implementation exists — flag any customer SMS expectations | — |
| No optimistic locking on tickets | Concurrent CallNextTicket from two operators could theoretically assign the same ticket |
app/Actions/Tickets/CallNextTicket.php |
| Plain token retained | display_screens stores both plain access_token and access_token_hash — kept for backward compatibility |
database/migrations/2026_03_24_091948_add_access_token_hash_to_display_screens_table.php |
Was this article helpful?
Let us know so we can improve our documentation.
Thanks for your feedback!
Glad we could help.
Sorry to hear that
How can we improve this?
Thanks for your feedback!
We'll use your feedback to improve.
Related articles