SchoolAide
Help Center
Internal
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.

Related articles